Share via


Een stateless Kubernetes-toepassing implementeren via kubectl op uw Azure Stack Edge Pro GPU-apparaat

VAN TOEPASSING OP:Yes for Pro GPU SKUAzure 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

In dit artikel wordt beschreven hoe u een staatloze toepassing implementeert met behulp van kubectl-opdrachten in een bestaand Kubernetes-cluster. In dit artikel wordt u ook begeleid bij het maken en instellen van pods in uw staatloze toepassing.

Vereisten

Voordat u een Kubernetes-cluster kunt maken en het kubectl opdrachtregelprogramma kunt gebruiken, moet u ervoor zorgen dat:

  • U hebt aanmeldingsreferenties voor een Azure Stack Edge Pro-apparaat met 1 knooppunt.

  • Windows PowerShell 5.0 of hoger is geïnstalleerd op een Windows-clientsysteem voor toegang tot het Azure Stack Edge Pro-apparaat. U kunt ook elke andere client met een ondersteund besturingssysteem hebben. In dit artikel wordt de procedure beschreven bij het gebruik van een Windows-client. Als u de nieuwste versie van Windows PowerShell wilt downloaden, gaat u naar Windows PowerShell installeren.

  • Compute is ingeschakeld op het Azure Stack Edge Pro-apparaat. Als u compute wilt inschakelen, gaat u naar de pagina Compute in de lokale gebruikersinterface van het apparaat. Selecteer vervolgens een netwerkinterface die u wilt inschakelen voor berekeningen. Selecteer Inschakelen. Het inschakelen van rekenkracht resulteert in het maken van een virtuele switch op uw apparaat op die netwerkinterface. Zie Rekennetwerk inschakelen op uw Azure Stack Edge Pro voor meer informatie.

  • Uw Azure Stack Edge Pro-apparaat heeft een Kubernetes-clusterserver waarop versie v1.9 of hoger wordt uitgevoerd. Zie Een Kubernetes-cluster maken en beheren op een Microsoft Azure Stack Edge Pro-apparaat voor meer informatie.

  • U hebt geïnstalleerd kubectl.

Een staatloze toepassing implementeren

Voordat we beginnen, hebt u het volgende nodig:

  1. Er is een Kubernetes-cluster gemaakt.
  2. Stel een naamruimte in.
  3. Een gebruiker gekoppeld aan de naamruimte.
  4. De gebruikersconfiguratie is opgeslagen in C:\Users\<username>\.kube.
  5. Geïnstalleerd kubectl.

U kunt nu beginnen met het uitvoeren en beheren van stateless toepassingsimplementaties op een Azure Stack Edge Pro-apparaat. Voordat u begint met het gebruik kubectl, moet u controleren of u de juiste versie van kubectl.

Controleer of u de juiste versie van kubectl hebt en configuratie hebt ingesteld

De versie van kubectl:

  1. Controleer of de versie kubectl groter of gelijk is aan 1.9:

    kubectl version
    

    Hieronder ziet u een voorbeeld van de uitvoer:

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

    In dit geval is de clientversie van kubectl v1.15.2 en compatibel om door te gaan.

  2. Haal een lijst op met de pods die worden uitgevoerd op uw Kubernetes-cluster. Een pod is een toepassingscontainer of -proces dat wordt uitgevoerd op uw Kubernetes-cluster.

    kubectl get pods -n <namespace-string>
    

    Hieronder ziet u een voorbeeld van het gebruik van opdrachten:

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

    De uitvoer moet aangeven dat er geen resources (pods) worden gevonden omdat er geen toepassingen worden uitgevoerd op uw cluster.

    Met de opdracht wordt de mapstructuur van C:\Users\<username>\.kube gevuld met configuratiebestanden. Het opdrachtregelprogramma kubectl gebruikt deze bestanden om staatloze toepassingen in uw Kubernetes-cluster te maken en te beheren.

  3. Controleer handmatig de mapstructuur van C:\Users\<username>\.kube om te controleren of kubectl deze heeft gevuld met de volgende submappen:

    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
    

Notitie

Als u een lijst met alle kubectl-opdrachten wilt weergeven, typt kubectl --helpu .

Een stateless toepassing maken met behulp van een implementatie

Nu u hebt gecontroleerd of de kubectl-opdrachtregelversie juist is en u de vereiste configuratiebestanden hebt, kunt u een stateless toepassingsimplementatie maken.

Een pod is de basisuitvoeringseenheid van een Kubernetes-toepassing, de kleinste en eenvoudigste eenheid in het Kubernetes-objectmodel dat u maakt of implementeert. Een pod bevat ook opslagbronnen, een uniek netwerk-IP en opties die bepalen hoe de container(s) moeten worden uitgevoerd.

