在 Azure Stack Edge Pro GPU 裝置上透過 kubectl 部署 Kubernetes 無狀態應用程式
適用於: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
本文說明如何在現有的 Kubernetes 叢集上使用 kubectl 命令部署無狀態應用程式。 本文也會逐步引導您完成在無狀態應用程式中建立和設定 Pod 的程序。
必要條件
建立 Kubernetes 叢集和使用 kubectl
命令列工具之前,您必須先確定:
您有 1 個節點 Azure Stack Edge Pro 裝置的登入認證。
Windows 用戶端系統已安裝 Windows PowerShell 5.0 或更新版本,可以存取 Azure Stack Edge Pro 裝置。 您的其他用戶端也可以使用支援的作業系統。 本文說明使用 Windows 用戶端時的程序。 若要下載最新版本的 Windows PowerShell,請前往安裝 Windows PowerShell。
已在 Azure Stack Edge Pro 裝置上啟用計算。 若要啟用計算,請前往裝置本機 UI 中的 [計算] 頁面。 然後選取您想要為計算啟用的網路介面。 選取啟用。 啟用計算會導致系統在您的裝置上建立使用該網路介面的虛擬交換器。 如需詳細資訊,請參閱在 Azure Stack Edge Pro 上啟用計算網路。
您的 Azure Stack Edge Pro 裝置有一部 Kubernetes 叢集伺服器,其執行版本為 1.9 版或更新版本。 如需詳細資訊,請參閱在 Microsoft Azure Stack Edge Pro 裝置上建立和管理 Kubernetes 叢集。
您已經安裝
kubectl
。
部署無狀態應用程式
開始之前,您應具備下列條件:
- 已建立 Kubernetes 叢集。
- 設定命名空間。
- 關聯使用者與命名空間。
- 將使用者設定儲存至
C:\Users\<username>\.kube
。 - 已安裝
kubectl
。
現在,您可以在 Azure Stack Edge Pro 裝置上開始執行和管理無狀態應用程式部署。 開始使用 kubectl
之前,您必須先確認您有正確的 kubectl
版本。
請確認您有正確的 kubectl 版本並設定組態
若要檢查 kubectl
的版本:
請確認
kubectl
的版本大於或等於 1.9:kubectl version
輸出範例如下所示:
PS C:\WINDOWS\system32> C:\windows\system32\kubectl.exe version Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.2", GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568", GitTreeState:"clean", BuildDate:"2019-08-05T09:23:26Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"} Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.1", GitCommit:"4485c6f18cee9a5d3c3b4e523bd27972b1b53892", GitTreeState:"clean", BuildDate:"2019-07-18T09:09:21Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
在此情況下,kubectl 的用戶端版本為可以相容的 1.15.2 版,因此可以繼續執行。
取得在 Kubernetes 叢集上執行的 Pod 清單。 Pod 是在 Kubernetes 叢集上執行的應用程式容器或處理程序。
kubectl get pods -n <namespace-string>
命令使用方式的範例如下所示:
PS C:\WINDOWS\system32> kubectl get pods -n "test1" No resources found. PS C:\WINDOWS\system32>
輸出應該會指出找不到任何資源 (Pod),因為叢集上沒有執行的應用程式。
此命令會在設定檔中填入 "C:\Users\<username>\.kube" 的目錄結構。 kubectl 命令列工具會使用這些檔案,在您的 Kubernetes 叢集上建立和管理無狀態應用程式。
手動檢查 "C:\Users\<username>\.kube" 的目錄結構,確認 kubectl 已在下列子資料夾中移入該結構:
PS C:\Users\username> ls .kube Directory: C:\Users\user\.kube Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2/18/2020 11:05 AM cache d----- 2/18/2020 11:04 AM http-cache -a---- 2/18/2020 10:41 AM 5377 config
注意
若要檢視所有 kubectl 命令的清單,請輸入 kubectl --help
。
使用部署建立無狀態應用程式
既然您已確認 kubectl 命令列版本正確,且擁有必要的設定檔,您可以建立無狀態應用程式部署。
Pod 是 Kubernetes 應用程式的基本執行單位,這是您所建立或部署的 Kubernetes 物件模型中最小且最簡單的單位。 Pod 也會封裝儲存體資源、唯一的網路 IP,以及控制容器執行方式的選項。
您所建立的無狀態應用程式類型是 nginx Web 伺服器部署。
您用來建立和管理無狀態應用程式部署的所有 kubectl 命令都需要指定與設定相關聯的命名空間。 您在 Microsoft Azure Stack Edge Pro 裝置上建立和管理 Kubernetes 叢集教學課程中使用 New-HcsKubernetesNamespace
,建立命名空間,同時連接 Azure Stack Edge Pro 裝置上的叢集。
若要在 kubectl 命令中指定命名空間,請使用 kubectl <command> -n <namespace-string>
。
請遵循下列步驟來建立 nginx 部署:
藉由建立 Kubernetes 部署物件來套用無狀態應用程式:
kubectl apply -f <yaml-file> -n <namespace-string>
在此範例中,應用程式 YAML 檔案的路徑是外部來源。
以下是命令及其輸出的使用範例:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1" deployment.apps/nginx-deployment created
或者,您可以將下列 Markdown 儲存至本機電腦,並替換 -f 參數中的路徑和檔案名稱。 例如,"C:\Kubernetes\deployment.yaml"。 應用程式部署的設定為:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 # tells deployment to run 2 pods matching the template template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
此命令會建立預設的 nginx 部署,其中有兩個 Pod 執行您的應用程式。
取得您所建立 Kubernetes nginx-deployment 的描述:
kubectl describe deployment nginx-deployment -n <namespace-string>
命令使用範例及其輸出顯示如下:
PS C:\Users\user> kubectl describe deployment nginx-deployment -n "test1" Name: nginx-deployment Namespace: test1 CreationTimestamp: Tue, 18 Feb 2020 13:35:29 -0800 Labels: <none> Annotations: deployment.kubernetes.io/revision: 1 kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"nginx-deployment","namespace":"test1"},"spec":{"repl... Selector: app=nginx Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable StrategyType: RollingUpdate MinReadySeconds: 0 RollingUpdateStrategy: 25% max unavailable, 25% max surge Pod Template: Labels: app=nginx Containers: nginx: Image: nginx:1.7.9 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> Conditions: Type Status Reason ---- ------ ------ Available True MinimumReplicasAvailable Progressing True NewReplicaSetAvailable OldReplicaSets: <none> NewReplicaSet: nginx-deployment-5754944d6c (2/2 replicas created) Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ScalingReplicaSet 2m22s deployment-controller Scaled up replica set nginx-deployment-5754944d6c to 2
針對複本設定,您會看到:
Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable
複本設定指出您的部署規格需要兩個 Pod,而且這些 Pod 已建立和更新,且已準備就緒可供您使用。
注意
複本集會取代因任何原因而刪除或終止的 Pod,例如裝置節點失敗或裝置停機升級。 基於此原因,即使應用程式只需要單一 Pod,我們仍建議您使用複本集。
若要列出部署中的 Pod:
kubectl get pods -l app=nginx -n <namespace-string>
命令使用範例及其輸出顯示如下:
PS C:\Users\user> kubectl get pods -l app=nginx -n "test1" NAME READY STATUS RESTARTS AGE nginx-deployment-5754944d6c-7wqjd 1/1 Running 0 3m13s nginx-deployment-5754944d6c-nfj2h 1/1 Running 0 3m13s
輸出會確認我們有兩個 Pod 具有唯一名稱,我們可以使用 kubectl 來參考這兩個 Pod。
若要在部署中檢視個別 Pod 的相關資訊:
kubectl describe pod <podname-string> -n <namespace-string>
命令使用範例及其輸出顯示如下:
PS C:\Users\user> kubectl describe pod "nginx-deployment-5754944d6c-7wqjd" -n "test1"
Name: nginx-deployment-5754944d6c-7wqjd
Namespace: test1
Priority: 0
Node: k8s-1d9qhq2cl-n1/10.128.46.184
Start Time: Tue, 18 Feb 2020 13:35:29 -0800
Labels: app=nginx
pod-template-hash=5754944d6c
Annotations: <none>
Status: Running
IP: 172.17.246.200
Controlled By: ReplicaSet/nginx-deployment-5754944d6c
Containers:
nginx:
Container ID: docker://280b0f76bfdc14cde481dc4f2b8180cf5fbfc90a084042f679d499f863c66979
Image: nginx:1.7.9
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 18 Feb 2020 13:35:35 -0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-8gksw (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-8gksw:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-8gksw
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 4m58s default-scheduler Successfully assigned test1/nginx-deployment-5754944d6c-7wqjd to k8s-1d9qhq2cl-n1
Normal Pulling 4m57s kubelet, k8s-1d9qhq2cl-n1 Pulling image "nginx:1.7.9"
Normal Pulled 4m52s kubelet, k8s-1d9qhq2cl-n1 Successfully pulled image "nginx:1.7.9"
Normal Created 4m52s kubelet, k8s-1d9qhq2cl-n1 Created container nginx
Normal Started 4m52s kubelet, k8s-1d9qhq2cl-n1 Started container nginx
藉由增加複本計數來重新調整應用程式部署規模
每個 Pod 都是用來執行指定應用程式的單一執行個體。 如果您想要水平調整應用程式以執行多個執行個體,您可以將 Pod 數目增加為每個執行個體一個 Pod。 在 Kubernetes 中,這稱為複寫。 您可以套用新的 YAML 檔案,以增加應用程式部署中的 Pod 數目。 YAML 檔案會將複本設定變更為 4,這會將部署中的 Pod 數目增加為四個。 若要將 Pod 數目從 2 增加到 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
或者,您也可以將下列 Markdown 儲存至本機電腦,並在 kubectl apply
的 -f 參數中替換路徑和檔案名稱。 例如,"C:\Kubernetes\deployment-scale.yaml"。 應用程式部署規模的設定為:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 4 # Update the replicas from 2 to 4
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.8
ports:
- containerPort: 80
若要確認部署有四個 Pod:
kubectl get pods -l app=nginx
下面顯示將部署規模從兩個 Pod 擴增到四個的輸出範例:
PS C:\WINDOWS\system32> kubectl get pods -l app=nginx
NAME READY STATUS RESTARTS AGE
nginx-deployment-148880595-4zdqq 1/1 Running 0 25s
nginx-deployment-148880595-6zgi1 1/1 Running 0 25s
nginx-deployment-148880595-fxcez 1/1 Running 0 2m
nginx-deployment-148880595-rwovn 1/1 Running 0 2m
如您在輸出中所見,現在部署中有四個 Pod 可執行應用程式。
刪除部署
若要刪除部署,包括所有 Pod,您必須執行 kubectl delete deployment
,以指定部署 nginx-deployment 的名稱和命名空間名稱。 若要刪除部署:
kubectl delete deployment nginx-deployment -n <namespace-string>
下面顯示命令使用範例及其輸出:
PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted