Dela via


Distribuera ett tillståndslöst Kubernetes-program via kubectl på din Azure Stack Edge Pro GPU-enhet

GÄLLER FÖR: Ja för Pro GPU SKUAzure Stack Edge Pro – GPUJa för Pro 2 SKUAzure Stack Edge Pro 2Ja för Pro R SKUAzure Stack Edge Pro RJa för Mini R SKUAzure Stack Edge Mini R

Den här artikeln beskriver hur du distribuerar ett tillståndslöst program med kubectl-kommandon i ett befintligt Kubernetes-kluster. Den här artikeln beskriver också hur du skapar och konfigurerar poddar i ditt tillståndslösa program.

Förutsättningar

Innan du kan skapa ett Kubernetes-kluster och använda kubectl kommandoradsverktyget måste du se till att:

  • Du har inloggningsuppgifter till en Azure Stack Edge Pro-enhet med en nod.

  • Windows PowerShell 5.0 eller senare installeras på ett Windows-klientsystem för att få åtkomst till Azure Stack Edge Pro-enheten. Du kan också ha en annan klient med ett operativsystem som stöds. Den här artikeln beskriver proceduren när du använder en Windows-klient. Om du vill ladda ned den senaste versionen av Windows PowerShell går du till Installera Windows PowerShell.

  • Beräkning är aktiverat på Azure Stack Edge Pro-enheten. Om du vill aktivera beräkning går du till sidan Beräkning i enhetens lokala användargränssnitt. Välj sedan ett nätverksgränssnitt som du vill aktivera för beräkning. Välj Aktivera. Om du aktiverar beräkning skapas en virtuell växel på enheten i nätverksgränssnittet. Mer information finns i Aktivera beräkningsnätverk i Azure Stack Edge Pro.

  • Din Azure Stack Edge Pro-enhet har en Kubernetes-klusterserver som körs som är version v1.9 eller senare. Mer information finns i Skapa och hantera ett Kubernetes-kluster på Microsoft Azure Stack Edge Pro-enhet.

  • Du har installerat kubectl.

Distribuera ett tillståndslöst program

Innan vi börjar bör du ha:

  1. Skapade ett Kubernetes-kluster.
  2. Konfigurera ett namnområde.
  3. En användare har associerats med namnområdet.
  4. Sparade användarkonfigurationen till C:\Users\<username>\.kube.
  5. Installerad kubectl.

Nu kan du börja köra och hantera tillståndslösa programdistributioner på en Azure Stack Edge Pro-enhet. Innan du börjar använda kubectlmåste du kontrollera att du har rätt version av kubectl.

Kontrollera att du har rätt version av kubectl och konfigurera konfigurationen

Så här kontrollerar du versionen av kubectl:

  1. Kontrollera att versionen av kubectl är större eller lika med 1.9:

    kubectl version
    

    Ett exempel på utdata visas nedan:

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

    I det här fallet är klientversionen av kubectl v1.15.2 och är kompatibel för att fortsätta.

  2. Hämta en lista över poddar som körs i kubernetes-klustret. En podd är en programcontainer eller process som körs på ditt Kubernetes-kluster.

    kubectl get pods -n <namespace-string>
    

    Ett exempel på kommandoanvändning visas nedan:

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

    Utdata ska ange att inga resurser (poddar) hittas eftersom det inte finns några program som körs i klustret.

    Kommandot fyller katalogstrukturen i "C:\Users\<username>\.kube" med konfigurationsfiler. Kommandoradsverktyget kubectl använder dessa filer för att skapa och hantera tillståndslösa program i kubernetes-klustret.

  3. Kontrollera katalogstrukturen i "C:\Users\<username>\.kube" manuellt för att kontrollera att kubectl har fyllt i den med följande undermappar:

    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
    

Kommentar

Om du vill visa en lista över alla kubectl-kommandon skriver du kubectl --help.

Skapa ett tillståndslöst program med hjälp av en distribution

Nu när du har kontrollerat att kubectl-kommandoradsversionen är korrekt och du har de konfigurationsfiler som krävs kan du skapa en tillståndslös programdistribution.

