Amazon EKS – AWS 管理主控台 和 入門 AWS CLI - Amazon EKS

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EKS – AWS 管理主控台 和 入門 AWS CLI

本指南可協助您使用 Amazon Elastic Kubernetes Service 和 建立開始使用 Amazon EKS (AWS 管理主控台) 的所有所需資源AWS CLI。在本指南中,您會手動建立每個資源。在本教學課程的最後,您將擁有一個執行中Amazon EKS的叢集,可供您部署應用程式。

本指南中的程序可讓您完全瞭解每個資源的建立方式,以及資源彼此之間的互動方式。如果您希望自動為您建立大部分資源,請使用 eksctl CLI 建立叢集和節點。如需詳細資訊,請參閱入門 Amazon EKS – eksctl.

Prerequisites

開始本教學課程之前,您必須安裝並設定下列需要用來建立和管理 Amazon EKS 叢集的工具和資源。

  • AWS CLI – 一種命令列工具,可用來處理 AWS 服務 (包括 Amazon EKS)。本指南要求您使用 版本 2.1.26 或更新版本,或 1.19.7 或更新版本。如需詳細資訊,請前往 安裝、更新及解除安裝 中的 AWS AWS Command Line Interface 使用者指南CLI。安裝 AWS CLI之後,建議您也設定它。如需詳細資訊,請查看 中 aws configure快速組態AWS Command Line Interface 使用者指南。

  • kubectl – 適用於 Kubernetes 叢集的命令列工具。本指南要求您使用 版本 1.19 或更新版本。如需詳細資訊,請參閱安裝 kubectl.

  • 所需IAM許可 – 您使用IAM的安全主體必須具有使用Amazon EKSIAM角色和服務連結角色、 AWS CloudFormation以及 VPC 和相關資源的許可。如需詳細資訊,請查看 中 Amazon Elastic Amazon Elastic Container Service for Kubernetes使用服務連結角色https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html的動作、資源和條件金鑰IAM 使用者指南。您必須以相同的使用者身分完成本指南中的所有步驟。

步驟 1:建立您的 Amazon EKS 叢集

建立 Amazon EKS 叢集

重要

若要快速且簡單地開始使用,此主題包含以預設設定建立叢集和節點的步驟。建立叢集和節點供實際使用之前,我們建議您熟悉所有設定,並使用符合您需求的設定來部署叢集和節點。如需詳細資訊,請查看 建立 Amazon EKS 叢集Amazon EKS 節點

建立叢集

  1. 建立Amazon VPC符合 Amazon EKS 要求的公有和私有子網路。

    aws cloudformation create-stack \ --stack-name my-eks-vpc-stack \ --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
  2. 建立叢集IAM角色,並將所需的 Amazon EKS IAM 受管政策連接至該角色。受 Amazon EKS 管理的 Kubernetes 會代表您呼叫其他 AWS 服務,以管理您搭配本服務使用的資源。

    1. 將以下項目複製到名為 的檔案cluster-role-trust-policy.json

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 建立 角色。

      aws iam create-role \ --role-name myAmazonEKSClusterRole \ --assume-role-policy-document file://"cluster-role-trust-policy.json"
    3. 將所需的Amazon EKSIAM受管政策連接到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \ --role-name myAmazonEKSClusterRole
  3. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

    確認主控台右上方的區域為 。如果不是,請選取區域名稱旁的下拉式清單,然後選取 美國西部 (奧勒岡) us-west-2。雖然您可以在任何Amazon EKS支援的區域中建立叢集,但在此教學中,叢集是在 美國西部 (奧勒岡) us-west-2 中建立。

  4. 選取 Create cluster (建立叢集)。如果您未看到此選項,請在 Create EKS cluster (建立 EKS 叢集) 方塊中,輸入您的叢集名稱,例如 my-cluster,然後選取 Next step (下一個步驟)。

  5. Configure cluster (設定叢集) 頁面上,輸入您的叢集名稱,例如 my-cluster (my-cluster) 並選取 myAmazonEKSClusterRole :適用於叢集服務角色的 。將其餘設定保留為其預設值,然後選取 Next (下一步)。

  6. Specify networking (指定聯網) 頁面上,選取 vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPCVPC 下拉式清單中。將其餘設定保留為其預設值,然後選取 Next (下一步)。

  7. Configure logging (設定登入) 頁面上,選取 Next (下一步)。

  8. 在 Review and create (檢視和建立) 頁面,選取 Create (建立)。

    在叢集名稱的右側,叢集狀態為 Creating (建立中) 幾分鐘,直到叢集設定程序完成。在狀態為 Active (作用中) 之前,請不要繼續下一個步驟。

    注意

    您可能會收到錯誤,表示在請求中的其中一個 可用區域 沒有足夠的容量可建立 Amazon EKS 叢集。如果發生這種情況,錯誤輸出包含的 可用區域 可支援新的叢集。使用至少兩個位於帳戶的支援 可用區域 子網路來建立您的叢集。如需詳細資訊,請參閱容量不足

