极狐GitLab Runner Kubernetes(k8s)配置

2024-03-06 15:20

本文主要是介绍极狐GitLab Runner Kubernetes(k8s)配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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: default
    ERROR: 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 << EOFapiVersion: rbac.authorization.k8s.io/v1
    kind: Role
    metadata:name: gitlab-runnernamespace: gitlab
    rules:- apiGroups: ["*"]resources: ["pods"]verbs: ["list", "get", "watch", "create", "delete"]- apiGroups: ["*"]resources: ["pods/exec"]verbs: ["create"]- apiGroups: ["*"]resources: ["pods/log"]verbs: ["get"]- apiGroups: ["*"]resources: ["pods/attach"]verbs: ["list", "get", "create", "delete", "update"]- apiGroups: ["*"]resources: ["secrets"]verbs: ["list", "get", "create", "delete", "update"]      - apiGroups: ["*"]resources: ["configmaps"]verbs: ["list", "get", "create", "delete", "update"]EOFcat role.yamlkubectl apply -f role.yaml# 命名空间授权
    kubectl create serviceaccount gitlab-runner -n gitlab# 创建用户操作命名空间的Token,指定有效时间,单位是秒,315360000s代表10年
    kubectl create token gitlab-runner -n gitlab --duration=315360000svim /etc/gitlab-runner/config.toml[runners.kubernetes]# service 账户配置# 设置 服务授权的名称service_account = "gitlab-runner"bearer_token = "填写上述生成的token"
    
  5. 运行流水线,出现问题

    ERROR: Job failed (system failure): 
    prepare environment: setting up credentials: 
    secrets is forbidden: User "system:serviceaccount:gitlab:gitlab-runner" 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
    

    原因:要设置上述创建的命名空间 修改文件

    vim /etc/gitlab-runner/config.toml
    

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

    [runners.kubernetes]namespace = "gitlab"
    
  6. 运行流水线,出现问题

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

    原因:创建角色绑定,将角色极狐gitlab-runner、命名空间极狐gitlab设置服务账户gitlab:gitlab-runner并命名为极狐gitlab-runner

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

    kubectl create rolebinding gitlab-runner --namespace=gitlab --role=gitlab-runner --serviceaccount=gitlab:gitlab-runner
    
  7. 运行流水线,出现问题

    WARNING: Failed to pull image with policy "": 
    image pull failed: rpc error: 
    code = Unknown 
    desc = failed to pull and unpack image "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-7178588d": 
    failed to resolve reference "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-7178588d": 
    failed to do request: Head "https://registry.gitlab.com/v2/gitlab-org/gitlab-runner/gitlab-runner-helper/manifests/x86_64-7178588d": 
    dial tcp 35.227.35.254:443: connect: connection refused
    ERROR: Job failed: prepare environment: 
    waiting for pod running: 
    pulling image "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-7178588d": 
    image pull failed: rpc error: 
    code = Unknown 
    desc = failed to pull and unpack image "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-7178588d": 
    failed to resolve reference "registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper:x86_64-7178588d": 
    failed to do request: Head "https://registry.gitlab.com/v2/gitlab-org/gitlab-runner/gitlab-runner-helper/manifests/x86_64-7178588d": 
    dial tcp 35.227.35.254:443: connect: connection refused. 
    Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information
    

    原因:下载极狐gitlab-runner-helper失败,需要手动上设置helper_image 修改文件

    vim /etc/gitlab-runner/config.toml
    

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

    # 选择适合的gitlab-runner-helper版本[runners.kubernetes]# helper_image="gitlab/gitlab-runner-helper:x86_64-${CI_RUNNER_REVISION}"# 由于 gitlab 将 gitlab-runner-helper 发布到 hub.docker.com 的时间较慢,可以会用 bitnami/gitlab-runner-helper# 也可以使用 xuxiaoweicomcn/gitlab-runner-helper:所有镜像均为 registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper 中拉取并上传的,未做任何修改# bitnami/gitlab-runner-helper:15.6.1helper_image = "gitlab/gitlab-runner-helper:x86_64-v14.10.2"
    
  8. 运行流水线,出现问题

    ERROR: Job failed (system failure): 
    prepare environment: waiting for pod running: 
    timed out waiting for pod to start. 
    Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information
    

    原因:创建 pod 时需要 helper_image,但是拉取超时,可手动拉取 helper_image;拉取流水线所用的镜像超时,可手动拉取

    # 执行过程可使用 kubectl -n gitlab describe pod pod的名称,查看状态,pod的名称可在流水线中看到
    ctr -n=k8s.io image pull docker.io/gitlab/gitlab-runner-helper:x86_64-v14.10.2
    # ctr -n=k8s.io image pull docker.io/bitnami/gitlab-runner-helper:15.6.1
    # 也可以使用 xuxiaoweicomcn/gitlab-runner-helper:所有镜像均为 registry.gitlab.com/gitlab-org/gitlab-runner/gitlab-runner-helper 中拉取并上传的,未做任何修改# 假如流水线使用的镜像是 node:16.0.0
    ctr -n=k8s.io image pull docker.io/node:16.0.0ctr -n=k8s.io image list
    
  9. 如果要在 k8s 中使用 Docker,方案如下:

    1. 方案 1(不推荐): 在 k8s 各节点上安装 docker,并设置 docker 开机,流水线运行时挂载 docker.sock,需要在 GitLab Runner 中配置如下,详情参见: 极狐GitLab Runner、Kubernetes(k8s)配置

      [[runners]]...[runners.kubernetes]...[runners.kubernetes.volumes][[runners.kubernetes.volumes.host_path]]name = "docker"mount_path = "/var/run/docker.sock"host_path = "/var/run/docker.sock"
      
    2. 方案 2(推荐): 以特权身份运行流水线, 极狐GitLab CI/CD Services 中文文档, 需要在极狐 GitLab Runner 中配置如下:

      [[runners]]...[runners.kubernetes]...privileged = true
      

      使用 docker.sock 端口 示例

      stages:# 阶段名称:构建- build# job 名称
      build:# 阶段名称stage: build# 环境变量variables:# maven 环境变量MAVEN_OPTS: >--Dhttps.protocols=TLSv1.2-Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository-Dorg.slf4j.simpleLogger.showDateTime=true-Djava.awt.headless=true# 颜色定义COLOR_BLUE: \033[34mCOLOR_GREEN: \033[92mCOLOR_RED: \033[31mCOLOR_RESET: \033[0mCOLOR_YELLOW: \033[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_aliasesservices:# 使用 docker 服务,用于构建 docker 镜像- name: docker:dind# 服务别名alias: docker-dindvariables:# 关闭 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 文件中的 <image> <name> 标签增加 CI_PIPELINE_ID 变量,CI_PIPELINE_ID 变量代表 流水线ID'$COLOR_RESET- find . -type f -name "*.xml" -exec sed -i 's|<name>${docker.registry}/${docker.namespace}/${project.name}:${project.version}</name>|<name>${docker.registry}/${docker.namespace}/${project.name}:${project.version}-${CI_PIPELINE_ID}</name>|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 的 IPip = "192.168.80.14"hostnames = ["gitlab.example.com"][[runners.kubernetes.host_aliases]]# 自定义 Docker host 的 IPip = "192.168.80.33"hostnames = ["host.docker.example.xuxiaowei.cloud"][[runners.kubernetes.host_aliases]]# 自定义 Docker 私库的 IPip = "192.168.80.45"hostnames = ["registry.docker.example.xuxiaowei.cloud"]
    

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

