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: 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 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ó.
- 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.
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>
.
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. 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
Copie e salve como um
mysql-pvc.yml
arquivo na mesma pasta em que você salvou omysql-deployment.yml
. Para usar o StorageClass interno do dispositivo Azure Stack Edge Pro em um disco de dados anexado, defina ostorageClassName
campo no objeto de PVC comoase-node-local
e o accessModes deve serReadWriteOnce
.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
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.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>
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>
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>
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, digite 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