Compartilhar 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, ao SKU do Pro GPUAzure Stack Edge Pro - GPUSim, ao SKU do Pro 2Azure Stack Edge Pro 2Sim, ao SKU do Pro RAzure Stack Edge Pro RSim, ao SKU do Mini RAzure Stack Edge Mini R

Este artigo mostra como implantar um aplicativo com estado de instância única no Kubernetes usando um PV (PersistentVolume) 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.

Azure Stack Edge Pro também dá suporte à execução SQL do Azure no Edge contêineres e eles podem ser implantados de maneira semelhante à detalhada aqui para MySQL. Para saber mais, consulte o SQL do Azure no Edge.

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.

Provisionar um PV estático

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

Observação

  • 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 de borda Azure Stack com aplicativos que não são de banco de dados.
  • Para implantar aplicativos com estado que usam volumes de armazenamento para fornecer armazenamento persistente, recomendamos que você use o StatefulSet . 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. Para montar o compartilhamento do Edge, marque a caixa de seleção Usar o compartilhamento com a computação de borda.

    Compartilhamento local de borda para VP

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

      No portal do Azure do recurso do Azure Stack Edge, acesse Compartilhamentos. Na lista de compartilhamentos existente, selecione e clique no compartilhamento que deseja usar.

      Selecione um compartilhamento local existente para VP

    2. Selecione montar e confirmar montagem quando solicitado.

      Monte o compartilhamento local existente para VP

  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 MySQL

Agora você executará um aplicativo com estado criando uma implantação do Kubernetes e conectando-o ao PV criado na etapa anterior 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.

    Essa declaração é atendida por qualquer PV existente que foi provisionado estaticamente quando você criou o compartilhamento na etapa anterior. Em seu dispositivo, um PV grande de 32 TB é criado para cada compartilhamento. O PV atende aos requisitos definidos pelo PVC e o PVC deve ser 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
    
  3. Copie e salve como um mysql-pv.yml arquivo na mesma pasta em que você salvou o mysql-deployment.yml. Para usar o compartilhamento SMB criado anteriormente com , de definido o campo no kubectl objeto PVC como o nome do volumeName compartilhamento.

    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
    spec:
      volumeName: <smb-share-name-here>
      storageClassName: ""
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    
  4. Implantar 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ê 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
    
  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:  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. 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-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>
    

Verificar 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 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 -n userns1
persistentvolumeclaim "mysql-pv-claim" deleted
C:\Users\user>

O VP não está mais ligado ao PVC, pois o PVC foi excluído. Como o PV foi provisionado quando o compartilhamento foi criado, será necessário excluir o compartilhamento. Siga estas etapas:

  1. Desmontar o compartilhamento. No portal do Azure, vá para o recurso do Azure Stack Edge > Compartilhamentos 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 VP

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

    Exclua o compartilhamento local de borda para VP

Próximas etapas

Para entender como provisionar dinamicamente o armazenamento, consulte implantar um aplicativo com estado por meio de provisionamento dinâmico em um dispositivo Azure Stack Edge pro