Nasazení bezstavové aplikace Kubernetes prostřednictvím kubectl na zařízení Azure Stack Edge Pro GPU

PLATÍ PRO:Yes for Pro GPU SKU Azure Stack Edge Pro – GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure Stack Edge Mini R

Tento článek popisuje, jak nasadit bezstavovou aplikaci pomocí příkazů kubectl v existujícím clusteru Kubernetes. Tento článek vás také provede procesem vytváření a nastavování podů v bezstavové aplikaci.

Předpoklady

Než budete moct vytvořit cluster Kubernetes a použít nástroj příkazového kubectl řádku, musíte zajistit, aby:

  • Máte přihlašovací údaje k zařízení Azure Stack Edge Pro s 1 uzly.

  • Windows PowerShell 5.0 nebo novější je nainstalovaný v klientském systému Windows pro přístup k zařízení Azure Stack Edge Pro. Můžete mít i jakéhokoli jiného klienta s podporovaným operačním systémem. Tento článek popisuje postup při použití klienta systému Windows. Pokud si chcete stáhnout nejnovější verzi Windows PowerShellu, přejděte do části Instalace Windows PowerShellu.

  • Výpočetní prostředky jsou povolené na zařízení Azure Stack Edge Pro. Pokud chcete povolit výpočetní prostředky, přejděte na stránku Compute v místním uživatelském rozhraní zařízení. Pak vyberte síťové rozhraní, které chcete povolit pro výpočetní prostředky. Vyberte Povolit. Povolení výpočetních prostředků způsobí vytvoření virtuálního přepínače na vašem zařízení v daném síťovém rozhraní. Další informace najdete v tématu Povolení výpočetní sítě ve službě Azure Stack Edge Pro.

  • Vaše zařízení Azure Stack Edge Pro má server clusteru Kubernetes, na kterém běží verze 1.9 nebo novější. Další informace najdete v tématu Vytvoření a správa clusteru Kubernetes na zařízení Microsoft Azure Stack Edge Pro.

  • Máte nainstalovaný kubectl.

Nasazení bezstavové aplikace

Než začneme, měli byste mít:

  1. Vytvořili jste cluster Kubernetes.
  2. Nastavte obor názvů.
  3. Přidružte uživatele k oboru názvů.
  4. Uložili jsme konfiguraci uživatele do C:\Users\<username>\.kubesouboru .
  5. Nainstalováno kubectl.

Teď můžete začít spouštět a spravovat nasazení bezstavových aplikací na zařízení Azure Stack Edge Pro. Než začnete používat kubectl, musíte ověřit, zda máte správnou verzi kubectl.

Ověřte, že máte správnou verzi kubectl a nastavte konfiguraci.

Kontrola verze kubectl:

  1. Ověřte, že je verze kubectl větší nebo rovna 1.9:

    kubectl version
    

    Příklad výstupu je uvedený níže:

    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"}
    

    V tomto případě je klientská verze kubectl v1.15.2 a je kompatibilní pro pokračování.

  2. Získejte seznam podů spuštěných v clusteru Kubernetes. Pod je kontejner aplikace nebo proces spuštěný v clusteru Kubernetes.

    kubectl get pods -n <namespace-string>
    

    Příklad použití příkazů je uvedený níže:

    PS C:\WINDOWS\system32> kubectl get pods -n "test1"
    No resources found.
    PS C:\WINDOWS\system32>
    

    Výstup by měl uvést, že se nenašly žádné prostředky (pody), protože v clusteru nejsou spuštěné žádné aplikace.

    Příkaz naplní adresářovou strukturu C:\Users\<username>\.kube konfiguračními soubory. Nástroj příkazového řádku kubectl tyto soubory použije k vytváření a správě bezstavových aplikací v clusteru Kubernetes.

  3. Ručně zkontrolujte adresářovou strukturu C:\Users\username>\<.kube a ověřte, že je kubectl naplněný následujícími podsložkami:

    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
    

Poznámka:

Pokud chcete zobrazit seznam všech příkazů kubectl, zadejte kubectl --help.

Vytvoření bezstavové aplikace pomocí nasazení

Teď, když jste ověřili, že je verze příkazového řádku kubectl správná a máte požadované konfigurační soubory, můžete vytvořit bezstavové nasazení aplikace.

Pod je základní prováděcí jednotka aplikace Kubernetes, nejmenší a nejjednodušší jednotka v objektovém modelu Kubernetes, který vytvoříte nebo nasadíte. Pod také zapouzdřuje prostředky úložiště, jedinečnou síťovou IP adresu a možnosti, které řídí způsob spouštění kontejnerů.

