チュートリアル: GitOps を使用して Azure Arc 対応 Kubernetes クラスターに構成をデプロイする
重要
このチュートリアルは、Flux v1 を使用した GitOps 向けです。 Azure Arc 対応 Kubernetes と Azure Kubernetes Service (AKS) クラスターに対して、Flux v2 による GitOps を使用できるようになりました。Flux v2 による GitOps のチュートリアルに進んでください。 できるだけ早く Flux v2 に移行 することをお勧めします。
2024 年 1 月 1 日より前に作成された Flux v1 ベースのクラスター構成リソースのサポートは、2025 年 5 月 24 日に終了します。 2024 年 1 月 1 日から、新しい Flux v1 ベースのクラスター構成リソースを作成することはできません。
このチュートリアルでは、GitOps を使用して Azure Arc 対応 Kubernetes クラスターに Flux v1 構成を適用します。 学習内容は次のとおりです。
- サンプルの Git リポジトリを使用して、Azure Arc 対応 Kubernetes クラスターの構成を作成する。
- 構成が正常に作成されたことを確認する。
- プライベート Git リポジトリから構成を適用する。
- Kubernetes の構成を確認する。
前提条件
アクティブなサブスクリプションが含まれる Azure アカウント。 無料でアカウントを作成できます。
Azure Arc 対応 Kubernetes に接続された既存のクラスター。
- まだクラスターを接続していない場合は、Azure Arc 対応 Kubernetes クラスターの接続に関するクイックスタートをご覧ください。
この機能の利点とアーキテクチャについて理解していること。 詳細については、Azure Arc 対応 Kubernetes での構成と GitOps に関する記事をご覧ください。
k8s-configuration
Azure CLI 拡張機能バージョン 1.0.0 以降をインストールします。az extension add --name k8s-configuration
ヒント
k8s-configuration
拡張機能が既にインストールされている場合は、次のコマンドを使用して最新バージョンに更新できます -az extension update --name k8s-configuration
構成を作成する
この記事で使用されるリポジトリの例は、クラスター オペレーターのペルソナに基づいて構成されています。 このリポジトリのマニフェストでは、いくつかの名前空間をプロビジョニングし、ワークロードをデプロイして、チーム固有の構成を指定します。 このリポジトリを GitOps と共に使用すると、クラスターに次のリソースが作成されます。
- 名前空間:
cluster-config
、team-a
、team-b
- デプロイ:
arc-k8s-demo
- ConfigMap:
team-a/endpoints
config-agent
を使用すると、新規または更新された構成について、Azure に対してポーリングが行われます。 このタスクには最大 5 分かかります。
プライベート リポジトリを構成と関連付ける場合は、後の「プライベート Git リポジトリから構成を適用する」に示されている手順を実行してください。
重要
このチュートリアルは、Flux v1 を使用した GitOps 向けです。 Azure Arc 対応 Kubernetes と Azure Kubernetes Service (AKS) クラスターに対して、Flux v2 による GitOps を使用できるようになりました。Flux v2 による GitOps のチュートリアルに進んでください。 できるだけ早く Flux v2 に移行 することをお勧めします。
2024 年 1 月 1 日より前に作成された Flux v1 ベースのクラスター構成リソースのサポートは、2025 年 5 月 24 日に終了します。 2024 年 1 月 1 日から、新しい Flux v1 ベースのクラスター構成リソースを作成することはできません。
Azure CLI の使用
k8s-configuration
の Azure CLI 拡張機能を使用して、接続されたクラスターを Git リポジトリの例にリンクしてください。
この構成に
cluster-config
と名前を付けます。cluster-config
名前空間にオペレーターを配置するようにエージェントに指示します。オペレーターに
cluster-admin
アクセス許可を付与します。az k8s-configuration flux create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
{ "complianceStatus": { "complianceState": "Pending", "lastConfigApplied": "0001-01-01T00:00:00", "message": "{\"OperatorMessage\":null,\"ClusterState\":null}", "messageLevel": "3" }, "configurationProtectedSettings": {}, "enableHelmOperator": false, "helmOperatorProperties": null, "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config", "name": "cluster-config", "operatorInstanceName": "cluster-config", "operatorNamespace": "cluster-config", "operatorParams": "--git-readonly", "operatorScope": "cluster", "operatorType": "Flux", "provisioningState": "Succeeded", "repositoryPublicKey": "", "repositoryUrl": "https://github.com/Azure/arc-k8s-demo", "resourceGroup": "MyRG", "sshKnownHostsContents": "", "systemData": { "createdAt": "2020-11-24T21:22:01.542801+00:00", "createdBy": null, "createdByType": null, "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00", "lastModifiedBy": null, "lastModifiedByType": null }, "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations" }
パブリック Git リポジトリを使用する
パラメーター | Format |
---|---|
--repository-url |
http[s]://server/repo[.git] |
SSH および Flux で作成されたキーを使用してプライベート Git リポジトリを使用する
Flux によって生成された公開キーを、利用している Git サービス プロバイダーのユーザー アカウントに追加します。 キーをユーザー アカウントではなくリポジトリに追加する場合は、URL で user@
の代わりに git@
を使用します。
詳細については、「プライベート Git リポジトリから構成を適用する」セクションを参照してください。
パラメーター | Format | Notes |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] or user@server:repo[.git] | git@ は user@ に置き換え可能 |
SSH およびユーザー指定のキーを使用してプライベート Git リポジトリを使用する
独自の秘密キーを直接またはファイルに指定します。 キーは PEM 形式 で、末尾に改行文字 (\n) を使用する必要があります。
関連付けられている公開キーを、利用している Git サービス プロバイダーのユーザー アカウントに追加します。 キーをユーザー アカウントではなくリポジトリに追加する場合は、user@
の代わりに git@
を使用します。
詳細については、「プライベート Git リポジトリから構成を適用する」セクションを参照してください。
パラメーター | Format | Notes |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] or user@server:repo[.git] | git@ は user@ に置き換え可能 |
--ssh-private-key |
base64-encoded キー (PEM 形式) | キーを直接指定 |
--ssh-private-key-file |
ローカル ファイルへの完全なパス | PEM 形式のキーを含むローカル ファイルへの完全なパスを指定 |
SSH および ユーザー指定の既知のホストを使用してプライベート Git ホストを使用する
Flux オペレーターは、SSH 接続を確立する前に Git リポジトリを認証できるように、既知のホスト ファイルに一般的な Git ホストの一覧を保持します。 "一般的ではない" Git リポジトリまたは独自の Git ホストを使用している場合は、ホスト キーを指定して、Flux がリポジトリを識別できるようにする必要があります。
秘密キーの場合と同様に、known_host の内容は、直接指定することも、ファイルで指定することもできます。 独自の内容を指定する場合は、known_hosts の内容の形式の仕様を、前述の SSH キーのシナリオのいずれかと共に使用します。
パラメーター | Format | Notes |
---|---|---|
--repository-url |
ssh://user@server/repo[.git] or user@server:repo[.git] | git@ は user@ に置き換え可能 |
--ssh-known-hosts |
base64-encoded | 既知のホストのコンテンツを直接指定 |
--ssh-known-hosts-file |
ローカル ファイルへの完全なパス | 既知のホストのコンテンツをローカル ファイルに指定 |
HTTPS を使用してプライベート Git リポジトリを使用する
パラメーター | Format | Notes |
---|---|---|
--repository-url |
https://server/repo [.git] | 基本認証を使用した HTTPS |
--https-user |
raw または base64-encoded | HTTPS のユーザー名 |
--https-key |
raw または base64-encoded | HTTPS の個人用アクセス トークンまたはパスワード |
Note
- Helm オペレーター チャートのバージョン 1.2.0 以上では、HTTPS Helm リリースのプライベート認証をサポートしています。
- HTTPS Helm リリースは、AKS マネージド クラスターではサポートされていません。
- Flux でプロキシを介して Git リポジトリにアクセスする必要がある場合は、Azure Arc エージェントのプロキシ設定を更新する必要があります。 詳細については、「送信プロキシ サーバーを使用して接続する」を参照してください。
追加のパラメーター
次の省略可能なパラメーターを使用して構成をカスタマイズします。
パラメーター | [説明] |
---|---|
--enable-helm-operator |
Helm グラフの配置のサポートを有効にするように切り替えます。 |
--helm-operator-params |
Helm 演算子 (有効な場合) のグラフの値。 たとえば、「 --set helm.versions=v3 」のように入力します。 |
--helm-operator-chart-version |
Helm 演算子 (有効な場合) のグラフのバージョン。 バージョン 1.2.0 以降を使用します。 既定値は1.2.0 です。 |
--operator-namespace |
演算子の名前空間の名前。 既定値は 'default' です。 最大:23 文字。 |
--operator-params |
演算子のパラメーター。 単一引用符で囲む必要があります。 たとえば、--operator-params='--git-readonly --sync-garbage-collection --git-branch=main' のように指定します。 |
--operator-params
でサポートされているオプション:
オプション | 説明 |
---|---|
--git-branch |
Kubernetes マニフェストに使用する Git リポジトリのブランチ。 既定値は 'master' です。 新しいリポジトリではルート ブランチの名前が main になっていますが、その場合は --git-branch=main を設定する必要があります。 |
--git-path |
Flux から Kubernetes マニフェストを特定するための Git リポジトリ内の相対パス。 |
--git-readonly |
Git リポジトリは読み取り専用と見なされます。 Flux はそこに書き込みは行いません。 |
--manifest-generation |
有効にすると、Flux によって .flux.yaml が検索され、Kustomize または他のマニフェスト ジェネレーターが実行されます。 |
--git-poll-interval |
新しいコミットについて Git リポジトリに対してポーリングを行う周期。 既定値は 5m (5 分間) です。 |
--sync-garbage-collection |
有効にすると、Flux によって作成されたリソースは削除されますが、Git には存在しなくなります。 |
--git-label |
同期の進行状況を追跡するためのラベル。 Git ブランチのタグ付けに使用されます。 既定値は flux-sync です。 |
--git-user |
Git コミットのユーザー名。 |
--git-email |
Git コミットに使用するメール アドレス。 |
Flux でリポジトリに書き込む必要がなく、--git-user
または --git-email
が設定されていない場合は、--git-readonly
が自動的に設定されます。
詳細については、Flux のドキュメントを参照してください。
Note
Flux の既定では、git リポジトリの master
ブランチから同期されます。 ただし、新しい git リポジトリには main
という名前のルート ブランチがあり、その場合は --git-branch=main
を --operator-params で設定する必要があります。
ヒント
構成は、Azure portal の Azure Arc 対応 Kubernetes リソースの [GitOps] タブで作成できます。
構成の検証
Azure CLI を使用して、構成の作成が成功したことを確認します。
az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
構成リソースで、コンプライアンスの状態、メッセージ、およびデバッグの情報が更新されます。
{
"complianceStatus": {
"complianceState": "Installed",
"lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
"message": "...",
"messageLevel": "Information"
},
"configurationProtectedSettings": {},
"enableHelmOperator": false,
"helmOperatorProperties": {
"chartValues": "",
"chartVersion": ""
},
"id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
"name": "cluster-config",
"operatorInstanceName": "cluster-config",
"operatorNamespace": "cluster-config",
"operatorParams": "--git-readonly",
"operatorScope": "cluster",
"operatorType": "Flux",
"provisioningState": "Succeeded",
"repositoryPublicKey": "...",
"repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
"resourceGroup": "AzureArcTest",
"sshKnownHostsContents": null,
"systemData": {
"createdAt": "2020-12-01T03:58:56.175674+00:00",
"createdBy": null,
"createdByType": null,
"lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
"lastModifiedBy": null,
"lastModifiedByType": null
},
"type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}
構成が作成または更新されると、いくつかの処理が行われます。
- Azure Arc
config-agent
によって新規または更新された構成 (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) の Azure Resource Manager が監視され、新しいPending
構成が認識されます。 config-agent
によって構成プロパティが読み取られ、ターゲットの名前空間が作成されます。- Azure Arc
controller-manager
によって Kubernetes サービス アカウントが作成され、ClusterRoleBinding または RoleBinding にマップされます。適切なアクセス許可 (cluster
またはnamespace
スコープ) が得られるようにするためです。 次に、flux
のインスタンスがデプロイされます。 - Flux が生成したキーで SSH のオプションを使用している場合、
flux
を使用すると、SSH キーが生成され、公開キーがログに記録されます。 config-agent
により、Azure の構成リソースに状態がレポートされます。
プロビジョニング プロセスが実行されている間、構成リソースはいくつかの状態に遷移します。 上記の az k8s-configuration show ...
のコマンドを使用して進行状況を監視します。
変更のステージング | [説明] |
---|---|
complianceStatus ->Pending |
初期状態と進行中の状態を表します。 |
complianceStatus ->Installed |
config-agent によってクラスターが正常に構成され、エラーなしで flux がデプロイされました。 |
complianceStatus ->Failed |
flux のデプロイ中に config-agent でエラーが発生しました。 詳細は complianceStatus.message 応答本文で確認できます。 |
プライベート Git リポジトリから構成を適用する
プライベート Git リポジトリを使用している場合は、リポジトリで SSH 公開キーを構成する必要があります。 SSH 公開キーは自分で指定するか、Flux で生成します。 公開キーは、特定の Git リポジトリに対して構成することも、リポジトリにアクセスできる Git ユーザーに対して構成することもできます。
独自の公開キーを取得する
独自の SSH キーを生成した場合は、既に秘密キーと公開キーを持っています。
Azure CLI を使用して公開キーを取得する
Flux でキーを生成している場合は、Azure CLI で次を使用します。
az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey'
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"
Azure portal から公開キーを取得する
Flux でキーを生成している場合は、Azure portal で次の手順を実行します。
- Azure portal で、接続されているクラスター リソースに移動します。
- [リソース] ページで GitOps を選択し、このクラスターの構成の一覧を表示します。
- プライベート Git リポジトリを使用する構成を選択します。
- 開いたコンテキスト ウィンドウで、ウィンドウの下部にある [リポジトリの公開キー] をコピーします。
GitHub を使用して公開キーを追加する
次のいずれかのオプションを使用します。
オプション 1: 自分のユーザー アカウントに公開キーを追加します (自分のアカウントの全リポジトリに適用)。
- GitHub を開き、ページの右上隅にあるプロファイル アイコンをクリックします。
- [設定] をクリックします。
- [SSH および GPG キー] をクリックします。
- [新しい SSH キー] をクリックします。
- [タイトル] を入力します。
- 囲んでいる引用符を含めずに公開キーを貼り付けます。
- [SSH キーの追加] をクリックします。
オプション 2: 公開キーをデプロイ キーとして Git リポジトリに追加します (このリポジトリにのみ適用)。
- GitHub を開き、リポジトリに移動します。
- [設定] をクリックします。
- [デプロイ キー] をクリックします。
- [デプロイ キーの追加] をクリックします。
- [タイトル] を入力します。
- [書き込みアクセスを許可する] をオンにします。
- 囲んでいる引用符を含めずに公開キーを貼り付けます。
- [キーの追加] をクリックします。
Azure DevOps リポジトリを使用して公開キーを追加する
キーを SSH キーに追加するには、次の手順に従います。
- 右上の (プロファイル画像の横にある) [ユーザー設定] で、 [SSH 公開キー] をクリックします。
- [+ 新しいキー] を選択します。
- 名前を入力します。
- 囲んでいる引用符を含めずに公開キーを貼り付けます。
- [追加] をクリックします。
Kubernetes の構成を確認する
config-agent
で flux
インスタンスがインストールされた後、Git リポジトリに保持されているリソースがクラスターにフローし始めます。 次のコマンドを使用して、名前空間、デプロイ、およびリソースが作成されていることを確認します。
kubectl get ns --show-labels
NAME STATUS AGE LABELS
azure-arc Active 24h <none>
cluster-config Active 177m <none>
default Active 29h <none>
itops Active 177m fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease Active 29h <none>
kube-public Active 29h <none>
kube-system Active 29h <none>
team-a Active 177m fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b Active 177m fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b
team-a
、team-b
、itops
、およびcluster-config
の名前空間が作成されていることがわかります。
構成リソースの指示に従って、flux
オペレーターが cluster-config
名前空間にデプロイされています。
kubectl -n cluster-config get deploy -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
cluster-config 1/1 1 1 3h flux docker.io/fluxcd/flux:1.16.0 instanceName=cluster-config,name=flux
memcached 1/1 1 1 3h memcached memcached:1.5.15 name=memcached
さらに探索する
次を使用して、構成リポジトリの一部としてデプロイされた他のリソースを探索することができます。
kubectl -n team-a get cm -o yaml
kubectl -n itops get all
リソースをクリーンアップする
Azure CLI または Azure portal を使用して、構成を削除します。 delete コマンドを実行すると、構成リソースは Azure からすぐに削除されます。 10 分以内に関連オブジェクトがクラスターから完全に削除されます。 削除時に構成でエラーが発生している場合、関連オブジェクトが完全に削除されるまでに最大 1 時間かかることがあります。
namespace
スコープが適用された構成を削除しても、Azure Arc によって名前空間が削除されることはありません。既存のワークロードが中断されないようにするためです。 必要に応じて、kubectl
を使用してこの名前空間を手動で削除できます。
az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters
Note
構成を削除しても、追跡対象の Git リポジトリからのデプロイの結果としてクラスターに加えられた変更が削除されることはありません。
重要
このチュートリアルは、Flux v1 を使用した GitOps 向けです。 Azure Arc 対応 Kubernetes と Azure Kubernetes Service (AKS) クラスターに対して、Flux v2 による GitOps を使用できるようになりました。Flux v2 による GitOps のチュートリアルに進んでください。 できるだけ早く Flux v2 に移行 することをお勧めします。
2024 年 1 月 1 日より前に作成された Flux v1 ベースのクラスター構成リソースのサポートは、2025 年 5 月 24 日に終了します。 2024 年 1 月 1 日から、新しい Flux v1 ベースのクラスター構成リソースを作成することはできません。
次のステップ
次のチュートリアルに進み、GitOps を使用した CI/CD の実装方法を学習してください。