透過 Azure Stack Edge Pro GPU 裝置上的 kubectl 部署 Kubernetes 無狀態應用程式
適用于: Azure Stack Edge Pro - GPU Azure Stack Edge Pro 2 Azure Stack Edge Pro R Azure Stack Edge Mini R
本文說明如何在現有的 Kubernetes 叢集上使用 kubectl 命令部署無狀態應用程式。 本文也會逐步引導您完成在無狀態應用程式中建立和設定 Pod 的程式。
必要條件
在您可以建立 Kubernetes 叢集並使用 kubectl
命令列工具之前,您必須先確定:
您有 1 節點 Azure Stack Edge Pro 裝置的登入認證。
Windows PowerShell 5.0 或更新版本安裝在 Windows 用戶端系統上,以存取 Azure Stack Edge Pro 裝置。 您也可以有任何其他用戶端搭配支援的作業系統。 本文說明使用 Windows 用戶端時的程式。 若要下載最新版本的 Windows PowerShell,請移至 安裝 Windows PowerShell 。
Azure Stack Edge Pro 裝置上已啟用計算。 若要啟用計算,請移至 裝置本機 UI 中的 [計算 ] 頁面。 然後選取您要啟用以進行計算的網路介面。 選取啟用。 啟用計算會導致在該網路介面上于裝置上建立虛擬交換器。 如需詳細資訊,請參閱 在 Azure Stack Edge Pro 上啟用計算網路。
您的 Azure Stack Edge Pro 裝置具有執行 1.9 版或更新版本的 Kubernetes 叢集伺服器。 如需詳細資訊,請參閱 在 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 的用戶端版本是 v1.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 裝置 New-HcsKubernetesNamespace
上的 Kubernetes 叢集教學課程中 ,您已在 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 的相關資訊:
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 數目增加為一個。 在 Kubernetes 中,這稱為複寫。 您可以套用新的 YAML 檔案,以增加應用程式部署中的 Pod 數目。 YAML 檔案會將複本設定變更為 4,這會將部署中的 Pod 數目增加到四個 Pod。 若要將 Pod 數目從 2 增加到 4:
PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"
或者,您可以將下列 Markdown 儲存在本機電腦上,並將路徑和檔案名取代為 -f 參數。 kubectl apply
例如,「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