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 ワークフローについて説明します。