写点什么

以 Kubernetes 的方式来运行极狐 GitLab Runner

作者:极狐GitLab
  • 2021 年 12 月 30 日
  • 本文字数:3428 字

    阅读完需:约 11 分钟

以 Kubernetes 的方式来运行极狐GitLab Runner

前面分别讲述了用安装包在 Ubuntu 上安装和运行极狐GitLab Runner 以及用 Docker 来运行极狐GitLab Runner。本文将讲述用 Kubernetes 来安装运行极狐 GitLab Runner。


Runner 的安装和注册


可以用极狐 GitLab Runner Helm Chart 来安装配置极狐 GitLab Runner。用这种方法安装的 Runner 使用 Kubernetes 做执行器,当有 CI/CD Pipeline job 需要执行的时候,会有一个 pod 来完成 job 构建。


01  前提条件


  • 极狐 GitLab 实例需要和 Kubernetes 集群能够交互

  • Kubernetes 版本为 1.4+

  • 已安装好的 kubectl 和 helm(helm 2 和 helm 3 都可以,本文用 helm 3)


02   Helm Chart 准备


首先添加一下极狐 GitLab 的 helm chart repo:

$ helm repo add gitlab https://charts.gitlab.io$ helm repo listNAME    URLgitlab  https://charts.gitlab.io/
复制代码


接下来就可以用 helm install 命令来用极狐 GitLab Runner Helm Chart[1] 来完成安装。


安装之前可以自定义一下 values.yaml 文件,values.yaml 的详细配置可以在极狐 GitLab Runner Helm Chart 官网来查看。

imagePullPolicy: IfNotPresentgitlabUrl: "https://jh-xiaomage.gitlab.cn"runnerRegistrationToken: "sFV-HEkLC_NgH2vLALfG"concurrent: 10checkInterval: 30logLevel: info
rbac:  create: true
metrics:  enabled: false
runners:  config: |    [[runners]]      [runners.kubernetes]        namespace = "{{.Release.Namespace}}"        image = "ubuntu:20.04"        [[runners.kubernetes.volumes.host_path]]            name = "docker"            mount_path = "/var/run/docker.sock"            host_path = "/var/run/docker.sock"  privileged: "true"  name: kubernetes-runner  tags: "kubernetes,runner"
securityContext:  runAsUser: 100  fsGroup: 65533
复制代码


