Use kubectl para executar um aplicativo com estado do Kubernetes com um PersistentVolume em seu dispositivo Azure Stack Edge Pro
APLICA-SE A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro 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ó.
- O dispositivo está ativado. Confira Ativar o dispositivo.
- O dispositivo tem a função de computação configurada por meio do portal do Azure e conta com um cluster Kubernetes. Confira Configurar computação.
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 doNew-HcsKubernetesNamespace
comando. - Criou um usuário
user1
por meio doNew-HcsKubernetesUser
comando. - Concedeu ao
user1
acesso aouserns1
por meio doGrant-HcsKubernetesNamespaceAccess
comando. - Instalou
kubectl
no cliente e salvou o arquivokubeconfig
com a configuração do usuário em C:\Users\<nome de usuário>\.kube.
- Criou um
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.
- Use
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 usaDeployment
com apenas uma réplica e é adequado para desenvolvimento e teste.
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.
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 montar e confirmar montagem quando solicitado.
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>
.
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.
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
Copie e salve como um
mysql-pv.yml
arquivo na mesma pasta em que você salvou omysql-deployment.yml
. Para usar o compartilhamento SMB criado anteriormente com , de definido o campo nokubectl
objeto PVC como o nome dovolumeName
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
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.
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
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>
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>
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:
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.
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.
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