KubernetesクラスタをGitLabに接続する手順
このページでは、単一プロジェクトで基本的なKubernetesインテグレーションをセットアップする方法を説明します。Kubernetes向けGitLabエージェントプルベースのデプロイ、またはFluxを初めて使用する場合は、ここから開始してください。
完了すると、次のことができるようになります:
- リアルタイムのKubernetesダッシュボードでKubernetesクラスタのステータスを表示します。
- Fluxを使用して、クラスタにアップデートをデプロイします。
- GitLab CI/CDを使用して、クラスタにアップデートをデプロイします。
はじめる前
このチュートリアルを完了する前に、以下があることを確認してください:
kubectlでローカルにアクセスできるKubernetesクラスタ。KubernetesのどのバージョンをGitLabがサポートしているかについては、GitLab機能でサポートされているKubernetesのバージョンを参照してください。すべてが正しく設定されていることを確認するには、次を実行します:
kubectl cluster-info
Fluxをインストールして設定します
Fluxは、GitOpsデプロイ(プルベースのデプロイとも呼ばれます)に推奨されるツールです。Fluxは成熟したCNCFプロジェクトです。
Fluxをインストールするには:
- FluxドキュメントのFlux CLIをインストールの手順を完了します。
Flux CLIが正しくインストールされていることを確認するには、次を実行します:
flux -vパーソナルアクセストークンを作成する
Flux CLIで認証するには、apiスコープを持つパーソナルアクセストークンを作成します:
- 左側のサイドバーで、自分のアバターを選択します。
- プロファイルの編集を選択します。
- パーソナルアクセストークンを選択します。
- トークンの名前とオプションの有効期限を入力します。
apiスコープを選択します。- Create personal access token(パーソナルアクセストークンを作成)を選択します。
apiスコープとmaintainerロールを持つプロジェクトまたはグループアクセストークンを使用することもできます。
Fluxをブートストラップ
このセクションでは、flux bootstrapコマンドを使用して、空のGitLabリポジトリにFluxをブートストラップします。
Fluxインストールをブートストラップするには:
flux bootstrap gitlabコマンドを実行します。例:flux bootstrap gitlab \ --hostname=gitlab.example.org \ --owner=my-group/optional-subgroup \ --repository=my-repository \ --branch=main \ --path=clusters/testing \ --deploy-token-auth
bootstrapの引数は次のとおりです:
| 引数 | 説明 |
|---|---|
hostname | GitLabインスタンスのホスト名。 |
owner | Fluxリポジトリを含むGitLabグループ。 |
repository | Fluxリポジトリを含むGitLabプロジェクト。 |
branch | 変更をコミットするブランチ。 |
path | Fluxの設定が保存されているフォルダーへのパス。 |
ブートストラップスクリプトは、次のことを行います:
- デプロイトークンを作成し、Kubernetes
secretとして保存します。 --repository引数で指定されたプロジェクトが存在しない場合は、空のGitLabプロジェクトを作成します。--path引数で指定されたフォルダーに、プロジェクトのFlux定義ファイルを生成します。--branch引数で指定されたブランチに定義ファイルをコミットします。- 定義ファイルをクラスタに適用します。
スクリプトを実行すると、FluxはGitLabプロジェクトとパスに追加した他のリソースを自身で管理できるようになります。
このチュートリアルの残りの部分では、パスがclusters/testing、プロジェクトがmy-group/optional-subgroup/my-repositoryの下にあることを前提としています。
エージェント接続をセットアップ
クラスタを接続するには、Kubernetes向けGitLabエージェントをインストールする必要があります。これは、GitLab CLI(glab)でエージェントをブートストラップすることで実行できます。
GitLab CLIが利用可能であることを確認するには、以下を実行します。
glab versionGitLabインスタンスに対して認証
glabします。Fluxをブートストラップしたリポジトリで、
glab cluster agent bootstrapコマンドを実行します:glab cluster agent bootstrap --manifest-path clusters/testing testing
デフォルトでは、コマンドは以下の動作を行います:
testingを名前としてエージェントを登録します。- エージェントを設定します。
testingという名前のエージェントのダッシュボードで環境を設定します。- エージェントトークンを作成します。
- クラスター内に、エージェントトークンでKubernetesシークレットを作成します。
- Flux HelmリソースをGitリポジトリにコミットします。
- Fluxの調整をトリガーします。
エージェントの設定の詳細については、Kubernetes用エージェントのインストールを参照してください。
Kubernetesのダッシュボードをチェックアウト
glab cluster agent bootstrapは、GitLab内に環境を作成し、設定されたダッシュボードを作成しました。
ダッシュボードを表示するには:
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 操作 > 環境を選択します。
- 環境を選択します。たとえば
flux-system/gitlab-agentなどです。 - Kubernetesの概要タブを選択します。
デプロイを保護する
- プラン: Premium、Ultimate
これまでのところ、.gitlab/agents/testing/config.yamlファイルを使用してエージェントをデプロイしました。この設定により、エージェントのデプロイ用に設定されたサービスアカウントを使用して、ユーザーがアクセスできるようになります。ユーザーアクセスは、Kubernetesのダッシュボード、およびローカルアクセスで使用されます。
デプロイメントのセキュリティを維持するために、GitLabユーザーを代理するようにこの設定を変更する必要があります。この場合、通常のKubernetesのロールベースのアクセス制御(RBAC)を使用して、クラスターリソースへのアクセスを管理できます。
ユーザーの代理を有効にするには、次のようにします:
.gitlab/agents/testing/config.yamlファイルで、user_access.access_as.agent: {}をuser_access.access_as.user: {}に置き換えます。Kubernetes用に設定されたダッシュボードに移動します。アクセスが制限されている場合、ダッシュボードにエラーメッセージが表示されます。
次のコードを
clusters/testing/gitlab-user-read.yamlに追加します:apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: gitlab-user-view roleRef: name: view kind: ClusterRole apiGroup: rbac.authorization.k8s.io subjects: - name: gitlab:user kind: GroupFluxが追加されたマニフェストを適用できるように数秒待ってから、Kubernetesのダッシュボードをもう一度確認します。ダッシュボードは、GitLabのすべてのユーザーに読み取りアクセス権を付与するデプロイされたクラスターロールバインディングのおかげで、正常に戻るはずです。
ユーザーアクセスの詳細については、Kubernetesへのユーザーアクセス権の付与を参照してください。
すべてを最新の状態に保つ
インストール後、Fluxとagentkをアップグレードする必要があるかもしれません。
これを行うには、次の手順を実行します:
flux bootstrap gitlabコマンドとglab cluster agent bootstrapコマンドを再実行します。
次の手順
エージェントを登録し、Fluxのマニフェストを保存したプロジェクトから、クラスターに直接デプロイできます。エージェントはマルチテナントをサポートするように設計されており、設定されたエージェントとFluxのインストールにより、他のプロジェクトやグループにスケールできます。
フォローアップチュートリアルであるKubernetesへのデプロイを開始するを行うことを検討してください。GitLabでKubernetesを使用する方法の詳細については、以下を参照してください:
- KubernetesでのGitLabインテグレーション使用に関するベストプラクティス
- 運用コンテナスキャンにエージェントを使用する
- エンジニアにリモートワークスペースを提供する