Het type staatloze toepassing dat u maakt, is een nginx-webserverimplementatie.

Alle kubectl-opdrachten die u gebruikt om stateless toepassingsimplementaties te maken en beheren, moeten de naamruimte opgeven die is gekoppeld aan de configuratie. U hebt de naamruimte gemaakt terwijl u verbinding hebt gemaakt met het cluster op het Azure Stack Edge Pro-apparaat in de zelfstudie Een Kubernetes-cluster maken en beheren op Microsoft Azure Stack Edge Pro-apparaat met New-HcsKubernetesNamespace.

Als u de naamruimte in een kubectl-opdracht wilt opgeven, gebruikt u kubectl <command> -n <namespace-string>.

Volg deze stappen om een nginx-implementatie te maken:

  1. Een staatloze toepassing toepassen door een Kubernetes-implementatieobject te maken:

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

    In dit voorbeeld is het pad naar het YAML-bestand van de toepassing een externe bron.

    Hier volgt een voorbeeld van het gebruik van de opdracht en de uitvoer:

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

    U kunt ook de volgende markdown opslaan op uw lokale computer en het pad en de bestandsnaam in de parameter -f vervangen. Bijvoorbeeld C:\Kubernetes\deployment.yaml. De configuratie voor de implementatie van de toepassing is:

    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
    

    Met deze opdracht maakt u een standaard nginx-implementatie met twee pods om uw toepassing uit te voeren.

  2. Haal de beschrijving op van de Kubernetes nginx-implementatie die u hebt gemaakt:

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

    Hieronder ziet u een voorbeeld van het gebruik van de opdracht, met uitvoer:

    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
    

    Voor de instelling replica's ziet u het volgende:

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

    De replica-instelling geeft aan dat voor uw implementatiespecificatie twee pods zijn vereist en dat deze pods zijn gemaakt en bijgewerkt en klaar zijn voor gebruik.

    Notitie

    Een replicaset vervangt pods die om welke reden dan ook worden verwijderd of beëindigd, zoals in het geval van een storing in het apparaatknooppunt of een verstorende apparaatupgrade. Daarom raden we u aan om een replicaset te gebruiken, zelfs als voor uw toepassing slechts één pod is vereist.

  3. De pods in uw implementatie weergeven:

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

    Hieronder ziet u een voorbeeld van het gebruik van de opdracht, met uitvoer:

    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
    

    De uitvoer controleert of we twee pods hebben met unieke namen waarnaar we kunnen verwijzen met behulp van kubectl.

  4. Informatie over een afzonderlijke pod in uw implementatie weergeven:

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

Hieronder ziet u een voorbeeld van het gebruik van de opdracht, met uitvoer:

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

De implementatie van de toepassing opnieuw schalen door het aantal replica's te verhogen

Elke pod is bedoeld om één exemplaar van een bepaalde toepassing uit te voeren. Als u uw toepassing horizontaal wilt schalen om meerdere exemplaren uit te voeren, kunt u het aantal pods verhogen naar één voor elk exemplaar. In Kubernetes wordt dit replicatie genoemd. U kunt het aantal pods in uw toepassingsimplementatie verhogen door een nieuw YAML-bestand toe te passen. Het YAML-bestand wijzigt de instelling voor replica's in 4, waardoor het aantal pods in uw implementatie wordt verhoogd naar vier pods. Het aantal pods verhogen van 2 tot en met 4:

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

U kunt ook de volgende markdown opslaan op uw lokale computer en het pad en de bestandsnaam vervangen door de parameter -f voor kubectl apply. Bijvoorbeeld C:\Kubernetes\deployment-scale.yaml. De configuratie voor de schaal van de toepassingsimplementatie is:

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

Controleer of de implementatie vier pods heeft:

kubectl get pods -l app=nginx

Voorbeelduitvoer voor een schaalaanpassingsimplementatie van twee tot vier pods wordt hieronder weergegeven:

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

Zoals u in de uitvoer kunt zien, hebt u nu vier pods in uw implementatie waarmee uw toepassing kan worden uitgevoerd.

Een implementatie verwijderen

Als u de implementatie wilt verwijderen, inclusief alle pods, moet kubectl delete deployment u de naam van de implementatie nginx-deployment en de naamruimtenaam opgeven. De implementatie verwijderen:

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

Hieronder ziet u een voorbeeld van het gebruik van opdrachten, met uitvoer:

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

Volgende stappen

Overzicht van Kubernetes