Typ bezstavové aplikace, kterou vytvoříte, je nasazení webového serveru nginx.

Všechny příkazy kubectl, které používáte k vytváření a správě nasazení bezstavových aplikací, musí určit obor názvů přidružený ke konfiguraci. Vytvořili jste obor názvů při připojení ke clusteru na zařízení Azure Stack Edge Pro v kurzu Vytvoření a správa clusteru Kubernetes na zařízení Microsoft Azure Stack Edge Pro pomocí New-HcsKubernetesNamespace.

Chcete-li zadat obor názvů v příkazu kubectl, použijte kubectl <command> -n <namespace-string>.

Při vytváření nasazení nginx postupujte takto:

  1. Použití bezstavové aplikace vytvořením objektu nasazení Kubernetes:

    kubectl apply -f <yaml-file> -n <namespace-string>
    

    V tomto příkladu je cesta k souboru YAML aplikace externím zdrojem.

    Tady je ukázka použití příkazu a jeho výstupu:

    PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment.yaml -n "test1"
    
    deployment.apps/nginx-deployment created
    

    Případně můžete uložit následující markdown do místního počítače a nahradit cestu a název souboru v parametru -f . Například C:\Kubernetes\deployment.yaml. Konfigurace nasazení aplikace by byla:

    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
    

    Tento příkaz vytvoří výchozí nasazení nginx, které má dva pody pro spuštění vaší aplikace.

  2. Získejte popis nasazení nginx Kubernetes, které jste vytvořili:

    kubectl describe deployment nginx-deployment -n <namespace-string>
    

    Ukázkové použití příkazu s výstupem je znázorněno níže:

    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
    

    U nastavení replik se zobrazí:

    Replicas:               2 desired | 2 updated | 2 total | 2 available | 0 unavailable
    

    Nastavení replik označuje, že vaše specifikace nasazení vyžaduje dva pody a že tyto pody byly vytvořeny a aktualizovány a jsou připravené k použití.

    Poznámka:

    Sada replik nahrazuje pody, které jsou odstraněny nebo ukončeny z jakéhokoli důvodu, například v případě selhání uzlu zařízení nebo narušení upgradu zařízení. Z tohoto důvodu doporučujeme použít sadu replik, i když vaše aplikace vyžaduje jenom jeden pod.

  3. Zobrazení seznamu podů v nasazení:

    kubectl get pods -l app=nginx -n <namespace-string>
    

    Ukázkové použití příkazu s výstupem je znázorněno níže:

    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
    

    Výstup ověří, že máme dva pody s jedinečnými názvy, na které můžeme odkazovat pomocí kubectl.

  4. Zobrazení informací o jednotlivých podech v nasazení:

    kubectl describe pod <podname-string> -n <namespace-string>
    

Ukázkové použití příkazu s výstupem je znázorněno níže:

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

Změna škálování nasazení aplikace zvýšením počtu replik

Každý pod je určený ke spuštění jedné instance dané aplikace. Pokud chcete škálovat aplikaci horizontálně tak, aby běžela více instancí, můžete pro každou instanci zvýšit počet podů na jeden. V Kubernetes se to označuje jako replikace. Počet podů v nasazení aplikace můžete zvýšit použitím nového souboru YAML. Soubor YAML změní nastavení replik na 4, což zvýší počet podů v nasazení na čtyři pody. Zvýšení počtu podů z 2 na 4:

PS C:\WINDOWS\system32> kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml -n "test1"

Případně můžete uložit následující markdown na místním počítači a nahradit cestu a název souboru parametru -f parametru kubectl apply. Například C:\Kubernetes\deployment-scale.yaml. Konfigurace škálování nasazení aplikace by byla následující:

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

Ověření, že nasazení má čtyři pody:

kubectl get pods -l app=nginx

Příklad výstupu pro opětovné škálování nasazení ze dvou na čtyři pody je znázorněno níže:

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

Jak vidíte z výstupu, teď máte ve svém nasazení čtyři pody, které můžou spustit vaši aplikaci.

Odstranění nasazení

Pokud chcete odstranit nasazení, včetně všech podů, musíte spustit kubectl delete deployment zadání názvu nasazení nginx-deployment a názvu oboru názvů. Odstranění nasazení:

kubectl delete deployment nginx-deployment -n <namespace-string>

Příklad použití příkazů s výstupem je uvedený níže:

PS C:\Users\user> kubectl delete deployment nginx-deployment -n "test1"
deployment.extensions "nginx-deployment" deleted

Další kroky

Přehled Kubernetes