在IBM云上部署Red Hat OpenShift内部Pod的GitLab

所追求的目标

因为一些特殊情况,我想使用GitLab,但是IBM Cloud的GitLab版本有点旧,或者一些设置无法自由更改,因此我选择将其部署到Red Hat OpenShift on IBM Cloud(ROKS)。GitLab原本就支持Kubernetes,但是OpenShift和ROKS有其特定的操作步骤,我想在这里说明一下。

另外,GitLab的分发版本可以在Pod中运行内部使用的PostgreSQL和Redis等,也可以使用外部服务。这次我们尝试了在Pod中运行。

操作步骤

这是我们的指南。

 

这次将通过Helm安装进行操作。

创建公共域名和TLS证书。

当运行Helm时,会自动部署Nginx Ingress,并且会为IBM Cloud VPC配置负载均衡器。然而,由于负载均衡器没有TLS证书,所以无法直接通过HTTPS进行通信。虽然可以自行订购和获取TLS证书,但本次我们将使用IBM Cloud提供的标准证书。

如果使用OpenShift,可能会考虑使用Router,但GitLab在git通信中使用SSH,因此我们使用了与HTTP无关的Router,并使用了GitLab附带的Nginx Ingress。

ROKS的默认设置包括注册面向公众的FQDN和负载均衡器。

$ ibmcloud oc nlb-dns ls -c ${クラスター名}
OK
サブドメイン                                                                        ターゲット                            SSL 証明書の状況   SSL 証明書の秘密名                                秘密の名前 空間
********-********d72d9643e3d07091333056f5-0000.jp-tok.containers.appdomain.cloud   ********-jp-tok.lb.appdomain.cloud   created           ********-********d72d9643e3d07091333056f5-0000   openshift-ingress

在这种情况下,我们会记住负载均衡器的名称。虽然不会直接使用,但我们会暂时借用它的名字。

如果还没有为安装GitLab创建命名空间,则需要事先创建它。

$ oc create ns ${ネームスペース名}

执行下面的命令,添加一个面向公众的域名。

    • ネームスペース名: GitLabをインストールするネームスペース名

 

    ロードバランサー名: 先ほど控えたロードバランサー名
$ ibmcloud oc nlb-dns create vpc-gen2 -c ${クラスター名} --secret-namespace ${ネームスペース名} --type public --lb-host ${ロードバランサー名}
NLB DNS を作成中...
OK
NLB ホスト名が ********-********d72d9643e3d07091333056f5-0001.jp-tok.containers.appdomain.cloud として作成され、public DNS に登録されました

我会确认证书的创建情况。在这种情况下,第二行的”-0001″是刚刚添加的域名。请稍等,只要SSL证书的状态变成了”created”就可以了。

有时候这里可能会处于待处理状态。在这种情况下,您可以使用ibmcloud ks nlb-dns secret regenerate命令来生成。如果仍然无法解决问题,请联系技术支持。

请记录下所显示的子域名(-0001)和SSL证书的密钥名称。

$ ibmcloud oc nlb-dns ls -c ${クラスター名}
OK
サブドメイン                                                                        ターゲット                            SSL 証明書の状況    SSL 証明書の秘密名                                秘密の名前空間
********-********d72d9643e3d07091333056f5-0000.jp-tok.containers.appdomain.cloud   ********-jp-tok.lb.appdomain.cloud   created            ********-********d72d9643e3d07091333056f5-0000   openshift-ingress
********-********d72d9643e3d07091333056f5-0001.jp-tok.containers.appdomain.cloud   ********-jp-tok.lb.appdomain.cloud   created            ********-********d72d9643e3d07091333056f5-0001   ********

添加GitLab Helm库

添加Helm存储库。

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

添加ServiceAccount

由于OpenShift特定的SCC限制,原本的ServiceAccount在Helm中会自动创建,但不能直接使用。我们需要事先创建它,以便在使用Helm进行安装时能够顺利运行。

创建必要的ServiceAccount。

$ oc create sa gitlab-certmanager-issuer
$ oc create sa gitlab-gitlab-runner
$ oc create sa gitlab-nginx-ingress
$ oc create sa gitlab-nginx-ingress-backend
$ oc create sa gitlab-prometheus-server
$ oc create sa gitlab-shared-secrets

授予必要的权限。

$ oc adm policy add-scc-to-user anyuid -z default
$ oc adm policy add-scc-to-user anyuid -z gitlab-certmanager-issuer
$ oc adm policy add-scc-to-user privileged -z gitlab-gitlab-runner
$ oc adm policy add-scc-to-user privileged -z gitlab-nginx-ingress
$ oc adm policy add-scc-to-user anyuid -z gitlab-nginx-ingress-backend
$ oc adm policy add-scc-to-user anyuid -z gitlab-prometheus-server
$ oc adm policy add-scc-to-user anyuid -z gitlab-shared-secrets

为此必须添加标签,否则在Helm安装时将被视为重复的ServiceAccount,从而导致失败。

