Kubespray节点管理指南:节点添加与替换操作详解
前言
在Kubernetes集群的日常运维中,节点的添加和替换是常见的操作场景。本文将基于Kubespray这一流行的Kubernetes部署工具,详细介绍如何安全高效地执行各类节点的添加和替换操作。
节点操作基础概念
在开始具体操作前,需要理解几个关键概念:
- 控制平面节点(Control Plane Node):运行kube-apiserver、kube-controller-manager和kube-scheduler等核心组件的节点
- 工作节点(Worker Node):运行实际工作负载的节点
- etcd节点:存储集群状态的分布式键值存储节点
工作节点的添加与替换
添加新工作节点
- 更新清单文件:在inventory文件中添加新节点的信息
- 执行扩展操作:运行
scale.yml
剧本,可使用--limit
参数限制操作范围 - 刷新节点信息:在执行
--limit
前,建议先运行facts.yml
更新所有节点的信息缓存
移除旧工作节点
- 执行移除操作:保持节点在清单中,运行
remove-node.yml
并指定-e node=NODE_NAME
- 处理离线节点:对于已离线节点,需添加额外参数:
-e reset_nodes=false -e allow_ungraceful_removal=true
- 清理清单文件:操作完成后从清单中移除该节点
控制平面节点的替换
常规控制平面节点替换
- 添加新节点:更新清单后运行
cluster.yml
(注意不能使用scale.yml) - 重启nginx-proxy:在所有节点上重启nginx-proxy容器以更新API Server代理配置
# Docker环境 docker ps | grep k8s_nginx-proxy | awk '{print $1}' | xargs docker restart # Containerd环境 crictl ps | grep nginx-proxy | awk '{print $1}' | xargs crictl stop
- 移除旧节点:使用
remove-node.yml
并指定节点名称
首个控制平面节点的特殊处理
由于Kubespray当前限制,不能直接移除清单中第一个控制平面节点,需要特殊处理:
- 调整节点顺序:在清单中将首个节点调整到非首位
# 调整前 kube_control_plane: hosts: node-1: node-2: node-3: # 调整后 kube_control_plane: hosts: node-2: node-3: node-1:
- 执行集群升级:运行
upgrade-cluster.yml
或cluster.yml
使顺序变更生效 - 移除旧节点:现在可以正常执行移除操作
- 更新集群信息:修改kube-public命名空间下的cluster-info ConfigMap
- 添加新节点:更新清单后运行
cluster.yml --limit=kube_control_plane
etcd节点的管理
etcd集群需要保持奇数节点数以维持仲裁能力,因此etcd节点的操作通常是成对进行的。
添加etcd节点
- 执行添加操作:更新清单后运行:
cluster.yml --limit=etcd,kube_control_plane -e ignore_assert_errors=yes
- 升级集群配置:运行:
upgrade-cluster.yml --limit=etcd,kube_control_plane -e ignore_assert_errors=yes
- 处理批量添加:添加多个节点时可增加重试次数:
-e etcd_retries=10
- 更新API Server配置:在所有控制平面节点更新
/etc/kubernetes/manifests/kube-apiserver.yaml
中的--etcd-servers
参数
移除etcd节点
- 执行移除操作:使用
remove-node.yml
并指定节点名称 - 更新清单文件:确保只保留活跃的etcd节点
- 刷新集群配置:运行
cluster.yml
重新生成配置文件 - 更新API Server配置:同样需要更新
--etcd-servers
参数 - 关闭旧实例:完成所有操作后关闭旧节点
最佳实践与注意事项
- 操作顺序:始终先添加新节点,确认运行正常后再移除旧节点
- 变更窗口:选择业务低峰期执行节点变更操作
- 备份准备:重要操作前备份etcd数据和关键配置文件
- 监控观察:操作过程中密切监控集群状态和组件日志
- 验证测试:每个步骤完成后进行基本功能验证
通过遵循上述指南,您可以安全地在Kubespray部署的Kubernetes集群中执行各类节点的添加和替换操作,确保集群的稳定性和可用性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考