Condividi tramite


Distribuire un'applicazione senza stato Kubernetes tramite kubectl nel dispositivo AZURE Stack Edge Pro GPU

SI APPLICA A: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

Questo articolo descrive come distribuire un'applicazione senza stato usando i comandi kubectl in un cluster Kubernetes esistente. Questo articolo illustra anche il processo di creazione e configurazione di pod nell'applicazione senza stato.

Prerequisiti

Prima di poter creare un cluster Kubernetes e usare lo kubectl strumento da riga di comando, è necessario assicurarsi che:

  • Si dispone di credenziali di accesso a un dispositivo Azure Stack Edge Pro a 1 nodo.

  • Windows PowerShell 5.0 o versione successiva viene installato in un sistema client Windows per accedere al dispositivo Azure Stack Edge Pro. È possibile avere anche qualsiasi altro client con un sistema operativo supportato. Questo articolo descrive la procedura quando si usa un client Windows. Per scaricare la versione più recente di Windows PowerShell, passare a Installazione di Windows PowerShell.

  • Il calcolo è abilitato nel dispositivo Azure Stack Edge Pro. Per abilitare il calcolo, passare alla pagina Calcolo nell'interfaccia utente locale del dispositivo. Selezionare quindi un'interfaccia di rete che si vuole abilitare per il calcolo. Seleziona Abilita. L'abilitazione del calcolo comporta la creazione di un commutatore virtuale nel dispositivo su tale interfaccia di rete. Per altre informazioni, vedere Abilitare la rete di calcolo in Azure Stack Edge Pro.

  • Il dispositivo Azure Stack Edge Pro dispone di un server del cluster Kubernetes in esecuzione versione 1.9 o successiva. Per altre informazioni, vedere Creare e gestire un cluster Kubernetes nel dispositivo Microsoft Azure Stack Edge Pro.

  • È stato installato kubectl.

Distribuire un'applicazione senza stato

Prima di iniziare, è necessario disporre di:

  1. Creazione di un cluster Kubernetes.
  2. Configurare uno spazio dei nomi.
  3. Associato un utente allo spazio dei nomi .
  4. Salvataggio della configurazione utente in C:\Users\<username>\.kube.
  5. Installato kubectl.

È ora possibile iniziare a eseguire e gestire le distribuzioni di applicazioni senza stato in un dispositivo Azure Stack Edge Pro. Prima di iniziare a usare kubectl, è necessario verificare di avere la versione corretta di kubectl.

Verificare di avere la versione corretta di kubectl e configurare la configurazione

Per controllare la versione di kubectl:

  1. Verificare che la versione di kubectl sia maggiore o uguale a 1.9:

    kubectl version
    

    Di seguito è riportato un esempio dell'output:

    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 questo caso, la versione client di kubectl è v1.15.2 ed è compatibile per continuare.

  2. Ottenere un elenco dei pod in esecuzione nel cluster Kubernetes. Un pod è un contenitore di applicazioni o un processo in esecuzione nel cluster Kubernetes.

    kubectl get pods -n <namespace-string>
    

    Di seguito è riportato un esempio di utilizzo dei comandi:

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

    L'output deve indicare che non vengono trovate risorse (pod) perché non sono in esecuzione applicazioni nel cluster.

    Il comando popola la struttura di directory "C:\Users\<username>\.kube" con i file di configurazione. Lo strumento da riga di comando kubectl userà questi file per creare e gestire applicazioni senza stato nel cluster Kubernetes.

  3. Controllare manualmente la struttura di directory "C:\Users\<username>\.kube" per verificare che kubectl lo abbia popolato con le sottocartelle seguenti:

    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
    

Nota

Per visualizzare un elenco di tutti i comandi kubectl, digitare kubectl --help.

Creare un'applicazione senza stato usando una distribuzione

Dopo aver verificato che la versione della riga di comando kubectl è corretta e si dispone dei file di configurazione necessari, è possibile creare una distribuzione di applicazioni senza stato.

Un pod è l'unità di esecuzione di base di un'applicazione Kubernetes, la più piccola e più semplice unità nel modello a oggetti Kubernetes creato o distribuito. Un pod incapsula anche le risorse di archiviazione, un INDIRIZZO IP di rete univoco e le opzioni che regolano la modalità di esecuzione dei contenitori.

