設定混合節點的附加元件 - Amazon EKS

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。

設定混合節點的附加元件

此頁面說明在 Amazon EKS 混合節點上執行 AWS 附加元件和社群附加元件的考量事項。若要進一步了解 Amazon EKS 附加元件,以及從叢集建立、升級和移除附加元件的程序,請參閱 Amazon EKS 附加元件。除非此頁面另有說明,對於建立、升級和移除 Amazon EKS 附加元件的程序,具有混合節點的 Amazon EKS 叢集與具有在 AWS 雲端中執行的節點的 Amazon EKS 叢集相同。只有此頁面中包含的附加元件已經過驗證,可與 Amazon EKS 混合節點相容。

下列 AWS 附加元件與 Amazon EKS 混合節點相容。

AWS 附加元件 相容的附加元件版本

kube-proxy

v1.25.14-eksbuild.2 及更新版本

CoreDNS

v1.9.3-eksbuild.7 及更新版本

AWS Distro for OpenTelemetry (ADOT)

v0.102.1-eksbuild.2 及更新版本

CloudWatch 可觀測性代理程式

v2.2.1-eksbuild.1 及更新版本

EKS Pod 身分識別代理程式

  • v1.3.3-eksbuild.1 及更新版本,Bottlerocket 除外

  • v1.3.7-eksbuild.2 及更新版本,適用於 Bottlerocket

節點監控代理程式

v1.2.0-eksbuild.1 及更新版本

CSI 快照器控制器

v8.1.0-eksbuild.1 及更新版本

AWS適用於 Kubernetes 的私有 CA 連接器

v1.6.0-eksbuild.1 及更新版本

下列社群附加元件與 Amazon EKS 混合節點相容。若要進一步了解社群附加元件,請參閱 社群附加元件

社群附加元件 相容的附加元件版本

Kubernetes 指標伺服器

v0.7.2-eksbuild.1 及更新版本

cert-manager

v1.17.2-eksbuild.1 及更新版本

Prometheus Node Exporter

v1.9.1-eksbuild.2 及更新版本

kube-state-metrics

v2.15.0-eksbuild.4 及更新版本

外部 DNS

v0.19.0-eksbuild.1 及更新版本

除了上表中的 Amazon EKS 附加元件之外,Amazon Managed Service for Prometheus 收集器及適用於應用程式傳入 (HTTP) 和負載平衡 (TCP/UDP) 的 AWS Load Balancer 控制器可與混合節點相容。

有些 AWS 附加元件和社群附加元件與 Amazon EKS 混合節點不相容。這些附加元件的最新版本對套用至混合節點的預設 eks.amazonaws.com/compute-type: hybrid 標籤具有反親和性規則。這可以防止它們在叢集中部署時於混合節點上執行。如果您的叢集同時具有混合節點和在 AWS 雲端中執行的節點,則您可以將叢集中的這些附加元件部署到 AWS 雲端中執行的節點。Amazon VPC CNI 與混合節點不相容,並且支援 Cilium 和 Calico 作為 Amazon EKS 混合節點的容器聯網介面 (CNI)。如需詳細資訊,請參閱「設定混合節點的 CNI」。

AWS 附加元件

以下各節說明在混合節點上執行相容的 AWS 附加元件與其他 Amazon EKS 運算類型之間的差異。

kube-proxy 和 CoreDNS

當您使用 AWS API 和 AWS SDK (包括從 AWS CLI) 建立 EKS 叢集時,EKS 預設會將 kube-proxy 和 CoreDNS 安裝為自我管理附加元件。建立叢集後,您可以使用 Amazon EKS 附加元件覆寫這些附加元件。如需有關 在 Amazon EKS 叢集中管理 kube-proxy管理 Amazon EKS 叢集中的 CoreDNS for DNS 的詳細資訊,請參閱 EKS 文件。如果您執行具有混合節點和 AWS 雲端中的節點的混合模式叢集,則 AWS 會建議在混合節點上至少有一個 CoreDNS 複本,並在 AWS 雲端中的節點上至少有一個 CoreDNS 複本。如需組態步驟,請參閱 設定 CoreDNS 複本

CloudWatch 可觀測性代理程式

CloudWatch 可觀測性代理程式運算子使用 Webhook。如果您在混合節點上執行運算子,您的內部部署 Pod CIDR 必須在內部部署網路上可路由,而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊,請參閱設定混合節點的 Webhook

節點層級指標不適用於混合節點,因為 CloudWatch Container Insights 取決於節點層級指標的執行個體中繼資料服務 (IMDS) 的可用性。叢集、工作負載、Pod 和容器層級指標可供混合節點使用。

