必要工具

KubernetesクラスターにGitLabをデプロイする前に、ローカルにインストールしておかなければならないツールがいくつかあります。

クベクトル

kubectlはKubernetes APIと対話するツールです。kubectl 1.13以上が必要で、クラスタと互換性がある必要があります(クラスタから±1マイナーリリース)。

> Kubernetesのドキュメントに従って、kubectlをローカルにインストールします。

kubectlのサーバーバージョンはクラスターに接続するまで取得できません。 Helmのセットアップを進めます。

Helm

HelmはKubernetesのパッケージマネージャです。gitlab ChartはHelm v2(2.12以上が必要、2.15を除く)でテストされ、サポートされています。Chartのバージョンv3.0.0 、Helm v3(3.0.2以上が必要)も完全にサポートされます。

:Helm v3 は CI でのテストには使用していません。Helm v3 固有の問題を見つけた場合は、イシュー・トラッカーにイシューを作成し、[Helm3]をキーワードとしてイシュー・タイトルを付けてください。
:Helm v2は、ローカルにインストールされたhelm (クライアント)と、Kubernetes内部にインストールされたtiller(サーバー)の2つの部分で構成されています。
注意: Helm v2を実行する必要があり、OpenShift上などでクラスター内でTillerを実行できない場合、ローカルでTillerを使用し、クラスターへのデプロイを回避することが可能です。 これは、Tillerを正常にデプロイできない場合にのみ使用する必要があります。
:Helmv2.15.xシリーズには、このChartの使用に影響する複数の深刻なバグが含まれています。これらのバージョンを使用しないでください!

Helmの取得

プロジェクトのリリースページからHelmを入手するか、Helmのインストールに関する公式ドキュメントの他のオプションに従ってください。

Tillerはクラスターにデプロイされ、アプリケーションをデプロイするためにKubernetes APIと対話します。 ロールベースのアクセス制御(RBAC) が有効になっている場合、TillerはKubernetes APIと対話するための権限を付与する必要があります。

RBACが有効になっていない場合は、Helmの初期化までスキップします。

クラスターでRBACが有効になっているかどうかわからない場合、または詳細については、RBACのドキュメントをお読みください。

RBACを使用したHelmの準備

:kubectl がインストールされており、それが最新であることを確認してください。古いバージョンでは RBAC がサポートされていないため、エラーが発生します。

Helm v3.0はクラスターにTillerをインストールしないため、ユーザーのRBAC権限を使用してChartのデプロイを実行します。

以前のバージョンのHelmはクラスターにTillerをインストールするため、オペレーションを実行するための権限を付与する必要があります。 これらの説明ではクラスター全体の権限を付与していますが、より高度なデプロイでは権限を単一のネームスペースに制限することができます。

クラスターへのアクセスを許可するために、新しいtiller サービスアカウントを作成し、cluster-admin ロールにバインドします:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

使いやすくするために、このリポジトリにあるサンプルのYAMLファイルを使用します。 設定を適用するには、まずクラスターに接続する必要があります。

GKEクラスターへの接続

クラスターに接続するコマンドは、Google Cloud Platform Consoleのクラスター一覧ページで「Connect」ボタンを探して、個々のクラスターから取得できます。

または、以下のコマンドを使用してクラスターの情報を入力してください:

gcloud container clusters get-credentials <cluster-name> --zone <zone> --project <project-id>

EKSクラスターへの接続

最新の手順については、クラスターへの接続に関するAmazon EKSのドキュメントに従ってください。

ローカルMinikubeクラスターへの接続

ローカルで開発を行う場合は、minikube をローカルクラスタとして使用できます。kubectl cluster-info が現在のクラスタとしてminikube を表示していない場合は、kubectl config set-cluster minikube を使用してアクティブクラスタを設定します。

RBAC設定のアップロード

GKE の RBAC 設定をアップロードします。

GKE では、管理者認証情報を取得する必要があります:

gcloud container clusters describe <cluster-name> --zone <zone> --project <project-id> --format='value(masterAuth.password)'

このコマンドはadminパスワードを出力します。kubectl で認証し、ロールを作成するためにパスワードが必要です。

また、このクラスター用のadminユーザーを作成します。 お好きな名前を使用しますが、この例ではクラスター名を含めることにします:

CLUSTER_NAME=name-of-cluster
kubectl config set-credentials $CLUSTER_NAME-admin-user --username=admin --password=xxxxxxxxxxxxxx
kubectl --user=$CLUSTER_NAME-admin-user create -f https://gitlab.com/gitlab-org/charts/gitlab/raw/master/doc/installation/examples/rbac-config.yaml

非GKEクラスタでのRBAC設定のアップロード

Amazon EKSのような他のクラスターでは、RBAC設定を直接アップロードできます:

kubectl create -f https://gitlab.com/gitlab-org/charts/gitlab/raw/master/doc/installation/examples/rbac-config.yaml

Helm の初期化

Helm v3を使用している場合、init サブコマンドはなくなり、インストールすればすぐに使えるようになります。 Helm v2を使用している場合、HelmはサービスアカウントでTillerをデプロイする必要があります:

helm init --service-account tiller

クラスターに以前Helm/Tillerがインストールされていた場合は、以下のコマンドを実行して、デプロイされたTillerのバージョンがローカルのHelmのバージョンと一致していることを確認します:

helm init --upgrade --service-account tiller

次のステップ

kubectlとHelmの設定が完了したら、Kubernetesクラスタの設定を続行します。

追加情報

ディストリビューション・チームはHelm Chartのトレーニング・プレゼンテーションを行っています。

テンプレート

Helmでのテンプレート作成はgolangのtext/templateとsprigで行います。

すべての内部構造がどのように動作するかについてのいくつかの情報:

ヒントとコツ

Helm リポジトリのtips and tricks セクションに、Helm を使った開発者向けの追加情報があります。

地元の耕運機

推奨しない:この方法はあまりサポートされていませんが、動作するはずです。

Helm v2を使用していてクラスターでTillerを実行できない場合、クラスターでTillerを実行しながらHelmを使用できるようにするスクリプトが含まれています。 スクリプトは、個人のKubernetes認証情報と設定を使用してチャートを適用します。

スクリプトを使用するには、Helmの初期化に関するこのセクション全体をスキップしてください。 代わりに、ローカルにDockerがインストールされていることを確認して実行してください:

bin/localtiller-helm --client-only

その後、helmを実行するように指示されている場所であれば、bin/localtiller-helm に置き換えることができます。