Partilhar via


Implantar um aplicativo sem estado do Kubernetes via kubectl em seu dispositivo GPU Azure Stack Edge Pro

APLICA-SE A: Sim para Pro GPU SKUAzure Stack Edge Pro - GPUSim para Pro 2 SKUAzure Stack Edge Pro 2Sim para Pro R SKUAzure Stack Edge Pro RSim para Mini R SKUAzure Stack Edge Mini R

Este artigo descreve como implantar um aplicativo sem estado usando comandos kubectl em um cluster Kubernetes existente. Este artigo também orienta você pelo processo de criação e configuração de pods em seu aplicativo sem monitoração de estado.

Pré-requisitos

Antes de criar um cluster Kubernetes e usar a ferramenta de kubectl linha de comando, você precisa garantir que:

  • Você tem credenciais de entrada para um dispositivo Azure Stack Edge Pro de 1 nó.

  • O Windows PowerShell 5.0 ou posterior é instalado em um sistema cliente Windows para acessar o dispositivo Azure Stack Edge Pro. Você também pode ter qualquer outro cliente com um sistema operacional suportado. Este artigo descreve o procedimento ao usar um cliente Windows. Para baixar a versão mais recente do Windows PowerShell, vá para Instalando o Windows PowerShell.

  • A computação está habilitada no dispositivo Azure Stack Edge Pro. Para habilitar a computação, vá para a página Computação na interface do usuário local do dispositivo. Em seguida, selecione uma interface de rede que você deseja habilitar para computação. Selecione Ativar. A ativação da computação resulta na criação de um comutador virtual no seu dispositivo nessa interface de rede. Para obter mais informações, consulte Habilitar rede de computação no Azure Stack Edge Pro.

  • Seu dispositivo Azure Stack Edge Pro tem um servidor de cluster Kubernetes em execução que é a versão v1.9 ou posterior. Para obter mais informações, consulte Criar e gerenciar um cluster Kubernetes no dispositivo Microsoft Azure Stack Edge Pro.

  • Você instalou o kubectl.

Implantar um aplicativo sem monitoração de estado

Antes de começarmos, você deve ter:

  1. Criado um cluster Kubernetes.
  2. Configure um namespace.
  3. Associado um usuário ao namespace.
  4. Salvou a configuração do usuário em C:\Users\<username>\.kube.
  5. Instalado kubectl.

Agora você pode começar a executar e gerenciar implantações de aplicativos sem monitoração de estado em um dispositivo Azure Stack Edge Pro. Antes de começar a usar kubectlo , você precisa verificar se você tem a versão correta do kubectl.

Verifique se você tem a versão correta do kubectl e configure a configuração

Para verificar a versão do kubectl:

  1. Verifique se a versão do kubectl é maior ou igual a 1.9:

    kubectl version
    

    Um exemplo da saída é mostrado abaixo:

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

    Neste caso, a versão cliente do kubectl é v1.15.2 e é compatível para continuar.

  2. Obtenha uma lista dos pods em execução no cluster do Kubernetes. Um pod é um contêiner ou processo de aplicativo em execução no cluster do Kubernetes.

    kubectl get pods -n <namespace-string>
    

    Um exemplo de uso de comandos é mostrado abaixo:

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

    A saída deve indicar que nenhum recurso (pods) foi encontrado porque não há aplicativos em execução no cluster.

    O comando preencherá a estrutura de diretórios de "C:\Users\<username>\.kube" com arquivos de configuração. A ferramenta de linha de comando kubectl usará esses arquivos para criar e gerenciar aplicativos sem estado em seu cluster Kubernetes.

  3. Verifique manualmente a estrutura de diretórios de "C:\Users\<username>\.kube" para verificar se o kubectl o preencheu com as seguintes subpastas:

    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

Para exibir uma lista de todos os comandos kubectl, digite kubectl --help.

Criar um aplicativo sem monitoração de estado usando uma implantação

Agora que você verificou se a versão da linha de comando kubectl está correta e se tem os arquivos de configuração necessários, você pode criar uma implantação de aplicativo sem monitoração de estado.

