helm 輕松完爆 gitlab


一、版本說明

本文使用 helm 3。helm 倉庫信息如下。此外,本文用到了 nginx-ingress,且設置 nginx-ingress 的 hostPath 為 true。所以如果你沒有使用 nginx-ingress 的話,建議參考k8s進階——落地實踐之旅首先安裝 nginx-ingress。

$ helm repo list
NAME            URL
stable          http://mirror.azure.cn/kubernetes/charts
aliyun          https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
jetstack        https://charts.jetstack.io
minio           http://192.168.99.1:9001/helm-repo
nginx-stable    https://helm.nginx.com/stable

二、下載gitlab-ce

$ mkdir -p /root/helm/charts && cd /root/helm/charts/
$ helm search repo gitlab-ce
NAME                    CHART VERSION   APP VERSION     DESCRIPTION
aliyun/gitlab-ce        0.2.1                           GitLab Community Edition
stable/gitlab-ce        0.2.3           9.4.1           GitLab Community Edition

$ helm pull stable/gitlab-ce

三、配置gitlab-ce

$ tar -zxvf gitlab-ce-0.2.2.tgz
$ vim gitlab-ce/values.yaml

values.yaml修改這四項:

image: gitlab/gitlab-ce:10.6.2-ce.0 # 默認版本 9.4.1-ce.0 有問題 
externalUrl: gitlab.lvzhenjiang.com # 給 gitlab 配置一個域名。【可選】
gitlabRootPassword: # 登錄密碼
serviceType: ClusterIP
ingress.enabled: true
ingress.url: gitlab.lvzhenjiang.com

2021-06-13_111853

四、創建gitlab-ce命名空間

$ kubectl create ns gitlab-ce

五、安裝 gitlab-ce

$ cd /root/helm/charts/
$ helm install gitlab-ce --namespace gitlab-ce gitlab-ce
# 第一個 gitlab-ce 是 release 名,第二個是命名空間,第三個是 chart 解壓后的目錄

注意:如果你的 k8s 版本低於 16,那么恭喜,你的安裝過程會很順利,你可以放心大膽地跳過。如果很不幸,你跟我一樣有報錯,你需要接着往下看!

5.1 修改 deployment 版本

2021-06-13_112455

錯誤原因是現有 k8s 不支持 gitlab-ce 的 deployment apiVersion。

定位要修改的文件:

$ grep -irl "extensions/v1beta1" gitlab-ce | grep deployment
# 選項 i 表示大小寫不敏感;r 表示支持子目錄遞歸搜索;l 打印出匹配文件

2021-06-13_112733

完爆語句如下:

$ grep -irl "extensions/v1beta1" gitlab-ce | grep deploy | xargs sed -i 's#extensions/v1beta1#apps/v1#g'
# xargs 把管道符 ‘|’前面命令的輸出結果作為后面 sed 命令的輸入。
# sed 命令是替換,替換內容是將 extensions/v1beta1 替換為 apps/v1

5.2 修改 deployment 選擇符(selector)

再次安裝,執行結果依然報錯。

2021-06-13_112927

錯誤原因是現有 k8s 不支持 gitlab-ce 的 deployment spec。定位要修改的文件:

$ grep -irl "apps/v1" gitlab-ce | grep deployment
# 注意:搜索內容變了,不是 extenstions/v1beta1

2021-06-13_113051

依次完爆上述文件:

$ vim gitlab-ce/templates/deployment.yaml

添加:

  replicas: 1      # 在這行下添加以下內容
  selector:
    matchLabels:
      app: {{ template "gitlab-ce.fullname" . }}

2021-06-13_113421

$ vim gitlab-ce/charts/postgresql/templates/deployment.yaml

添加:

spec:    # 在這行下添加以下內容
  selector:
    matchLabels:
      app: {{ template "postgresql.fullname" . }}

2021-06-13_113700

$ vim gitlab-ce/charts/redis/templates/deployment.yaml

添加:

spec:    # 在這行下添加以下內容
  selector:
    matchLabels:
      app: {{ template "redis.fullname" . }}

2021-06-13_113947

再次執行安裝:

2021-06-13_114037

gitlab-ce 安裝成功。但是安裝成功不代表運行成功。就跟你買了一個有快速震動功能的高科技生活用品,不安裝南孚,它照樣不能讓你爽是一個道理。

六、創建gitlab-ce存儲

$ kubectl get all -n gitlab-ce

2021-06-13_114151

發現 pod 一直是 pending 狀態。原因是 gitlab-ce 等你為它創建存儲;專業地說,是 pvc 沒綁定 pv;再文藝一點就是 pvc 不操(c) pv 就不願意干活。懂了沒!

2021-06-13_114251

查看處於 pending 狀態的 pvc。發現它們的喜好有 2 個規格。A 杯(1Gi) 和 C 杯(10Gi)。

$ kubectl edit pvc -n gitlab-ce gitlab-ce-gitlab-ce-etc

2021-06-13_114528

$ kubectl edit pvc -n gitlab-ce gitlab-ce-gitlab-ce-data

2021-06-13_114615

6.1 創建資源文件

$ mkdir -p /root/helm/charts/gitlab-ce/manifest/pv
$ cd /root/helm/charts/gitlab-ce/manifest/pv
$ touch pv-gitlab-10g.yaml
$ touch pv-gitlab-1g.yaml

pv-gitlab-1g.yaml 文件如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlab-etc
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
  -  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
      path: /data/gitlab/etc

pv-gitlab-10g.yaml 文件如下:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlab-data1
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  -  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
      path: /data/gitlab/data
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlab-data2
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  -  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
      path: /data/gitlab/data
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: gitlab-data3
spec:
  capacity:
    storage: 10Gi
  volumeMode: Filesystem
  accessModes:
  -  ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
      path: /data/gitlab/data

6.2 創建存儲目錄

這里為了減少不必要的麻煩,使用了 hostPath 本地存儲類型。如果你 k8s 集群有多個工作節點的話,記得每個工作節點都需要創建目錄 /data/gitlab/etc、/data/gitlab/data

$ mkdir -pv /data/gitlab/{etc,data}

spacer.gif6.3 創建 pv

$ kubectl apply -f pv-gitlab-1g.yaml
$ kubectl apply -f pv-gitlab-10g.yaml

2021-06-13_115319

創建完查看 pvc 和 pv。你會發現 pvc 各個都像脫韁的野狗一樣,瘋狂地奔向 pv。它們雲雨地很和諧。

$ kubectl get pvc -n gitlab-ce
$ kubectl get pv

2021-06-13_115450

查看 gitlab-ce,發現一切歲月靜好。

2021-06-13_115544

七、訪問 gitlab-ce

安裝 gitlab-ce 時,我們指定 service 類型是 ClusterIP。

2021-06-13_115719

查看 ingress 信息:

2021-06-13_115820

八、綁定 hosts

打開瀏覽器,輸入 http://gitlab.lvzhenjiang.com/。注意:gitlab.lvzhenjiang.com 需要在當前瀏覽器所在主機的 hosts 文件中指定,其 ip 必須是 nginx-ingress-controller pod 所在主機。

2021-06-13_120255

九、訪問 gitlab-ce

2021-06-13_123826


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM