kubernetes-CI/CD

目录

[TOC]


1.安装gitlib

运行:

sudo docker run --detach \
    --hostname gitlab.glj-site.com \
    --publish 4443:443 --publish 8880:80 --publish 23:22 \
    --name gitlab \
    --restart always \
    --volume /srv/gitlab/config:/etc/gitlab \
    --volume /srv/gitlab/logs:/var/log/gitlab \
    --volume /srv/gitlab/data:/var/opt/gitlab \
    gitlab/gitlab-ce:latest

注意:如果这里修改了80端口可能出现如下错误:

原因就是运行git remote add origin http://45.77.**.**/root/webmaven.git是默认是80端口,由于你修改了80端口,所以就会报错,如果修改为88端口,则应该运行:git remote add origin http://45.77.**.**:88/root/webmaven.git来指明端口。貌似修改了22端口会影响https。

2.安装Gitlab-Runner

基于docker运行Gitlab-Runner

运行:

sudo docker run -d --name gitlab-runner --restart always \
  -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

Gitlab-Runner注册

注册时需要提供一个Url和token,获取地址如下图:

运行进行sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register容器
具体注册如下图:

1. 什么情况下需要注册Shared Runner?
比如,GitLab上面所有的工程都有可能需要在公司的服务器上进行编译、测试、部署等工作,这个时候注册一个Shared Runner供所有工程使用就很合适。
1. 什么情况下需要注册Specific Runner?
比如,我可能需要在我个人的电脑或者服务器上自动构建我参与的某个工程,这个时候注册一个Specific Runner就很合适。
1. 什么情况下需要在同一台机器上注册多个Runner?
比如,我是GitLab的普通用户,没有管理员权限,我同时参与多个项目,那我就需要为我的所有项目都注册一个Specific Runner,这个时候就需要在同一台机器上注册多个Runner。

基于Kubernetes运行Gitlab-Runner

基于kubernetes运行runner还是需要先通过docker启动一个临时runner注册一个runner token(参考基于docker运行Gitlab-Runner)
1. 获取配置参数
运行:docker exec -it 31238d7cbe9d vi /etc/gitlab-runner/config.toml
1. 创建configMap
编写k8s-cicd-runner-cm.yaml文件,内容如下:

apiVersion: v1    
kind: ConfigMap    
metadata:    
  name: gitlab-runner
data:
  config.toml: |
    #通过临时runner里获取而来 :docker exec -it 31238d7cbe9d vi /etc/gitlab-runner/config.toml
    concurrent = 1
    check_interval = 0

    [session_server]
      session_timeout = 1800

    [[runners]]
      name = "devops-k8s-runner-1"
      url = "http://8.6.*.*/"
      token = "0c98472b0c23592e915cfc1dad60"
      executor = "docker"
      [runners.docker]
        tls_verify = false
        image = "ruby:2.1"
        privileged = false
        disable_entrypoint_overwrite = false
        oom_kill_disable = false
        disable_cache = false
        volumes = ["/cache"]
        shm_size = 0
      [runners.cache]
        [runners.cache.s3]
        [runners.cache.gcs]

运行:kubectl apply -f k8s-cicd-runner-cm.yaml
1. 编写runner的deployment.yaml文件
编写k8s-cicd-runner.yaml文件,内容如下:

apiVersion: extensions/v1beta1
kind: Deployment 
metadata: 
  name: gitlab-runner 
spec: 
  replicas: 1
  selector: 
    matchLabels: 
      name: gitlab-runner 
  template:
    metadata:
      labels:
        name: gitlab-runner 
    spec: 
      imagePullSecrets: 
        - name: docker-secret 
      containers: 
        - args: 
            - run
          image: gitlab/gitlab-runner:latest 
          imagePullPolicy: IfNotPresent 
          name: gitlab-runner 
          volumeMounts: 
            - mountPath: /etc/gitlab-runner 
              name: config 
              readOnly: true 
      restartPolicy: Always 
      volumes: 
        - configMap:
            name: gitlab-runner 
          name: config

运行:kubectl apply -f k8s-cicd-runner.yaml

使用Harbor搭建镜像私有仓

搭建参考:使用harbor搭建镜像仓库

配置kubernetes集群

API URL

API URL是GitLab用于和你的集群中那些用于部署工作负载的Kubernetes API进行通信的URL。根据Kubernetes集群运行的位置,你需要确保端口是打开的状态,这样才能让gitlab.com和Kubernetes集群进行通信。(默认是https://ip:6443) 具体如何获取,可通过kubeconfig获取。运行cat ~/.kube/config | grep server获取。
提示:kubeconfig文件来组织关于集群,用户,名称空间和身份验证机制的信息。 kubectl命令行工具使用kubeconfig文件来查找选择群集并与群集的API服务器进行通信所需的信息。默认情况下 kubectl使用的配置文件名称是在$HOME/.kube目录下 config文件,可以通过设置环境变量KUBECONFIG或者–kubeconfig指定其他的配置文件

CA证书

CA证书是需要的,因为这些证书通常是自定义证书,它们不在GitLab服务器的证书存储区中,它们可以让连接受到保护。
获取方式一:
1. 运行:cat ~/.kube/config | grep certificate-authority-data这会提供给你一个base64编码的证书字符串,但是GitLab中的CA证书需要PEM格式
1. 把编码的字符串存到一个文件中,比如cert.base64
1. 运行base64 -d cert.base64 > cert.pem
1. 返回一个pem格式的证书,你可以把它拷贝到GitLab中的CA证书字段里
获取方式二:
kubernetes会把生成的证书文件放在master节点的/etc/kubernetes/pki/目录下,这里ca.crt即我们需要的ca证书。

Token

为了让gitlab.com实例能够与集群通信,我们将为它创建一个服务账号。
1. 创建k8s-cicd-svc.yaml文件,内容如下:

apiVersion: v1
kind: Namespace
metadata:
  name: gitlab-managed-apps
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: gitlab-sa
  namespace: gitlab-managed-apps 
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: gitlab-role
  namespace: gitlab-managed-apps
rules:
- apiGroups:
  - ""
  - extensions
  resources:
  - '*'
  verbs:
  - '*'
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: gitlab-rb
  namespace: gitlab-managed-apps
subjects:
  - kind: ServiceAccount
    name: gitlab-sa
    namespace: gitlab-managed-apps
roleRef:
  kind: Role
  name: gitlab-role
  apiGroup: rbac.authorization.k8s.io
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: gitlab-cluster
  namespace: gitlab-managed-apps
subjects:
  - kind: ServiceAccount
    name: default
    namespace: gitlab-managed-apps
roleRef:
  kind: ClusterRole
  name: cluster-admin
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Secret
metadata:
  name: gitlab-secret
  namespace: gitlab-managed-apps
  annotations: 
    kubernetes.io/service-account.name: gitlab-sa
type: kubernetes.io/service-account-token
  1. 创建出一个服务账号
    运行:kubectl apply -f k8s-cicd-svc.yaml
  2. 获取生成的taken
    运行:kubectl describe secrets/gitlab-secret -n gitlab-managed-apps | grep token

    出现以下页面,则说明成功了。

安装Helm Tiller、Ingress、Prometheus和GitLab Runner


页面直接点击安装即可。

有用的参考

GitLab CI/CD Variables 中文文档
1

标签:

发表评论

邮箱地址不会被公开。 必填项已用*标注