在 AWS Outposts 上部署 Amazon EKS 叢集 - Amazon EKS

協助改進此頁面

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

在 AWS Outposts 上部署 Amazon EKS 叢集

本主題概述了在 Outpost 上執行本機叢集時要考量的事項。本主題也提供如何在 Outpost 上部署本機叢集的指示。

重要
  • 這些考量事項並不是相關 Amazon EKS 文件的重複內容。如果其他 Amazon EKS 文件主題與此處的考量衝突,則請遵循此處的考量事項。

  • 這些考量事項隨時會變更,而且可能會經常變更。因此,我們建議您定期檢閱此主題。

  • 許多考量事項與在 AWS 雲端上建立叢集的考量事項不同。

  • 本機叢集僅支援 Outpost 機架。單一本機叢集可以在包含單一邏輯 Outpost 的多個實體 Outpost 機架上執行。單一本機叢集無法跨多個邏輯 Outposts 執行。每個邏輯 Outpost 都有一個單一的 Outpost ARN。

  • 本機叢集在 Outpost 上執行和管理您帳戶中的 Kubernetes 控制平面。您無法在 Kubernetes 控制平面執行個體上執行工作負載,或修改 Kubernetes 控制平面元件。這些節點由 Amazon EKS 服務管理。執行自動 Amazon EKS 管理動作 (例如修補) 後,對 Kubernetes 控制平面的變更不會持續存在。

  • 本機叢集支援自我管理的附加元件和自我管理的 Amazon Linux 節點群組。Kubernetes 專用 Amazon VPC CNI 外掛程式kube-proxyCoreDNS 附加元件會自動安裝在本機叢集上。

  • 本機叢集需要在 Outpost 上使用 Amazon EBS。您的 Outpost 必須具有可用於 Kubernetes 控制平面儲存的 Amazon EBS。Outpost 僅支援 Amazon EBS gp2 磁碟區。

  • 如果使用 Amazon EBS CSI 驅動程式,可支援 Amazon EBS 所支援的 Kubernetes PersistentVolumes

  • 本機叢集的控制平面執行個體可在堆疊的高度可用拓撲中進行設定。三分之二的控制平面執行個體必須始終保持運作狀態良好,這樣才能維持規定人數。如果規定人數缺少,請聯絡 AWS 支援,因為需要一些服務端動作,以便啟用新的受管執行個體。

先決條件

建立本機 Amazon EKS 叢集後,系統會永久新增建立叢集的 IAM 主體。主體會專門新增至 Kubernetes RBAC 授權資料表作為管理員。此實體具有 system:masters 許可。此實體的標識在您的叢集組態中不可見。因此,請務必注意建立叢集的實體,並確保永遠不會將其刪除。一開始,只有建立伺服器的主體可以使用 kubectl 對 Kubernetes API 伺服器進行呼叫。如果您使用主控台來建立叢集,請確保當您在叢集上執行 kubectl 命令時,同一個 IAM 憑證位於 AWS SDK 憑證鏈中。建立叢集之後,您可以授予其他 IAM 主體存取您的叢集。

建立 Amazon EKS 本機叢集

您可以使用此頁面中所述的下列工具,建立本機叢集:

您也可以使用 AWS CLIAmazon EKS APIAWS SDKAWS CloudFormationTerraform 在 Outposts 上建立叢集。

eksctl

