Compartilhar via


Use o kubectl para executar um aplicativo com estado de Kubernetes com StorageClass no seu de dispositivo de GPU do Azure Stack Edge Pro

APLICA-SE 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 R Azure Stack Edge Mini RYes for Mini R SKU

Este artigo mostra como implantar um aplicativo com estado de instância única no Kubernetes usando um StorageClass para provisionar dinamicamente o armazenamento e uma implantação. A implantação usa kubectl comandos em um cluster de Kubernetes existente e implanta o aplicativo MySQL.

Este procedimento se destina aos que revisaram o armazenamento de Kubernetes no dispositivo Azure Stack Edge Pro e estão familiarizados com os conceitos do armazenamento de Kubernetes.

Pré-requisitos

Antes de implantar o aplicativo com estado, conclua os seguintes pré-requisitos no seu dispositivo e no cliente que será usado para acessar o dispositivo:

Para dispositivo

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

Para cliente que acessa o dispositivo

  • Você tem um sistema cliente do Windows que será usado para acessar o dispositivo do Azure Stack Edge Pro.
    • O cliente está executando o Windows PowerShell 5.0 ou posterior. Para baixar a versão mais recente do Windows PowerShell, vá para Instalar o Windows PowerShell.

    • Você também pode usar qualquer outro cliente que tenha um Sistema operacional compatível. Este artigo descreve o procedimento usando um cliente Windows.

    • Você concluiu o procedimento descrito em Acessar o cluster Kubernetes em dispositivo Azure Stack Edge Pro. Você:

      • Criou um userns1 namespace por meio do New-HcsKubernetesNamespace comando.
      • Criou um usuário user1 por meio do New-HcsKubernetesUser comando.
      • Concedeu ao user1 acesso ao userns1 por meio do Grant-HcsKubernetesNamespaceAccess comando.
      • Instalou kubectl no cliente e salvou o arquivo kubeconfig com a configuração do usuário em C:\Users\<nome de usuário>\.kube.
    • Verificou se a versão de kubectl do cliente está defasada em, no máximo, uma versão em relação à versão mestre do Kubernetes executada no seu dispositivo Azure Stack Edge Pro.

      • Use kubectl version para verificar a versão de kubectl em execução no cliente. Anote a versão completa.
      • Na interface do usuário local do seu dispositivo Azure Stack Edge Pro, vá para Visão geral e anote o número de software do Kubernetes.
      • Verifique a compatibilidade dessas duas versões com base no mapeamento fornecido na versão do Kubernetes com suporte.

Você está pronto para implantar um aplicativo com estado no dispositivo Azure Stack Edge pro.

Implantar MySQL

Agora, você executará um aplicativo com estado criando uma implantação do Kubernetes e conectando-a ao StorageClass interno usando um PersistentVolumeClaim (PVC).

