Azure 會使用 GitOps 提供自動化應用程式部署功能,此功能可與 Azure Kubernetes 服務 (AKS) 和已啟用 Azure Arc 的 Kubernetes 叢集搭配使用。 GitOps with Flux v2 可讓您使用 Git 存放庫作為叢集組態和應用程式部署的真相來源。 如需詳細資訊,請參閱 使用 GitOps 的應用程式部署 (Flux v2) 和 教學課程:使用 GitOps 搭配 Flux v2 部署應用程式。
已啟用 Azure Arc 的 Kubernetes 或 Azure Kubernetes Service 上的 GitOps 會使用 Flux,這是一個熱門的開放原始碼工具集,可支援許多參數來啟用各種案例。 如需 Flux 支援的所有參數的描述,請參閱官方 Flux 文件。
若要查看 Flux 在 Azure 中支援的所有參數,請參閱 az k8s-configuration 檔。 此實作目前不支援 Flux 支援的每個參數。 讓我們知道 Azure 實作中是否遺漏了您需要的參數。
本文說明命令可用的 az k8s-configuration flux create 一些參數和自變數。 您也可以在 Azure CLI 中使用 -h 參數來查看 的完整參數az k8s-configuration flux清單(例如 az k8s-configuration flux -h 或 az k8s-configuration flux create -h)。
小提示
使用不支持參數部署 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 來源內的 Git 標籤 semver 範圍,以同步至叢集。 範例: --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-RSA 作為使用 SSH 連線到 Azure 存放庫的支援加密方法。 如果您使用 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 會先使用這項資訊來驗證 Git 存放庫,再建立 SSH 連線。 如果您使用不常見的 Git 存放庫或您自己的 Git 主機,您可以提供主機密鑰,讓 Flux 能夠識別您的存放庫。
就像私密金鑰一樣,您可以直接或在檔案中提供您的 known_hosts 內容。 當您提供自己的內容時,請使用 known_hosts內容格式規格,以及上文提到的任一 SSH 金鑰案例。
| 參數 | 格式 | 註釋 |
|---|---|---|
--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 記憶體帳戶來源自變數
如果您使用 azblob 來源,以下是 Blob 特定的命令自變數。
| 參數 | 格式 | 註釋 |
|---|---|---|
--url
-u
|
URL 字串 |
azblob 的網址。 |
--container-name |
繩子 | 要同步處理的 Azure Blob 記憶體容器名稱 |
--sp_client_id |
繩子 | 用於 Azure Blob 驗證服務主體的用戶端識別碼,此驗證方法需要此識別碼。 |
--sp_tenant_id |
繩子 | 此驗證方法所需的租戶 ID,用來向 Azure Blob 驗證服務主體帳戶。 |
--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 進行驗證之受控識別的用戶端標識碼 |
這很重要
針對 AKS 叢集和 azblob 來源使用受控識別驗證時,至少必須指派 記憶體 Blob 數據讀取者 角色的受控識別。 使用受控識別的驗證尚不適用於已啟用 Azure Arc 的 Kubernetes 叢集。
使用來源進行驗證的本機密碼
您可以使用 Kubernetes 本地密鑰來使用 git、bucket 或 azBlob 來源進行驗證。 本機密碼必須包含來源所需的所有驗證參數,而且必須在與 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-RSA 作為使用 SSH 連線到 Azure 存放庫的支援加密方法。 如果您使用 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 透過 Proxy 存取來源,您必須使用 Proxy 設定來更新 Azure Arc 代理程式。 如需詳細資訊,請參閱使用輸出 Proxy 伺服器連線。
Git 實作
為了支持實作 Git 的各種存放庫提供者,Flux 可以設定為使用兩個 Git 連結庫的其中一個: go-git 或 libgit2。 如需詳細資訊,請參閱 Flux 檔。
Flux v2 的 GitOps 實作會自動決定用於公有雲端儲存庫的函式庫:
- 對於 GitHub、GitLab 和 BitBucket 存放庫,Flux 會使用
go-git。 - 針對 Azure DevOps 和其他所有存放庫,Flux 會使用
libgit2。
對於內部部署存放庫,Flux 會使用 libgit2。
Kustomization
Kustomization 是針對 Flux 組態所建立的設定,可讓您在來源存放庫中選擇與叢集協調的特定路徑。 您不需要在此指定的路徑上建立 『kustomization.yaml 檔案。 根據預設,這條路徑中的所有清單都會被協調。 不過,如果您想要讓 Kustomize 重疊供此存放庫路徑上的應用程式使用,您應該在 Git 中建立 Kustomize 檔案 ,讓 Flux 組態能夠使用。
藉由使用 az k8s-configuration flux kustomization create,您可以在設定期間建立一或多個 kustomization。
| 參數 | 格式 | 註釋 |
|---|---|---|
--kustomization |
沒有值 | 設定 kustomization 的參數位符串開頭。 您可以多次使用它來創建多個自定義項目。 |
name |
繩子 | 這個 Kustomization 的獨特名稱。 |
path |
繩子 | Git 存放庫中與叢集對齊的路徑。 預設值為分支的最高層。 |
prune |
布爾邏輯 | 預設值為 false。 將 prune=true 設定為確保當 Flux 部署至叢集的物件,如果從存放庫中移除,或者如果 Flux 設定或 kustomizations 被刪除,這些物件將被清理。 對於使用者無法存取叢集的環境而言,使用 prune=true 非常重要,而且只能透過 Git 存放庫進行變更。 |
depends_on |
繩子 | 一或多個 kustomizations 的名稱(在此組態內)必須先完成協調,然後這個 kustomization 才能進行協調。 例如: depends_on=["kustomization1","kustomization2"] 。 如果您移除具有相依 kustomization 的 kustomization,則相依 kustomization 的狀態會變成DependencyNotReady,而重整將停止。 |
timeout |
golang duration format | 預設值:10m。 |
sync_interval |
golang duration format | 預設值:10m。 |
retry_interval |
golang duration format | 預設值:10m。 |
validation |
繩子 | 值:none、、serverclient。 預設值:none。 如需詳細資訊,請參閱 Flux 檔 。 |
force |
布爾邏輯 | 預設值:false。 設定 force=true 以指示 kustomize 控制器當因不可變欄位變更導致修補失敗時重新創建資源。 |
您也可以使用 az k8s-configuration flux kustomization 來更新、列出、顯示及刪除 Flux 組態中的 kustomizations。