找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

152

积分

0

好友

20

主题
发表于 4 天前 | 查看: 5| 回复: 0

本文介绍如何使用Ansible Playbook实现生产级别高可用Kubernetes集群的自动化部署。该方案支持系统初始化配置、集群证书自动签发、etcd集群安装配置、haproxy及keepalived部署、IPv4/IPv6双栈网络、SELINUX启用、信创操作系统适配,并采用bootstrap认证机制与Kubernetes组件健康检查。此外,还提供集群节点扩容、证书替换和版本升级等运维功能。本Playbook采用二进制方式进行部署,确保生产环境稳定可靠。

集群架构图

代码获取

执行以下命令拉取部署代码:

git clone https://github.com/kubeop/k8s.git

库存配置

编辑inventory文件,根据实际环境配置服务器信息:

# etcd服务器组,主机名需以横杠分割
[etcd]
10.43.75.201 hostname=etcd-001
10.43.75.202 hostname=etcd-002
10.43.75.203 hostname=etcd-003

# 负载均衡组(使用云负载均衡时可注释)
[haproxy]
10.43.75.198 hostname=haproxy-001 type=MASTER priority=100
10.43.75.199 hostname=haproxy-002 type=BACKUP priority=90

# 控制平面节点组
[master]
10.43.75.210 hostname=master-001
10.43.75.211 hostname=master-002
10.43.75.212 hostname=master-003

# 工作节点组(gpu=true标识GPU节点)
[worker]
10.43.75.220 hostname=worker-001 gpu=false
10.43.75.221 hostname=worker-002 gpu=false
10.43.75.222 hostname=worker-003 gpu=false

注意:当haproxy与kube-apiserver共存于同一服务器时,需调整loadbalance.port避免端口冲突。

集群参数配置

编辑group_vars/all.yml文件,根据实际需求修改集群配置参数。

Ansible环境准备

在控制机或master-001节点上安装所需软件:

pip3 install "ansible>=7.0.0,<10.0.0" -i https://mirrors.ustc.edu.cn/pypi/web/simple
pip3 install "netaddr>=0.10.1" -i https://mirrors.ustc.edu.cn/pypi/web/simple

磁盘初始化

为未格式化的磁盘执行分区挂载(已配置可跳过):

ansible-playbook fdisk.yml -i inventory -e "disk=sdb dir=/data"

已挂载磁盘的数据目录绑定:

ansible-playbook fdisk.yml -i inventory -l master,worker -e "disk=sdb dir=/data" -t bind_dir

离线资源下载

ansible-playbook download.yml

集群部署

执行完整部署流程:

# 前提:已完成磁盘分区和离线包下载
ansible-playbook cluster.yml -i inventory

# 使用现有负载均衡时跳过haproxy安装
ansible-playbook cluster.yml -i inventory --skip-tags=haproxy,keepalived

# 允许master节点参与调度
ansible-playbook cluster.yml -i inventory --skip-tags=create_master_taint

工作节点扩容

在inventory的worker组添加新节点后执行:

磁盘初始化:

ansible-playbook fdisk.yml -i inventory -l ${SCALE_WORKER_IP} -e "disk=sdb dir=/data"

证书生成:

ansible-playbook cluster.yml -i inventory -t cert

节点初始化:

ansible-playbook cluster.yml -i inventory -l ${SCALE_WORKER_IP} -t verify,init

节点加入集群:

ansible-playbook cluster.yml -i inventory -l ${SCALE_WORKER_IP} -t containerd,worker --skip-tags=bootstrap,create_master_label

证书更新

备份并清空{{cert.dir}}目录后,保留token、sa.pub、sa.key文件,执行证书重建:

生成并分发新证书:

ansible-playbook cluster.yml -i inventory -t cert,dis_certs

依次重启各节点服务:

重启etcd服务:

ansible -i inventory etcd -m systemd -a "name=etcd state=restarted"

验证etcd集群状态:

etcdctl endpoint health \
        --cacert=/etc/etcd/pki/etcd-ca.pem \
        --cert=/etc/etcd/pki/etcd-healthcheck-client.pem \
        --key=/etc/etcd/pki/etcd-healthcheck-client-key.pem \
        --endpoints=https://10.43.75.201:2379,https://10.43.75.202:2379,https://10.43.75.203:2379

清理旧证书:

ansible -i inventory master,worker -m shell -a "rm -rf /etc/kubernetes/pki/kubelet*"

重启节点组件:

ansible-playbook cluster.yml -i inventory -l ${IP} -t restart_apiserver,restart_controller,restart_scheduler,restart_kubelet,restart_proxy,healthcheck

注意:使用etcd证书的网络插件(如calico、cilium)需同步更新证书。

重启网络插件(以cilium为例):

kubectl get pod -n kube-system | grep -v NAME | grep cilium | awk '{print $1}' | xargs kubectl -n kube-system delete pod

版本升级

修改group_vars/all.yml中的kubernetes.version参数后:

下载新版本资源:

ansible-playbook download.yml

可选etcd升级:

ansible-playbook cluster.yml -i inventory -l ${IP} -t install_etcd,dis_etcd_config

升级Kubernetes组件:

ansible-playbook cluster.yml -i inventory -l ${IP} -t install_kubectl,install_master,install_worker

更新配置文件:

ansible-playbook cluster.yml -i inventory -l ${IP} -t dis_master_config,dis_worker_config

节点排水:

kubectl drain --ignore-daemonsets --force <节点名称>

重启节点组件:

ansible-playbook cluster.yml -i inventory -l ${IP} -t restart_apiserver,restart_controller,restart_scheduler,restart_kubelet,restart_proxy,healthcheck

恢复节点调度:

kubectl uncordon <节点名称>

节点清理

移除节点配置:


ansible-playbook reset.yml -i inventory -l ${IP} -e "flush_iptables=true"
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-1 14:51 , Processed in 0.059151 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表