iT邦幫忙

2024 iThome 鐵人賽

DAY 22
1

昨天提到了如何使用 GitLab CI,但是最後這個 Runner Pods 發生錯誤而無法正常執行。

簡介

DinD 就類似於 kind,也就是 Docker in Docker,在 Container 內部使用 Docker 的服務。

Troubleshooting

Runner

完整的錯誤訊息我沒保存下來,不過其中的關鍵字為:

AppArmor detection and --privileged mode might break.
mount: permission denied (are you root?)

官方文件上也可以看得出來需要啟用特權。
所以解法就是在 values.yaml 的這個部分加入啟用特權:

gitlab-runner:
  runners:
    privileged: true
    config: |
      [[runners]]
        [runners.kubernetes]
        privileged = true 
        image = "ubuntu:22.04"
        {{- if .Values.global.minio.enabled }}
        [runners.cache]
          Type = "s3"
          Path = "gitlab-runner"
          Shared = true
          [runners.cache.s3]
            ServerAddress = {{ include "gitlab-runner.cache-tpl.s3ServerAddress" . }}
            BucketName = "runner-cache"
            BucketLocation = "us-east-1"
            Insecure = false
        {{ end }}

加入這行後就可以解決 Runner Pods 無法正常運作的問題。

DinD

解決前面的問題後,馬上就發現新的問題 QQ
錯誤訊息一樣不可考,但可參考這篇 Github Issue,關鍵字為:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

所以解法應該就是讓我們的 GitLab Runner 可以 mount HostPath 的這個檔案。
在嘗試修改 values.yaml 之前,我們首先要檢查這個檔案是否存在,所以我連線到 Nodes 中確認,卻發現並無 docker.sock 這個檔案。
所以我們又要重建 Cluster,將 docker.sock 映射到 Kubernetes Cluster 中,以下是新的 kind-config.yaml:(怎麼越來越肥= =)

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    extraPortMappings:
      - containerPort: 32443
        hostPort: 443
        listenAddress: "0.0.0.0"
      - containerPort: 32022
        hostPort: 32022
        listenAddress: "0.0.0.0"
    extraMounts:
      - hostPath: ${HOME}/kind
        containerPath: /var/local-path-provisioner
      - hostPath: /var/run/docker.sock
        containerPath: /var/run/docker.sock
  - role: worker
    extraMounts:
      - hostPath: ${HOME}/kind
        containerPath: /var/local-path-provisioner
      - hostPath: /var/run/docker.sock
        containerPath: /var/run/docker.sock
  - role: worker
    extraMounts:
      - hostPath: ${HOME}/kind
        containerPath: /var/local-path-provisioner
      - hostPath: /var/run/docker.sock
        containerPath: /var/run/docker.sock
  - role: worker
    extraMounts:
      - hostPath: ${HOME}/kind
        containerPath: /var/local-path-provisioner
      - hostPath: /var/run/docker.sock
        containerPath: /var/run/docker.sock

但,就在我興高采烈的重建 Cluster 並準備解決問題時,我發現 PostgreSQL 的 Secret 忘記備份,所以 GitLab 的各種設定要重來了........................明天再繼續吧QQ 心好累


上一篇
Day 21:GitLab CI
下一篇
Day 23:ReBuild Cluster
系列文
在Local建立完整的開發環境筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言