共用方式為


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

適用於: 是,適用於 Pro GPU SKUAzure Stack Edge Pro - GPU是,適用於 Pro 2 SKUAzure Stack Edge Pro 2是,適用於 Pro R SKUAzure Stack Edge Pro R是,適用於 Mini R SKUAzure 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

部署無狀態應用程式

開始之前,您應具備下列條件:

  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 的用戶端版本為可以相容的 1.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 裝置上建立和管理 Kubernetes 叢集教學課程中使用 New-HcsKubernetesNamespace,建立命名空間,同時連接 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 來參考這兩個 Pod。

  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 數目增加為每個執行個體一個 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

下一步

Kubernetes 概觀