iT邦幫忙

2022 iThome 鐵人賽

DAY 22
1

可愛鯨魚

有了鯨魚工具箱~再來設立個實驗室吧!

圖片來源:Docker (@Docker) / Twitter

經過了20多天終於弄好基礎了... 接著往開發前進~

GitLab 安裝

GitLab 是一個軟體開發平台,可以使用 Git 做版本控制,另外 GitLab 也有提供 CI/CD 的功能,現在目標直接朝向 DevOps 功能的開發

官網是直接寫 GitLab 是一個 DevOps 平台 /images/emoticon/emoticon38.gif

版本

GitLab 的核心是開源的,延伸出來分為社群版(CE)和企業版(EE),直接使用企業版就好,可以使用最低的免付費層級,後續有需要再訂閱付費就好

Choose your GitLab distribution | GitLab

安裝

安裝方式就... 使用 helm 直接整套塞進 Kubernetes~

建立 Namespace

kubectl create ns gitlab

建立憑證 secret

直接拿前面的 openssl 自簽憑證來用~

kubectl create secret -n gitlab generic gitlab-tls \
    --from-file=ca.pem \
    --from-file=tls.crt=example.domain.com.pem \
    --from-file=tls.key=example.domain.com.key

增加 gitlab helm repo

helm repo add gitlab https://charts.gitlab.io/

取得 values

helm show values gitlab/gitlab --version 6.4.2  >> values.yaml

這設定檔有 1200 行好可怕... /images/emoticon/emoticon16.gif

修改 values

建議如果有要修改的時候要從 gitlab document 看... 因為底下還有一堆 subcharts...

完整檔案放在 github Day 22 - gitlab/values.yaml

  • global:
    • hosts: 設定 domain 後會一起設定 gitlab 底下所有服務
    • ingress: 因為前面 traefik 有設定 labelSelector 但這裡不支援寫 labels,所以之後再自己寫 ingress...
global:
  hosts:
    domain: example.domain.com
    ...
  ingress:
    configureCertmanager: false
    enabled: false
    ...
  • certmanager: 使用自己的憑證可以不裝 certmanager
certmanager:
  install: false
  ...
  • nginx-ingress: 已經先安裝了 traefik 不需再安裝 nginx-ingress
nginx-ingress:
  enabled: false
  • 將服務都掛上 persistentVolume
prometheus:
  server:
    persistentVolume:
      storageClass: nfs-client
      size: 8Gi
  ...
redis:
  master:
    persistence:
      storageClass: nfs-client
      size: 5Gi
  ...
postgresql:
  image:
    tag: 14.5.0     # 可自選 postgresql 版本
  persistence:
    storageClass: nfs-client
    size: 8Gi
  ...
gitlab:
  gitaly:
    persistence:
      storageClass: nfs-client
      size: 50Gi
  ...

helm 安裝

設定完 values.yaml 後安裝

helm install gitlab -f values.yaml --namespace gitlab gitlab/gitlab --version 6.4.2

補上 ingress

因為要自己加 labels 所以沒辦法用預設,這裡要再補回 ingress

檔案放在 github Day 22 - gitlab/ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-kas
  namespace: gitlab
spec:
  rules:
  - host: kas.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-kas
            port:
              number: 8150
        path: /
        pathType: Prefix
      - backend:
          service:
            name: gitlab-kas
            port:
              number: 8154
        path: /k8s-proxy/
        pathType: Prefix
  tls:
  - hosts:
    - kas.example.domain.com
    secretName: gitlab-tls

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-minio
  namespace: gitlab
spec:
  rules:
  - host: minio.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-minio-svc
            port:
              number: 9000
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - minio.example.domain.com
    secretName: gitlab-tls

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-registry
  namespace: gitlab
spec:
  rules:
  - host: registry.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-registry
            port:
              number: 5000
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - registry.example.domain.com
    secretName: gitlab-tls

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  labels:
    environment: production
    method: traefik
  name: gitlab-webservice-default
  namespace: gitlab
spec:
  rules:
  - host: gitlab.example.domain.com
    http:
      paths:
      - backend:
          service:
            name: gitlab-webservice-default
            port:
              number: 8181
        path: /
        pathType: Prefix
  tls:
  - hosts:
    - gitlab.example.domain.com
    secretName: gitlab-tls
kubectl apply -f ingress.yaml

開啟網頁~

根據自己設定的 hosts 和 ingress 設定的 gitlab-webservice host 登入網頁,以上面範例為 https://gitlab.example.domain.com

gitlab

然後就被擋在門外了...

帳號密碼??

gitlab 安裝時會自動產生 root 的 password
要自己從 secret 抓出來...

kubectl get secret -n gitlab gitlab-gitlab-initial-root-password -o jsonpath={.data.password} | base64 --decode

拿到密碼後就能使用 root 登入

成功登入~ /images/emoticon/emoticon42.gif


Ref


gitlab 安裝文檔真的有夠多,我還沒完全看完...
之後如果有改設定會再補充... Grafana 的部分沒多久後就要改了... /images/emoticon/emoticon28.gif


上一篇
Day 21 — 鯨魚的萬應儲物小間:StorageClass (使用 NFS)
下一篇
Day 23 — 實驗室前置作業:GitLab 開發前置設定 (SSH 通道)
系列文
前端轉生~到了實驗室就要養幾隻可愛鯨魚:自架 Kubernetes 迷航日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言