Il tipo di applicazione senza stato creato è una distribuzione di server Web nginx.

Tutti i comandi kubectl usati per creare e gestire distribuzioni di applicazioni senza stato devono specificare lo spazio dei nomi associato alla configurazione. Lo spazio dei nomi è stato creato durante la connessione al cluster nel dispositivo Azure Stack Edge Pro nell'esercitazione Creare e gestire un cluster Kubernetes nel dispositivo Microsoft Azure Stack Edge Pro con New-HcsKubernetesNamespace.

Per specificare lo spazio dei nomi in un comando kubectl, usare kubectl <command> -n <namespace-string>.

Per creare una distribuzione nginx, seguire questa procedura:

  1. Applicare un'applicazione senza stato creando un oggetto di distribuzione Kubernetes:

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

    In questo esempio il percorso del file YAML dell'applicazione è un'origine esterna.

    Di seguito è riportato un esempio di uso del comando e del relativo output:

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

    In alternativa, è possibile salvare il markdown seguente nel computer locale e sostituire il percorso e il nome file nel parametro -f . Ad esempio, "C:\Kubernetes\deployment.yaml". La configurazione per la distribuzione dell'applicazione sarà:

    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
    

    Questo comando crea una distribuzione nginx-predefinita con due pod per eseguire l'applicazione.

  2. Ottenere la descrizione della distribuzione nginx-deployment di Kubernetes creata:

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

    Di seguito è riportato un esempio di utilizzo del comando con output:

    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
    

    Per l'impostazione delle repliche , verrà visualizzato:

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

    L'impostazione delle repliche indica che la specifica di distribuzione richiede due pod e che tali pod sono stati creati e aggiornati e sono pronti per l'uso.

    Nota

    Un set di repliche sostituisce i pod eliminati o terminati per qualsiasi motivo, ad esempio in caso di errore del nodo del dispositivo o di un aggiornamento anomalo del dispositivo. Per questo motivo, è consigliabile usare un set di repliche anche se l'applicazione richiede solo un singolo pod.

  3. Per elencare i pod nella distribuzione:

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

    Di seguito è riportato un esempio di utilizzo del comando con output:

    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
    

    L'output verifica che siano presenti due pod con nomi univoci a cui è possibile fare riferimento usando kubectl.

  4. Per visualizzare informazioni su un singolo pod nella distribuzione:

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

Di seguito è riportato un esempio di utilizzo del comando con output:

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

Ridimensionare la distribuzione dell'applicazione aumentando il numero di repliche

Ogni pod è progettato per eseguire una singola istanza di una determinata applicazione. Se si vuole ridimensionare l'applicazione orizzontalmente per eseguire più istanze, è possibile aumentare il numero di pod a uno per ogni istanza. In Kubernetes questa operazione viene definita replica. È possibile aumentare il numero di pod nella distribuzione dell'applicazione applicando un nuovo file YAML. Il file YAML modifica l'impostazione delle repliche su 4, che aumenta il numero di pod nella distribuzione a quattro pod. Per aumentare il numero di pod da 2 a 4:

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

In alternativa, è possibile salvare il markdown seguente nel computer locale e sostituire il percorso e il nome file per il parametro -f per kubectl apply. Ad esempio, "C:\Kubernetes\deployment-scale.yaml". La configurazione per la scalabilità di distribuzione dell'applicazione sarà:

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

Per verificare che la distribuzione abbia quattro pod:

kubectl get pods -l app=nginx

L'output di esempio per una distribuzione di ridimensionamento da due a quattro pod è illustrato di seguito:

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

Come si può notare dall'output, nella distribuzione sono ora presenti quattro pod che possono eseguire l'applicazione.

Eliminare una distribuzione

Per eliminare la distribuzione, inclusi tutti i pod, è necessario eseguire kubectl delete deployment specificando il nome della distribuzione nginx-deployment e il nome dello spazio dei nomi. Per eliminare la distribuzione:

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

Di seguito è riportato un esempio di utilizzo dei comandi con output:

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

Passaggi successivi

Panoramica di Kubernetes