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スコープを選択します。- パーソナルアクセストークンを作成を選択します。
apiスコープとmaintainerロールを持つプロジェクトまたはグループアクセストークンも使用できます。
Fluxのブートストラップ
このセクションでは、flux bootstrapコマンドを使用して、空のGitリポジトリに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 | 変更がコミットされるGitブランチ。 |
path | Flux設定が保存されるフォルダーへのファイルパス。 |
ブートストラップスクリプトは以下を実行します:
- デプロイトークンを作成し、Kubernetes
secretとして保存します。 --repository引数で指定されたGitLabプロジェクトが存在しない場合、空のGitLabプロジェクトを作成します。--path引数で指定されたフォルダーに、プロジェクト用のFlux定義ファイルを生成します。--branch引数で指定されたブランチに定義ファイルをコミットします。- 定義ファイルをクラスターに適用します。
スクリプトを実行すると、Fluxは自身と、GitLabプロジェクトおよびパスに追加するその他のリソースを管理できるようになります。
このチュートリアルの残りの部分では、パスがclusters/testingで、プロジェクトがmy-group/optional-subgroup/my-repositoryの下にあることを前提としています。
エージェント接続を設定する
クラスターを接続するには、Kubernetes向けGitLabエージェントをインストールする必要があります。これは、GitLab CLI (glab) を使用してエージェントをブートストラップすることで実行できます。
GitLab CLIをインストールします。
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: Group数秒間待ってFluxが追加されたマニフェストを適用できるようにしてから、もう一度Kubernetesのダッシュボードをチェックアウトします。すべてのGitLabユーザーに読み取りアクセスを付与するデプロイ済みクラスターロールバインディングのおかげで、ダッシュボードは通常の状態に戻るはずです。
ユーザーアクセスに関する詳細については、ユーザーにKubernetesアクセスを付与を参照してください。
すべてを最新の状態に保つ
インストール後、Fluxおよびagentkをアップグレードする必要がある場合があります。
これを行うには、次の手順を実行します:
flux bootstrap gitlabおよびglab cluster agent bootstrapコマンドを再実行します。
次の手順
エージェントを登録し、Fluxマニフェストを保存したプロジェクトからクラスターに直接デプロイできます。このエージェントはマルチテナンシーをサポートするように設計されており、設定済みのエージェントとFluxインストールで、設定を他のプロジェクトやグループにスケールすることができます。
以下のチュートリアル、Kubernetesへのデプロイを開始するを検討してください。GitLabでKubernetesを使用する方法の詳細については、以下を参照してください:
- GitLabインテグレーションをKubernetesで使用するためのベストプラクティス
- 運用コンテナスキャンのためのエージェントの使用
- エンジニア向けのリモートワークスペースの提供