正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

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と30 GBのRAMの合計を持つクラスタをお勧めします。

クラウドプロバイダーのKubernetesクラスタを作成する方法に関する指示を参照するか、GitLab提供のスクリプトを使用してクラスタ作成を自動化できます。

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

kubectlのインストール

kubectlをインストールするには、Kubernetesインストールに関するドキュメントを参照してください。このドキュメントでは、ほとんどのオペレーティングシステムとGoogle Cloud SDKについて説明しています。これらは、前の手順でインストールした可能性があります。

クラスタリングを作成したら、コマンドラインからクラスタリングとやり取りする前に、kubectlを構成する必要があります。

Helmのインストール

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

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

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

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

GitLabをインストールする

このチャートが何ができるかの素晴らしさをご紹介します。コマンド1つ。はい、完了!GitLabがすべてインストールされ、SSLで構成されています。

チャートを構成するには、以下が必要です:

  • GitLabが動作するドメインまたはサブドメイン。
  • Let’s Encryptが証明書を発行できるように、メールアドレス。

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

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

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

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

IPアドレスの取得

kubectlを使用して、GKEによって動的に割り当てられたアドレスをフェッチできます。これは、GitLabチャートの一部としてインストールおよび構成したばかりのNGINXイングレスに対するものです:

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

3つのエントリがあり、すべて同じIPアドレスになっていることに気付くでしょう。このIPアドレスを取得し、使用するように選択したドメインのDNSに追加します。タイプAの複数のレコードを追加できますが、簡単にするために、単一の「ワイルドカード」レコードをお勧めします:

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

GitLabにサインインします。

gitlab.domain.tldでGitLabにアクセスできます。たとえば、global.hosts.domain=my.domain.tldを設定すると、gitlab.my.domain.tldにアクセスします。

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

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

これで、ユーザー名rootと取得したパスワードでGitLabにサインインできます。ログイン後、ユーザー名の設定でこのパスワードを変更できます。これは、お客様に代わって最初のログインを保護できるようにするためにのみ生成されます。

トラブルシューティング

このガイドで問題が発生した場合は、以下が正常に動作していることを確認してください:

  1. gitlab.my.domain.tldが、取得したイングレスのIPアドレスに解決されます。
  2. 証明書の警告が表示された場合は、Let’s Encryptに問題が発生しています。通常はDNS、または再試行の要件に関連しています。

詳細なトラブルシューティングのヒントについては、トラブルシューティングガイドを参照してください。

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リソースの作成に必要な権限がないことを意味します。