在 Azure Kubernetes Service 叢集上部署應用程式
您的公司正在尋找部署雲端影片轉譯服務的方法。 您選擇 Azure Kubernetes Service (AKS) 作為雲端原生開發平台。 設定好叢集之後,即可在影片轉譯應用程式中部署其中一個元件。 您決定要部署公司網站的靜態版本,以探索 Kubernetes 部署程序。
在討論 Kubernetes 的部署方式之前,讓我們先複習一些將類似應用程式部署到非 Kubernetes 環境時所需採取的步驟。
假設您正在使用 Azure 虛擬機器 (VM) 作為目標平台。 第一個步驟是準備伺服器軟體以裝載應用程式。 您將會:
- 安裝作業系統。
- 確實將 OS 更新至最新的安全性和軟體修補程式。
- 安裝並設定網頁伺服器軟體。
- 部署 Web 應用程式。
當決定要擴增網站以處理增加的客戶需求時,針對每部新的 VM 重複此程序。
替代方法是在 Azure 容器執行個體等容器型平台上執行網站。 您不需要擔心底層伺服器技術,但必須設定及管理數個容器,以手動使用此策略。
Kubernetes 和 AKS 可有助協調容器。 Kubernetes 容器協調功能可方便管理叢集上的工作負載。 您會使用從容器映像建立的容器來部署工作負載,以在 AKS 叢集中執行應用程式。
您可在這裡探索如何在 AKS 叢集中建立工作負載。
容器登錄是什麼?
容器登錄可供將容器映像安全儲存在雲端,以供日後部署。 您可將容器登錄視為儲存多個容器映像版本的封存。 每個儲存映像都有指派的識別標籤。
例如,您可能會有映像 contoso-website:latest
,這可能是標籤為 contoso-website:v1.0.0
之映像的不同版本。
容器登錄可以是公用的,也可以是私人的。 私人登錄需要認證才能存取及下載映像,而這會是您在儲存容器映像時所遵循的策略。
Kubernetes 只允許部署裝載在容器登錄中的映像。 建立私人容器登錄通常會是標準 AKS 部署策略的一部分。
Kubernetes Pod 是什麼?
Kubernetes Pod 會將容器和應用程式分組成邏輯結構。 這些 Pod 沒有智慧,且由一或多個應用程式容器所組成。 其每一個都有一個 IP 位址、網路規則和公開的連接埠。
例如,如果想要搜尋與 contoso-website
相關的所有工作負載,您會查詢叢集以尋找具有標籤 app
和值 contoso-website
的 Pod。
Kubernetes 部署是什麼?
Kubernetes 部署是 Pod 的演進。 部署會將 Pod 包裝成智慧型物件,以供其進行擴增。您可以輕鬆複製並調整應用程式以支援更多負載,而不需要設定複雜的網路規則。
部署可供使用者在不需停機的情況下,只要變更映像標籤即可更新應用程式。 更新部署時,部署會逐一關閉線上應用程式,而不是刪除所有應用程式。 然後,部署會以最新版本取代它們。 這個層面表示任何部署都可更新內部的 Pod,對可用性沒有肉眼可見的影響。
Kubernetes 資訊清單檔
Kubernetes 資訊清單檔可供以宣告方式使用 YAML 格式來描述工作負載,並簡化 Kubernetes 物件管理。
假設必須手動部署工作負載。 您必須考慮和管理數個層面。 您必須建立容器、選取特定的節點、將節點包裝在 Pod 中、執行 Pod、監視執行等。
資訊清單檔包含建立及管理所述工作負載所需的所有資訊。
Kubernetes 標籤是什麼?
Kubernetes 標籤可讓您以邏輯方式將 Kubernetes 物件組成群組。 這些標籤可讓系統查詢叢集,以尋找符合特定名稱標籤的物件。
資訊清單檔的結構
資訊清單檔的結構會因所建立資源類型而不同。 不過,資訊清單檔會共用常見的指示。 這些指示會定義各種層面,例如要使用的 API,以及要建立的工作負載類型。
所有資訊清單檔中的前兩個項目都有兩個重要的機碼:apiVersion
和 kind
。 以下是部署檔案的範例。
apiVersion: apps/v1 # Where in the API it resides
kind: Deployment # The kind of workload we're creating
apiVersion
索引鍵會定義 API 伺服器端點,以管理將要部署的物件。
kind
索引鍵會定義此部署建立的工作負載。
所有檔案的其他通用索引鍵都是 metadata
和 name
索引鍵。 所有 Kubernetes 資源都「必須」具有名稱。 此名稱會置於 metadata
機碼內部。
apiVersion: apps/v1
kind: Deployment
metadata:
name: contoso-website # This will be the name of the deployment
在部署中將物件組成群組
部署會利用 label
來尋找和分組 Pod。 您會在部署的資訊清單檔中定義標籤。
以下是範例。 請注意,在 selector
定義中定義的 matchLabels
值已新增至 spec
定義。
# deployment.yaml
# ...
spec:
selector:
matchLabels:
app: contoso-website
# ...
由此時開始,所有檔案都有不同的結構,取決於您通知 Kubernetes 要建立的資源種類。
套用部署檔案
您會使用 kubectl
來部署 Kubernetes 部署資訊清單檔。 以下是該命令的範例。
kubectl apply -f ./deployment.yaml