大数跨境
0
0

Ansible 部署生产级别高可用kubernetes集群

Ansible 部署生产级别高可用kubernetes集群 Jackson聊跨境出海
2025-10-23
4
使用Ansible Playbook进行生产级别高可用kubernetes集群部署,支持初始化系统配置、自动签发集群证书、安装配置etcd集群、安装配置haproxy及keepalived、IPv4/IPv6双栈网络、支持开启SELINUX、支持信创操作系统等,并使用bootstrap方式认证以及kubernetes组件健康检查。另外支持集群节点扩容、替换集群证书、kubernetes版本升级等。本Playbook使用二进制方式部署。
拉取代码
git clone https://github.com/kubeop/k8s.git

配置inventory
# 本组内填写etcd服务器及主机名(会校验是否以横杠分割),集群节点名称会截取主机名以横杠分割后两段[etcd]10.43.75.201 hostname=etcd-00110.43.75.202 hostname=etcd-00210.43.75.203 hostname=etcd-003
# 使用云负载均衡时,可以注释以下haproxy内容[haproxy]10.43.75.198 hostname=haproxy-001 type=MASTER priority=10010.43.75.199 hostname=haproxy-002 type=BACKUP priority=90
# 本组内填写master服务器及主机名(会校验是否以横杠分割),集群节点名称会截取主机名以横杠分割后两段[master]10.43.75.210 hostname=master-00110.43.75.211 hostname=master-00210.43.75.212 hostname=master-003
# 本组内填写worker服务器及主机名(会校验是否以横杠分割),集群节点名称会截取主机名以横杠分割后两段# 最后面添加gpu=true 表示节点为GPU节点,运行时会配置使用GPU并且添加nvidia.com/gpu=true标签# 启用GPU时,请先参考README自行在节点安装GPU驱动[worker]10.43.75.220 hostname=worker-001 gpu=false10.43.75.221 hostname=worker-002 gpu=false10.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/simplepip3 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 download.yml 完成安装包下载ansible-playbook cluster.yml -i inventory
# 如已有负载均衡,请先行配置好负载均衡,并跳过安装haproxy和keepalivedansible-playbook cluster.yml -i inventory --skip-tags=haproxy,keepalived
# 如master节点也需要调度ansible-playbook cluster.yml -i inventory --skip-tags=create_master_taint

扩容worker节点
扩容时,在inventory文件worker组中依次添加新增服务器信息(执行时请务必使用-l参数指定IP)。
格式化挂载数据盘
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}},重新创建{{cert.dir}},并将token、sa.pub、sa.key文件拷贝至新创建的{{cert.dir}}(这三个文件务必保留,不能更改),然后执行以下步骤重新生成证书并分发证书。
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 \        --endpoints=https://10.43.75.201:2379,https://10.43.75.202:2379,https://10.43.75.203:2379
逐个删除旧的kubelet证书
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
  • 如有calico、clium等使用etcd集群证书,请务必一起更新
重启网络插件
kubectl get pod -n kube-system | grep -v NAME | grep cilium | awk '{print $1}' | xargs kubectl -n kube-system delete pod
  • 更新证书可能会导致网络插件异常,建议重启。
  • 示例为重启cilium插件命令,请根据不同网络插件自行替换。

升级集群版本
请先编辑group_vars/all.yml,修改kubernetes.version为新版本。
下载新版本安装包
ansible-playbook download.yml
升级etcd(升级会自动重启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"


【声明】内容源于网络
0
0
Jackson聊跨境出海
跨境分享志 | 每天记录跨境心得
内容 48132
粉丝 1
Jackson聊跨境出海 跨境分享志 | 每天记录跨境心得
总阅读231.6k
粉丝1
内容48.1k