Kubernetes集群生产环境部署:Worker节点加入、CNI网络安装与集群可用性验证
本文详细介绍如何在生产环境下,基于kubeadm部署Kubernetes集群worker节点,安装Flannel CNI网络插件,并进行集群可用性验证。内容涵盖镜像导入、节点加入、网络插件部署、自动补全、时区设置、快照与多项验证,适合企业级K8S集群落地实践。
一、Worker节点加入Kubernetes集群
1.1 提前导入K8S Worker节点所需镜像(推荐)
在生产环境中,因网络限制或加速部署,建议提前将K8S相关镜像下载并导入到各worker节点。这样可以避免节点加入集群时因拉取镜像失败而导致超时。
# 在worker232和worker233节点分别执行
wget http://192.168.16.253/Image/Docker/Kubernetes/K8S%20Cluster/oldboyedu-slave-1.23.17.tar.gz
docker load -i oldboyedu-slave-1.23.17.tar.gz
1.2 使用kubeadm join命令将worker节点加入集群
注意:
kubeadm join命令中的token和ca-cert-hash参数必须使用你自己master节点初始化时生成的,不要直接复制别人的命令!
# 在worker232和worker233节点分别执行
kubeadm join 10.0.0.231:6443 --token <你的token> \
--discovery-token-ca-cert-hash sha256:<你的ca-cert-hash>
10.0.0.231:6443:master节点API server地址--token:master节点初始化时生成的token--discovery-token-ca-cert-hash:用于安全发现master的CA证书hash
1.3 Master节点检查worker节点加入情况
在master节点执行:
kubectl get nodes
输出示例:
NAME STATUS ROLES AGE VERSION
master231 NotReady control-plane,master 13m v1.23.17
worker232 NotReady <none> 3m19s v1.23.17
worker233 NotReady <none> 2m3s v1.23.17
温馨提示:
此时worker节点已成功加入集群,但由于还未安装CNI网络插件,节点状态为NotReady,Pod网络尚未准备好。
二、部署CNI网络插件(以Flannel为例)
2.1 所有节点导入Flannel CNI镜像
由于国内网络环境限制,建议提前下载并导入Flannel镜像到所有K8S节点(master和所有worker)。
# master节点
wget http://192.168.16.253/Image/Docker/Kubernetes/K8S%20Cluster/oldboyedu-flannel-cni-plugin-v1.5.1.tar.gz
docker load -i oldboyedu-flannel-cni-plugin-v1.5.1.tar.gz
# worker232节点
wget http://192.168.16.253/Image/Docker/Kubernetes/K8S%20Cluster/oldboyedu-flannel-cni-plugin-v1.5.1.tar.gz
docker load -i oldboyedu-flannel-cni-plugin-v1.5.1.tar.gz
# worker233节点
wget http://192.168.16.253/Image/Docker/Kubernetes/K8S%20Cluster/oldboyedu-flannel-cni-plugin-v1.5.1.tar.gz
docker load -i oldboyedu-flannel-cni-plugin-v1.5.1.tar.gz
2.2 下载并部署Flannel CNI插件
在master节点下载官方或自定义的Flannel部署YAML文件:
wget http://192.168.16.253/Linux92/Kubernetes/day15-/softwares/kube-flannel.yml
应用Flannel插件:
kubectl apply -f kube-flannel.yml
输出示例:
namespace/kube-flannel created
serviceaccount/flannel created
...
daemonset.apps/kube-flannel-ds created
2.3 检查Flannel组件运行状态
kubectl get pods -o wide -n kube-flannel
输出示例:
NAME READY STATUS RESTARTS AGE IP NODE
kube-flannel-ds-ckkbk 1/1 Running 0 35s 10.0.0.233 worker233
kube-flannel-ds-kst7g 1/1 Running 0 35s 10.0.0.232 worker232
kube-flannel-ds-ljktm 1/1 Running 0 35s 10.0.0.231 master231
2.4 检查节点状态
kubectl get nodes
输出示例:
NAME STATUS ROLES AGE VERSION
master231 Ready control-plane,master 37m v1.23.17
worker232 Ready <none> 27m v1.23.17
worker233 Ready <none> 26m v1.23.17
说明:
节点状态变为Ready,说明CNI网络插件已生效,Pod网络已准备就绪。
三、验证Pod网络连通性
3.1 创建跨节点Pod进行网络测试
准备测试Pod的YAML文件(oldboyedu-network-cni.yaml):
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-v1
spec:
nodeName: worker232
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1
name: xiuxian
---
apiVersion: v1
kind: Pod
metadata:
name: xiuxian-v2
spec:
nodeName: worker233
containers:
- image: registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v2
name: xiuxian
应用Pod:
kubectl apply -f oldboyedu-network-cni.yaml
3.2 检查Pod运行状态与IP
kubectl get pods -o wide
输出示例:
NAME READY STATUS RESTARTS AGE IP NODE
xiuxian-v1 1/1 Running 0 6s 10.100.1.3 worker232
xiuxian-v2 1/1 Running 0 6s 10.100.2.3 worker233
3.3 测试Pod间网络连通性
在master节点curl访问Pod IP:
curl 10.100.1.3
curl 10.100.2.3
正常返回网页内容,说明Pod网络已打通。
3.4 清理测试Pod
kubectl delete -f oldboyedu-network-cni.yaml
kubectl get pods
# 输出:No resources found in default namespace.
四、kubectl命令自动补全配置
4.1 开启kubectl命令自动补全
在master节点执行:
kubectl completion bash > ~/.kube/completion.bash.inc
echo "source \$HOME/.kube/completion.bash.inc" >> ~/.bashrc
source ~/.bashrc
4.2 验证自动补全
输入kubectl后连续按两次Tab键,应该能看到所有可用子命令。
五、K8S集群时区设置
5.1 设置时区为上海
在所有节点执行:
ln -svf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5.2 验证时区
date -R
# 输出应为 +0800 时区
六、集群快照与可用性验证
6.1 关机拍快照
强烈建议:
在集群部署完成后,关机为所有节点拍快照,便于后续回滚和灾难恢复。
6.2 验证kubectl自动补全
重复前述自动补全测试,确保生效。
6.3 验证节点状态
kubectl get nodes
# 所有节点应为 Ready 状态
6.4 检查CNI组件
kubectl get pods -n kube-flannel -o wide
# 所有flannel pod应为 Running 状态
6.5 验证Pod网络
重新部署测试Pod,curl访问其IP,确保网络正常。
七、常见问题与生产建议
- Token过期:如join token过期,可在master节点用
kubeadm token create --print-join-command重新生成。 - 镜像拉取失败:提前导入镜像或配置国内镜像源。
- 节点NotReady:多为CNI未安装或未生效,检查flannel等网络插件状态。
- Pod网络不通:检查防火墙、iptables、CNI配置、主机路由等。
- 自动补全无效:确认bashrc配置和kubectl版本。
八、总结
本文详细介绍了Kubernetes集群生产环境下worker节点的加入、CNI网络插件的部署与验证、集群时区和自动补全配置、快照与多项可用性验证。所有步骤均经过实际生产环境反复验证,确保可落地、可复现。希望对你的K8S集群部署与运维有所帮助!
如有疑问,欢迎留言交流!
作者:Leo-zhang
博客地址:https://www.cnblogs.com/leojazz
转载请注明出处!
浙公网安备 33010602011771号