Azure では、Azure Kubernetes Service (AKS) および Azure Arc 対応 Kubernetes クラスターと連携する GitOps を使用した自動アプリケーション デプロイ機能を提供しています。 Flux v2 を使用した GitOps を使用すると、クラスター構成とアプリケーションのデプロイの信頼できるソースとして Git リポジトリを使用できます。 詳細については、「 GitOps を使用したアプリケーションのデプロイ (Flux v2)」 および 「チュートリアル: Flux v2 で GitOps を使用してアプリケーションをデプロイする」を参照してください。
Azure Arc 対応 Kubernetes または Azure Kubernetes Service 上の GitOps では、さまざまなシナリオを可能にするために多くのパラメーターをサポートする一般的なオープンソース ツール セット である Flux を使用します。 Flux がサポートするすべてのパラメーターの説明については、 Flux の公式ドキュメントを参照してください。
Azure の Flux でサポートされているすべてのパラメーターについては、 az k8s-configuration
ドキュメントを参照してください。 この実装では、Flux がサポートするすべてのパラメーターが現在サポートされているわけではありません。 必要なパラメーターが Azure の実装にない場合はお知らせください。
この記事では、 az k8s-configuration flux create
コマンドで使用できるパラメーターと引数の一部について説明します。 Azure CLI の -h
パラメーター (az k8s-configuration flux -h
やaz k8s-configuration flux create -h
など) を使用して、az k8s-configuration flux
のパラメーターの完全な一覧を表示することもできます。
ヒント
サポートされていないパラメーターを使用して Flux リソースをデプロイする回避策は、Git リポジトリ内に必要な Flux カスタム リソース ( GitRepository や Kustomization など) を定義することです。 az k8s-configuration flux create
コマンドを使用して、これらのリソースをデプロイします。 その後も、Azure Arc UI を使用して Flux リソースにアクセスできます。
構成の一般的な引数
パラメーター | フォーマット | 注記 |
---|---|---|
--cluster-name -c |
糸 | Azure のクラスター リソースの名前。 |
--cluster-type -t |
使用できる値: connectedClusters 、 managedClusters |
Azure Arc 対応 Kubernetes クラスターの場合は connectedClusters 、AKS クラスターには managedClusters を使用します。 |
--resource-group -g |
糸 | クラスター リソースを保持する Azure リソース グループの名前。 |
--name -n |
糸 | Azure の Flux 構成の名前。 |
--namespace --ns |
糸 | 構成をデプロイする名前空間の名前。 既定値: default 。 |
--scope -s |
糸 | オペレーターのアクセス許可スコープ。 指定できる値は、 cluster (フル アクセス) または namespace (制限付きアクセス) です。 既定値: cluster 。 |
--suspend |
フラグ | この Flux 構成で定義されているすべてのソース調整と kustomize 調整を中断します。 中断の時点でアクティブな調整は続行されます。 |
ソースの一般的な引数
パラメーター | フォーマット | 注記 |
---|---|---|
--kind |
糸 | 調整するソースの種類。 使用できる値: bucket 、git 、azblob 。 既定値: git 。 |
--timeout |
golang 期間の形式 | タイムアウトするまでのソースの調整を試みる最大時間。既定値: 10m 。 |
--sync-interval --interval |
golang 期間の形式 | クラスター上のソースの調整間の時間。 既定値: 10m 。 |
Git リポジトリのソース参照引数
パラメーター | フォーマット | 注記 |
---|---|---|
--branch |
糸 | クラスターに同期する Git ソース内のブランチ。 既定値: master 。 新しいリポジトリには、 main という名前のルート ブランチがある場合があります。その場合は、 --branch=main を設定する必要があります。 |
--tag |
糸 | クラスターに同期するように Git ソース内でタグを付ける。 例: --tag=3.2.0 。 |
--semver |
糸 | Git タグ semver クラスターに同期する Git ソース内の範囲です。 例: --semver=">=3.1.0-rc.1 <3.2.0" 。 |
--commit |
糸 | Git ソース内で SHA をコミットしてクラスターに同期します。 例: --commit=363a6a8fe6a7f13e05d34c163b0ef02a777da20a 。 |
詳細については、 Git リポジトリのチェックアウト戦略に関する Flux ドキュメントを参照してください。
パブリック Git リポジトリ
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
http[s]://server/repo[.git] |
クラスターと調整する Git リポジトリ ソースの URL。 |
SSH を使用したプライベート Git リポジトリ
重要
Azure DevOps は、SSH を使用して Azure リポジトリに接続するための暗号化方法として、 SSH-RSA の廃止を発表 しました。 SSH キーを使用して Flux 構成の Azure リポジトリに接続する場合は、より安全な RSA-SHA2-256 または RSA-SHA2-512 キーに移行することをお勧めします。 詳細については、Azure DevOps SSH-RSA の非推奨に関するページをご覧ください。
SSH キーと Flux によって作成されたキーを含むプライベート Git リポジトリ
Flux によって生成された公開キーを、利用している Git サービス プロバイダーのユーザー アカウントに追加します。
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
ssh://user@server/repo[.git] |
git@ は、公開キーがユーザー アカウントではなくリポジトリに関連付けられている場合は、 user@ を置き換える必要があります。 |
SSH とユーザーが指定したキーを使用したプライベート Git リポジトリ
独自の秘密キーを直接使用するか、ファイルから使用します。 キーは PEM 形式 で、改行 (\n
) で終わる必要があります。
関連付けられている公開キーを、利用している Git サービス プロバイダーのユーザー アカウントに追加します。
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
ssh://user@server/repo[.git] | git@ は、公開キーがユーザー アカウントではなくリポジトリに関連付けられている場合は、 user@ を置き換える必要があります。 |
--ssh-private-key |
PEM 形式の Base64 キー | キーを直接指定します。 |
--ssh-private-key-file |
ローカル ファイルへの完全パス | PEM 形式のキーを含むローカル ファイルへの完全なパスを指定します。 |
SSH とユーザー指定の既知のホストを使用したプライベート Git ホスト
Flux 演算子は、 known_hosts
ファイル内の一般的な Git ホストの一覧を保持します。 Flux では、SSH 接続を確立する前に、この情報を使用して Git リポジトリを認証します。 一般的でない Git リポジトリまたは独自の Git ホストを使用している場合は、Flux がリポジトリを識別できるようにホスト キーを指定できます。
秘密キーの場合と同様に、known_hosts
の内容は、直接指定することも、ファイルで指定することもできます。 独自のコンテンツを提供する場合は、上記の SSH キー シナリオと共に、 known_hosts コンテンツ形式の仕様を使用します。
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
ssh://user@server/repo[.git] | git@ は user@ を置き換えることができます。 |
--known-hosts |
Base64 文字列 | known_hosts コンテンツを直接提供します。 |
--known-hosts-file |
ローカル ファイルへの完全パス | ローカル ファイル known_hosts コンテンツを指定します。 |
HTTPS ユーザーとキーを含むプライベート Git リポジトリ
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
https://server/repo[.git] |
基本認証を使用した HTTPS。 |
--https-user |
未加工の文字列 | HTTPS ユーザー名。 |
--https-key |
未加工の文字列 | HTTPS 個人用アクセス トークンまたはパスワード。 |
HTTPS CA 証明書を含むプライベート Git リポジトリ
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
https://server/repo[.git] |
基本認証を使用した HTTPS。 |
--https-ca-cert |
Base64 文字列 | TLS 通信用の CA 証明書。 |
--https-ca-cert-file |
ローカル ファイルへの完全パス | ローカル ファイルに CA 証明書の内容を指定します。 |
バケットソース引数
ソース bucket
使用する場合は、バケット固有のコマンド引数を次に示します。
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
URL 文字列 | bucket の URL。 サポートされている形式: http:// 、 https:// 。 |
--bucket-name |
糸 | 同期する bucket の名前。 |
--bucket-access-key |
糸 | bucket での認証に使用されるアクセス キー ID。 |
--bucket-secret-key |
糸 | bucket で認証するために使用されるシークレット キー。 |
--bucket-insecure |
ボーリアン | TLS なしで bucket と通信します。 指定しない場合は false と見なされます。指定されている場合は true と見なされます。 |
Azure Blob Storage アカウントのソース引数
ソース azblob
使用する場合は、BLOB 固有のコマンド引数を次に示します。
パラメーター | フォーマット | 注記 |
---|---|---|
--url -u |
URL 文字列 | azblob の URL。 |
--container-name |
糸 | 同期する Azure Blob Storage コンテナーの名前 |
--sp_client_id |
糸 | この認証方法に必要な、Azure BLOB を使用してサービス プリンシパルを認証するためのクライアント ID |
--sp_tenant_id |
糸 | この認証方法に必要な、Azure BLOB を使用してサービス プリンシパルを認証するためのテナント ID |
--sp_client_secret |
糸 | Azure BLOB を使用してサービス プリンシパルを認証するためのクライアント シークレット |
--sp_client_cert |
糸 | Azure BLOB を使用してサービス プリンシパルを認証するための Base64 でエンコードされたクライアント証明書 |
--sp_client_cert_password |
糸 | Azure BLOB でサービス プリンシパルを認証するために使用するクライアント証明書のパスワード |
--sp_client_cert_send_chain |
糸 | クライアント証明書のサブジェクト名/発行者ベースの認証を有効にするトークンを取得するときに、クライアント要求に x5c ヘッダーを含めるかどうかを指定します |
--account_key |
糸 | 認証用の Azure BLOB 共有キー |
--sas_token |
糸 | 認証用の Azure BLOB SAS トークン |
--managed-identity-client-id |
糸 | Azure BLOB を使用した認証用のマネージド ID のクライアント ID |
重要
AKS クラスターと azblob
ソースにマネージド ID 認証を使用する場合は、少なくとも ストレージ BLOB データ閲覧者 ロールをマネージド ID に割り当てる必要があります。 マネージド ID を使用した認証は、Azure Arc 対応 Kubernetes クラスターではまだ使用できません。
ソースを使用した認証用のローカル シークレット
git
、bucket
、またはazBlob
ソースでの認証には、ローカルの Kubernetes シークレットを使用できます。 ローカル シークレットには、ソースに必要なすべての認証パラメーターが含まれている必要があり、Flux 構成と同じ名前空間に作成する必要があります。
パラメーター | フォーマット | 注記 |
---|---|---|
--local-auth-ref --local-ref |
糸 | ソースでの認証に使用する Flux 構成名前空間の Kubernetes シークレットへのローカル参照。 |
HTTPS 認証の場合は、 username
と password
を使用してシークレットを作成します。
kubectl create ns flux-config
kubectl create secret generic -n flux-config my-custom-secret --from-literal=username=<my-username> --from-literal=password=<my-password-or-key>
SSH 認証の場合は、 identity
フィールドと known_hosts
フィールドを使用してシークレットを作成します。
kubectl create ns flux-config
kubectl create secret generic -n flux-config my-custom-secret --from-file=identity=./id_rsa --from-file=known_hosts=./known_hosts
重要
Azure DevOps は、SSH を使用して Azure リポジトリに接続するための暗号化方法として、 SSH-RSA の廃止を発表 しました。 SSH キーを使用して Flux 構成の Azure リポジトリに接続する場合は、より安全な RSA-SHA2-256 または RSA-SHA2-512 キーに移行することをお勧めします。 詳細については、Azure DevOps SSH-RSA の非推奨に関するページをご覧ください。
どちらの場合も、Flux 構成を作成するときに、他の認証パラメーターの代わりに --local-auth-ref my-custom-secret
を使用します。
az k8s-configuration flux create -g <cluster_resource_group> -c <cluster_name> -n <config_name> -t connectedClusters --scope cluster --namespace flux-config -u <git-repo-url> --kustomization name=kustomization1 --local-auth-ref my-custom-secret
次の認証方法でローカル Kubernetes シークレットを使用する方法の詳細を確認します。
注
Flux がプロキシ経由でソースにアクセスする必要がある場合は、プロキシ設定で Azure Arc エージェントを更新する必要があります。 詳細については、「送信プロキシ サーバーを使用して接続する」を参照してください。
Git の実装
Git を実装するさまざまなリポジトリ プロバイダーをサポートするために、Flux は 2 つの Git ライブラリ ( go-git
または libgit2
) のいずれかを使用するように構成できます。 詳細については、Flux の ドキュメントを参照してください。
Flux v2 の GitOps 実装により、パブリック クラウド リポジトリに使用するライブラリが自動的に決定されます。
- GitHub、GitLab、および BitBucket リポジトリの場合、Flux では
go-git
が使用されます。 - Azure DevOps とその他のすべてのリポジトリの場合、Flux は
libgit2
を使用します。
オンプレミス リポジトリの場合、Flux は libgit2
を使用します。
カスタマイゼーション
Kustomization は Flux 構成用に作成された設定で、クラスターに調整されるソース リポジトリ内の特定のパスを選択できます。 この指定したパスに 'kustomization.yaml ファイルを作成する必要はありません。 既定では、このパス内のすべてのマニフェストが調整されます。 ただし、このリポジトリ パスで使用できるアプリケーションの Kustomize オーバーレイを作成する場合は、Flux 構成用に Kustomize ファイル を git で作成して使用する必要があります。
az k8s-configuration flux kustomization create
を使用すると、構成中に 1 つ以上の kustomization を作成できます。
パラメーター | フォーマット | 注記 |
---|---|---|
--kustomization |
値なし | kustomization を構成するパラメーターの文字列の先頭。 これを複数回使用して、複数の kustomization を作成できます。 |
name |
糸 | この kustomization の一意の名前。 |
path |
糸 | クラスターと調整する Git リポジトリ内のパス。 既定値はブランチの最上位レベルです。 |
prune |
ボーリアン | 既定値は false です。 クラスターにデプロイされた Flux オブジェクトがリポジトリから削除された場合、または Flux 構成または kustomization が削除された場合に、そのオブジェクトが確実にクリーンアップされるように prune=true 設定します。 prune=true の使用は、ユーザーがクラスターにアクセスできない環境で重要であり、Git リポジトリ経由でのみ変更を加えることができます。 |
depends_on |
糸 | このカスタマイゼーションが整合される前に整合される必要があるこの構成内の1つ以上のカスタマイゼーションの名前。 たとえば、 depends_on=["kustomization1","kustomization2"] と指定します。 依存 kustomization を持つ kustomization を削除すると、依存する kustomization の状態が DependencyNotReady になり、調整が停止します。 |
timeout |
golang 期間の形式 | 既定値: 10m 。 |
sync_interval |
golang 期間の形式 | 既定値: 10m 。 |
retry_interval |
golang 期間の形式 | 既定値: 10m 。 |
validation |
糸 | 値: none 、 client 、 server 。 既定値: none 。 詳細については 、Flux のドキュメント を参照してください。 |
force |
ボーリアン | 既定値: false 。 force=true 設定すると、変更できないフィールドの変更が原因で修正プログラムの適用が失敗したときにリソースを再作成するように kustomize コントローラーに指示します。 |
また、 az k8s-configuration flux kustomization
を使用して、Flux 構成の kustomization を更新、一覧表示、表示、削除することもできます。
次のステップ
- AKS および Azure Arc 対応 Kubernetes 用の GitOps (Flux v2) を使用したアプリケーションデプロイの詳細について説明します。
- このチュートリアルでは、 AKS または Azure Arc 対応 Kubernetes クラスターで GitOps を有効にする方法について説明します。
- GitOps を使用した CI/CD ワークフローについて説明します。