在 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 之映像的不同版本。

A diagram that shows how container images are downloaded from a container registry to a Kubernetes cluster by using a manifest file.

容器登錄可以是公用的,也可以是私人的。 私人登錄需要認證才能存取及下載映像,而這會是您在儲存容器映像時所遵循的策略。

Kubernetes 只允許部署裝載在容器登錄中的映像。 建立私人容器登錄通常會是標準 AKS 部署策略的一部分。

Kubernetes Pod 是什麼?

Kubernetes Pod 會將容器和應用程式分組成邏輯結構。 這些 Pod 沒有智慧,且由一或多個應用程式容器所組成。 其每一個都有一個 IP 位址、網路規則和公開的連接埠。

例如,如果想要搜尋與 contoso-website 相關的所有工作負載,您會查詢叢集以尋找具有標籤 app 和值 contoso-website 的 Pod。

Kubernetes 部署是什麼?

A diagram that shows a Kubernetes deployment with a label and three pods.

Kubernetes 部署是 Pod 的演進。 部署會將 Pod 包裝成智慧型物件,以供其進行擴增。您可以輕鬆複製並調整應用程式以支援更多負載,而不需要設定複雜的網路規則。

部署可供使用者在不需停機的情況下,只要變更映像標籤即可更新應用程式。 更新部署時,部署會逐一關閉線上應用程式,而不是刪除所有應用程式。 然後,部署會以最新版本取代它們。 這個層面表示任何部署都可更新內部的 Pod,對可用性沒有肉眼可見的影響。

Kubernetes 資訊清單檔

Kubernetes 資訊清單檔可供以宣告方式使用 YAML 格式來描述工作負載,並簡化 Kubernetes 物件管理。

假設必須手動部署工作負載。 您必須考慮和管理數個層面。 您必須建立容器、選取特定的節點、將節點包裝在 Pod 中、執行 Pod、監視執行等。

資訊清單檔包含建立及管理所述工作負載所需的所有資訊。

Kubernetes 標籤是什麼?

Kubernetes 標籤可讓您以邏輯方式將 Kubernetes 物件組成群組。 這些標籤可讓系統查詢叢集,以尋找符合特定名稱標籤的物件。

資訊清單檔的結構

資訊清單檔的結構會因所建立資源類型而不同。 不過,資訊清單檔會共用常見的指示。 這些指示會定義各種層面,例如要使用的 API,以及要建立的工作負載類型。

所有資訊清單檔中的前兩個項目都有兩個重要的機碼:apiVersionkind。 以下是部署檔案的範例。

apiVersion: apps/v1 # Where in the API it resides
kind: Deployment # The kind of workload we're creating

apiVersion 索引鍵會定義 API 伺服器端點,以管理將要部署的物件。

kind 索引鍵會定義此部署建立的工作負載。

所有檔案的其他通用索引鍵都是 metadataname 索引鍵。 所有 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

檢定您的知識

1.

容器登錄是什麼?

2.

資訊清單檔是什麼?