遵循使用 Amazon CloudWatch 可觀測性安裝 CloudWatch 代理程式中所述的步驟安裝附加元件後,必須先更新附加元件資訊清單,然後代理程式才能在混合節點上成功執行。編輯叢集上的 amazoncloudwatchagents 資源,以新增 RUN_WITH_IRSA 環境變數,如下所示。

kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
apiVersion: v1 items: - apiVersion: cloudwatch.aws.amazon.com/v1alpha1 kind: AmazonCloudWatchAgent metadata: ... name: cloudwatch-agent namespace: amazon-cloudwatch ... spec: ... env: - name: RUN_WITH_IRSA # <-- Add this value: "True" # <-- Add this - name: K8S_NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName ...

適用於混合節點的 Amazon Managed Prometheus 受管收集器

Amazon Managed Service for Prometheus (AMP) 受管收集器包含一個抓取器,並且可從 Amazon EKS 叢集中的資源探索和收集指標。AMP 會為您管理抓取器,而無需自行管理任何執行個體、代理程式或抓取器。

您可以使用 AMP 受管收集器,而無需任何其他專屬於混合節點的組態。不過,混合節點上應用程式的指標端點必須可從 VPC 連線,包括從 VPC 路由到遠端 Pod 網路 CIDR 及內部部署防火牆中開啟的連接埠。此外,您的叢集必須擁有私有叢集端點存取權

請遵循《Amazon Managed Service for Prometheus 使用者指南》的使用 AWS 受管收集器中的步驟。

AWS Distro for OpenTelemetry (ADOT)

您可以使用 AWS Distro for OpenTelemetry (ADOT) 附加元件,從混合節點上執行的應用程式收集指標、日誌和追蹤資料。ADOT 使用許可 Webhook 來變更和驗證收集器自訂資源請求。如果您在混合節點上執行 ADOT 運算子,您的內部部署 Pod CIDR 必須在內部部署網路上可路由,而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊,請參閱設定混合節點的 Webhook

請遵循 AWS Distro for OpenTelemetry 文件的使用 EKS 附加元件的 AWS Distro for OpenTelemetry 入門中的步驟。

AWS Load Balancer 控制器

您可以搭配混合節點上的工作負載的目標類型 ip 使用 AWS Load Balancer 控制器和 Application Load Balancer (ALB) 或 Network Load Balancer (NLB)。搭配 ALB 或 NLB 使用的 IP 目標必須從 AWS 可路由。AWS Load Balancer 控制器還會使用 Webhook。如果您在混合節點上執行 AWS Load Balancer 控制器運算子,您的內部部署 Pod CIDR 必須在內部部署網路上可路由,而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊,請參閱設定混合節點的 Webhook

若要安裝 AWS Load Balancer 控制器,請遵循 AWS Application Load BalancerAWS Network Load Balancer 中的步驟。

對於使用 ALB 的傳入,您必須指定以下註釋。如需詳細資訊,請參閱「透過 Application Load Balancer 路由應用程式與 HTTP 流量」。

alb.ingress.kubernetes.io/target-type: ip

對於使用 NLB 的負載平衡,您必須指定以下註釋。如需詳細資訊,請參閱「透過 Network Load Balancer 路由 TCP 與 UDP 流量」。

service.beta.kubernetes.io/aws-load-balancer-type: "external" service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"

EKS Pod 身分識別代理程式

注意

若要在執行 Bottlerocket 的混合節點上成功部署 EKS Pod 身分識別代理程式附加元件,請確保您的 Bottlerocket 版本至少為 v1.39.0。在混合節點環境中,較早版本的 Bottlerocket 不支援 Pod 身分識別代理程式。

原始 Amazon EKS Pod 身分識別代理程式 DaemonSet 依賴節點上 EC2 IMDS 的可用性來取得所需的 AWS 憑證。由於 IMDS 不適用於混合節點,因此從版本 1.3.3-eksbuild.1 開始,Pod 身分識別代理程式附加元件可選擇性地部署會掛載所需憑證的 DaemonSet。執行 Bottlerocket 的混合節點需要不同的方法來掛載憑證,並且版本 1.3.7-eksbuild.2 開始,Pod 身分識別代理程式附加元件可選擇性地部署專門以 Bottlerocket 混合節點為目標的 DaemonSet。下列各節說明啟用選用 DaemonSets 的程序。

