Partilhar via


Use kubectl para executar um aplicativo com estado do Kubernetes com um PersistentVolume em seu dispositivo 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 mostra como implantar um aplicativo com estado de instância única no Kubernetes usando um PersistentVolume (PV) e uma implantação. A implantação usa kubectl comandos em um cluster Kubernetes existente e implanta o aplicativo MySQL.

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

O Azure Stack Edge Pro também dá suporte à execução de contêineres do Azure SQL Edge e eles podem ser implantados de maneira semelhante, conforme detalhado aqui para o MySQL. Para obter mais informações, consulte Azure SQL Edge.

Pré-requisitos

Antes de implantar o aplicativo com monitoração de estado, conclua os seguintes pré-requisitos em seu dispositivo e no cliente que você usará para acessar o dispositivo:

Para o dispositivo

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

Para o cliente que acessa o dispositivo

  • Você tem um sistema cliente Windows que será usado para acessar o dispositivo 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 ter qualquer outro cliente com um sistema operacional suportado. Este artigo descreve o procedimento ao usar um cliente Windows.

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

      • Criou um userns1 namespace por meio do New-HcsKubernetesNamespace comando.
      • Criou um usuário user1 através do New-HcsKubernetesUser comando.
      • Concedido o user1 acesso a userns1 através do Grant-HcsKubernetesNamespaceAccess comando.
      • Instalado kubectl no cliente e salvo o kubeconfig arquivo com a configuração do usuário em C:\Users\<username>\.kube.
    • Certifique-se de que a kubectl versão do cliente não esteja distorcida mais do que uma versão da versão mestre do Kubernetes em execução no seu dispositivo Azure Stack Edge Pro.

      • Use kubectl version para verificar a versão do 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 do software Kubernetes.
      • Verifique a compatibilidade dessas duas versões a partir do mapeamento fornecido na versão do Kubernetes suportado.

Você está pronto para implantar um aplicativo com monitoração de estado em seu dispositivo Azure Stack Edge Pro.

Provisionar um PV estático

Para provisionar estaticamente um PV, você precisa criar um compartilhamento em seu dispositivo. Siga estas etapas para provisionar um PV em relação ao seu compartilhamento SMB.

Nota

  • O exemplo específico usado neste artigo de instruções não funciona com compartilhamentos NFS. Em geral, os compartilhamentos NFS podem ser provisionados em seu dispositivo Azure Stack Edge com aplicativos que não sejam de banco de dados.
  • Para implantar aplicativos com monitoração de estado que usam volumes de armazenamento para fornecer armazenamento persistente, recomendamos que você use StatefulSeto . Este exemplo usa Deployment com apenas uma réplica e é adequado para desenvolvimento e teste.
  1. Escolha se deseja criar um compartilhamento de Borda ou um compartilhamento local de Borda. Siga as instruções em Adicionar um compartilhamento para criar um compartilhamento. Certifique-se de marcar a caixa de seleção Usar o compartilhamento com computação de Borda.

    Compartilhamento local de borda para PV

    1. Em vez de criar um novo compartilhamento, se você decidir usar um compartilhamento existente, precisará montar o compartilhamento.

      No portal do Azure para seu recurso Azure Stack Edge, vá para Compartilhamentos. Na lista existente de compartilhamentos, selecione e clique em um compartilhamento que você deseja usar.

      Selecionar compartilhamento local existente para PV

    2. Selecione Montar e confirme a montagem quando solicitado.

      Monte o compartilhamento local existente para PV

  2. Anote o nome do compartilhamento. Quando esse compartilhamento é criado, um objeto de volume persistente é criado automaticamente no cluster Kubernetes correspondente ao compartilhamento SMB que você criou.

Implantar o MySQL

Agora você executará um aplicativo com monitoração de estado criando uma implantação do Kubernetes e conectando-a ao PV criado na etapa anterior usando um PersistentVolumeClaim (PVC).