Um pod é a unidade de execução básica de um aplicativo Kubernetes, a menor e mais simples unidade no modelo de objeto Kubernetes que você cria ou implanta. Um pod também encapsula recursos de armazenamento, um IP de rede exclusivo e opções que governam como o(s) contêiner(es) deve(m) ser executado(s).

O tipo de aplicativo sem estado que você cria é uma implantação de servidor Web nginx.

Todos os comandos kubectl que você usa para criar e gerenciar implantações de aplicativos sem estado precisam especificar o namespace associado à configuração. Você criou o namespace enquanto estava conectado ao cluster no dispositivo Azure Stack Edge Pro no tutorial Criar e gerenciar um cluster Kubernetes no dispositivo Microsoft Azure Stack Edge Pro com New-HcsKubernetesNamespace.

Para especificar o namespace em um comando kubectl, use kubectl <command> -n <namespace-string>.

Siga estas etapas para criar uma implantação nginx:

  1. Aplique um aplicativo sem estado criando um objeto de implantação do Kubernetes:

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

    Neste exemplo, o caminho para o arquivo YAML do aplicativo é uma fonte externa.

    Aqui está um exemplo de uso do comando e sua saída:

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

    Como alternativa, você pode salvar a seguinte marcação em sua máquina local e substituir o caminho e o nome do arquivo no parâmetro -f . Por exemplo, "C:\Kubernetes\deployment.yaml". A configuração para a implantação do aplicativo seria:

    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
    

    Este comando cria um nginx-deployment padrão que tem dois pods para executar seu aplicativo.

  2. Obtenha a descrição da implementação nginx do Kubernetes que você criou:

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

    Um exemplo de uso do comando, com saída, é mostrado abaixo:

    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
    

    Para a configuração de réplicas , você verá:

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

    A configuração de réplicas indica que sua especificação de implantação requer dois pods e que esses pods foram criados e atualizados e estão prontos para uso.

    Nota

    Um conjunto de réplicas substitui pods que são excluídos ou encerrados por qualquer motivo, como no caso de falha do nó do dispositivo ou uma atualização de dispositivo com interrupções. Por esse motivo, recomendamos que você use um conjunto de réplicas, mesmo que seu aplicativo exija apenas um único pod.

  3. Para listar os pods em sua implantação:

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

    Um exemplo de uso do comando, com saída, é mostrado abaixo:

    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
    

    A saída verifica se temos dois pods com nomes exclusivos que podemos referenciar usando kubectl.

  4. Para exibir informações sobre um pod individual em sua implantação:

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

Um exemplo de uso do comando, com saída, é mostrado abaixo:

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

Redimensione a implantação do aplicativo aumentando a contagem de réplicas

Cada pod destina-se a executar uma única instância de um determinado aplicativo. Se quiser dimensionar seu aplicativo horizontalmente para executar várias instâncias, você pode aumentar o número de pods para um para cada instância. No Kubernetes, isso é chamado de replicação. Você pode aumentar o número de pods em sua implantação de aplicativo aplicando um novo arquivo YAML. O arquivo YAML altera a configuração de réplicas para 4, o que aumenta o número de pods em sua implantação para quatro pods. Para aumentar o número de cápsulas de 2 para 4:

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

Como alternativa, você pode salvar a seguinte marcação em sua máquina local e substituir o caminho e o nome do arquivo do parâmetro -f por kubectl apply. Por exemplo, "C:\Kubernetes\deployment-scale.yaml". A configuração para a escala de implantação do aplicativo seria:

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

Para verificar se a implantação tem quatro pods:

kubectl get pods -l app=nginx

Exemplo de saída para uma implantação de reescalonamento de dois para quatro pods é mostrado abaixo:

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

Como você pode ver na saída, agora você tem quatro pods em sua implantação que podem executar seu aplicativo.

Excluir uma implantação

Para excluir a implantação, incluindo todos os pods, você precisa executar kubectl delete deployment especificando o nome da implantação nginx-deployment e o nome do namespace. Para excluir a implantação:

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

Um exemplo de uso de comando, com saída, é mostrado abaixo:

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

Próximos passos

Visão geral do Kubernetes