CentOS7 部署K8S集群
虚拟机: VMware® Workstation 12 Pro 12.5.9 build-7535481
操作系统:CentOS Linux release 7.6.1810 (Core)
操作系统:CentOS Linux release 7.6.1810 (Core)
部署规划
1 2 3 | 192.168.38.11 k8s-master 192.168.38.12 k8s-node1 192.168.38.13 k8s-node2 |
备注:第1步~第8步,所有的节点都要操作,第9、10步Master节点操作,第11步Node节点操作。
如果第9、10、11步操作失败,可以通过 kubeadm reset 命令来清理环境重新安装。
1.关闭防火墙
$ systemctl stop firewalld
备注:必须关闭
2.关闭selinux
$ setenforce 0
3.关闭swap
$ swapoff -a 临时关闭
$ free 可以通过这个命令查看swap是否关闭了
$ vim /etc/fstab 永久关闭
备注:必须关闭
4.添加主机名与IP对应的关系
$ vim /etc/hosts
添加如下内容:
1 2 3 | 192.168.38.11 k8s-master 192.168.38.12 k8s-node1 192.168.38.13 k8s-node2 |
5.将桥接的IPV4流量传递到iptables 的链
1 2 3 4 5 | $ cat > /etc/sysctl .d /k8s .conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF $ sysctl --system |
6.安装Docker
1)下载并安装
1 2 | $ wget https: //mirrors .aliyun.com /docker-ce/linux/centos/docker-ce .repo -O /etc/yum .repos.d /docker-ce .repo $ yum -y install docker-ce-18.06.1.ce-3.el7 |
2)设置开机启动
1 2 | $ systemctl enable docker $ systemctl start docker |
3)查看Docker版本
1 2 | $ docker --version Docker version 18.06.1-ce, build e68fc7a |
7.添加阿里云YUM软件源
直接执行如下命令
1 2 3 4 5 6 7 8 9 10 | cat > /etc/yum .repos.d /kubernetes .repo << EOF [kubernetes] name=Kubernetes baseurl=https: //mirrors .aliyun.com /kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https: //mirrors .aliyun.com /kubernetes/yum/doc/yum-key .gpg https: //mirrors .aliyun.com /kubernetes/yum/doc/rpm-package-key .gpg EOF |
8.安装kubeadm,kubelet和kubectl
在部署kubernetes时,要求master node和worker node上的版本保持一致,否则会出现版本不匹配导致奇怪的问题出现。本文将介绍如何在CentOS系统上,使用yum安装指定版本的Kubernetes。
我们需要安装指定版本的kubernetes。那么如何做呢?在进行yum安装时,可以使用下列的格式来进行安装:
yum install -y kubelet-<version> kubectl-<version> kubeadm-<version>
$ yum install -y kubelet-1.13.3 kubectl-1.13.3 kubeadm-1.13.3 kubernetes-cni-1.13.3
如果出现如下提示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 错误:软件包:kubelet-1.13.3-0.x86_64 (kubernetes) 需要:kubernetes-cni = 0.6.0 可用: kubernetes-cni-0.3.0.1-0.07a8a2.x86_64 (kubernetes) kubernetes-cni = 0.3.0.1-0.07a8a2 可用: kubernetes-cni-0.5.1-0.x86_64 (kubernetes) kubernetes-cni = 0.5.1-0 可用: kubernetes-cni-0.5.1-1.x86_64 (kubernetes) kubernetes-cni = 0.5.1-1 可用: kubernetes-cni-0.6.0-0.x86_64 (kubernetes) kubernetes-cni = 0.6.0-0 正在安装: kubernetes-cni-0.7.5-0.x86_64 (kubernetes) kubernetes-cni = 0.7.5-0 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行:rpm -Va --nofiles --nodigest |
只需要清除yum 缓存即可,然后再执行安装命令
$ yum clean all
如果还不行,则直接安装最新版的
1 2 | $ yum makecache fast $ yum install -y kubelet kubeadm kubectl |
使用yum安装程序时,提示xxx.rpm公钥尚未安装
使用 yum install xxx.rpm --nogpgcheck 命令格式跳过公钥检查,如下:
1 2 3 | yum install cri-tools-1.12.0-0.x86_64 --nogpgcheck yum install kubectl-1.14.1-0.x86_64 --nogpgcheck yum install kubeadm-1.14.1-0.x86_64 --nogpgcheck |
$ systemctl enable kubelet
9.部署Kubernetes Master
1)初始化kubeadm
1 2 3 4 5 6 | kubeadm init \ --apiserver-advertise-address=192.168.38.11 \ --image-repository registry.aliyuncs.com/google_containers \ --kubernetes-version v1.14.1 \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16 |
当出现如下结果,表示初始化顺利

建议至少2 cpu ,2G,非硬性要求,1cpu,1G也可以搭建起集群。但是:
1个cpu的话初始化master的时候会报 [WARNING NumCPU]: the number of available CPUs 1 is less than the required 2
部署插件或者pod时可能会报warning:FailedScheduling:Insufficient cpu, Insufficient memory
如果出现这种提示,说明你的虚拟机分配的CPU为1核,需要重新设置虚拟机master节点内核数。
查看镜像
$ docker images

2)使用kubectl工具
复制如下命令直接执行
1 2 3 | mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config |
下面就可以直接使用kubectl命令了

10.安装Pod网络插件(CNI)
1)安装插件
1 | $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml |

2)查看是否部署成功
1 | $ kubectl get pods -n kube-system |

3)再次查看node,可以看到状态为ready

安装失败了,怎么清理环境重新安装啊?执行一条命令:
$ kubeadm reset
11.Node节点加入集群
向集群添加新节点,执行在kubeadm init输出的kubeadm join命令:
复制上面命令,在node节点上执行
1 2 | kubeadm join 192.168.38.11:6443 --token m5y7r8.wevj0rrffanpoig9 \ --discovery-token-ca-cert-hash sha256:c08dcc8a8804bad11d47bcba2d1d3a7213c10ebc422694c97d62437f48ed548e |
如果一直卡在 “Running pre-flight checks” 上,则很可能是时间未同步,token失效导致
第一步,检查master、node时间是否同步?
$ date
执行如下命令同步时间
$ ntpdate time.nist.gov
第二步:如果还有其它错误如 Port 10250 is in use,执行如下命令
$ kubeadm reset
然后再重新执行kubeadm join ... 操作
如果出现如下错误提示:

1)更改docker的启动参数
$ vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
ExecStart=/usr/bin/dockerd --exec-opt native.cgroupdriver=systemd
2)重启docker
systemctl daemon-reload
systemctl restart docker
执行成功后:

再通过master节点查看node,发现node节点已以成功加入集群,并且Status状态为Ready

如果token忘记了,则可以通过如下操作:
1)查看token,如果token失效,则重新生成一个
1 2 | $ kubeadm token list $ kubeadm token create |
2)获取ca证书sha256编码hash值
1 | $ openssl x509 -pubkey - in /etc/kubernetes/pki/ca .crt | openssl rsa -pubin -outform der 2> /dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' |
3)节点加入集群
1 | $ kubeadm reset<br>$ kubeadm join 192.168.38.11:6443 --token unnscz.aq2r62cuc14w27oa \ --discovery-token-ca-cert- hash sha256:8b79b6461e58c07333cb2851fe74fd4374af8bbbe0bf7e040b415b86ad4fb89d |
12.测试kubernetes集群
1 2 3 | $ kubectl create deployment nginx --image=nginx $ kubectl expose deployment nginx --port=80 -- type =NodePort $ kubectl get pod,svc |

1 | $ kubectl get pod,svc -o wide |

通过浏览器访问:http://192.168.38.11:30328 可以正常访问
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构