极狐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

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

hadoop开启回收站配置

开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。 开启回收站功能参数说明 (1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。 (2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。

NameNode内存生产配置

Hadoop2.x 系列,配置 NameNode 内存 NameNode 内存默认 2000m ,如果服务器内存 4G , NameNode 内存可以配置 3g 。在 hadoop-env.sh 文件中配置如下。 HADOOP_NAMENODE_OPTS=-Xmx3072m Hadoop3.x 系列,配置 Nam

wolfSSL参数设置或配置项解释

1. wolfCrypt Only 解释:wolfCrypt是一个开源的、轻量级的、可移植的加密库,支持多种加密算法和协议。选择“wolfCrypt Only”意味着系统或应用将仅使用wolfCrypt库进行加密操作,而不依赖其他加密库。 2. DTLS Support 解释:DTLS(Datagram Transport Layer Security)是一种基于UDP的安全协议,提供类似于

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略

Kubernetes PodSecurityPolicy:PSP能实现的5种主要安全策略 1. 特权模式限制2. 宿主机资源隔离3. 用户和组管理4. 权限提升控制5. SELinux配置 💖The Begin💖点点关注,收藏不迷路💖 Kubernetes的PodSecurityPolicy(PSP)是一个关键的安全特性,它在Pod创建之前实施安全策略,确保P

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

什么是Kubernetes PodSecurityPolicy?

@TOC 💖The Begin💖点点关注,收藏不迷路💖 1、什么是PodSecurityPolicy? PodSecurityPolicy(PSP)是Kubernetes中的一个安全特性,用于在Pod创建前进行安全策略检查,限制Pod的资源使用、运行权限等,提升集群安全性。 2、为什么需要它? 默认情况下,Kubernetes允许用户自由创建Pod,可能带来安全风险。