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 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ó.
- O dispositivo está ativado. Consulte Ativar o dispositivo.
- O dispositivo tem a função de computação configurada por meio do portal do Azure e tem um cluster Kubernetes. Consulte Configurar computação.
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 doNew-HcsKubernetesNamespace
comando. - Criou um usuário
user1
através doNew-HcsKubernetesUser
comando. - Concedido o
user1
acesso auserns1
através doGrant-HcsKubernetesNamespaceAccess
comando. - Instalado
kubectl
no cliente e salvo okubeconfig
arquivo com a configuração do usuário em C:\Users\<username>\.kube.
- Criou um
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.
- Use
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
StatefulSet
o . 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. Certifique-se de marcar a caixa de seleção Usar o compartilhamento com computação de Borda.
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.
Selecione Montar e confirme a 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 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>
.
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.
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/mysql
o 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
Copie e salve como um
mysql-pv.yml
arquivo na mesma pasta onde você salvou omysql-deployment.yml
arquivo . Para usar o compartilhamento SMB criado anteriormente comkubectl
o , defina ovolumeName
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
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.
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
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>
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>
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:
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.
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.
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