必要工具
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以上が必要)も完全にサポートされます。
[Helm3]
をキーワードとしてイシュー・タイトルを付けてください。helm
(クライアント)と、Kubernetes内部にインストールされたtiller
(サーバー)の2つの部分で構成されています。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
に置き換えることができます。