You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过K8s GitLab-CI Runner向K8s集群部署应用?

如何通过GitLab-CI Runner将应用部署到K8s集群

我之前在CentOS 7环境下配置过这套部署流程,结合你的环境信息,给你一步步拆解实操步骤:

1. 确保GitLab Runner具备K8s集群访问权限

你的Runner需要能通过kubectl操作K8s集群,这里分两种适配你环境的配置方式:

方式1:在CentOS主机上部署Runner(匹配你的当前环境)

1.1 安装GitLab Runner

在CentOS 7上安装官方稳定版Runner:

# 添加GitLab官方RPM源
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

# 安装Runner(兼容CentOS 7的稳定版本)
sudo yum install -y gitlab-runner

1.2 配置K8s访问凭证

Runner需要借助kubeconfig文件访问K8s,操作如下:

  • 将K8s集群的~/.kube/config文件复制到Runner用户目录:
sudo cp ~/.kube/config /home/gitlab-runner/.kube/
  • 修正文件权限,确保Runner能读取:
sudo chown -R gitlab-runner:gitlab-runner /home/gitlab-runner/.kube
sudo chmod 600 /home/gitlab-runner/.kube/config
  • 测试权限是否生效:
sudo -u gitlab-runner kubectl get nodes

如果能正常返回K8s节点列表,说明权限配置成功。

方式2:在K8s集群内部署Runner(更推荐的生产方案)

如果你的Runner直接部署在K8s集群中,可通过ServiceAccount自动赋予权限,核心步骤:

  • 在GitLab项目的Settings -> CI/CD -> Runners中获取注册令牌
  • 创建K8s的ServiceAccount、Role、RoleBinding,赋予Runner部署应用的权限
  • 通过YAML或Helm将Runner部署到K8s并注册到你的GitLab项目

2. 将Runner注册到你的GitLab项目

完成Runner安装后,需要把它绑定到你的目标项目:

  1. 打开GitLab项目,进入Settings -> CI/CD -> Runners,展开「Set up a specific Runner manually」,复制注册令牌和GitLab实例URL
  2. 在CentOS主机执行注册命令:
sudo gitlab-runner register

按照提示依次输入:

  • GitLab实例URL(比如你的私有GitLab地址或https://gitlab.com)
  • 复制的注册令牌
  • Runner描述(自定义即可,比如k8s-deploy-runner)
  • Runner标签(比如k8s,deploy,后续CI配置会通过标签指定该Runner执行任务)
  • 执行器选择shell(基于CentOS主机环境执行命令,也可选择docker,按需而定)

注册完成后启动Runner:

sudo gitlab-runner start

回到GitLab项目的Runner页面,就能看到该Runner已在线。

3. 编写.gitlab-ci.yml核心配置文件

在项目根目录创建.gitlab-ci.yml,这是CI/CD流程的核心控制文件,示例如下:

stages:
  - build
  - deploy

# 构建Docker镜像阶段
build_image:
  stage: build
  tags:
    - k8s,deploy  # 指定刚才注册的Runner标签
  script:
    # 构建镜像(假设项目根目录有Dockerfile)
    - docker build -t your-registry/your-app:$CI_COMMIT_SHA .
    # 推送镜像到仓库(需提前在GitLab变量中配置镜像仓库账号密码)
    - docker login -u $DOCKER_USER -p $DOCKER_PASSWORD your-registry
    - docker push your-registry/your-app:$CI_COMMIT_SHA

# 部署到K8s集群阶段
deploy_to_k8s:
  stage: deploy
  tags:
    - k8s,deploy
  script:
    # 替换部署文件中的镜像标签为当前提交的SHA值
    - sed -i "s/IMAGE_TAG/$CI_COMMIT_SHA/g" k8s/deployment.yaml
    # 应用K8s部署配置
    - kubectl apply -f k8s/deployment.yaml
    # 可选:等待部署完成
    - kubectl rollout status deployment/your-app
  only:
    - main  # 仅在main分支提交时触发部署

关键注意事项:

  • 确保项目中存在k8s/deployment.yaml部署文件,镜像地址用IMAGE_TAG作为占位符
  • 在GitLab项目的Settings -> CI/CD -> Variables中添加敏感变量(如DOCKER_USER、DOCKER_PASSWORD),这些变量会自动注入CI脚本
  • 如果K8s开启了RBAC,需确保kubeconfig对应的账号拥有创建Deployment、Service等资源的权限

4. 测试CI/CD部署流程

提交.gitlab-ci.yml和K8s部署文件到GitLab项目,触发流水线:

  1. 进入GitLab项目的CI/CD -> Pipelines查看执行状态
  2. 若build和deploy阶段均成功,登录K8s集群验证应用状态:
kubectl get pods
kubectl get deployments

常见问题排查

  • 若kubectl命令报错permission denied:检查kubeconfig文件权限,或K8s账号的RBAC权限是否足够
  • 若镜像推送失败:检查镜像仓库凭证是否正确,CentOS主机能否访问镜像仓库地址
  • 若流水线卡住:检查Runner是否在线,标签是否与CI配置中的标签匹配

内容的提问来源于stack exchange,提问作者leaf4monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:55:44