協助改善此頁面
想要為此使用者指南做出貢獻嗎? 捲動至此頁面底部,然後選取 [編輯此頁面於] GitHub。您的貢獻將有助於使我們的用戶指南更適合所有人。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
部署範例應用程式
在這個主題中,您要部署範例應用程式至叢集。
必要條件
-
一個現有的 Kubernetes 叢集至少會有一個節點。如果尚無現有 Amazon EKS 叢集,可以使用 開始使用 Amazon EKS 指南之一部署叢集。如果您正在部署 Windows 應用程式,則必須為叢集啟用 Windows 支援,以及啟用至少一個 Amazon EC2 Windows 節點。
-
安裝在電腦上的
Kubectl
。如需詳細資訊,請參閱 設定kubectl和 eksctl。 -
設定好的
Kubectl
,以便與叢集通訊。如需詳細資訊,請參閱 透過建立檔案 Connect 線kubectl至 EKS 叢集 kubeconfig。 -
如果打算將範例工作負載部署至 Fargate,則必須擁有現有的 Fargate 設定檔,其中包含在本教學課程中建立的相同命名空間,也就是
eks-sample-app
,除非您變更名稱。如果使用其中一個入門指南來建立叢集,則必須建立新的設定檔,或將命名空間新增至現有設定檔,因為在入門指南中建立的設定檔不會指定本教學課程中使用的命名空間。您的 VPC 也必須至少有一個私有子網路。
部署範例應用程式
雖然許多變數可在下列步驟中變更,但建議只在指定的位置變更變值。更加了解 Kubernetes Pods、部署和服務後,您可以嘗試變更其他值。
-
建立 命名空間。命名空間可讓您將 Kubernetes 中的資源分組。如需詳細資訊,請參閱 Kubernetes 文件中的命名空間
。如果打算將範例應用程式部署至 AWS Fargate,請確定您 AWS Fargate 設定檔 中的 namespace
值是eks-sample-app
。kubectl create namespace eks-sample-app
-
建立 Kubernetes 部署。此範例部署會從公有儲存庫提取容器映像,並將其三個複本 (個別 Pods) 部署至您的叢集。若要進一步了解,請參閱 Kubernetes 文件中的部署
。您可以將應用程式部署至 Linux 或 Windows 節點。如果要部署至 Fargate,則只能部署 Linux 應用程式。 -
將下列內容儲存到名為
eks-sample-deployment.yaml
的檔案中。範例應用程式中的容器不會使用網路儲存,但您可能有需要使用網路儲存的應用程式。如需詳細資訊,請參閱 儲存應用程式資。 -
將部署清單檔案套用至叢集。
kubectl apply -f eks-sample-deployment.yaml
-
-
建立服務。服務可讓您透過單一 IP 地址或名稱存取所有複本。如需詳細資訊,請參閱 Kubernetes 文件中的服務
。雖然未在範例應用程式中實作,但如果您的應用程式需要與其他 AWS 服務互動,建議您為您建立Kubernetes服務帳戶Pods,並將其關聯至 AWS IAM 帳戶。指定服務帳戶後,您的 Pods 僅能擁有您為它們指定與其他服務互動所需的最低許可。如需詳細資訊,請參閱 服務帳戶的 IAM 角色。 -
將下列內容儲存到名為
eks-sample-service.yaml
的檔案。Kubernetes 會為服務指派自己的 IP 地址,這些地址只能從叢集內存取。若要從叢集外部存取服務,請部署 AWS Load Balancer Controller,以將應用程式或網路流量負載平衡至服務。 -
將服務清單檔案套用至叢集。
kubectl apply -f eks-sample-service.yaml
-
-
檢視
eks-sample-app
命名空間中存在的所有資源。kubectl get all -n eks-sample-app
範例輸出如下。
如果部署了 Windows 資源,則下列輸出中的所有
執行個體都為linux
windows
。其他example values
可能與輸出不同。NAME READY STATUS RESTARTS AGE pod/eks-sample-
linux
-deployment-65b7669776-m6qxz
1/1 Running 0 27m pod/eks-sample-linux
-deployment-65b7669776-mmxvd
1/1 Running 0 27m pod/eks-sample-linux
-deployment-65b7669776-qzn22
1/1 Running 0 27m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/eks-sample-linux
-service ClusterIP10.100.74.8
<none> 80/TCP 32m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/eks-sample-linux
-deployment 3/3 3 3 27m NAME DESIRED CURRENT READY AGE replicaset.apps/eks-sample-linux
-deployment-776d8f8fd8
3 3 3 27m在輸出中,您會看到在先前步驟中所部署範例清單檔案中指定的服務和部署。您也會看到三個 Pods。這是因為範例清單檔案中指定了
3
個replicas
。如需有關 Pods 的詳細資訊,請參閱 Kubernetes 文件中的 Pod。Kubernetes 會自動創建 replicaset
資源,即使未在範例清單檔案指定也一樣。如需相關資訊ReplicaSets
,請參閱Kubernetes文件ReplicaSet中的。 注意
Kubernetes 會維護清單檔案中指定的複本數量。如果這是生產部署,並且您希望 Kubernetes 橫向擴展複本數量或垂直擴展 Pods 的運算資源,請使用 擴充網繭部署 Horizontal Pod Autoscaler 與 調整網繭資源 Vertical Pod Autoscaler 來執行此作業。
-
檢視已部署服務的詳細資訊。如果已部署 Windows 服務,請使用
windows
取代
。linux
kubectl -n eks-sample-app describe service eks-sample-
linux
-service範例輸出如下。
如果部署了 Windows 資源,則下列輸出中的所有
執行個體都為linux
windows
。其他example values
可能與輸出不同。Name: eks-sample-
linux
-service Namespace: eks-sample-app Labels: app=eks-sample-linux
-app Annotations: <none> Selector: app=eks-sample-linux
-app Type: ClusterIP IP Families: <none> IP:10.100.74.8
IPs:10.100.74.8
Port: <unset> 80/TCP TargetPort: 80/TCP Endpoints:192.168.24.212
:80,192.168.50.185
:80,192.168.63.93
:80 Session Affinity: None Events: <none>在先前的輸出中,
IP:
值是可從叢集內的任一個節點或 Pod 連線的唯一 IP 地址,但無法從叢集外部連線。Endpoints
值是從 VPC 內指派至服務一部分的 Pods 的 IP 地址。 -
在先前步驟中檢視命名空間時,請檢視輸出中列出的其中一個 Pods 詳細資訊。如果部署了 Windows 應用程式,請使用
windows
取代
,並用您的 Pods 中一個返回的值取代linux
。776d8f8fd8-78w66
kubectl -n eks-sample-app describe pod eks-sample-
linux
-deployment-65b7669776-m6qxz
縮寫輸出
如果部署了 Windows 資源,則下列輸出中的所有
執行個體都為linux
windows
。其他
可能與輸出不同。example values
Name: eks-sample-
linux
-deployment-65b7669776-m6qxz
Namespace: eks-sample-app Priority: 0 Node: ip-192-168-45-132
.us-west-2
.compute.internal/192.168.45.132
[...] IP:192.168.63.93
IPs: IP:192.168.63.93
Controlled By: ReplicaSet/eks-sample-linux
-deployment-65b7669776
[...] Conditions: Type Status Initialized True Ready True ContainersReady True PodScheduled True [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 3m20s default-scheduler Successfully assigned eks-sample-app/eks-sample-linux
-deployment-65b7669776-m6qxz
to ip-192-168-45-132
.us-west-2
.compute.internal [...]在先前的輸出中,
IP:
的值是唯一的 IP,從指派給節點所在子網路的 CIDR 區塊指派給 Pod。如果希望從不同的 CIDR 區塊指派 Pods IP 地址,則可以變更預設行為。如需詳細資訊,請參閱 Pod 的自訂聯網。您也可以看到 Kubernetes 排程器使用 IP 地址
排定了192.168.45.132
Node
上的 Pod。提示
若不使用命令列,您可以在 AWS Management Console中檢視有關 Pods、服務、部署和其他 Kubernetes 資源的許多詳細資訊。如需詳細資訊,請參閱 檢視 Kubernetes 資源。
-
在先前步驟中描述的 Pod 上執行 Shell,使用您 Pods 中的一個 ID 取代
。65b7669776-m6qxz
-
在 Pod Shell 中,檢視在先前步驟中與部署一起安裝的 Web 伺服器輸出。您只需要指定服務名稱。CoreDNS 會將服務名稱解析為服務的 IP 地址;其預設會與 Amazon EKS 叢集一起部署。
-
從 Pod Shell 中檢視 Pod 的 DNS 伺服器。
-
透過輸入
exit
中斷從 Pod 的連線。 -
完成範例應用程式後,您可以使用以下命令來移除範例命名空間、服務和部署。
kubectl delete namespace eks-sample-app
後續步驟
部署範例應用程式之後,您可能想要嘗試下列其中一些練習: