小工具知识网

当前位置: 首页 > 行业知识 > 极狐GitLab Runner Kubernetes(k8s)配置

行业知识

极狐GitLab Runner Kubernetes(k8s)配置

2026-11-06 19:45:09 来源:互联网转载

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。

()

资料

  1. Kubernetes

  2. 高级配置

    ()
  3. 添加额外主机别名

  4. Pod 的 DNS 配置

  5. 极狐GitLab Runner 的 Kubernetes 执行器

  6. Docker 执行器

  7. 通过特权模式使用 Docker-in-Docker

  8. 极狐GitLab CI/CD Services

说明

  1. 极狐GitLab Runner 注册到 极狐GitLab 的操作请参见上面章节中的 CentOS 安装 GitLab Runner, 只需要将流水线的执行器设置成kubernetes即可,然后执行流水线,会出现问题,按照下方内容去解决
  2. 本文采用遇见什么错误,增加对应的配置来介绍 GitLab Runner、Kubernetes 的配置

配置

  1. 运行流水线,出现问题

    Using Kubernetes namespace: defaultERROR: Preparation failed: getting Kubernetes config: invalid configuration: no configuration has been provided, try setting KUBERNETES_MASTER environment variable

    原因:k8s地址未配置 修改文件

    vim /etc/gitlab-runner/config.toml

    修改对应流水线的配置内容如下

    [runners.kubernetes]    # k8s 地址    host = "https://192.168.80.130:6443"
  2. 运行流水线,出现问题

    ERROR: Job failed (system failure): prepare environment: setting up credentials: Post "https://192.168.61.139:6443/api/v1/namespaces/default/secrets": x509: certificate signed by unknown authority. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information

    原因:k8s证书未配置 修改文件

    vim /etc/gitlab-runner/config.toml

    修改对应流水线的配置内容如下

    [runners.kubernetes]    # k8s 证书    ca_file = "/etc/kubernetes/pki/ca.crt"
  3. 运行流水线,出现问题

    ERROR: Job failed (system failure): prepare environment: setting up credentials: secrets is forbidden: User "system:anonymous" cannot create resource "secrets" in API group "" in the namespace "default". Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information

    原因:k8s账户未配置 修改文件

    vim /etc/gitlab-runner/config.toml

    修改对应流水线的配置内容如下

    [runners.kubernetes]    # service 账户配置    # 设置 服务授权的名称    service_account = "gitlab-runner"    bearer_token = "先随便写一个"    bearer_token_overwrite_allowed = true
  4. 运行流水线,出现问题

    ERROR: Job failed (system failure): prepare environment: setting up credentials: Unauthorized. Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information

    原因:k8s凭证不正确,需要:创建命名空间、创建角色、创建服务账户并授权命名空间、创建服务账户在命名空间的token 修改文件

    vim /etc/gitlab-runner/config.toml

    修改对应流水线的配置内容如下

    # 创建命名空间kubectl create namespace gitlab# 创建角色 gitlab-runner 前,要求命名空间 gitlab 必须存在cat > role.yaml -      -Dhttps.protocols=TLSv1.2      -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository      -Dorg.slf4j.simpleLogger.showDateTime=true      -Djava.awt.headless=true    # 颜色定义    COLOR_BLUE: 3[34m    COLOR_GREEN: 3[92m    COLOR_RED: 3[31m    COLOR_RESET: 3[0m    COLOR_YELLOW: 3[93m  # 镜像  image: maven:3.6.3-openjdk-17  # 使用的服务  # 如果是基于 k8s 运行流水线,请以特权身份运行(在 /etc/gitlab-runner/config.toml 中配置 privileged = true),否则无法使用 services  # 由于要访问域名 nexus.xuxiaowei.cn、pig.docker.xuxiaowei.cn,所以在 /etc/gitlab-runner/config.toml 中配置了对应的 runners.kubernetes.host_aliases  services:    # 使用 docker 服务,用于构建 docker 镜像    - name: docker:dind      # 服务别名      alias: docker-dind      variables:        # 关闭 TLS(仅使用 http)        DOCKER_TLS_CERTDIR: ""      # docker 镜像发布域名 pig.docker.xuxiaowei.cn(仅作者局域网可以访问)      # 默认情况下域名 pig.docker.xuxiaowei.cn 证书可能不受信任(可能是非权威机构颁发的证书,也可能是容器镜像无法识别权威机构颁发的域名证书)      # 信任域名证书      command: [ "--insecure-registry=pig.docker.xuxiaowei.cn" ]  # 执行脚本前的任务  before_script:    # 此处使用 http 而非 https,因为 https 证书可能不受信任(可能是非权威机构颁发的证书,也可能是容器镜像无法识别权威机构颁发的域名证书)    # 下载的 settings-private.xml 配置文件里使用的也是 http 协议    - echo -e $COLOR_BLUE'下载作者 Maven 私库配置文件(仅作者局域网可用)'$COLOR_RESET && curl -o settings-private.xml http://nexus.xuxiaowei.cn/repository/raw-hosted/maven/settings-private.xml    - echo -e $COLOR_BLUE'查看作者 Maven 私库配置文件'$COLOR_RESET && cat settings-private.xml  # 执行脚本  script:    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 jar 包'$COLOR_RESET && mvn clean -U install -s settings-private.xml    - echo -e $COLOR_BLUE'将所有 *.xml 文件中的   标签增加 CI_PIPELINE_ID 变量,CI_PIPELINE_ID 变量代表 流水线ID'$COLOR_RESET    - find . -type f -name "*.xml" -exec sed -i 's|${docker.registry}/${docker.namespace}/${project.name}:${project.version}|${docker.registry}/${docker.namespace}/${project.name}:${project.version}-${CI_PIPELINE_ID}|g' {} +    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-auth docker:build -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-auth docker:push -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-gateway docker:build -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-gateway docker:push -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-upms/pig-upms-biz docker:build -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-upms/pig-upms-biz docker:push -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-visual/pig-codegen docker:build -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-visual/pig-codegen docker:push -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-visual/pig-monitor docker:build -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-visual/pig-monitor docker:push -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-visual/pig-quartz docker:build -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD    - echo -e $COLOR_BLUE'使用作者 Maven 私库配置文件构建 docker 镜像'$COLOR_RESET && mvn -pl pig-visual/pig-quartz docker:push -s settings-private.xml -Ddocker.host=$DOCKER_HOST -Ddocker.registry=$DOCKER_REGISTRY -Ddocker.username=$DOCKER_USERNAME -Ddocker.password=$DOCKER_PASSWORD  # 缓存  cache:    # 缓存名称    # 使用 job 名称    key: "${CI_JOB_NAME}"    # 缓存路径    paths:      - .m2/repository  # 流水线标签:选择可执行流水线的机器  tags:    - plugin-kubernetes  # 触发条件:触发流水线执行的条件  only:    # 仅在 xuxiaowei/k8s 分支上执行    - xuxiaowei/k8s

问题

  1. 如果克隆镜像时无法解析极狐 GitLab 的域名,可以在极狐 GitLab Runner 中自定义域名的IP(其他自定义域名同理)

    vim /etc/gitlab-runner/config.toml
    [[runners]]  ...  [runners.kubernetes]    [[runners.kubernetes.host_aliases]]      # 自定义 GitLab 的 IP      ip = "192.168.80.14"      hostnames = ["gitlab.example.com"]    [[runners.kubernetes.host_aliases]]      # 自定义 Docker host 的 IP      ip = "192.168.80.33"      hostnames = ["host.docker.example.xuxiaowei.cloud"]    [[runners.kubernetes.host_aliases]]      # 自定义 Docker 私库的 IP      ip = "192.168.80.45"      hostnames = ["registry.docker.example.xuxiaowei.cloud"]

    更多关于极狐GitLab 的最佳实践,请搜索关注【极狐GitLab】公众号或者登录极狐GitLab 官网 https://gitlab.cn 进行学习。

上一篇:MATLAB中功率谱密度计算pwelch函数使用详解

下一篇:易语言内存泄露检测技巧揭秘,定位问题,轻松解决!