这篇关于极狐GitLab Runner Kubernetes(k8s)配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/780485

相关文章

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

k8s部署MongDB全过程

《k8s部署MongDB全过程》文章介绍了如何在Kubernetes集群中部署MongoDB,包括环境准备、创建Secret、创建服务和Deployment,并通过Robo3T工具测试连接... 目录一、环境准备1.1 环境说明1.2 创建 namespace1.3 创建mongdb账号/密码二、创建Sec

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

gradle安装和环境配置全过程

《gradle安装和环境配置全过程》本文介绍了如何安装和配置Gradle环境,包括下载Gradle、配置环境变量、测试Gradle以及在IntelliJIDEA中配置Gradle... 目录gradle安装和环境配置1 下载GRADLE2 环境变量配置3 测试gradle4 设置gradle初始化文件5 i

SpringCloud配置动态更新原理解析

《SpringCloud配置动态更新原理解析》在微服务架构的浩瀚星海中,服务配置的动态更新如同魔法一般,能够让应用在不重启的情况下,实时响应配置的变更,SpringCloud作为微服务架构中的佼佼者,... 目录一、SpringBoot、Cloud配置的读取二、SpringCloud配置动态刷新三、更新@R

MySQL中my.ini文件的基础配置和优化配置方式

《MySQL中my.ini文件的基础配置和优化配置方式》文章讨论了数据库异步同步的优化思路,包括三个主要方面:幂等性、时序和延迟,作者还分享了MySQL配置文件的优化经验,并鼓励读者提供支持... 目录mysql my.ini文件的配置和优化配置优化思路MySQL配置文件优化总结MySQL my.ini文件

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法