練習 - 將微服務容器部署到 Kubernetes
Kubernetes 會為您執行容器。 您會描述您希望 Kubernetes 透過 YAML 檔案執行的動作。 此練習會逐步引導您建立檔案,以便您可以在 Kubernetes 上部署和執行 後端 服務。
這很重要
在繼續之前,您必須確定您已安裝 Kubernetes 實作。 我們將使用在程式代碼空間中執行的 k3d 實作。 我們將安裝此實作來啟動實驗室。
安裝 Kubernetes 工具和實作
我們需要安裝 kubectl 工具和 k3d Kubernetes 實作:
在 codespace 中,切換至 [終端機 ] 索引卷標,然後執行下列命令以安裝必要條件:
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl接下來,若要下載 Kubernetes 套件存放庫的簽署金鑰,請執行下列命令:
sudo mkdir /etc/apt/keyrings curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg如果您收到目錄已存在的錯誤,請個別執行
curl命令。將 Kubernetes 存放庫新增至 您的 apt 組態:
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list現在,您可以安裝 kubectl 工具:
sudo apt-get update sudo apt-get install -y kubectl最後,安裝 Kubernetes 的 k3d 實作並建立叢集:
curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | bash k3d cluster create devcluster --config k3d.yml
建立後端服務的部署檔案
您可以使用 YAML 檔案,在 Kubernetes 中建立管理容器部署的檔案。 讓我們建立檔案來部署後端服務。
在名為 backend-deploy.yml 之 codespace 的 donet-kubernetes 資料夾中建立新檔案。
將下列文字複製到檔案中,然後儲存它。
--- apiVersion: apps/v1 kind: Deployment metadata: name: productsbackend spec: replicas: 1 template: metadata: labels: app: productsbackend spec: containers: - name: productsbackend image: [YOUR DOCKER USER NAME]/productservice:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 selector: matchLabels: app: productsbackend --- apiVersion: v1 kind: Service metadata: name: productsbackend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32001 selector: app: productsbackend使用你實際的 Docker 使用者名稱替換佔位符
[YOUR DOCKER USER NAME]。
此檔案會執行一些動作。
第一個部分會定義要部署到 Kubernetes 之容器的部署規格。 它指定一個副本、容器映像的位置、指定在容器上開啟哪些端口,並設置一些環境變數。 第一個部分也會定義可用來參考容器和規格的標籤和名稱。
第二個部分接著會定義容器以 Kubernetes NodePort 服務的形式執行。 針對本課程模組,您不需要瞭解 NodePorts 的所有細節。 不過,您應該知道這種類型的服務會公開外部IP位址,讓您可以從叢集外部測試服務。
部署和執行後端微服務
接下來,讓我們部署並執行微服務。
在 [ 終端機] 索引標籤中,執行下列命令:
kubectl apply -f backend-deploy.yml此命令會告知 Kubernetes 執行我們建立的檔案。 它會從 Docker Hub 下載映像並建立容器。
kubectl apply命令會快速傳回。 但是容器建立可能需要一些時間。 若要檢視進度,請使用下列程序代碼。kubectl get pods在產生的輸出中,您會看到一行包含 productsbackend,緊接著是在 NAME 欄下方的一串隨機字元。 當一切就緒時,READY 欄下會有 1/1,STATUS 欄下會顯示 執行。
若要測試服務,請切換至 埠 索引標籤,靠近 後端 本機位址,選取地球圖示。 瀏覽器會在該地址開啟新的索引標籤。
若要查詢某些產品,請使用 /api/product 附加位址,然後按 Enter。 您應該會看到 JSON 格式列出的一些產品資訊。
[ { "id": 1, "name": "Solar Powered Flashlight", "description": "A fantastic product for outdoor enthusiasts", "price": 19.99, "imageUrl": "product1.png" }, { "id": 2, "name": "Hiking Poles", "description": "Ideal for camping and hiking trips", "price": 24.99, "imageUrl": "product2.png" }, { "id": 3, "name": "Outdoor Rain Jacket", "description": "This product will keep you warm and dry in all weathers", "price": 49.99, "imageUrl": "product3.png" }, ...
建立部署檔案並執行前端服務
就像後端服務一樣,我們也需要前端的部署檔案。
在名為 frontend-deploy.yml 的 donet-kubernetes 資料夾中建立新檔案
將下列程式碼貼到檔案中:
--- apiVersion: apps/v1 kind: Deployment metadata: name: storefrontend spec: replicas: 1 template: metadata: labels: app: storefrontend spec: containers: - name: storefrontend image: [YOUR DOCKER USER NAME]/storeimage:latest ports: - containerPort: 80 env: - name: ASPNETCORE_URLS value: http://*:80 - name: ProductEndpoint value: http://productsbackend selector: matchLabels: app: storefrontend --- apiVersion: v1 kind: Service metadata: name: storefrontend spec: type: NodePort ports: - port: 80 targetPort: 80 nodePort: 32000 selector: app: storefrontend使用你實際的 Docker 使用者名稱替換佔位符
[YOUR DOCKER USERNAME]。請注意,此檔案類似於我們為後端微服務建立的檔案。 有兩個差異:
- 我們會指定一個不同的容器,以在部署中的
spec.template.spec.containers.image值下運行。 - 區段下
spec.template.spec.containers.env有新的環境變數。 前端商店應用程式中的程式碼會呼叫後端,但因為我們未指定完整合格的域名(FQDN),所以我們不知道後端微服務的IP位址。我們會使用在metadata.name節點底下Deployment中指定的名稱。 Kubernetes 會負責其餘部分。
- 我們會指定一個不同的容器,以在部署中的
使用下列命令將容器部署至 Kubernetes:
kubectl apply -f frontend-deploy.yml同樣地,您可以使用
kubectl get pods來查看部署的狀態。 只要 storefrontend 資料列在 [狀態] 資料行下顯示正在執行,即表示一切都已準備就緒。若要測試前端服務,請切換至 [連接埠] 索引標籤,然後到 [前端] 連接埠的本機位址右側,選取地球圖示。 瀏覽器會顯示首頁。
選取產品。 目錄會顯示 Contoso 的商品。
在此練習中,您已建立一個部署檔案,其描述您希望容器在 Kubernetes 中執行的方式。 然後,Kubernetes 會從 Docker Hub 下載映射並啟動容器。