Todos os kubectl comandos que você usa para criar e gerenciar implantações de aplicativo com estado precisam especificar o namespace associado à configuração. Para especificar o namespace em um comando kubectl, use kubectl <command> -n <your-namespace>.

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

    kubectl get pods -n <your-namespace>
    

    Aqui está um exemplo de uso de comando:

     C:\Users\user>kubectl get pods -n "userns1"
     No resources found in userns1 namespace.    
     C:\Users\user>
    

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

  2. Você usará os seguintes arquivos YAML. O mysql-deployment.yml arquivo descreve uma implantação que executa o MySQL e faz referência ao PVC. O arquivo define uma montagem de volume para o /var/lib/mysql e, em seguida, cria um PVC que procura um volume de 20 GB. Um PV dinâmico é provisionado e o PVC é vinculado a esse PV.

    Copie e salve o mysql-deployment.yml arquivo a seguir em uma pasta no cliente do Windows que você está usando para acessar o dispositivo Azure Stack Edge Pro.

    apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      ports:
      - port: 3306
      selector:
        app: mysql
      clusterIP: None
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: mysql
    spec:
      selector:
        matchLabels:
          app: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            env:
              # Use secret in real usage
            - name: MYSQL_ROOT_PASSWORD
              value: password
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - name: mysql-persistent-storage
              mountPath: /var/lib/mysql
          volumes:
          - name: mysql-persistent-storage
            persistentVolumeClaim:
              claimName: mysql-pv-claim-sc
    
  3. Copie e salve como um mysql-pvc.yml arquivo na mesma pasta em que você salvou o mysql-deployment.yml. Para usar o StorageClass interno do dispositivo Azure Stack Edge Pro em um disco de dados anexado, defina o storageClassName campo no objeto de PVC como ase-node-local e o accessModes deve ser ReadWriteOnce.

    Observação

    Certifique-se de que os arquivos YAML tenham recuo correto. Você pode verificar com YAML lint para validar e, em seguida, salvar.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim-sc
    spec:
      storageClassName: ase-node-local
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Implantar o mysql-pvc.yaml arquivo.

    kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>

    Aqui está um exemplo de saída da implantação.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pvc.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim-sc created
    C:\Users\user>
    

    Observe o nome do PVC criado – neste exemplo, mysql-pv-claim-sc. Você o utilizará em uma etapa posterior.

  5. Implantar o conteúdo do mysql-deployment.yml arquivo.

    kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>

    Aqui está um exemplo de saída da implantação.

    C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1
    service/mysql created
    deployment.apps/mysql created
    C:\Users\user>
    
  6. Exibir informações sobre a implantação.

    kubectl describe deployment <app-label> -n <your-user-namespace>

    C:\Users\user>kubectl describe deployment mysql -n userns1
    Name:               mysql
    Namespace:          userns1
    CreationTimestamp:  Thu, 20 Aug 2020 11:14:25 -0700
    Labels:             <none>
    Annotations:        deployment.kubernetes.io/revision: 1
                        kubectl.kubernetes.io/last-applied-configuration:
                          {"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"name":"mysql","namespace":"userns1"},"spec":{"selector":{"matchL...
    Selector:           app=mysql
    Replicas:           1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType:       Recreate
    MinReadySeconds:    0
    Pod Template:
      Labels:  app=mysql
      Containers:
       mysql:
        Image:      mysql:5.6
        Port:       3306/TCP
        Host Port:  0/TCP
        Environment:
          MYSQL_ROOT_PASSWORD:  password
        Mounts:
          /var/lib/mysql from mysql-persistent-storage (rw)
      Volumes:
       mysql-persistent-storage:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  mysql-pv-claim-sc
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Available      True    MinimumReplicasAvailable
      Progressing    True    NewReplicaSetAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-695c4d9dcd (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  24s   deployment-controller  Scaled up replica set mysql-695c4d9dcd to 1
    C:\Users\user>
    
  7. Listar os pods criados pela implantação.

    kubectl get pods -l <app=label> -n <your-user-namespace>

    Aqui está um exemplo de saída.

    C:\Users\user>kubectl get pods -l app=mysql -n userns1
    NAME                     READY   STATUS    RESTARTS   AGE
    mysql-695c4d9dcd-rvzff   1/1     Running   0          40s
    C:\Users\user>
    
  8. Inspecione o PersistentVolumeClaim.

    kubectl describe pvc <your-pvc-name>

    Aqui está um exemplo de saída.

    C:\Users\user>kubectl describe pvc mysql-pv-claim-sc -n userns1
    Name:          mysql-pv-claim-sc
    Namespace:     userns1
    StorageClass:  ase-node-local
    Status:        Bound
    Volume:        pvc-dc48253c-82dc-42a4-a7c6-aaddc97c9b8a
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim-sc","namespace":"userns1"},"spec":{"...
                   pv.kubernetes.io/bind-completed: yes
                   pv.kubernetes.io/bound-by-controller: yes
                   volume.beta.kubernetes.io/storage-provisioner: rancher.io/local-path
                   volume.kubernetes.io/selected-node: k8s-3q7lhq2cl-3q7lhq2
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      20Gi
    Access Modes:  RWO
    VolumeMode:    Filesystem
    Mounted By:    mysql-695c4d9dcd-rvzff
    Events:
      Type    Reason                 Age                From                                                                                                Message
      ----    ------                 ----               ----                                                                                                -------
      Normal  WaitForFirstConsumer   71s (x2 over 77s)  persistentvolume-controller                                                                         waiting for first consumer to be created before binding
      Normal  ExternalProvisioning   62s                persistentvolume-controller                                                                         waiting for a volume to be created, either by external provisioner "rancher.io/local-path" or manually created by system administrator
      Normal  Provisioning           62s                rancher.io/local-path_local-path-provisioner-6b84988bf9-tx8mz_1896d824-f862-4cbf-912a-c8cc0ca05574  External provisioner is provisioning volume for claim "userns1/mysql-pv-claim-sc"
      Normal  ProvisioningSucceeded  60s                rancher.io/local-path_local-path-provisioner-6b84988bf9-tx8mz_1896d824-f862-4cbf-912a-c8cc0ca05574  Successfully provisioned volume pvc-dc48253c-82dc-42a4-a7c6-aaddc97c9b8a
    C:\Users\user>
    

Verificar se o MySQL está em execução

Para verificar se o aplicativo está em execução, digite:

kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql -p

Quando solicitado, forneça a senha. A senha está em seu mysql-deployment arquivo.

Aqui está um exemplo de saída.

C:\Users\user>kubectl exec mysql-695c4d9dcd-rvzff -i -t -n userns1 -- mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.49 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

Excluir uma implantação

Para excluir a implantação, exclua os objetos implantados por nome. Esses objetos incluem implantação, serviço e PVC.

kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>

Aqui está um exemplo de saída de quando você exclui a implantação e o serviço.

C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>

Aqui está o exemplo de saída de quando você exclui o PVC.

C:\Users\user>kubectl delete pvc mysql-pv-claim-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>

Próximas etapas

Para entender como configurar a rede via kubectl, consulte Implantar um aplicativo sem estado em um dispositivo Azure Stack Edge Pro