Uso de kubectl para ejecutar una aplicación con estado de Kubernetes con StorageClass en el dispositivo Azure Stack Edge Pro con GPU
SE APLICA A: Azure Stack Edge Pro: GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
En este artículo se muestra cómo implementar una aplicación con estado de una sola instancia en Kubernetes con StorageClass para aprovisionar de forma dinámica el almacenamiento y una implementación. La implementación usa comandos kubectl
en un clúster de Kubernetes existente e implementa la aplicación MySQL.
Este procedimiento está dirigido a los usuarios que han revisado Almacenamiento de Kubernetes en un dispositivo Azure Stack Edge Pro y están familiarizados con los conceptos de almacenamiento de Kubernetes.
Requisitos previos
Antes de implementar la aplicación con estado, complete los siguientes requisitos previos en el dispositivo y en el cliente que vaya a usar para acceder al dispositivo:
Para el dispositivo
- Tiene credenciales de inicio de sesión en un dispositivo Azure Stack Edge Pro de un nodo.
- El dispositivo está activado. Consulte Activación del dispositivo.
- El dispositivo tiene el rol de proceso configurado desde Azure Portal y un clúster de Kubernetes. Consulte Configuración del proceso.
Para el cliente que va a acceder al dispositivo
- Tiene un sistema de cliente Windows que se usará para acceder al dispositivo Azure Stack Edge Pro.
El cliente ejecuta Windows PowerShell 5.0 o una versión posterior. Para descargar la última versión de Windows PowerShell, vaya a Instalación de Windows PowerShell.
También puede tener otro cliente con un sistema operativo compatible. En este artículo, el procedimiento que se describe emplea un cliente Windows.
Ha completado el procedimiento descrito en Acceso al clúster de Kubernetes en el dispositivo Azure Stack Edge Pro. Ha:
- Creado un espacio de nombres
userns1
con el comandoNew-HcsKubernetesNamespace
. - Creado un usuario
user1
con el comandoNew-HcsKubernetesUser
. - Concedido el acceso
user1
auserns1
con el comandoGrant-HcsKubernetesNamespaceAccess
. - Instalado
kubectl
en el cliente y guardado el archivokubeconfig
con la configuración de usuario en C:\Users\<nombredeusuario>\.kube.
- Creado un espacio de nombres
Asegúrese de que la versión del cliente de
kubectl
es como máximo una versión superior o inferior a la versión maestra de Kubernetes que se ejecuta en el dispositivo Azure Stack Edge Pro.- Use
kubectl version
para comprobar la versión de kubectl que se ejecuta en el cliente. Anote la versión completa. - En la interfaz de usuario local del dispositivo Azure Stack Edge Pro, vaya a Información general y anote el número de software de Kubernetes.
- Compruebe la compatibilidad entre estas dos versiones con la asignación proporcionada en la versión de Kubernetes admitida.
- Use
Está listo para implementar una aplicación con estado en el dispositivo Azure Stack Edge Pro.
Implementación de MySQL
Ahora ejecutará una aplicación con estado mediante la creación de una implementación de Kubernetes y su conexión a la instancia integrada de StorageClass mediante un elemento PersistentVolumeClaim (PVC).
Todos los comandos kubectl
que utiliza para crear y administrar implementaciones de aplicaciones con estado tienen que especificar el espacio de nombres asociado a la configuración. Para especificar el espacio de nombres en un comando de kubectl, use kubectl <command> -n <your-namespace>
.
También puede obtener una lista de los pods que se ejecutan en el clúster de Kubernetes en el espacio de nombres. Un pod es un contenedor o un proceso de la aplicación que se ejecuta en el clúster de Kubernetes.
kubectl get pods -n <your-namespace>
Este es un ejemplo de uso del comando:
C:\Users\user>kubectl get pods -n "userns1" No resources found in userns1 namespace. C:\Users\user>
La salida debe indicar que no se encuentra ningún recurso (pod), ya que no hay ninguna aplicación en ejecución en el clúster.
Usará los archivos YAML siguientes. El archivo
mysql-deployment.yml
describe una implementación que ejecuta MySQL y hace referencia a PVC. El archivo define un montaje de volumen para/var/lib/mysql
y, a continuación, crea un PVC que busca un volumen de 20 GB. Se aprovisiona un PV dinámico y el PVC se enlaza a este PV.Copie y guarde el siguiente archivo
mysql-deployment.yml
en una carpeta en el cliente Windows que esté usando para acceder al 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
Haga una copia y guárdela como archivo
mysql-pvc.yml
en la misma carpeta donde guardó el archivomysql-deployment.yml
. Para usar el elemento StorageClass integrado del dispositivo Azure Stack Edge Pro en un disco de datos conectado, establezca el campostorageClassName
del objeto PVC enase-node-local
y accessModes debe serReadWriteOnce
.Nota:
Asegúrese de que la sangría de los archivos YAML es correcta. Puede comprobarlo con YAML lint para la validación y luego guardarlos.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim-sc spec: storageClassName: ase-node-local accessModes: - ReadWriteOnce resources: requests: storage: 20Gi
Implementación del archivo
mysql-pvc.yaml
.kubectl apply -f <URI path to the mysql-pv.yml file> -n <your-user-namespace>
Este es un ejemplo de salida de la implementación.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-pvc.yml" -n userns1 persistentvolumeclaim/mysql-pv-claim-sc created C:\Users\user>
Tome nota del nombre del PVC creado; en este ejemplo,
mysql-pv-claim-sc
. Lo usará en otro paso más adelante.Implemente el contenido del archivo
mysql-deployment.yml
.kubectl apply -f <URI path to mysql-deployment.yml file> -n <your-user-namespace>
Este es un ejemplo de salida de la implementación.
C:\Users\user>kubectl apply -f "C:\stateful-application\mysql-deployment.yml" -n userns1 service/mysql created deployment.apps/mysql created C:\Users\user>
Visualice la información sobre la implementación.
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>
Enumere los pods creados por la implementación.
kubectl get pods -l <app=label> -n <your-user-namespace>
Esta es una salida de ejemplo.
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>
Inspeccione PersistentVolumeClaim.
kubectl describe pvc <your-pvc-name>
Esta es una salida de ejemplo.
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>
Comprobación de que MySQL está en ejecución
Para comprobar que la aplicación está en ejecución, escriba:
kubectl exec <your-pod-with-the-app> -i -t -n <your-namespace> -- mysql -p
Cuando se le solicite, proporcione la contraseña. La contraseña está en el archivo mysql-deployment
.
Esta es una salida de ejemplo.
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>
Eliminación de una implementación
Para eliminar la implementación, elimine los objetos implementados por nombre. Estos objetos incluyen la implementación, el servicio y el PVC.
kubectl delete deployment <deployment-name>,svc <service-name> -n <your-namespace>
kubectl delete pvc <your-pvc-name> -n <your-namespace>
Esta es la salida de ejemplo cuando se elimina la implementación y el servicio.
C:\Users\user>kubectl delete deployment,svc mysql -n userns1
deployment.apps "mysql" deleted
service "mysql" deleted
C:\Users\user>
Esta es la salida de ejemplo cuando se elimina el PVC.
C:\Users\user>kubectl delete pvc mysql-pv-claim-sc -n userns1
persistentvolumeclaim "mysql-pv-claim-sc" deleted
C:\Users\user>
Pasos siguientes
Para saber cómo configurar la red a través de kubectl, consulte Implementación de una aplicación sin estado en un dispositivo Azure Stack Edge Pro.