Ubuntu/RHEL/AL2023

  1. 若要在 Ubuntu/RHEL/Al2023 混合節點上使用 Pod 身分識別代理程式,請在 nodeadm 組態的混合區段中設定 enableCredentialsFile: true,如下所示:

    apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: hybrid: enableCredentialsFile: true # <-- Add this

    這將設定 nodeadm 以建立憑證檔案,而該檔案可在 /eks-hybrid/.aws/credentials 下的節點上進行設定,且,在其將由 eks-pod-identity-agent Pod 使用。此憑證檔案將包含會定期重新整理的臨時 AWS 憑證。

  2. 更新每個節點上的 nodeadm 組態後,請使用 nodeConfig.yaml 執行下列 nodeadm init 命令,以將混合節點加入 Amazon EKS 叢集。如果您的節點先前已加入叢集,仍請再次執行 init 命令。

    nodeadm init -c file://nodeConfig.yaml
  3. 使用 AWS CLI 或 AWS 管理主控台,安裝 eks-pod-identity-agent,並啟用對混合節點的支援。

    1. AWS CLI:從您用來管理叢集的機器中,執行下列命令以安裝 eks-pod-identity-agent,並啟用對混合節點的支援。使用您叢集的名稱取代 my-cluster

      aws eks create-addon \ --cluster-name my-cluster \ --addon-name eks-pod-identity-agent \ --configuration-values '{"daemonsets":{"hybrid":{"create": true}}}'
    2. AWS 管理主控台:如果您將透過 AWS 主控台安裝 Pod 身分識別代理程式附加元件,請將下列項目新增至選用組態,進而部署以混合節點為目標的 DaemonSet。

      {"daemonsets":{"hybrid":{"create": true}}}

Bottlerocket

  1. 若要在 Bottlerocket 混合節點上使用 Pod 身分識別代理程式,請將 --enable-credentials-file=true 旗標新增至用於 Bottlerocket 引導容器使用者資料的命令,如 使用 Bottlerocket 連接混合節點 中所述。

    1. 如果您使用的是 SSM 憑證提供者,則您的命令應該如下所示:

      eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region> --enable-credentials-file=true
    2. 如果您使用的是 IAM Roles Anywhere 憑證提供者,則您的命令應該如下所示:

      eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key> --enable-credentials-file=true

      這將設定引導指令碼,以在 /var/eks-hybrid/.aws/credentials 下的節點上建立憑證,且其將由 eks-pod-identity-agent Pod 使用。此憑證檔案將包含會定期重新整理的臨時 AWS 憑證。

  2. 使用 AWS CLI 或 AWS 管理主控台,安裝 eks-pod-identity-agent,並啟用對 Bottlerocket 混合節點的支援。

    1. AWS CLI:從您用來管理叢集的機器中,執行下列命令以安裝 eks-pod-identity-agent,並啟用對 Bottlerocket 混合節點的支援。使用您叢集的名稱取代 my-cluster

      aws eks create-addon \ --cluster-name my-cluster \ --addon-name eks-pod-identity-agent \ --configuration-values '{"daemonsets":{"hybrid-bottlerocket":{"create": true}}}'
    2. AWS 管理主控台:如果您將透過 AWS 主控台安裝 Pod 身分識別代理程式附加元件,請將下列項目新增至選用組態,進而部署以 Bottlerocket 混合節點為目標的 DaemonSet。

      {"daemonsets":{"hybrid-bottlerocket":{"create": true}}}

CSI 快照器控制器

從版本 v8.1.0-eksbuild.2 開始,CSI 快照控制器附加元件會對混合節點套用軟性反親和性規則,偏好控制器 deployment 可在與 Amazon EKS 控制平面位於相同的 AWS 區域中的 EC2 上執行。在與 Amazon EKS 控制平面位於相同的 AWS 區域中共置 deployment 可改善延遲。

社群附加元件

以下各節說明在混合節點上執行相容的社群附加元件與其他 Amazon EKS 運算類型之間的差異。

Kubernetes 指標伺服器

控制平面需要連接指標伺服器的 Pod IP (如果啟用 hostNetwork,則為節點 IP)。因此,除非您在 hostNetwork 模式下執行指標伺服器,否則您必須在建立 Amazon EKS 叢集時設定遠端 Pod 網路,而且必須使 Pod IP 位址可路由。使用 CNI 實作邊界閘道協定 (BGP) 是讓您的 Pod IP 位址可路由的常見方式之一。

cert-manager

cert-manager 會使用 Webhook。如果您在混合節點上執行 cert-manager,您的內部部署 Pod CIDR 必須在內部部署網路上可路由,而且您必須使用遠端 Pod 網路設定 EKS 叢集。如需詳細資訊,請參閱設定混合節點的 Webhook