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が提供するスクリプトを使用してクラスタの作成を自動化することができます。
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にサインインできるようになりました。このパスワードはログイン後にユーザー設定から変更することができます。私たちはあなたの代わりに最初のログインをセキュリティで保護するためにこのパスワードを生成しているだけです。
トラブルシューティング
このガイド中にイシューが発生した場合、動作していることを確認する必要があります:
-
gitlab.my.domain.tld
は、取得したIngressのIPアドレスに解決します。 - 証明書に関する警告が表示された場合は、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リソースの作成に必要な権限がないことを意味します。