GKEまたはEKSでGitLabチャートをテストします。

このガイドでは、Google Kubernetes Engine(GKE) または Amazon Elastic Kubernetes Service(EKS)に GitLab チャートをデフォルト値でインストールする方法について、簡潔ながら完全なドキュメントとして提供します。

デフォルトでは、GitLabチャートにはクラスタ内のPostgreSQL、Redis、MINIOのデプロイが含まれています。これらは試用目的であり、本番環境での使用は推奨されていません。これらのチャートを持続的な負荷の下で本番環境にデプロイしたい場合は、完全なインストールガイドに従ってください。

前提条件

このガイドを完了するには、次のものが必要です:

  • DNSレコードを追加できるドメイン。
  • Kubernetesクラスター。
  • kubectl のインストール。
  • Helm v3 のインストール。

利用可能なドメイン

DNS レコードを追加できるインターネットにアクセス可能なドメインにアクセスできる必要があります。これはpoc.domain.com のようなサブドメインでもかまいませんが、Let’s Encrypt サーバが証明書を発行するためにアドレスを解決できる必要があります。

Kubernetesクラスターを作成します。

合計8つ以上の仮想CPUと30GBのRAMを搭載したクラスターを推奨します。

Kubernetesクラスタの作成方法については、クラウドプロバイダの説明を参照するか、GitLabが提供するスクリプトを使用してクラスタの作成を自動化することができます。

caution
Kubernetesノードはx86-64アーキテクチャを使用する必要があります。AArch64/ARM64を含む複数のアーキテクチャのサポートは現在アクティブに開発中です。詳細はイシュー2899を参照してください。

kubectlのインストール

kubectlをインストールするには、Kubernetesのインストールドキュメントを参照してください。このドキュメントでは、ほとんどのオペレーションシステムと、前のステップでインストールしたGoogle Cloud SDKをカバーしています。

クラスターを作成したら、コマンドラインからクラスターと対話できるようにする前に、 kubectl を設定する必要があります。

Helmのインストール

このガイドでは、Helm v3の最新リリース(v3.5.2以降)を使用します。Helmをインストールするには、Helmのインストールドキュメントを参照してください。

GitLab Helm リポジトリを追加します。

helm の設定に GitLab Helm リポジトリを追加します:

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

GitLabのインストール

このChartの素晴らしいところはここにあります。コマンドひとつでパッと!GitLabのすべてがインストールされ、SSLが設定されました。

Chartを設定するには、以下のものが必要です:

  • GitLabがオペレーションを行うドメインまたはサブドメイン。
  • Let’s Encryptが証明書をイシューできるように、あなたのメールアドレス。

Chartをインストールするには、2つの引数(--set )を指定してinstallコマンドを実行します:

helm install gitlab gitlab/gitlab \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=me@example.com

すべてのリソースが割り当てられ、サービスが開始され、アクセスが可能になるまでに、このステップには数分かかることがあります。

完了後、インストールされたNGINX Ingressに動的に割り当てられたIPアドレスの収集に進むことができます。

IPアドレスの取得

kubectl を使用すると、GKE によって動的に割り当てられたアドレスを GitLab チャートの一部としてインストール・設定した NGINX Ingress に取得することができます:

kubectl get ingress -lrelease=gitlab

出力は以下のようになります:

NAME               HOSTS                 ADDRESS         PORTS     AGE
gitlab-minio       minio.domain.tld      35.239.27.235   80, 443   118m
gitlab-registry    registry.domain.tld   35.239.27.235   80, 443   118m
gitlab-webservice  gitlab.domain.tld     35.239.27.235   80, 443   118m

同じIPアドレスのエントリーが3つあることがわかります。このIPアドレスを取得し、使用するドメインのDNSに追加します。A というタイプのレコードを複数追加することもできますが、簡単のために「ワイルドカード」レコードを1つ追加することをお勧めします:

  • Google Cloud DNSで、* という名前でA レコードを作成します。また、TTLを5 分ではなく、1 分に設定することをお勧めします。
  • AWS EKSでは、アドレスはIPアドレスではなくURLになります。この URL を指すRoute 53 エイリアスレコード *.domain.tld作成します。

GitLabにサインインします。

GitLab にはgitlab.domain.tld からアクセスできます。例えば、global.hosts.domain=my.domain.tld と設定すると、gitlab.my.domain.tld にアクセスすることになります。

サインインするには、root ユーザーのパスワードを収集する必要があります。これはインストール時に自動的に生成され、Kubernetes Secretに保存されます。シークレットからパスワードを取得し、デコードしてみましょう:

kubectl get secret gitlab-gitlab-initial-root-password -ojsonpath='{.data.password}' | base64 --decode ; echo

これで、ユーザー名root 、そして取得したパスワードでGitLabにサインインできるようになりました。このパスワードはログイン後にユーザー設定から変更することができます。私たちはあなたの代わりに最初のログインをセキュリティで保護するためにこのパスワードを生成しているだけです。

トラブルシューティング

このガイド中にイシューが発生した場合、動作していることを確認する必要があります:

  1. gitlab.my.domain.tld は、取得したIngressのIPアドレスに解決します。
  2. 証明書に関する警告が表示された場合は、Let’s Encryptに問題が発生した可能性があります。

トラブルシューティングのヒントについては、トラブルシューティングガイドをご覧ください。

Helmのインストールが戻りました。roles.rbac.authorization.k8s.io "gitlab-shared-secrets" is forbidden

実行後

helm install gitlab gitlab/gitlab  \
  --set global.hosts.domain=DOMAIN \
  --set certmanager-issuer.email=user@example.com

のようなエラーが表示されるかもしれません:

Error: failed pre-install: warning: Hook pre-install templates/shared-secrets-rbac-config.yaml failed: roles.rbac.authorization.k8s.io "gitlab-shared-secrets" is forbidden: user "some-user@some-domain.com" (groups=["system:authenticated"]) is attempting to grant RBAC permissions not currently held:
{APIGroups:[""], Resources:["secrets"], Verbs:["get" "list" "create" "patch"]}

これは、クラスターへの接続に使用しているkubectl コンテキストに、RBACリソースの作成に必要な権限がないことを意味します。