Use kubectl para executar um aplicativo com estado do Kubernetes com StorageClass em seu dispositivo GPU 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 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.
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.
Implantar o MySQL
Agora você executará um aplicativo com monitoração de 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 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. Um PV dinâmico é provisionado e o PVC está 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-sc
Copie e salve como um
mysql-pvc.yml
arquivo na mesma pasta onde você salvou omysql-deployment.yml
arquivo . Para usar o StorageClass interno que o dispositivo Azure Stack Edge Pro em um disco de dados anexado, defina ostorageClassName
campo no objeto PVC comoase-node-local
e accessModes deve serReadWriteOnce
.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-sc spec: storageClassName: ase-node-local accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
Implante 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ê 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 C:\Users\user>
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: 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>
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-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>
Verifique 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, forneça a senha. A palavra-passe está no seu mysql-deployment
ficheiro.
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 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-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>
Próximos passos
Para entender como configurar a rede via kubectl, consulte Implantar um aplicativo sem estado em um dispositivo Azure Stack Edge Pro