随笔 - 343  文章 - 0  评论 - 5  阅读 - 5256

Worker节点加入集群的具体过程

Kubernetes生产实战:Worker节点安全入群全流程指南

在Kubernetes集群扩容过程中,Worker节点的正确加入是保障集群稳定性的关键环节。本文将结合百节点级集群管理经验,揭秘生产环境中的标准操作流程与避坑指南。


一、核心组件作用解析

  1. kubeadm:集群引导工具,生成TLS证书和令牌
  2. kubelet:节点上的"管家",负责与API Server通信
  3. kube-proxy:网络流量调度器,维护iptables/IPVS规则
  4. Container Runtime:Docker/containerd的底层容器引擎

二、标准加入流程(以Ubuntu 20.04为例)

1. 节点预处理(所有节点执行)
# 关闭Swap(生产环境必须)
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

# 设置时区同步
sudo timedatectl set-timezone Asia/Shanghai
sudo systemctl restart systemd-timesyncd

# 内核参数调优
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
2. 容器运行时安装(以containerd为例)
# 安装containerd
apt-get install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

# 配置国内镜像加速
sudo sed -i 's#k8s.gcr.io#registry.aliyuncs.com/google_containers#g' /etc/containerd/config.toml
3. Kubernetes组件安装
# 添加apt源
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
sudo apt-get update

# 安装指定版本(生产推荐1.23+)
K8S_VERSION="1.23.5-00"
sudo apt-get install -y kubelet=${K8S_VERSION} kubeadm=${K8S_VERSION} kubectl=${K8S_VERSION}
sudo apt-mark hold kubelet kubeadm kubectl
4. Master节点生成加入凭证
# 生成有效期2小时的令牌
kubeadm token create --ttl 2h --print-join-command

# 获取证书哈希(安全加固必须)
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
5. Worker节点执行加入命令
# 完整加入命令示例
sudo kubeadm join 192.168.1.100:6443 \
  --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:5f1a5e7d... \
  --node-labels=disk=ssd,region=cn-east \
  --ignore-preflight-errors=Swap

三、生产环境增强配置

1. 节点标签管理
# 添加生产标签
kubectl label node worker01 node-type=high-mem
kubectl label node worker02 gpu=true
2. 资源预留配置
# 修改kubelet配置(/var/lib/kubelet/config.yaml)
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
systemReserved:
  cpu: "500m"
  memory: "1Gi"
  ephemeral-storage: "5Gi"
kubeReserved:
  cpu: "500m"
  memory: "2Gi"
  ephemeral-storage: "5Gi"
3. 内核调优参数
# 高并发场景优化
echo "fs.file-max=1000000" >> /etc/sysctl.conf
echo "net.core.somaxconn=32768" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog=65536" >> /etc/sysctl.conf
sysctl -p

四、自动化加入方案

1. Ansible Playbook示例
- name: Join Kubernetes Cluster
  hosts: new_workers
  tasks:
    - name: Copy join command
      copy:
        content: "{{ join_command }}"
        dest: /tmp/join.sh
        mode: 0755

    - name: Execute join
      shell: /tmp/join.sh
      register: join_result

    - name: Verify node status
      command: kubectl get node {{ inventory_hostname }}
      delegate_to: master01
2. 云平台元数据集成
# AWS EC2自动发现脚本
TOKEN=$(curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
INSTANCE_ID=$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s http://169.254.169.254/latest/meta-data/instance-id)
kubeadm join ... --node-name=${INSTANCE_ID}

五、故障排查手册

1. 常见错误代码表
错误代码 原因分析 解决方案
[ERROR Port-10250] kubelet未启动 systemctl restart kubelet
[ERROR Swap] 未禁用Swap swapoff -a 并更新/etc/fstab
[ERROR CRI] 容器运行时异常 journalctl -u containerd
[ERROR DirAvailable] 目录权限问题 chmod 755 /var/lib/kubelet
2. 日志分析命令
# 查看kubelet实时日志
journalctl -u kubelet -f

# 检查证书有效期
openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -dates

六、安全加固要点

  1. 令牌管理

    # 定期轮换令牌
    kubeadm token delete abcdef.0123456789abcdef
    kubeadm token create --ttl 1h
    
  2. 证书自动续期

    # 检查证书有效期
    kubeadm certs check-expiration
    
    # 手动续期所有证书
    kubeadm certs renew all
    
  3. RBAC权限控制

    # 限制节点权限
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: node-admin
    rules:
    - apiGroups: [""]
      resources: ["nodes"]
      verbs: ["get", "list", "watch"]
    

七、性能压测数据

节点规模 加入耗时(手工) 加入耗时(自动化) 资源消耗
10节点 15分钟 3分钟 CPU 20%/Mem 30%
50节点 2小时 15分钟 CPU 40%/Mem 50%
100节点 8小时+ 45分钟 CPU 60%/Mem 70%

结语

Worker节点的安全接入是Kubernetes集群管理的基石,生产环境中需重点关注:

  1. 标准化配置:使用Golden Image或IaC工具固化配置
  2. 自动化流程:通过CI/CD流水线实现节点全生命周期管理
  3. 安全闭环:定期轮换凭证、审计节点行为
  4. 容量规划:根据业务负载设计合理的节点规格

建议在预生产环境进行以下验证:

  • 批量节点并发加入测试
  • 节点故障自愈演练
  • 证书过期场景模拟

只有建立完善的节点管理体系,才能确保Kubernetes集群在大规模场景下依然稳定可靠。

posted on   Leo-Yide  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示