v1。21,kubeadm方式1、准备环境1。1服务器要求: 建议最小硬件配置:2核CPU、4G内存、40G硬盘 服务器最好可以访问外网,会有从网上拉取镜像需求,如果服务器不能上网,需要提前下载对应镜像并导入节点1。2软件环境: 软件 版本 操作系统 CentOS7。9x64(mini) Docker 20。10。21 Kubernetes 1。21 服务器规划: 角色 IP k8smaster 192。168。31。71 k8snode1 192。168。31。72 k8snode2 192。168。31。73 1。3操作系统初始化配置【所有节点】关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld关闭selinuxsedisenforcingdisabledetcselinuxconfig永久setenforce0临时关闭swapswapoffa临时sedris。swap。etcfstab永久根据规划设置主机名hostnamectlsethostnamehostname在master添加hostscatetchostsEOF192。168。31。71k8smaster192。168。31。72k8snode1192。168。31。73k8snode2EOF将桥接的IPv4流量传递到iptables的链catetcsysctl。dk8s。confEOFnet。bridge。bridgenfcallip6tables1net。bridge。bridgenfcalliptables1EOFsysctlsystem生效时间同步yuminstallntpdateyntpdatetime。windows。com2安装Dockerkubeadmkubelet【所有节点】 这里使用Docker作为容器引擎,也可以换成别的,例如containerd2。1安装Dockerwgethttps:mirrors。aliyun。comdockercelinuxcentosdockerce。repoOetcyum。repos。ddockerce。repoyumyinstalldockercesystemctlenabledockersystemctlstartdocker 配置镜像下载加速器:catetcdockerdaemon。jsonEOF{registrymirrors:〔https:b9pmyelo。mirror。aliyuncs。com〕}EOFsystemctlrestartdockerdockerinfo2。2添加阿里云YUM软件源catetcyum。repos。dkubernetes。repoEOF〔kubernetes〕nameKubernetesbaseurlhttps:mirrors。aliyun。comkubernetesyumreposkubernetesel7x8664enabled1gpgcheck0repogpgcheck0gpgkeyhttps:mirrors。aliyun。comkubernetesyumdocyumkey。gpghttps:mirrors。aliyun。comkubernetesyumdocrpmpackagekey。gpgEOF2。3安装kubeadm,kubelet和kubectl 由于版本更新频繁,这里指定版本号部署:yuminstallykubelet1。21。0kubeadm1。21。0kubectl1。21。0systemctlenablekubelet3。部署KubernetesMastermaster节点执行kubeadminitapiserveradvertiseaddress192。168。31。71imagerepositoryregistry。aliyuncs。comgooglecontainerskubernetesversionv1。21。0servicecidr10。96。0。012podnetworkcidr10。244。0。016ignorepreflighterrorsall apiserveradvertiseaddress集群通告地址,配置上master节点的IP imagerepository由于默认拉取镜像地址k8s。gcr。io国内无法访问,这里指定阿里云镜像仓库地址 kubernetesversionK8s版本,与上面安装的一致 servicecidr集群内部虚拟网络,Pod统一访问入口 podnetworkcidrPod网络,与下面部署的CNI网络组件yaml中保持一致 或者使用配置文件引导:vikubeadm。confapiVersion:kubeadm。k8s。iov1beta2kind:ClusterConfigurationkubernetesVersion:v1。21。0imageRepository:registry。aliyuncs。comgooglecontainersnetworking:podSubnet:10。244。0。016serviceSubnet:10。96。0。012kubeadminitconfigkubeadm。confignorepreflighterrorsall 初始化完成后,最后会输出一个join命令,先记住,下面用。 拷贝kubectl使用的连接k8s认证文件到默认路径:mkdirpHOME。kubesudocpietckubernetesadmin。confHOME。kubeconfigsudochown(idu):(idg)HOME。kubeconfig 查看工作节点: 注:由于网络插件还没有部署,还没有准备就绪NotReady 参考资料: https:kubernetes。iozhdocsreferencesetuptoolskubeadmkubeadminitconfigfile https:kubernetes。iodocssetupproductionenvironmenttoolskubeadmcreateclusterkubeadminitializingyourcontrolplanenode4。加入KubernetesNode在node节点执行 向集群添加新节点,执行在kubeadminit输出的kubeadmjoin命令:kubeadmjoin192。168。31。71:6443token7gqt13。kncw9hg5085iwclxdiscoverytokencacerthashsha256:66fbfcf18649a5841474c2dc4b9ff90c02fc05de0798ed690e1754437be35a01 默认token有效期为24小时,当过期之后,该token就不可用了。这时就需要重新创建token,可以直接使用命令快捷生成:kubeadmtokencreateprintjoincommand 参考资料:https:kubernetes。iodocsreferencesetuptoolskubeadmkubeadmjoin5。部署容器网络(CNI) Calico是一个纯三层的数据中心网络方案,是目前Kubernetes主流的网络方案。 下载YAML:wgethttps:docs。projectcalico。orgmanifestscalico。yamlnocheckcertificate 下载完后还需要修改里面定义Pod网络(CALICOIPV4POOLCIDR),与前面kubeadminit的podnetworkcidr指定的一样。 修改完后文件后,部署:kubectlapplyfcalico。yamlkubectlgetpodsnkubesystem 等CalicoPod都Running,节点也会准备就绪。 CoreDNS问题处理: 在所有节点执行:dockerpullregistry。aliyuncs。comgooglecontainerscoredns:1。8。0dockertagregistry。aliyuncs。comgooglecontainerscoredns:1。8。0registry。aliyuncs。comgooglecontainerscorednscoredns:v1。8。0 过一会儿,CoreDNSPod会自动恢复正常。 注:以后所有yaml文件都只在Master节点执行。 安装目录:etckubernetes 组件配置文件目录:etckubernetesmanifests 参考资料:https:kubernetes。iodocssetupproductionenvironmenttoolskubeadmcreateclusterkubeadmpodnetwork 控制Master节点是否可调度允许kubectltaintnodesallnoderole。kubernetes。iomaster禁止kubectltaintnodescentosmaster1noderole。kubernetes。iomastertrue:NoSchedule6。测试kubernetes集群 在Kubernetes集群中创建一个pod,验证是否正常运行:kubectlcreatedeploymentnginximagenginxkubectlexposedeploymentnginxport80typeNodePortkubectlgetpod,svc 访问地址:http:NodeIP:Port