$ oc label sa gitlab-certmanager-issuer app.kubernetes.io/managed-by=Helm
$ oc label sa gitlab-gitlab-runner app.kubernetes.io/managed-by=Helm
$ oc label sa gitlab-nginx-ingress app.kubernetes.io/managed-by=Helm
$ oc label sa gitlab-nginx-ingress-backend app.kubernetes.io/managed-by=Helm
$ oc label sa gitlab-prometheus-server app.kubernetes.io/managed-by=Helm
$ oc label sa gitlab-shared-secrets app.kubernetes.io/managed-by=Helm

在相似的用法中,给出注释。

$ oc annotate sa gitlab-certmanager-issuer meta.helm.sh/release-name=gitlab meta.helm.sh/release-namespace=${ネームスペース名}
$ oc annotate sa gitlab-gitlab-runner meta.helm.sh/release-name=gitlab meta.helm.sh/release-namespace=${ネームスペース名}
$ oc annotate sa gitlab-nginx-ingress meta.helm.sh/release-name=gitlab meta.helm.sh/release-namespace=${ネームスペース名}
$ oc annotate sa gitlab-nginx-ingress-backend meta.helm.sh/release-name=gitlab meta.helm.sh/release-namespace=${ネームスペース名}
$ oc annotate sa gitlab-prometheus-server meta.helm.sh/release-name=gitlab meta.helm.sh/release-namespace=${ネームスペース名}
$ oc annotate sa gitlab-shared-secrets meta.helm.sh/release-name=gitlab meta.helm.sh/release-namespace=${ネームスペース名}

GitLab的安装

终于要安装GitLab了。

    • インストール名: 任意

 

    • ドメイン名: 先ほど控えたサブドメイン(-0001)

 

    シークレット名: 先ほど控えたSSL証明書の秘密名
$ helm upgrade --install ${インストール名} gitlab/gitlab --timeout 300s \
  --set certmanager-issuer.email=me@example.com \
  --set global.hosts.domain=${ドメイン名} \
  --set global.ingress.tls.secretName=${シークレット名}

如果您想使用GitLab Pages,请添加以下参数。

  --set global.pages.enabled=true \
  --set global.pages.host=${ドメイン名}

如果之前的设置没有问题,Pod应该能够顺利启动,但是只有gitlab-runner预计会启动失败。原因是因为之前设置的域名通信仍然无法进行。

域名目标更改

部署GitLab时,将自动为Nginx Ingress配置一个负载均衡器。请记下它的名称。

$ oc get svc | grep LoadBalancer
gitlab-nginx-ingress-controller           LoadBalancer   172.21.161.208   ********-jp-tok.lb.appdomain.cloud   80:31150/TCP,443:30340/TCP,22:30119/TCP   4m37s

我将把先前注册的域名的目标地址更改为上述名称。

$ ibmcloud oc nlb-dns replace -c ${クラスター名} --lb-host ********-jp-tok.lb.appdomain.cloud --nlb-subdomain ********-********d72d9643e3d07091333056f5-0001.jp-tok.containers.appdomain.cloud
NLB DNS を更新中...
注: 変更が適用されるまで数分かかる場合があります。
OK

稍等一下,gitlab-runner会变为Running状态。

由于DNS记录传播的关系,可能需要几十分钟左右的时间。

确认root密码

您可以使用以下命令确认root管理员用户的初始密码。

$ oc get secret ${インストール名}-gitlab-initial-root-password -o jsonpath='{.data.password}' | base64 -d; echo
********

访问GitLab

请提供以下选项的中文本地化版本:

https://gitlab.********-********d72d9643e3d07091333056f5-0001.jp-tok.containers.appdomain.cloud/ ->

https://gitlab.********-********d72d9643e3d07091333056f5-0001.jp-tok.containers.appdomain.cloud/

请注意

默认情况下,以下存储空间正在使用中。请注意,此为收费服务。

$ oc get pvc
NAME                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                 AGE
data-gitlab-postgresql-0           Bound    pvc-817fe266-d46e-4ce8-aa37-1e48ce42a1e3   10Gi       RWO            ibmc-vpc-block-10iops-tier   44h
gitlab-minio                       Bound    pvc-fa24be28-5c07-4111-8e3b-1d8134fe081e   10Gi       RWO            ibmc-vpc-block-10iops-tier   44h
gitlab-prometheus-server           Bound    pvc-2ade9e01-a65f-43b9-ac0c-178377e819dd   10Gi       RWO            ibmc-vpc-block-10iops-tier   44h
redis-data-gitlab-redis-master-0   Bound    pvc-93ea63c4-9e4c-41ad-81a1-31a6fdee5d88   10Gi       RWO            ibmc-vpc-block-10iops-tier   44h
repo-data-gitlab-gitaly-0          Bound    pvc-8172fd76-5ceb-468d-ab9d-91f43dcfdd63   50Gi       RWO            ibmc-vpc-block-10iops-tier   44h
广告
将在 10 秒后关闭
bannerAds