步驟 2:設定電腦以與您的叢集通訊

在本節中,您會為您的叢集建立 kubeconfig 檔案。此檔案中的設定可讓 kubectl CLI 與您的叢集進行通訊。

將您的電腦設定為與 叢集通訊

  1. 為您的叢集建立或更新kubeconfig檔案。如有必要,請取代 us-west-2 ,加上您建立叢集的 區域。

    aws eks update-kubeconfig \ --region us-west-2 \ --name my-cluster

    根據預設config,檔案建立於 ~/.kube 或新叢集的組態新增至 中的現有config檔案~/.kube

  2. 測試組態。

    kubectl get svc
    注意

    如果您收到任何授權或資源類型錯誤,請參閱故障診斷一節中的 未經授權或存取遭拒 (kubectl)

    輸出

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m

步驟 3:建立 IAM OpenID Connect (OIDC) 供應商

為您的叢集建立 IAM OpenID Connect (OIDC) 供應商,讓工作負載所使用的 Kubernetes 服務帳號可以存取 AWS 資源。您只需要為叢集完成此步驟一次。

  1. 選取 Configuration (組態) 標籤。

  2. Details (詳細資訊) 區段中,複製 OpenID Connect provider URL (連接供應商 URL) 的值。

  3. 開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

  4. 在導覽面板中,選擇 Identity Providers (身分供應商)。

  5. 選擇 Add Provider (新增供應商)。

  6. 針對 Provider Type (提供者類型),選擇 OpenID Connect (連接)。

  7. 針對 Provider URL (提供者 URL),從步驟二貼上叢集的 OIDC 供應商 URL,然後選擇 Get cumbprint (取得指紋)。

  8. 針對 Audience (對象),輸入 sts.amazonaws.com 並選擇 Add provider (新增提供者)。

步驟 4:建立節點

您可以使用下列其中一個節點類型來建立叢集。若要進一步了解每種類型,請前往Amazon EKS 節點。部署您的叢集之後,您可以新增其他節點類型。

  • Fargate – Linux 如果您想要在 上執行 Linux 應用程式–,請選取此類型AWS Fargate。

  • 受管節點 – Linux 如果您想要在 – 執行個體上執行Amazon Linux應用程式Amazon EC2,請選取此類型。雖然本指南未涵蓋,但您也可以將 Windows 自我管理和 Bottlerocket 節點新增到您的叢集。叢集必須至少包含一個 Linux 節點,即使所有工作負載都是 Windows 一樣。

選取含有您要建立之節點類型名稱的標籤。

Fargate – Linux

建立Fargate設定檔。以符合設定檔中定義之準則的準則部署 Kubernetes Pod 時,會將 Pod 部署至 Fargate。

建立Fargate設定檔

  1. 建立 IAM 角色,並將所需的 Amazon EKS IAM 受管政策連接至該角色。當您的叢集在 Fargate 基礎設施上建立 Pod 時Fargate,基礎設施上執行的元件需要AWSAPIs代表您呼叫 ,以執行提取容器映像Amazon ECR或路由至其他 AWS 服務。Amazon EKS Pod 執行角色提供進行此類工作的 IAM 許可。

    1. 將以下項目複製到名為 的檔案pod-execution-role-trust-policy.json

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 建立 Pod 執行IAM角色。

      aws iam create-role \ --role-name myAmazonEKSFargatePodExecutionRole \ --assume-role-policy-document file://"pod-execution-role-trust-policy.json"
    3. 將所需的Amazon EKSIAM受管政策連接到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy \ --role-name myAmazonEKSFargatePodExecutionRole
  2. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  3. 選擇要為其建立Fargate設定檔的叢集,然後選取 Configuration (組態) 索引標籤,然後選取 Compute (運算) 索引標籤。

  4. Fargate profiles (描述檔) 下,選擇 Add profile (新增Fargate描述檔)。

  5. Configure profile (設定Fargate描述檔) 頁面上,輸入下列資訊,然後選擇 Next (下一步)。

    1. 對於 Name (名稱),輸入Fargate您設定檔的唯一名稱,例如 my-profile.

    2. 針對 Pod execution role (Pod 執行角色),選擇 myAmazonEKSFargatePodExecutionRole 您在步驟一建立的 角色。

    3. 選取 Subnets (子網路) 下拉式清單,並取消選取任何具有 名稱Public的子網路。只有私有子網路支援在 上執行的 FargatePod。

  6. Configure pods selection (設定 Pod 選擇) 頁面,輸入下列資訊並選擇 Next (下一步).

    1. 針對 Namespace (命名空間),輸入 default.

  7. Review and create (檢閱和建立) 頁面,檢閱您 Fargate 設定檔的資訊並選擇 Create (建立).

Managed nodes – Linux

建立受管節點群組,指定您在先前步驟中建立的子網路和節點IAM角色。

建立您的 Amazon EC2 Linux 受管節點群組

  1. 為 IAM CNI plugin 建立 Amazon VPC 角色,並將所需的 Amazon EKS IAM 受管政策連接至其中。根據預設Amazon EKSAmazon VPC,CNI plugin 安裝在叢集上。plugin 可讓 Kubernetes pod 在 pod 中具有相同的 IP 地址,與在 VPC 網路上這樣做相同。

    1. 將以下項目複製到名為 的檔案cni-role-trust-policy.json。 將 <111122223333> (包括 <>) 取代為帳號 ID,並將 <XXXXXXXXXX45D83924220DC4815XXXXX> 取代為最後一個 / OpenID Connect 供應商 URL 之後的值。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::<111122223333>:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.us-west-2.amazonaws.com/id/<XXXXXXXXXX45D83924220DC4815XXXXX>:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
    2. 為 IAM CNI Plugin 建立 Amazon VPC 角色。

      aws iam create-role \ --role-name myAmazonEKSCNIRole \ --assume-role-policy-document file://"cni-role-trust-policy.json"
    3. 將所需的Amazon EKSIAM受管政策連接到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myAmazonEKSCNIRole
  2. 將 VPC CNI plugin 使用的 Kubernetes 服務帳號關聯至IAM角色。以帳號 ID <111122223333>取代 <> (包括 )。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name vpc-cni \ --service-account-role-arn arn:aws:iam::<111122223333>:role/myAmazonEKSCNIRole
  3. 建立節點IAM角色,並將所需的 Amazon EKS IAM 受管政策連接至該角色。Amazon EKS 節點kubelet協助程式AWSAPIs會代表您呼叫 。節點透過IAM執行個體描述檔和關聯的政策接收這些 API 呼叫的許可。

    1. 將以下項目複製到名為 的檔案node-role-trust-policy.json

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. 建立節點IAM角色。

      aws iam create-role \ --role-name myAmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-policy.json"
    3. 將所需的Amazon EKSIAM受管政策連接到角色。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name myAmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name myAmazonEKSNodeRole
  4. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  5. 選擇您在 中建立的叢集名稱步驟 1:建立您的 Amazon EKS 叢集,例如 my-cluster (my-cluster).

  6. 選取 Configuration (組態) 索引標籤。

  7. Configuration (組態) 索引標籤上,選取 Compute (運算) 標籤,然後選擇 Add Node Group (新增節點群組)。

  8. Configure node group (設定節點群組) 頁面上,相應地填寫參數,接受剩餘的預設值,然後選擇 Next (下一步)。

    • Name (名稱–) 輸入受管節點群組的唯一名稱,例如 my-nodegroup

    • Node IAM role name (節點角色名稱–) 選擇 myAmazonEKSNodeRole。 在本入門指南中,此角色必須僅用於此節點群組,而不能用於其他節點群組。

  9. Set compute and scaling configuration (設定運算和擴展組態) 頁面上,接受預設值,然後選取 Next (下一步)。

  10. Specify networking (指定聯網) 頁面上,選取要用於 的現有金鑰對SSH key pair,然後選擇 Next (下一步)。如果不需要金鑰對,您可以使用下列命令建立一個。如有必要,將 變更us-west-2為您建立叢集的區域。請務必將傳回的輸出儲存在本機電腦上的檔案。如需詳細資訊,請前往 在 中建立或匯入金鑰對Linux 執行個體的 Amazon EC2 使用者指南。雖然本指南不需要該索引鍵,但您只能指定建立節點群組時要使用的索引鍵。指定 金鑰可讓您在建立之後,使用 SSH 連接到節點。

    aws ec2 create-key-pair --region us-west-2 --key-name myKeyPair
  11. Review and create (檢閱並建立) 頁面上,檢閱您的受管節點群組組態,然後選擇 Create (建立).

  12. 在幾分鐘後,節點群組組態區段中的狀態會從 Creating (正在建立) 變更為 Active (作用中)。在狀態為 Active (作用中) 之前,請不要繼續下一個步驟。

步驟 5:檢視資源

您可以檢視節點和 Kubernetes 工作負載。

檢視您的節點

  1. 在左側窗格中選取 Clusters (叢集),然後在 Clusters 叢集) 清單中,選取您建立的叢集名稱,例如 my-cluster (my-cluster).

  2. Overview (概觀) 標籤上,您會看到針對叢集所部署的 Nodes (節點) 清單。您可以選取節點的名稱來查看其詳細資訊。如需您在此看到之項目的詳細資訊,請查看檢視節點

  3. 在叢集的 Workloads (工作負載) 標籤上,您會看到預設部署到 Amazon EKS 叢集的工作負載清單。您可以選取工作負載的名稱,查看該工作負載的詳細資訊。如需您在此看到之項目的詳細資訊,請查看檢視工作負載

步驟 6:將叢集和節點移除

在您用畢為本教學課程所建立的叢集和節點後,您應該將叢集和節點除名來進行清理。如果您想要在此叢集執行更多操作,再進行清理,請查看後續步驟

删除您的叢集和節點

  1. 删除所有節點群組和Fargate設定檔。

    1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

    2. 在左側導覽中,選取 Clusters (叢集),然後在叢集清單中,選取您要移除的叢集名稱。

    3. 選取 Configuration (組態) 標籤。在 Compute (運算) 標籤上,選取:

      • 您在前一個步驟中建立的節點群組,選取 Delete (移除)。輸入節點群組的名稱,然後選取 Delete。

      • 您在上一個步驟中建立的 Fargate Profile (設定檔),選取 Delete (移除)。輸入設定檔名稱,然後選取 Delete (移除)。

  2. 刪除叢集。

    1. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

    2. 選取要刪除的叢集並選擇 Delete (刪除).

    3. 在刪除叢集確認畫面上,選擇 Delete (刪除).

  3. 删除您在本指南中建立的 VPC AWS CloudFormation 堆疊。

    1. 開啟位於 AWS CloudFormation 的 https://console.aws.amazon.com/cloudformation. 主控台。

    2. 選取要删除的 VPC 堆疊,然後選擇 Delete。

    3. Delete Stack confirmation (Delete 堆疊確認) 畫面上,選擇 Delete stack (Delete 堆疊)。

  4. 删除您建立的IAM角色。

    1. 開啟位於 https://console.aws.amazon.com/iam/ 的 IAM 主控台。

    2. 在左側導覽窗格中,選取 Roles (角色)。

    3. 選取myAmazonEKSClusterRole 從清單中。選取 Delete role (移除角色),然後選取 Yes, Delete (是,移除)。刪除myAmazonEKSFargatePodExecutionRolemyAmazonEKSNodeRole 您建立的 角色和 myAmazonEKSCNIRole 角色 (如果您建立了的話)。

後續步驟

現在您已有含節點的運作中Amazon EKS叢集,您可以開始安裝 Kubernetes 附加元件,並將應用程式部署到您的叢集。以下文件主題可協助您擴展叢集的功能。

  • 建立叢集的 IAM 實體 (使用者或角色) 會新增到 Kubernetes RBAC 授權表格做為管理員 (具有 system:masters 許可)。一開始,只有該 IAM 使用者可以使用 kubectl 對 Kubernetes API 伺服器進行呼叫。如果您希望其他使用者擁有叢集的存取權,則必須將它們新增至 aws-auth ConfigMap。如需詳細資訊,請參閱管理叢集的使用者或 IAM 角色

  • 限制對 IMDS 的存取權 – 如果您打算將 IAM 角色指派給所有 Kubernetes 服務帳戶,以便 Pod 只具有所需的最低許可,而叢集中沒有 Pod 需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS) 的其他原因,例如擷取目前區域,那麼我們建議封鎖 Pod 存取 IMDS。如需更多詳細資訊,請參閱 IAM服務帳戶的 角色限制存取 IMDS 和 Amazon EC2 執行個體描述檔登入資料

  • Cluster Autoscaler – 配置 Kubernetes Cluster Autoscaler 以自動調整節點群組中的節點數量。

  • 部署範例 Linux 工作負載 – 部署範例 Linux 應用程式以測試您的叢集和 Linux 節點。

  • 叢集管理 – 了解如何使用重要工具來管理叢集。