Administración del almacenamiento de pods en clústeres de Kubernetes
Aunque la mayoría de las aplicaciones que tiene pensado implementar en AKS en Azure Stack HCI no tienen estado, los desarrolladores de Contoso identificaron algunas cargas de trabajo con estado que planean contenedorizar. Para permitir este requisito, debe explorar la compatibilidad con la conservación del estado de los pods en ejecución mediante el uso de volúmenes persistentes de Kubernetes.
Implementación de volúmenes persistentes para AKS en Azure Stack HCI
De forma predeterminada, los pods individuales funcionan como recursos sin estado. Si, por algún motivo, se produce un error en un pod que forma parte de una implementación, el programador de Kubernetes crea automáticamente otro que proporciona la funcionalidad correspondiente, lo que garantiza que la aplicación contenedorizada siga estando disponible. Sin embargo, sin aprovisionamientos adicionales para conservar el estado, se pierden los datos en los que el pod con errores podría haber estado trabajando.
Hay escenarios en los que los pods deben poder conservar y compartir sus datos y estado. En estos escenarios, puede usar volúmenes persistentes, que son recursos de clúster que permiten almacenar datos de cargas de trabajo contenedorizadas más allá de la duración de pods individuales.
Para implementar un volumen en un clúster de Kubernetes, debe definir una notificación de volumen persistente para una clase de almacenamiento específica. Una clase de almacenamiento representa las características del almacenamiento subyacente, como el rendimiento o la compatibilidad con el acceso compartido. La notificación de volumen persistente incluye información sobre el modo de acceso necesario y el tamaño del volumen. El servidor de API de Kubernetes usa la definición de notificación de volumen persistente para aprovisionar dinámicamente un volumen de almacenamiento adecuado siempre que así lo exijan los pods implementados.
Nota:
AKS en Azure Stack HCI ofrece la clase de almacenamiento predeterminada, que implementa discos basados en VHDX.
Defina los requisitos de almacenamiento de los pods implementados incluyendo especificaciones de volumen persistentes en los archivos de manifiesto correspondientes. Además de desencadenar el aprovisionamiento dinámico, esta acción también monta automáticamente el volumen dentro de los pods.
Por ejemplo, el siguiente manifiesto define una notificación de volumen persistente para un disco no compartido de 100 GB que usa la clase de almacenamiento predeterminada.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-akshci
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
Para implementar esta notificación de volumen persistente, puede almacenar este manifiesto como un archivo YAML y ejecutar la utilidad de línea de comandos kubectl para crear el recurso correspondiente (donde pvc_definition.yaml
representa el archivo YAML):
kubectl create -f pvc_definition.yaml
Para definir un volumen persistente correspondiente para un pod, puede usar el siguiente manifiesto:
kind: Pod
apiVersion: v1
metadata:
name: win-appserver
spec:
containers:
- name: win-appserver
image: mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019
volumeMounts:
- name: akshciscsi
mountPath: "/mnt/akshciscsi"
volumes:
- name: akshciscsi
persistentVolumeClaim:
claimName: pvc-akshci
nodeSelector:
kubernetes.io/os: windows
Para implementar también este volumen persistente, puede almacenar el manifiesto de pod como un archivo YAML y ejecutar la utilidad de línea de comandos kubectl para aprovisionar el volumen y montarlo (donde pv_definition.yaml
representa el archivo YAML):
kubectl create -f pv_definition.yaml
El pod resultante tendrá un volumen de 100 GB de tamaño montado dentro de la ruta del sistema de archivos designada por el valor del elemento mountPath
.
Para eliminar la notificación de volumen persistente, primero debe eliminar los pods y las implementaciones que la usan actualmente. En ese momento, para completar la tarea, puede usar el comando kubectl delete PersistentVolumeClaim
, seguido del nombre de la notificación de volumen persistente.