helm 轻松完爆 gitlab

目录

一、版本说明

本文使用 helm 3。helm 仓库信息如下。此外,本文用到了 nginx-ingress,且设置 nginx-ingress 的 hostPath 为 true。所以如果你没有使用 nginx-ingress 的话,建议参考轻松完爆 Helm release首先安装 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

helm 轻松完爆 gitlab

四、创建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 版本

helm 轻松完爆 gitlab

错误原因是现有 k8s 不支持 gitlab-ce 的 deployment apiVersion。

定位要修改的文件:

$ grep -irl "extensions/v1beta1" gitlab-ce | grep deployment
# 选项 i 表示大小写不敏感;r 表示支持子目录递归搜索;l 打印出匹配文件

helm 轻松完爆 gitlab

完爆语句如下:

$ 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)

再次安装,执行结果依然报错。

helm 轻松完爆 gitlab

错误原因是现有 k8s 不支持 gitlab-ce 的 deployment spec。定位要修改的文件:

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

helm 轻松完爆 gitlab

依次完爆上述文件:

$ vim gitlab-ce/templates/deployment.yaml

添加:

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

helm 轻松完爆 gitlab

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

添加:

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

helm 轻松完爆 gitlab

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

添加:

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

helm 轻松完爆 gitlab

再次执行安装:

helm 轻松完爆 gitlab

gitlab-ce 安装成功。但是安装成功不代表运行成功。就跟你买了一个有快速震动功能的高科技生活用品,不安装南孚,它照样不能让你爽是一个道理。

六、创建gitlab-ce存储

$ kubectl get all -n gitlab-ce

helm 轻松完爆 gitlab

发现 pod 一直是 pending 状态。原因是 gitlab-ce 等你为它创建存储;专业地说,是 pvc 没绑定 pv;再文艺一点就是 pvc 不操(c) pv 就不愿意干活。懂了没!

helm 轻松完爆 gitlab

查看处于 pending 状态的 pvc。发现它们的喜好有 2 个规格。A 杯(1Gi) 和 C 杯(10Gi)。

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

helm 轻松完爆 gitlab

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

helm 轻松完爆 gitlab

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}

helm 轻松完爆 gitlab6.3 创建 pv

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

helm 轻松完爆 gitlab

创建完查看 pvc 和 pv。你会发现 pvc 各个都像脱缰的野狗一样,疯狂地奔向 pv。它们云雨地很和谐。

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

helm 轻松完爆 gitlab

查看 gitlab-ce,发现一切岁月静好。

helm 轻松完爆 gitlab

七、访问 gitlab-ce

安装 gitlab-ce 时,我们指定 service 类型是 ClusterIP。

helm 轻松完爆 gitlab

查看 ingress 信息:

helm 轻松完爆 gitlab

八、绑定 hosts

打开浏览器,输入 http://gitlab.lvzhenjiang.com/。注意:gitlab.lvzhenjiang.com 需要在当前浏览器所在主机的 hosts 文件中指定,其 ip 必须是 nginx-ingress-controller pod 所在主机。

helm 轻松完爆 gitlab

九、访问 gitlab-ce

helm 轻松完爆 gitlab

上一篇:在Kubernetes上部署和管理PostgreSQL


下一篇:Kubernetes 1.20.5 helm 安装jenkins