使用 eksctl 建立本機叢集

  1. 在裝置或 AWS CloudShell 上安裝版本 0.214.0 或更新版本的 eksctl 命令列工具。如需有關安裝或更新 eksctl 的指示,請參閱 eksctl 文件中的安裝一節。

  2. 將隨後的內容複製到您的裝置。取代以下值,然後執行修改後的命令來建立 outpost-control-plane.yaml 檔案:

    • 使用您要在其中建立叢集的 支援的 AWS 區域取代 region-code

    • 使用您的叢集名稱取代 my-cluster。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭,且長度不可超過 100 個字元。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。

    • 使用現有 VPC 和子網路的 ID 取代 vpc-ExampleID1subnet-ExampleID1。VPC 和子網路必須符合在 AWS Outposts 上為 Amazon EKS 叢集建立 VPC 和子網路中的要求。

    • 使用您的 Outpost 的 ID 取代 uniqueid

    • 使用您 Outpost 上可用的執行個體類型取代 m5.large。選擇執行個體類型之前,請先參閱根據容量考量,為 AWS Outposts 上的 Amazon EKS 叢集選取執行個體類型和置放群組。部署了三個控制平面執行個體。您無法變更此數字。

      cat >outpost-control-plane.yaml <<EOF apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: "1.33" vpc: clusterEndpoints: privateAccess: true id: "vpc-vpc-ExampleID1" subnets: private: outpost-subnet-1: id: "subnet-subnet-ExampleID1" outpost: controlPlaneOutpostARN: arn:aws:outposts:region-code:111122223333:outpost/op-uniqueid controlPlaneInstanceType: m5.large EOF

      如需所有可用選項和預設值的完整清單,請參閱 eksctl 文件中的 AWS Outposts 支援組態檔案結構描述

  3. 使用您在上一步驟中建立的組態檔案建立叢集。eksctl 會在 Outpost 上建立 VPC 和一個子網路,以便在其中部署叢集。

    eksctl create cluster -f outpost-control-plane.yaml

    叢集佈建需要幾分鐘的時間。建立叢集時,會出現幾行輸出。輸出的最後一行類似於下面的範例行。

    [✓] EKS cluster "my-cluster" in "region-code" region is ready
    提示

    若要查看使用 eksctl 建立叢集時可指定的大部分選項,請使用 eksctl create cluster --help 命令。若要查看所有可用的選項,您可使用 config 檔案。如需詳細資訊,請參閱 eksctl 文件中的使用組態檔組態檔結構描述。您可以在 GitHub 上找到組態檔範例

    eksctl 命令會自動為建立叢集的 IAM 主體 (使用者或角色) 建立存取項目,並向該 IAM 主體授予對叢集上的 Kubernetes 物件的管理員許可。如果您不希望叢集建立者對叢集上的 Kubernetes 物件具有管理員存取權,請將下列文字新增至先前的組態檔:bootstrapClusterCreatorAdminPermissions: false (與 metadatavpcoutpost 處於同一層級)。如果您新增了該選項,則在建立叢集後,您需要為至少一個 IAM 主體建立存取項目,否則任何 IAM 主體均將無法存取叢集上的 Kubernetes 物件。

AWS 管理主控台