En podd är den grundläggande körningsenheten för ett Kubernetes-program, den minsta och enklaste enheten i Kubernetes-objektmodellen som du skapar eller distribuerar. En podd kapslar också in lagringsresurser, en unik nätverks-IP och alternativ som styr hur containrar ska köras.

Den typ av tillståndslöst program som du skapar är en nginx-webbserverdistribution.

Alla kubectl-kommandon som du använder för att skapa och hantera tillståndslösa programdistributioner måste ange det namnområde som är associerat med konfigurationen. Du skapade namnområdet när du var ansluten till klustret på Azure Stack Edge Pro-enheten i självstudien Skapa och hantera ett Kubernetes-kluster på Microsoft Azure Stack Edge Pro-enheten med New-HcsKubernetesNamespace.

Om du vill ange namnområdet i ett kubectl-kommando använder du kubectl <command> -n <namespace-string>.

Följ dessa steg för att skapa en nginx-distribution:

  1. Tillämpa ett tillståndslöst program genom att skapa ett Kubernetes-distributionsobjekt:

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

    I det här exemplet är sökvägen till programmets YAML-fil en extern källa.

    Här är ett exempel på hur kommandot används och dess utdata:

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

    Du kan också spara följande markdown på den lokala datorn och ersätta sökvägen och filnamnet i parametern -f . Till exempel "C:\Kubernetes\deployment.yaml". Konfigurationen för programdistributionen skulle vara:

    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
    

    Det här kommandot skapar en standard-nginx-distribution som har två poddar för att köra ditt program.

  2. Hämta beskrivningen av Kubernetes nginx-deployment som du skapade:

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

    Ett exempel på användning av kommandot, med utdata, visas nedan:

    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
    

    För replikinställningen visas:

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

    Replikinställningen anger att distributionsspecifikationen kräver två poddar och att poddarna har skapats och uppdaterats och är redo att användas.

    Kommentar

    En replikuppsättning ersätter poddar som tas bort eller avslutas av någon anledning, till exempel vid enhetsnodfel eller en störande enhetsuppgradering. Därför rekommenderar vi att du använder en replikuppsättning även om programmet bara kräver en enda podd.

  3. Så här listar du poddarna i distributionen:

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

    Ett exempel på användning av kommandot, med utdata, visas nedan:

    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
    

    Utdata verifierar att vi har två poddar med unika namn som vi kan referera till med kubectl.

  4. Så här visar du information om en enskild podd i distributionen:

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

Ett exempel på användning av kommandot, med utdata, visas nedan:

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

Skala om programdistributionen genom att öka antalet repliker

Varje podd är avsedd att köra en enda instans av ett visst program. Om du vill skala programmet vågrätt för att köra flera instanser kan du öka antalet poddar till en för varje instans. I Kubernetes kallas detta replikering. Du kan öka antalet poddar i programdistributionen genom att använda en ny YAML-fil. YAML-filen ändrar replikinställningen till 4, vilket ökar antalet poddar i distributionen till fyra poddar. Så här ökar du antalet poddar från 2 till 4:

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

Du kan också spara följande markdown på den lokala datorn och ersätta sökvägen och filnamnet med parametern -f för kubectl apply. Till exempel "C:\Kubernetes\deployment-scale.yaml". Konfigurationen för programdistributionsskalan skulle vara:

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

Så här kontrollerar du att distributionen har fyra poddar:

kubectl get pods -l app=nginx

Exempel på utdata för en omskalningsdistribution från två till fyra poddar visas nedan:

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

Som du kan se från utdata har du nu fyra poddar i distributionen som kan köra ditt program.

Ta bort en distribution

Om du vill ta bort distributionen, inklusive alla poddar, måste du köra kubectl delete deployment och ange namnet på distributionen nginx-deployment och namnområdesnamnet. Så här tar du bort distributionen:

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

Ett exempel på kommandoanvändning, med utdata, visas nedan:

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

Nästa steg

Översikt över Kubernetes