如何在 Kubernetes 中部署應用程序
已發表: 2022-11-09Kubernetes 是最流行的自動化平台之一,用於在主機或節點集群上部署、擴展和操作應用程序容器。
本文將討論 Kubernetes 中的核心對象之一:部署。 目標是了解其行為以及如何創建、更新和刪除它。
什麼是部署?
Deployment 是用於啟動 Pod 的對象之一。 Kubernetes 最佳實踐鼓勵將部署用於無狀態應用程序。 如果沒有部署,您將需要手動創建、更新和刪除多個 Pod,這對於許多 Pod 來說既繁瑣又不可行。
部署在 YAML 中聲明了一個對象,該對像不僅可以創建 Pod,還可以確保它們是最新的並且正在運行。 您還可以使用 Kubernetes 上的部署輕鬆地自動擴展您的應用程序。 因此,部署用於在 Pod 中擴展、部署和回滾應用程序的版本。
部署還告訴 Kubernetes 我們要運行多少個 Pod 副本,其餘的由 Kubernetes 處理。 創建部署時,關聯的控制器將根據您的配置創建一個 ReplicaSet。 與 ReplicaSet 關聯的控制器將從 ReplicaSet 配置中創建一系列 Pod。
使用部署而不是直接創建 ReplicaSet 的優點是:
- 對象的歷史化:對像中的每次更改(通過“應用”或“編輯”)都將創建先前版本的備份。
- 推出和回滾管理:您可以返回與前一點相關的配置。
創建部署
我們可以使用兩種方法來創建 Kubernetes 部署:
命令式方法
Kubernetes API 允許更直接和命令式的方法,而不需要配置文件或 YAML 格式的清單。 在這種方法中,我們需要做的就是說出我們想要做什麼,而 Kubernetes 將負責定義必須做什麼才能達到預期的結果。
要使用命令式方法,只需使用以下命令:
kubectl create deployment nginx-deployment --image nginx --port=80
聲明式方法
在這種方法中,您必須聲明所有內容,當您使用此代碼時,Kubernetes 只會讀取您的定義並完全按照呈現或聲明的方式創建。
要使用聲明式部署,您必須創建一個 YAML 文件。
用於部署的 YAML 文件,名稱為new_deployment.yaml
:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: #Specifies the number of Pod Copies replicas: 3 #Selects the Pod to be managed by the deployment selector: #Matches the defined labels matchLabels: deploy: example template: metadata: #Specifies the labels on the Pod. labels: deploy: example spec: containers: - name: nginx image: nginx:1.20.2
在這個 YAML 文件中,在定義了 Kubernetes API 版本、您正在創建的對象的類型以及部署的名稱之後,就有了 spec 部分。 在本節中,您首先定義 replicas 鍵,它指示部署必須保持活動的 Pod 實例的數量。
使用選擇器標籤來標識部署中的 Pod。 為此,您可以使用 deploy 標籤,它告訴所有匹配這些標籤的 pod 都在部署中分組。
之後,您就擁有了模闆對象,其中您的部署規範中有一個 Pod 模型。 當部署創建 Pod 時,它使用此模板創建它們。 常規 pod 的規範可以在 template 鍵下找到。
通過此部署,帶有標籤的 Nginx 映像將部署到 Pod。 此外,在這一點上你也必須小心,而 Pod 是 Kubernetes 中的可擴展單元,所以如果你將多個容器放在同一個 Pod 中,你必須考慮要使用的模式。
接下來,應用new_deployment.yaml
Yaml 文件,使用以下命令:
kubectl apply -f new_deployment.yaml
幾秒鐘後,您可以使用以下命令獲取部署狀態:
kubectl get all

檢索和更新部署
請注意,您已經創建了 Pod、部署以及 Replicaset。 所以部署總是創建和管理一個 Replicaset。 現在您可以使用以下命令來描述部署:

kubectl describe deployment nginx-deployment

現在您對部署有了完整的描述。 當更新被定義為 RollingUpdate 時,它突出顯示了用於創建/重建 pod 的策略。
RollingUpdate策略允許將應用程序的一個版本有序遷移到新版本。 這是 Kubernetes 中使用的默認策略。
除此之外,我們還有以下策略:
- 重新創建:終止當前正在運行的 Pod 實例並使用新版本“重新創建”它們;
- 藍色/綠色:此策略創建兩個獨立但相同的環境。 在藍色環境中,應用程序按原樣運行,而在綠色環境中,應用程序按將來的方式運行;
- Canary:一種部署策略,其中一部分用戶參與應用程序或服務的增量發布。
如果您選擇“滾動更新”,您可以配置其關於所需副本數量的行為。
-
maxSurge
允許您指示(以百分比或絕對值表示)除了當前配置的副本數量外,它還可以創建多少個 Pod。 -
maxUnavailable
允許您指示(以百分比或絕對值)在更新期間有多少 Pod 可能“不可用”,具體取決於配置的副本數。
根據您的應用程序和自動縮放器,這些配置將允許您確保 QoS 或加快部署。
接下來,您必須將 Pod 縮放為 10,並將 Nginx 映像標籤更改為最新。
kubectl scale deployment nginx-deployment --replicas=10

請注意,我們創建了 5 個容器,在 10 個 Pod 中,我們有 5 個可用。
幾秒鐘後,使用以下命令:
kubectl get all
在這裡,您可以看到所有 Pod 都已創建,並且容器正在運行。

刪除您的部署
要刪除 Kubernetes 部署,您可以使用以下命令:
kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml
Helm:簡化部署
當你要部署一個使用數十甚至數百個 Kubernetes 資源的複雜應用程序時,kubectl 工具變得不合適,這就是開發 Helm 工具的原因。 Helm 是 Kubernetes 的包管理器,它構建在 kubectl 之上並簡化了應用程序部署。
在 Helm 詞彙表中,應用程序稱為發布。 它與圖表相關聯,即 YAML 格式的配置文件集合,其中包含描述 Kubernetes 資源的全局變量和模板。
結論
部署是必不可少的 Kubernetes 對象。 由於強大的權力意味著重大的責任,因此在配置它時必須小心,否則可能會出現意外行為。 要進一步了解部署配置,您可以參考 Kubernetes 文檔。
您還可以探索一些最好的 Kubernetes 教程,從頭開始學習並成為專家。