協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
比較 ACK 與自我管理 ACK 的 EKS 功能
ACK 的 EKS 功能提供與自我管理 ACK 控制器相同的功能,但具有顯著的操作優勢。如需 EKS 功能與自我管理解決方案的一般比較,請參閱 EKS 功能考量。本主題著重於 ACK 特定的差異。
與上游 ACK 的差異
ACK 的 EKS 功能是以上游 ACK 控制器為基礎,但在 IAM 整合中有所不同。
IAM 功能角色:此功能使用專用 IAM 角色搭配信任政策,允許capabilities.eks.amazonaws.com服務主體,而不是 IRSA (服務帳戶的 IAM 角色)。您可以直接將 IAM 政策連接至功能角色,而不需要建立或註釋 Kubernetes 服務帳戶或設定 OIDC 供應商。生產使用案例的最佳實務是使用 設定服務許可IAMRoleSelector。如需詳細資訊,請參閱設定 ACK 許可。
工作階段標籤: 受管功能會自動在所有 AWS API 請求上設定工作階段標籤,啟用精細存取控制和稽核。標籤包括 eks:eks-capability-arn、 eks:kubernetes-namespace和 eks:kubernetes-api-group。這與自我管理 ACK 不同,其預設不會設定這些標籤。如需在 設定 ACK 許可 IAM 政策中使用工作階段標籤的詳細資訊,請參閱 。
資源標籤: 功能會將不同的預設標籤套用至 AWS 資源,而非自我管理的 ACK。此功能使用字eks:首標籤 (例如 eks:kubernetes-namespace、eks:eks-capability-arn),而不是自我管理 ACK 使用的services.k8s.aws/標籤。如需預設資源標籤的完整清單,EKS 的 ACK 考量事項請參閱 。
資源相容性:ACK 自訂資源的運作方式與上游 ACK 相同,不會變更您的 ACK 資源 YAML 檔案。該功能使用相同的 Kubernetes APIs 和 CRDs,因此 等工具kubectl的運作方式相同。此功能僅支援上游 ACK 中一般可用的控制器和資源 (GA)。此功能不包含位於預覽上游的控制器。控制器的狀態可能會隨著時間從預覽變更為上游 GA,然後 功能可以開始自動管理它。如果您搭配 功能執行自我管理預覽控制器,請在遷移預覽控制器和自動提升之前檢閱 。
如需完整的 ACK 文件和服務特定指南,請參閱 ACK 網站上的 ACK 文件
遷移路徑
您可以將自我管理的 ACK 遷移至受管功能,並將 AWS 資源的中斷降至最低。遷移依賴於 Kubernetes 領導者選擇:自我管理控制器和功能爭奪相同的租用,因此其中只有一個會隨時協調指定的資源。為此,兩者都必須在相同的命名空間中共用租用。此功能不會強制從執行中的自我管理控制器取得租用,因此您可以透過向下擴展自我管理的控制器來控制切換的發生時間。
重要
開始之前,請授予 IAM 功能角色許可,該許可等同於您的自我管理控制器目前使用的許可。此功能會透過capabilities.eks.amazonaws.com服務主體,而不是透過您自我管理控制器目前使用的機制,例如 IRSA 或 EKS Pod Identity,以專用功能角色進行驗證 (請參閱 設定 ACK 許可)。如果功能角色缺少許可,該功能會採用您的 資源。然後,它無法協調它們並記錄AccessDenied錯誤。
完成下列步驟以進行遷移。這些步驟使用 S3 控制器 (ack-s3-controller) 做為範例。針對您要遷移至 功能的每個自我管理 ACK 控制器重複這些項目,並取代對應的控制器名稱和 Helm Chart。
注意
搭配 功能執行自我管理的控制器旨在作為遷移期間的暫時狀態,而不是作為長期組態。當兩者都執行時,任一端的中斷 (例如功能部署或自我管理控制器的升級) 可以釋出租用,並讓另一端取得租用,導致對帳在它們之間意外切換。為每個控制器完成遷移,而不是無限期地隨 功能一起自行管理。
-
在自我管理 ACK 控制器上啟用領導者選擇,並將其租用移至
kube-system:helm upgrade --install ack-s3-controller \ oci://public.ecr.aws/aws-controllers-k8s/s3-chart \ --namespace ack-system \ --set leaderElection.enabled=true \ --set leaderElection.namespace=kube-system您必須設定這兩個值。在 ACK Helm Chart 中,只有在
leaderElection.enabled為 時才會套用--leader-election-namespace旗標true,且領導者選擇預設為停用。leaderElection.namespace單獨設定沒有效果。控制器會在沒有租用的情況下繼續執行,而且兩個控制器都會在建立功能後同時協調相同的資源。這適用於每個 ACK 服務控制器圖表,而不只是 S3。這會將控制器的租用移至
kube-system,允許受管功能與其協調。 -
在叢集上建立 ACK 功能 (請參閱 建立 ACK 功能)。此功能會啟動並爭奪租用,但自我管理的控制器仍會保留它。您的自我管理控制器會持續協調您的資源,而 功能會等待領導,而不是強制接管。
-
當您準備好開始遷移時,請將自我管理控制器縮減至零個複本。這會釋出租用,讓 功能可以取得領導權並接管對帳:
kubectl scale deployment ack-s3-controller \ --namespace ack-system --replicas=0在您縮減自我管理控制器的規模後,此功能通常會在短時間內取得租用並開始對帳。擴展自我管理控制器備份不會傳回租用,因為 功能會繼續保留和續約租用。若要將對帳傳回自我管理控制器,請將其擴展到至少一個複本,然後刪除 ACK 功能。刪除功能後,自我管理控制器會重新取得租用並繼續對帳。
採用時,此功能會套用自己的預設資源標籤 (
eks:字首) 取代自我管理 ACK 使用的services.k8s.aws/標籤 (請參閱 EKS 的 ACK 考量事項)。預期針對您採用的資源進行一次性標記 API 呼叫,並更新services.k8s.aws/標籤字首上索引鍵的任何成本分配或政策工具。 -
確認功能運作狀態良好,並已接管資源的調校。確認 資源報告
Synced的條件,True且 功能未記錄AccessDenied錯誤。 -
在您確認功能正確管理資源後,請移除自我管理控制器:
helm uninstall ack-s3-controller --namespace ack-system
此方法可讓兩個控制器在遷移期間安全地共存。在您發佈租用後, 受管功能會採用先前由自我管理控制器管理的資源,以確保持續對帳而不會發生衝突。
預覽控制器和自動提升
此功能僅支援上游 ACK 中為 GA 的控制器。目前處於預覽狀態的控制器稍後可以提升為上游 GA。發生這種情況時, 功能會開始自動管理該控制器,而不需要採取任何動作。
如果您在叢集上執行也為其他控制器使用 功能的自我管理預覽控制器,這會產生風險。您可以將預覽控制器作為單一複本執行,並停用領導選擇,因為沒有其他控制器可與之協調。當該控制器提升為 GA 時, 功能會開始管理它。此時,兩個對帳程式會在沒有共用租用的相同資源上運作,以協調這些資源。結果是與遷移步驟旨在防止的相同雙重調校衝突。兩個對帳程式都會發出競爭的 AWS API 呼叫,並將衝突的更新寫入自訂資源狀態。
為了避免這種情況,在您執行自我管理預覽控制器以及 功能之前:
-
在自我管理預覽控制器上啟用領導者選擇
kube-system,並使用遷移步驟中顯示的相同leaderElection.enabled=true和leaderElection.namespace=kube-system設定,將其租用指向 。這可確保如果提升控制器且 功能接管,則兩個座標會透過共用租用而非平行調校。 -
追蹤您依賴的任何預覽控制器的上游 GA 狀態,並計劃在升級時遵循遷移路徑進行遷移。您可以在 ACK 網站上的 ACK 服務頁面上
檢查每個控制器的目前狀態。