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
转载请注明出处!


posted on 2025-04-17 18:40  Leo-Yide  阅读(150)  评论(0)    收藏  举报