重要参数说明:


  • gitlabUrl:极狐 GitLab 实例的 URL(本例为 https://jh-xiaomage.gitlab.cn, 如何安装极狐 GitLab 实例可以查看文章使用 Omnibus 来安装极狐GitLab );

  • runnerRegistrationToken:注册 Runner 时所需要的 Token,可以在 Settings --> CI/CD --> Runners 里面查看;

  • concurrent:并行运行 Job 的最大值;

  • checkInterval:极狐 GitLab 实例检查新构建的时间间隔;

  • runner:runner 的配置内容,包括 name,tag 等等,这些内容最后会以 config.toml 文件的形式呈现;


更多参数的配置和定义可以查看极狐 GitLab Helm Chart values.yaml[2] 文件详情。


03  Helm 安装


先创建一个 namespace:

$ kubectl create ns jh-k8s-runner
复制代码

接着用如下命令进行安装:

$ helm install --namespace jh-k8s-runner jh-gitlab-runner -f value.yaml gitlab/gitlab-runnerNAME: jh-gitlab-runnerLAST DEPLOYED: Wed Dec  8 23:07:50 2021NAMESPACE: jh-k8s-runnerSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES:Your GitLab Runner should now be registered against the GitLab instance reachable at: "https://jh-xiaomage.gitlab.cn"
Runner namespace "jh-k8s-runner" was found in runners.config template.
复制代码

查看 pod 状态:

$ kubectl -n jh-k8s-runner get pods -wNAME                                              READY   STATUS    RESTARTS   AGEjh-gitlab-runner-gitlab-runner-767779fcc8-jpszk   0/1     Running   0          13sjh-gitlab-runner-gitlab-runner-767779fcc8-jpszk   1/1     Running   0          21s
复制代码

可以进入 pod 查看一下:

$ gitlab-runner --versionVersion:      14.1.0Git revision: 8925d9a0Git branch:   14-1-stableGO version:   go1.13.8Built:        2021-07-20T11:43:26+0000OS/Arch:      linux/amd64
$ gitlab-runner listRuntime platform                                    arch=amd64 os=linux pid=45507 revision=8925d9a0 version=14.1.0Listing configured runners                          ConfigFile=/home/gitlab-runner/.gitlab-runner/config.tomlkubernetes-runner                                   Executor=kubernetes Token=5x8xMPnsgq7zqaWNxUvL URL=https://jh-xiaomage.gitlab.cn
复制代码

可以看到 pod 里面已经内置了 gitlab-runner 命令,且有注册成功的 Runner 实例,名称为 kubernetes-runner,我们在 Runner 的控制台上检查一下:


可以看到 Runner 控制台上多了一个名为 kubernetes-runner,tag 为 kubernetes、runner 的 Runner 实例,而这就是用 Helm Chart 安装的,以 Kubernetes 方式来运行的极狐 GitLab Runner 实例。下面就来看看如何使用它完成 CI/CD Pipeline Job 的构建。


其他两个实例是用安装包、docker 的方式来运行的,具体流程可以查看文章用安装包在 Ubuntu 上安装和运行极狐GitLab Runner 以及用 Docker 来运行极狐GitLab Runner


04  Runner 的使用


依旧使用在 Ubuntu 上安装使用极狐GitLab Runner 中的 Demo,现在让以 Kubernetes 运行的 Runner 来完成 CI/CD Pipeline 的执行。可以在 .gitlab-ci.yml 的 job 中增加 tags 字段,如果 tags 的内容和 Runner 的 tag(kubernetes 和 runner) 相匹配,则此 Runner 被分配用来执行此次 CI/CD Pipeline。文件内容如下:

image: docker:20.10.7   services:  - docker:20.10.7-dind
stages:            - build
build:  stage: build  tags:     - kubernetes  script:    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY    - docker build -t $CI_REGISTRY_IMAGE:2.0.0 .    - docker push $CI_REGISTRY_IMAGE:2.0.0
复制代码


接着直接触发 CI/CD Pipeline 即可,查看构建结果:



查看构建日志:


可以看到此次构建是在名为 kubernetes-runner 的 Runner 上进行的。


整个过程也可以看一下 pod 的变化:

$ kubectl -n jh-k8s-runner get pods -wNAME                                              READY   STATUS    RESTARTS   AGEjh-gitlab-runner-gitlab-runner-767779fcc8-jpszk   1/1     Running   0          15hrunner-5x8xmpns-project-2-concurrent-08jd2w       0/3     Pending   0          0srunner-5x8xmpns-project-2-concurrent-08jd2w       0/3     Pending   0          0srunner-5x8xmpns-project-2-concurrent-08jd2w       0/3     Init:0/1   0          0srunner-5x8xmpns-project-2-concurrent-08jd2w       0/3     PodInitializing   0          2srunner-5x8xmpns-project-2-concurrent-08jd2w       3/3     Running           0          3srunner-5x8xmpns-project-2-concurrent-08jd2w       3/3     Running             0          5srunner-5x8xmpns-project-2-concurrent-08jd2w       3/3     Terminating       0          23s
复制代码


可以看到,新的 CI/CD Pipeline Job 会有一个新的 pod 产生来完成整个构建。


以 Kubernetes 来运行极狐 GitLab Runner,本质上就是用 Kubernetes 内置的资源(service、deployment、configmap、secret 等)完成极狐 GitLab Runner 在 Kubernetes 上的安装,安装的过程就会完成 Runner 的注册。当有 CI/CD Pipeline Job 需要构建的时候,就会有一个新的 pod 生成来完成此次构建,构建结束,pod 就被删除。


引用链接

  1. https://gitlab.com/gitlab-org/charts/gitlab-runner/-/tree/mai

  2. https://gitlab.com/gitlab-org/charts/gitlab-runner/-/blob/main/values.yaml


发布于: 2021 年 12 月 30 日阅读数: 4
用户头像

极狐GitLab

关注

开源开放,人人贡献 2021.05.19 加入

开放式一体化DevOps平台,助力行业高速协同增长!

评论

发布
暂无评论
以 Kubernetes 的方式来运行极狐GitLab Runner_极狐GitLab_InfoQ写作社区