使用 AWS 管理主控台 建立叢集

  1. 您需要的現有 VPC 和子網路應符合 Amazon EKS 要求。如需詳細資訊,請參閱 為 AWS Outpost 上的 Amazon EKS 叢集建立 VPC 和子網路

  2. 如果您已擁有本機叢集 IAM 角色,或者您要使用 eksctl 來建立叢集,則可以略過此步驟。根據預設,eksctl 會為您建立角色。

    1. 執行下列命令以建立 IAM 信任政策 JSON 檔案。

      cat >eks-local-cluster-role-trust-policy.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
    2. 建立 Amazon EKS 叢集 IAM 角色。若要建立 IAM 角色,必須為建立角色的 IAM 主體指派以下 iam:CreateRole 動作 (許可)。

      aws iam create-role --role-name myAmazonEKSLocalClusterRole --assume-role-policy-document file://"eks-local-cluster-role-trust-policy.json"
    3. 將名為 AmazonEKSLocalOutpostClusterPolicy 的 Amazon EKS 受管政策連接至角色。若要將 IAM 政策連接至 IAM 主體,必須為連接政策的 IAM 實體指派以下 IAM 動作之一 (許可):iam:AttachUserPolicyiam:AttachRolePolicy

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSLocalOutpostClusterPolicy --role-name myAmazonEKSLocalClusterRole
  3. 開啟 Amazon EKS 主控台

  4. 請確保您已在主控台畫面頂端選取了受支援的 AWS 區域

  5. 選取 Add cluster (新增叢集),然後選取 Create (建立)。

  6. Configure cluster (設定叢集) 頁面上,輸入或選取下列欄位的值:

    • Kubernetes 控制平面位置 – 選擇 AWS Outposts。

    • Outpost ID:選擇要在其上建立控制平面的 Outpost 的 ID。

    • Instance type (執行個體類型):選取執行個體類型。只會顯示 Outpost 中可用的執行個體類型。在下拉式清單中,每個執行個體類型都會說明為其建議的節點數量。選擇執行個體類型之前,請先參閱根據容量考量,為 AWS Outposts 上的 Amazon EKS 叢集選取執行個體類型和置放群組。所有複本均使用相同的執行個體類型進行部署。叢集建立後,就無法再變更執行個體類型。部署了三個控制平面執行個體。您無法變更此數字。

    • Name (名稱):叢集的名稱。它在您的 AWS 帳戶中必須是唯一的。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭,且長度不可超過 100 個字元。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。在您要建立叢集的 AWS 區域和 AWS 帳戶中,該名稱必須是唯一的。

    • Kubernetes 版本:選擇您要用於您叢集的 Kubernetes 版本。我們建議選取最新版本,除非您需要使用較早版本。

    • 叢集服務角色:選擇您在上一個步驟中建立的 Amazon EKS 叢集 IAM 角色,以允許 Kubernetes 控制平面管理 AWS 資源。

    • Kubernetes 叢集管理員存取權:如果您希望建立叢集的 IAM 主體 (角色或使用者) 對叢集上的 Kubernetes 物件具有管理員存取權,請接受預設值 (允許)。Amazon EKS 會為該 IAM 主體建立存取項目,並向該存取項目授予叢集管理員許可。如需存取項目的詳細資訊,請參閱 使用 EKS 存取項目授予 IAM 使用者 Kubernetes 的存取權

      如果您不希望建立叢集的 IAM 主體擁有對 Kubernetes 叢集物件的管理員存取權,而是希望其他主體擁有此權限,請選擇「不允許」選項。建立叢集後,任何具有建立存取項目 IAM 許可的 IAM 主體,都可以為需要存取 Kubernetes 叢集物件的任何 IAM 主體新增存取項目。如需所需 IAM 許可的詳細資訊,請參閱《服務授權參考》中的 Amazon Elastic Kubernetes Service 定義的動作一節。如果您選擇「不允許」選項且不建立任何存取項目,則任何 IAM 主體均將無法存取叢集上的 Kubernete 物件。

    • Tags (標籤) – (選用) 將任何標籤新增到您的叢集。如需詳細資訊,請參閱 使用標籤組織 Amazon EKS 資源。完成此頁面後,請選擇下一步

  7. Specify networking (指定網路) 頁面上,選取下列欄位的值:

    • VPC:選擇現有的 VPC。針對您要建立的叢集、任何節點和其他 Kubernetes 資源,VPC 必須有足夠數目的 IP 地址。您的 VPC 必須符合 VPC 要求和考量事項中的要求。

    • Subnets (子網路):根據預設,前一個欄位指定的 VPC 中的所有可用子網路會預先選取。您選擇的子網路必須符合子網路要求和考量事項中的要求。

    • 安全群組:(選用) 指定一或多個您希望 Amazon EKS 與其建立的網路介面相關聯的安全群組。Amazon EKS 會自動建立一個安全群組,以支援您的叢集和 VPC 之間的通訊。Amazon EKS 將此安全群組及您選擇的任何群組與其建立的網路介面相關聯。如需有關 Amazon EKS 建立的叢集安全群組的詳細資訊,請參閱 檢視叢集的 Amazon EKS 安全群組要求。您可以修改 Amazon EKS 建立的叢集安全群組中的規則。如果您選擇新增自己的安全群組,在叢集建立後,即無法變更選擇的安全群組。若要使內部部署主機與叢集端點通訊,您必須允許來自叢集安全群組的傳入流量。對於沒有輸入和輸出網際網路連線 (亦稱為私有叢集) 的叢集,您必須執行以下其中一項:

      • 新增與所需 VPC 端點關聯的安全群組。如需有關所需端點的詳細資訊,請參閱對 AWS 服務的子網路存取中的 使用 介面 VPC 端點

      • 修改 Amazon EKS 建立的安全群組,以允許來自與 VPC 端點關聯之安全群組的流量。完成此頁面後,請選擇下一步

  8. 設定可觀測性頁面上,您可以選擇性地選擇要開啟的指標控制平面日誌記錄選項。根據預設,系統會關閉每個日誌類型。

  9. Review and create (檢閱並建立) 頁面上,檢閱您在先前頁面上輸入或選取的資訊。如需變更,請選擇 Edit (編輯)。當您感到滿意時,請選擇建立。在佈建叢集時,Status (狀態) 欄位顯示 CREATING (正在建立)。

    叢集佈建需要幾分鐘的時間。