Todos os kubectl comandos que você usa para criar e gerenciar implantações de aplicativos com monitoração de 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 dos pods em execução no cluster do Kubernetes em seu namespace. Um pod é um contêiner ou processo de aplicativo em execução no cluster do 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 ficheiro define uma montagem de volume para /var/lib/mysqlo e, em seguida, cria um PVC que procura um volume de 20 GB.

    Essa declaração é satisfeita por qualquer PV existente que tenha sido provisionado estaticamente quando você criou o compartilhamento na etapa anterior. No seu dispositivo, é criado um grande PV de 32 TB para cada partilha. O PV cumpre os requisitos estabelecidos pelo PVC e o PVC deve estar vinculado a este PV.

    Copie e salve o seguinte mysql-deployment.yml arquivo em uma pasta no cliente 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
    
  3. Copie e salve como um mysql-pv.yml arquivo na mesma pasta onde você salvou o mysql-deployment.ymlarquivo . Para usar o compartilhamento SMB criado anteriormente com kubectlo , defina o volumeName campo no objeto PVC como o nome do compartilhamento.

    Nota

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
    spec:
      volumeName: <smb-share-name-here>
      storageClassName: ""
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Implante o mysql-pv.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-pv.yml" -n userns1
    persistentvolumeclaim/mysql-pv-claim created
    
    C:\Users\user>
    

    Observe o nome do PVC criado. Você vai usá-lo em uma etapa posterior.

  5. Implante o mysql-deployment.yml conteúdo do 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
    
  6. Exiba 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:  Tue, 18 Aug 2020 09:44:58 -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
        ReadOnly:   false
    Conditions:
      Type           Status  Reason
      ----           ------  ------
      Progressing    True    NewReplicaSetAvailable
      Available      True    MinimumReplicasAvailable
    OldReplicaSets:  <none>
    NewReplicaSet:   mysql-c85f7f79c (1/1 replicas created)
    Events:
      Type    Reason             Age   From                   Message
      ----    ------             ----  ----                   -------
      Normal  ScalingReplicaSet  10m   deployment-controller  Scaled up replica set mysql-c85f7f79c to 1
    
    C:\Users\user>
    
  7. Liste 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-c85f7f79c-vzz7j   1/1     Running   1          14m
    
    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 -n userns1
    Name:          mysql-pv-claim
    Namespace:     userns1
    StorageClass:
    Status:        Bound
    Volume:        mylocalsmbshare1
    Labels:        <none>
    Annotations:   kubectl.kubernetes.io/last-applied-configuration:
                     {"apiVersion":"v1","kind":"PersistentVolumeClaim","metadata":{"annotations":{},"name":"mysql-pv-claim","namespace":"userns1"},"spec":{"acc...
                   pv.kubernetes.io/bind-completed: yes
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      32Ti
    Access Modes:  RWO,RWX
    VolumeMode:    Filesystem
    Mounted By:    mysql-c85f7f79c-vzz7j
    Events:        <none>
    
    C:\Users\user>
    

Verifique se o MySQL está em execução

Para executar um comando em um contêiner em um pod que esteja executando o MySQL, digite:

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

Aqui está um exemplo de saída.

C:\Users\user>kubectl exec mysql-c85f7f79c-vzz7j -i -t -n userns1 -- mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
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 pelo 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á a saída de exemplo de quando você exclui o PVC.

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

O PV deixou de estar ligado ao PVC, uma vez que o PVC foi suprimido. Como o PV foi provisionado quando o compartilhamento foi criado, você precisará excluí-lo. Siga estes passos:

  1. Desmonte o compartilhamento. No portal do Azure, vá para seus Compartilhamentos de recursos > do Azure Stack Edge e selecione e clique no compartilhamento que deseja desmontar. Selecione Desmontar e confirme a operação. Aguarde até que o compartilhamento seja desmontado. A desmontagem libera o compartilhamento (e, portanto, o PersistentVolume associado) do cluster Kubernetes.

    Desmontar compartilhamento local para PV

  2. Agora você pode selecionar Excluir e confirmar a exclusão para excluir seu compartilhamento. Isso também deve excluir a ação e o PV correspondente.

    Excluir compartilhamento local para PV

Próximos passos

Para entender como provisionar armazenamento dinamicamente, consulte Implantar um aplicativo com monitoração de estado por meio do provisionamento dinâmico em um dispositivo Azure Stack Edge Pro