透過 Azure Stack Edge Pro GPU 裝置上的 kubectl 部署 Kubernetes 無狀態應用程式

適用于: Yes for Pro GPU SKU Azure Stack Edge Pro - GPU Yes for Pro 2 SKU Azure Stack Edge Pro 2 Yes for Pro R SKU Azure Stack Edge Pro R Yes for Mini R SKU 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

部署無狀態應用程式

開始之前,您應該要有:

  1. 已建立 Kubernetes 叢集。
  2. 設定命名空間。
  3. 將使用者與 命名空間建立關聯。
  4. 將使用者組態儲存至 C:\Users\<username>\.kube
  5. 已安裝 kubectl

現在,您可以開始在 Azure Stack Edge Pro 裝置上執行和管理無狀態應用程式部署。 開始使用 kubectl 之前,您必須確認您有正確的 版本 kubectl

確認您有正確的 kubectl 版本並設定組態

若要檢查 的版本 kubectl

  1. 確認 的版本 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,且與繼續相容。

  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 叢集上建立和管理無狀態應用程式。

  3. 手動檢查 「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 部署:

  1. 藉由建立 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 來執行您的應用程式。

  2. 取得您所建立 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,也建議您使用複本集。

  3. 若要列出部署中的 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 來參考。

  4. 若要檢視部署中個別 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

下一步

Kubernetes 概觀