檢視 Amazon EKS 本機叢集

  1. 叢集建立之後,您便可以檢視已建立的 Amazon EC2 控制平面執行個體。

    aws ec2 describe-instances --query 'Reservations[*].Instances[*].{Name:Tags[?Key==`Name`]|[0].Value}' | grep my-cluster-control-plane

    範例輸出如下。

    "Name": "my-cluster-control-plane-id1" "Name": "my-cluster-control-plane-id2" "Name": "my-cluster-control-plane-id3"

    每個執行個體均受到 node-role.eks-local.amazonaws.com/control-plane 污染,因此沒有在控制平面執行個體上排程工作負載。如需關於污點的詳細資訊,請參閱 Kubernetes 文件中的容差和污點。Amazon EKS 會持續監控本機叢集的狀態。我們會執行自動管理動作,如安全性修補程式和修復運作狀態不良的執行個體。如果本機叢集與雲端中斷連線,我們會完成動作,以確保在重新連線時將叢集修復為健全狀態。

  2. 如果您使用 eksctl 建立叢集,則可以略過此步驟。eksctl 會為您完成此步驟。透過向 kubectl config 檔案新增內容,使 kubectl 能夠與您的叢集通訊。如需如何建立和更新檔案的說明,請參閱 透過建立 kubeconfig 檔案將 kubectl 連線至 EKS 叢集

    aws eks update-kubeconfig --region region-code --name my-cluster

    範例輸出如下。

    Added new context arn:aws:eks:region-code:111122223333:cluster/my-cluster to /home/username/.kube/config
  3. 若要連線至您的本機叢集的 Kubernetes API 伺服器,請存取子網路的本機閘道,或從 VPC 內進行連線。如需有關將 Outpost 機架連接至內部部署網路的詳細資訊,請參閱《AWS Outposts 使用者指南》中的機架本機閘道的運作方式。如果使用直接 VPC 路由,且 Outpost 子網路具有通往您本機閘道的路由,則 Kubernetes 控制平面執行個體的私有 IP 位址會自動透過您的區域網路廣播。本機叢集的 Kubernetes API 伺服器端點託管在 Amazon Route 53 (Route 53) 中。API 服務端點可透過公有 DNS 伺服器將其解析為 Kubernetes API 伺服器的私有 IP 地址。

    本機叢集的 Kubernetes 控制平面執行個體設定為具有固定私有 IP 位址的靜態彈性網路介面,這些 IP 位址在叢集生命週期內不會變更。在網路連線中斷期間,與 Kubernetes API 伺服器互動的機器可能無法連線至 Route 53。如果是這種情況,建議使用靜態私有 IP 地址來設定 /etc/hosts 以繼續操作。我們還建議您設定本機 DNS 伺服器,並將其連接至 Outpost。如需詳細資訊,請參閱 AWS Outposts 文件。執行下列命令以確認與您的叢集建立通訊。

    kubectl get svc

    範例輸出如下。

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 28h
  4. (選用) 在本機叢集處於與 AWS 雲端中斷連線的狀態時測試本機叢集的驗證。如需說明,請參閱準備 AWS Outposts 上的本機 Amazon EKS 叢集,以應對網路中斷連線

內部資源

Amazon EKS 會在您的叢集上建立下列資源。這些資源供 Amazon EKS 內部使用。為了讓您的叢集正常運作,請勿編輯或修改這些資源。

  • 下列鏡射 Pod

    • aws-iam-authenticator-node-hostname

    • eks-certificates-controller-node-hostname

    • etcd-node-hostname

    • kube-apiserver-node-hostname

    • kube-controller-manager-node-hostname

    • kube-scheduler-node-hostname

  • 下列自我管理的附加元件:

    • kube-system/coredns

    • kube-system/ kube-proxy (在新增第一個節點之前不會建立)

    • kube-system/aws-node (在新增第一個節點之前不會建立)。本機叢集使用 Kubernetes 專用 Amazon VPC CNI 外掛程式進行叢集聯網。請勿變更控制平面執行個體 (名為 aws-node-controlplane-* 的 Pod) 的組態。外掛程式建立新網路介面時,您可以使用組態變數來變更預設值。如需詳細資訊,請參閱 GitHub 上的文件

  • 下列服務:

    • default/kubernetes

    • kube-system/kube-dns

  • 名為 eks.systemPodSecurityPolicy

  • 名為 eks:system:podsecuritypolicyClusterRole

  • 名為 eks:systemClusterRoleBinding

  • 除了叢集安全群組,Amazon EKS 還會在您名為 eks-local-internal-do-not-use-or-edit-cluster-name-uniqueid 的 AWS 帳戶中建立安全群組。此安全群組允許流量在控制平面執行個體上執行的 Kubernetes 元件之間自由流動。

建議的後續步驟: