本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
部署和偵錯 Amazon EKS叢集
由 Svenja Raether (AWS) 和 Mathew George (AWS) 建立
環境:PoC 或試行 | 技術:容器與微服務;基礎設施;現代化;無伺服器; CloudNative | 工作負載:所有其他工作負載 |
AWS 服務:Amazon EKS;AWSFargate |
Summary
容器正在成為雲端原生應用程式開發的重要部分。Kubernetes 提供有效的方式來管理和協調容器。Amazon Elastic Kubernetes Service (Amazon EKS)
開發人員和管理員在執行容器化工作負載時,必須了解偵錯選項。此模式會逐步引導您在EKS使用 AWS Fargate
先決條件和限制
先決條件
作用中AWS帳戶
AWS Identity and Access Management (IAM) 角色已設定足夠的許可,可建立EKSIAM角色和服務連結角色並與之互動
安裝在本機電腦上的AWS命令列介面 (AWS CLI)
限制
此模式為開發人員提供開發環境的實用偵錯實務。它不會說明生產環境的最佳實務。
如果您執行 Windows,請使用作業系統特定的命令來設定環境變數。
使用的產品版本
架構
技術堆疊
Application Load Balancer
Amazon EKS
AWS Fargate
目標架構
圖表中顯示的所有資源都是使用 eksctl
和從本機機器發出的kubectl
命令來佈建。私有叢集必須從私有 內的執行個體執行VPC。
目標架構由使用 Fargate 啟動類型的EKS叢集組成。這提供隨需、大小正確的運算容量,而不需要指定伺服器類型。EKS 叢集具有控制平面,用於管理叢集節點和工作負載。Pod 會佈建至跨越多個可用區域的私有VPC子網路。Amazon ECR Public Gallery 用於擷取 NGINX Web 伺服器映像並將其部署至叢集的 Pod。
下圖顯示如何使用 kubectl
命令存取 Amazon EKS控制平面,以及如何透過使用 Application Load Balancer 存取應用程式。
.
Cloud 外部的本機機器會將命令AWS傳送至 Amazon EKS受管 內的 Kubernetes 控制平面VPC。
Amazon 會根據 Fargate 設定檔中的選取器來EKS排程 Pod。
本機機器會在瀏覽器URL中開啟 Application Load Balancer。
Application Load Balancer 會分割 Fargate 叢集節點中 Kubernetes Pod 之間的流量,這些節點部署在跨越多個可用區域的私有子網路中。
工具
AWS 服務
Amazon Elastic Container Registry (Amazon ECR) 是安全、可擴展且可靠的受管容器映像登錄服務。
Amazon Elastic Kubernetes Service (Amazon EKS) 可協助您在 上執行 Kubernetes,AWS而無需安裝或維護您自己的 Kubernetes 控制平面或節點。此模式也會使用 eksctl 命令列工具,在 Amazon 上使用 Kubernetes 叢集EKS。
AWS Fargate 可協助您執行容器,而無需管理伺服器或 Amazon Elastic Compute Cloud (AmazonEC2) 執行個體。它與 Amazon Elastic Container Service (Amazon ) 搭配使用ECS。
Elastic Load Balancing (ELB) 會將傳入的應用程式或網路流量分散到多個目標。例如,您可以在一或多個可用區域中跨 Amazon Elastic Compute Cloud (AmazonEC2) 執行個體、容器和 IP 地址分配流量。此模式使用 AWS Load Balancer 控制器控制元件,在佈建 Kubernetes 輸入
時建立 Application Load Balancer。Application Load Balancer 會在多個目標之間分配傳入流量。
其他工具
Helm
是 Kubernetes 的開放原始碼套件管理員。在此模式中,Helm 用於安裝 AWS Load Balancer 控制器。 Kubernetes
是一種開放原始碼系統,用於自動化容器化應用程式的部署、擴展和管理。 NGINX
是高效能 Web 和反向代理伺服器。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
建立檔案。 | 使用其他資訊區段中的程式碼,建立下列檔案:
| 應用程式開發人員、AWS管理員、 AWS DevOps |
設定環境變數。 | 注意:如果命令因為先前的未完成任務而失敗,請等待幾秒鐘,然後再次執行命令。 此模式使用 檔案 中定義的AWS區域和叢集名稱
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
建立 EKS 叢集 | 若要建立使用
檔案包含 預設 Fargate 設定檔設定有兩個選取器 ( | 應用程式開發人員、AWS DevOps、AWS管理員 |
檢查已建立的叢集。 | 若要檢查建立的叢集,請執行下列命令。
輸出應該如下。
使用 檢查建立的 Fargate 設定檔
此命令會顯示 資源的相關資訊。您可以使用資訊來驗證建立的叢集。輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
部署 NGINX Web 伺服器。 | 若要在叢集上套用 NGINX Web 伺服器部署,請執行下列命令。
輸出應該如下。
部署包含三個從 Amazon ECR Public Gallery 擷取NGINX的映像複本。映像會部署到預設命名空間,並在執行中的 Pod 上的連接埠 80 上公開。 | 應用程式開發人員、AWS DevOps、AWS系統管理員 |
檢查部署和 Pod。 | (選用) 檢查部署。您可以使用下列命令來驗證部署的狀態。
輸出應該如下。
Pod 是 Kubernetes 中的可部署物件,包含一或多個容器。若要列出所有 Pod,請執行下列命令。
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS管理員 |
擴展部署。 | 若要將部署從 中指定的三個複本擴展
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
設定環境變數。 | 描述叢集的 CloudFormation 堆疊,以擷取其 的相關資訊VPC。
輸出應該如下。
複製 VPC ID 並將其匯出為環境變數。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
IAM 為叢集服務帳戶設定 。 | 使用先前史詩
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
下載並建立IAM政策。 | 下載 AWS Load Balancer 控制器IAM的政策,允許其AWSAPIs代表您呼叫 。
使用 AWS 在AWS帳戶中建立政策CLI。
您應該會看到下列輸出。
將政策的 Amazon Resource Name (ARN) 儲存為
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
建立IAM服務帳戶。 | 在
驗證建立。
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
安裝 AWS Load Balancer 控制器。 | 更新 Helm 儲存庫。
將 Amazon EKS圖表儲存庫新增至 Helm 儲存庫。
套用 Kubernetes 自訂資源定義 (CRDs),供背景中的 AWS Load Balancer Controller eks-chart
輸出應該如下。
使用您先前設定的環境變數,安裝 Helm Chart。
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
建立 NGINX 服務。 | 使用
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
建立 Kubernetes 輸入資源。 | 使用
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
取得負載平衡器 URL。 | 若要擷取輸入資訊,請使用下列命令。
輸出應該如下。
從輸出複製 | 應用程式開發人員、AWS DevOps、AWS系統管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
選取 Pod。 | 列出所有 Pod,並複製所需的 Pod 名稱。
輸出應該如下。
此命令會列出現有的 Pod 和其他資訊。 如果您對特定 Pod 感興趣,請填寫您感興趣的
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
存取日誌。 | 從您要偵錯的 Pod 取得日誌。
| 應用程式開發人員、AWS系統管理員 AWS DevOps |
轉送NGINX連接埠。 | 使用連接埠轉送將 Pod 的連接埠映射至本機機器上的連接埠,以存取 NGINX Web 伺服器。
在瀏覽器中開啟下列 URL。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
在 Pod 中執行命令。 | 若要查看目前的
您可以使用 | 應用程式開發人員、AWS DevOps、AWS系統管理員 |
將檔案複製到 Pod。 | 移除此 Pod 上的預設
將自訂本機檔案上傳至
您可以使用 | 應用程式開發人員、AWS DevOps、AWS系統管理員 |
使用連接埠轉送來顯示變更。 | 使用連接埠轉送來驗證您對此 Pod 所做的變更。
在瀏覽器URL中開啟下列項目。
套用 | 應用程式開發人員、AWS DevOps、AWS系統管理員 |
任務 | 描述 | 所需的技能 |
---|---|---|
刪除負載平衡器。 | 刪除輸入。
輸出應該如下。
刪除服務。
輸出應該如下。
刪除負載平衡器控制器。
輸出應該如下。
刪除服務帳戶。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
刪除部署。 | 若要刪除部署資源,請使用下列命令。
輸出應該如下。
| 應用程式開發人員、AWS DevOps、AWS系統管理員 |
刪除叢集。 | 使用下列命令刪除EKS叢集,其中
此命令會刪除整個叢集,包括所有相關資源。 | 應用程式開發人員、AWS DevOps、AWS系統管理員 |
刪除IAM政策。 | 使用 AWS 刪除先前建立的政策CLI。
| 應用程式開發人員、AWS管理員、 AWS DevOps |
故障診斷
問題 | 解決方案 |
---|---|
建立叢集時,您會收到錯誤訊息
| 使用錯誤訊息中建議的可用區域再次建立叢集。指定 |
相關資源
其他資訊
clusterconfig-fargate.yaml
apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-fargate region: us-east-1 fargateProfiles: - name: fp-default selectors: - namespace: default - namespace: kube-system
nginx-deployment.yaml
apiVersion: apps/v1 kind: Deployment metadata: name: "nginx-deployment" namespace: "default" spec: replicas: 3 selector: matchLabels: app: "nginx" template: metadata: labels: app: "nginx" spec: containers: - name: nginx image: public.ecr.aws/nginx/nginx:latest ports: - containerPort: 80
nginx-service.yaml
apiVersion: v1 kind: Service metadata: annotations: alb.ingress.kubernetes.io/target-type: ip name: "nginx-service" namespace: "default" spec: ports: - port: 80 targetPort: 80 protocol: TCP type: NodePort selector: app: "nginx"
nginx-ingress.yaml
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: "default" name: "nginx-ingress" annotations: kubernetes.io/ingress.class: alb alb.ingress.kubernetes.io/scheme: internet-facing spec: rules: - http: paths: - path: / pathType: Prefix backend: service: name: "nginx-service" port: number: 80
index.html
<!DOCTYPE html> <html> <body> <h1>Welcome to your customized nginx!</h1> <p>You modified the file on this running pod</p> </body> </html>