ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

K8s-GitLab CI自动部署K8s配置实操

K8s-GitLab CI自动部署K8s配置实操 K8sGitLab CI自动部署K8s配置实操技术栈Kubernetes v1.32.13 Rocky Linux 8.6 Shell/Python/Ansible K8s Python Client v29.x操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案K8sGitLab CI自动部署K8s配置实操操作环境K8s 集群版本 v1.32.13多节点部署已配置 kubeconfig管理节点 Rocky Linux 8.6Python 3.12Ansible 2.16kubectl v1.32.13节点间已配置 SSH 免密登录统一用户 ops已安装 kubernetes Python 客户端库 v29.x备份存储目录 /backup脚本目录 /opt/k8s-ops对接原理K8s 运维自动化通过 Shell 脚本、Python 脚本和 Ansible Playbook 实现批量节点管理、集群初始化、备份恢复、巡检监控、故障排查等重复性工作。Shell 脚本适合系统级操作和命令编排Python 通过官方客户端库kubernetes调用 K8s API实现资源的增删改查和事件监听Ansible 通过 Inventory 管理节点清单使用 Playbook 和 Role 实现声明式批量配置支持幂等操作、变量模板、条件判断和错误处理。三者结合可覆盖从系统初始化到集群运维的全流程自动化。详细步骤1. GitLab CI 自动部署 K8s# .gitlab-ci.yml cat .gitlab-ci.yml EOF stages: - build - deploy variables: REGISTRY: harbor.example.com IMAGE_NAME: ${REGISTRY}/library/myapp build: stage: build image: docker:24 services: - docker:24-dind script: - docker login -u ${HARBOR_USER} -p ${HARBOR_PASS} ${REGISTRY} - docker build -t ${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} . - docker push ${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} only: - main deploy: stage: deploy image: bitnami/kubectl:latest script: - kubectl config set-cluster k8s --server${K8S_APISERVER} --insecure-skip-tls-verifytrue - kubectl config set-credentials gitlab --token${K8S_TOKEN} - kubectl config set-context default --clusterk8s --usergitlab - kubectl config use-context default - kubectl set image deployment/myapp myapp${IMAGE_NAME}:${CI_COMMIT_SHORT_SHA} - kubectl rollout status deployment/myapp only: - main EOF # GitLab CI/CD Variables 配置 # HARBOR_USER, HARBOR_PASS, K8S_APISERVER, K8S_TOKEN # K8S_TOKEN 获取 # kubectl create serviceaccount gitlab-deployer # kubectl create clusterrolebinding gitlab-deployer --clusterrolecluster-admin --serviceaccountdefault:gitlab-deployer # kubectl get secret $(kubectl get sa gitlab-deployer -o jsonpath{.secrets[0].name}) -o jsonpath{.data.token} | base64 -d验证流程# 1. 验证脚本语法 bash -n /opt/k8s-ops/script.sh # 无输出表示语法正确 ​ # 2. 验证脚本执行权限 ls -la /opt/k8s-ops/script.sh # 应有 x 执行权限 ​ # 3. 验证 Shell 脚本执行 bash /opt/k8s-ops/script.sh # 脚本正常执行输出预期结果 ​ # 4. 验证 Python 脚本 python3 -m py_compile /opt/k8s-ops/script.py python3 /opt/k8s-ops/script.py # 无语法错误正常输出 ​ # 5. 验证 Ansible Playbook ansible-playbook -i hosts.ini playbook.yml --syntax-check ansible-playbook -i hosts.ini playbook.yml --check # 语法检查通过dry-run 无错误 ​ # 6. 验证定时任务 crontab -l # 定时任务已配置执行时间正确 ​ # 7. 验证备份文件 ls -lh /backup/etcd/ # 备份文件存在大小正常排错方案Shell 脚本报错使用 bash -x script.sh 调试检查 set -e 导致的提前退出确认变量是否正确赋值set -u 会检测未定义变量SSH 批量执行失败检查 SSH 免密是否配置节点网络是否可达目标主机 SSH 端口是否开放使用 ssh -v 调试连接Ansible Playbook 失败使用 -vvv 查看详细输出确认 Inventory 主机配置检查模块参数使用 --check 预演查看目标主机 /var/log/messagesPython 客户端报错检查 kubeconfig 路径和权限确认 API 版本兼容查看异常堆栈信息使用 try/except 捕获并处理etcd 备份失败检查 etcdctl 版本和 API 版本ETCDCTL_API3证书路径是否正确etcd 2379 端口是否监听磁盘空间是否充足定时任务不执行检查 crond 服务是否运行脚本路径是否正确使用绝对路径脚本是否有执行权限查看 /var/log/cron 日志磁盘清理脚本无效确认 crictl 命令可用检查容器运行时类型containerd/docker日志目录路径是否正确使用 find -delete 前先 -print 确认集群巡检脚本输出异常确认 kubectl 配置正确Metrics Server 是否运行kubectl top 依赖节点名称解析是否正常检查各命令返回值
返回列表