introducción al almacenamiento nativo en la nube de vmware ...almacenamiento nativo en la nube es...

68
Introducción al almacenamiento nativo en la nube de VMware Actualización 3 13 de agosto de 2019 VMware vSphere 6.7 vCenter Server 6.7 VMware ESXi 6.7

Upload: others

Post on 29-Feb-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Introducción al almacenamientonativo en la nube de VMware

Actualización 313 de agosto de 2019VMware vSphere 6.7vCenter Server 6.7VMware ESXi 6.7

Page 2: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Puede encontrar la documentación técnica más actualizada en el sitio web de VMware:

https://docs.vmware.com/es/

Si tiene comentarios relacionados con esta documentación, envíelos a:

[email protected]

VMware, Inc.3401 Hillview Ave.Palo Alto, CA 94304www.vmware.com

VMware Spain, S.L.Calle Rafael Boti 262.ª plantaMadrid 28023Tel.: +34 914125000www.vmware.com/es

Copyright © 2019 VMware, Inc. Todos los derechos reservados. Información sobre el copyright y la marca comercial.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 2

Page 3: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Contenido

Acerca de Introducción al almacenamiento nativo en la nube de VMware 5

1 Descripción general de Almacenamiento nativo en la nube 6Conceptos y terminología del Almacenamiento nativo en la nube 6

Usuarios y herramientas de Almacenamiento nativo en la nube 8

Componentes de Almacenamiento nativo en la nube 9

Requisitos de Almacenamiento nativo en la nube 11

Funciones y privilegios de Almacenamiento nativo en la nube 12

2 Configurar un clúster de Kubernetes 15Configurar máquinas virtuales de clúster de Kubernetes 15

Configurar componentes de Kubernetes en máquinas virtuales de nodo 16

Inicializar el nodo maestro 17

Inicializar nodos de trabajo 20

Instalar el administrador de controladoras de nube de vSphere 20

Instalar el controlador de la interfaz de almacenamiento de contenedores de vSphere 24

Usar un certificado para proteger las conexiones de vCenter Server 35

Comprobar la configuración del clúster 39

Agregar un nodo de Kubernetes después de la instalación de CCM y del controlador CSI 40

3 Implementar una aplicación con estado 42Crear una directiva de almacenamiento 43

Crear una clase de almacenamiento 44

Definir e implementar un servicio de Kubernetes para la aplicación 46

Crear e implementar un objeto StatefulSet 46

Revisar el VMDK del volumen contenedor 50

4 Administrar volúmenes contenedores 51Supervisar volúmenes contenedores en clústeres de Kubernetes 51

Escalar horizontalmente la aplicación en contenedor 52

5 Implementar CCM y CSI en un entorno con varios centros de datos o clústeres 54Configurar zonas en el entorno de CNS de vSphere 54

Crear zonas mediante etiquetas de vSphere 55

Habilitar zonas para CCM y el controlador CSI 56

Implementar cargas de trabajo mediante zonas 58

Usar aprovisionamiento de volúmenes con reconocimiento de topología en Kubernetes 61

Migrar máquinas virtuales de nodo de Kubernetes a zonas o regiones diferentes 65

VMware, Inc. 3

Page 4: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

6 Solucionar problemas de Almacenamiento nativo en la nube para vSphere 66Usar archivos de registro de CNS 66

Modificar el nivel de registro 67

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 4

Page 5: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Acerca de Introducción alalmacenamiento nativo en la nube deVMware

El documento Introducción al almacenamiento nativo en la nube de VMware proporciona informaciónsobre cómo configurar y usar el almacenamiento nativo en la nube de VMware® en el entorno devSphere.

Esta información incluye una breve descripción general de los conceptos y los componentes delalmacenamiento nativo en la nube, así como una revisión en la que se explica cómo crear un clúster deKubernetes e implementar una aplicación en contenedor.

Audiencia previstaEsta información está destinada a desarrolladores y administradores de vSphere que tienenconocimientos básicos de Kubernetes y que están familiarizados con los conceptos de implementaciónde contenedores.

Glosario de publicaciones técnicas de VMwareLas publicaciones técnicas de VMware proporcionan un glosario de términos que podrían resultarledesconocidos. Para ver las definiciones de los términos de la manera en la que se utilizan en ladocumentación técnica de VMware, visite http://www.vmware.com/support/pubs.

VMware, Inc. 5

Page 6: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Descripción general deAlmacenamiento nativo en lanube 1Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integralde las aplicaciones con estado. Cuando se utiliza Almacenamiento nativo en la nube, se pueden crearlas aplicaciones con estado en contenedor capaces de resistir reinicios e interrupciones. Loscontenedores con estado aprovechan el almacenamiento que vSphere expone mientras usan primitivoscomo volúmenes estándar, volúmenes persistentes o aprovisionamiento dinámico.

Mediante Almacenamiento nativo en la nube, se pueden crear volúmenes contenedores persistentes quesean independientes del ciclo de vida del contenedor y la máquina virtual. El almacenamiento devSphere respalda los volúmenes; asimismo, se puede establecer una directiva de almacenamientodirectamente en los volúmenes. Después de crear los volúmenes, puede revisar tanto estos como susdiscos virtuales de respaldo en vSphere Client, así como supervisar el cumplimiento de la directiva dealmacenamiento.

Este capítulo incluye los siguientes temas:

n Conceptos y terminología del Almacenamiento nativo en la nube

n Usuarios y herramientas de Almacenamiento nativo en la nube

n Componentes de Almacenamiento nativo en la nube

n Requisitos de Almacenamiento nativo en la nube

n Funciones y privilegios de Almacenamiento nativo en la nube

Conceptos y terminología del Almacenamiento nativo enla nubeFamiliarícese con varios conceptos fundamentales para el entorno de Almacenamiento nativo en la nubede vSphere.

Clúster de Kubernetes Un clúster de máquinas virtuales en el que se ejecutan los serviciosprincipales y de trabajo de Kubernetes. Las aplicaciones en contenedor se

VMware, Inc. 6

Page 7: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

implementan sobre el clúster de Kubernetes. Las aplicaciones puedentener estado o no.

Pod Un pod es un grupo de uno o varios contenedores que comparten recursoscomo el almacenamiento y la red. Los contenedores dentro de un pod seinician, se detienen y se replican como un grupo.

Orquestador decontenedores

Plataformas de código abierto (como Kubernetes) para implementar,escalar y administrar las aplicaciones en contenedor en clústeres de hosts.Las plataformas proporcionan una infraestructura centrada encontenedores.

Aplicación con estado A medida que las aplicaciones en contenedor pasan de no tener estado atenerlo, requieren un almacenamiento persistente. A diferencia de lasaplicaciones sin estado, las cuales no guardan datos entre sesiones, lasaplicaciones con estado sí guardan datos en un almacenamientopersistente. Estos datos que se conservan se denominan estado de laaplicación. Posteriormente, puede recuperarlos y utilizarlos en la siguientesesión. La mayoría de las aplicaciones tienen estado. Una base de datoses un ejemplo de una aplicación con estado.

PersistentVolume Las aplicaciones con estado utilizan objetos PersistentVolume paraalmacenar sus datos. Un objeto PersistentVolume es un volumen deKubernetes capaz de conservar su estado y sus datos. Es independientede un pod y puede seguir existiendo incluso cuando el pod se elimina o sevuelve a configurar. En el entorno de vSphere, los objetosPersistentVolume usan discos virtuales (VMDK) como almacenamiento derespaldo.

PersistentVolumeClaim Por lo general, no es necesario crear de manera anticipada un objetoPersistentVolume o su VMDK de respaldo. En su lugar, las aplicacionespueden solicitar el almacenamiento persistente a través de un objetoPersistentVolumeClaim. PersistentVolumeClaim es una solicitud dealmacenamiento que especifica el modo de acceso, la capacidad dealmacenamiento y otros parámetros de PersistentVolume. A continuación,la solicitud aprovisiona dinámicamente el objeto PersistentVolumecorrespondiente y un VMDK de respaldo.

Cuando se crea la reclamación, PersistentVolume se enlazaautomáticamente a ella. Los pods usan la reclamación para montar elobjeto PersistentVolume y acceder al almacenamiento.

Cuando esta reclamación se elimina, se eliminan también el objetoPersistentVolume y el VMDK aprovisionado correspondientes.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 7

Page 8: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

StorageClass Utilice un objeto StorageClass para describir los requisitos dealmacenamiento que respaldan el objeto PersistentVolume. Consulte Crearuna clase de almacenamiento.

StatefulSet Un objeto StatefulSet administra la implementación y el escalado de lasaplicaciones con estado. El objeto StatefulSet es valioso para aplicacionesque requieren identificadores estables o un almacenamiento persistenteestable. StatefulSet se puede configurar para que incluya una entradavolumeClaimTemplates, la cual genera automáticamente los objetosPersistentVolumeClaim. Consulte Crear e implementar un objetoStatefulSet.

Usuarios y herramientas de Almacenamiento nativo en lanubeLos tipos de usuarios que participan en el proceso de creación y supervisión de volúmenes deKubernetes en el entorno de Almacenamiento nativo en la nube de vSphere se suelen dividir en doscategorías: usuario de Kubernetes y usuario de vSphere. Ambos tipos de usuarios tienen acceso adiferentes herramientas y realizan tareas distintas.

Usuario de KubernetesEl usuario de Kubernetes puede ser un desarrollador de Kubernetes, un propietario de aplicaciones, unadministrador de Kubernetes o una combinación de ambas funciones. Entre las tareas que realiza elusuario de Kubernetes en el entorno de Almacenamiento nativo en la nube se encuentran las siguientes:

n Implementar y administrar aplicaciones con estado.

n Realizar operaciones de ciclo de vida de volúmenes persistentes.

n Realizar operaciones de ciclo de vida de clases de almacenamiento.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 8

Page 9: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Por lo general, el usuario de Kubernetes tiene acceso a las siguientes herramientas:

kubectl La interfaz de Kubernetes que proporciona acceso de línea de comandos alos clústeres de Kubernetes. Para comunicarse con el clúster, puedeutilizar la dirección IP del nodo maestro en el archivo de configuración dekubectl. Para obtener más información sobre kubectl, consulte lasección de descripción general de kubectl en la documentación deKubernetes.

Archivo deconfiguración

Al implementar una carga de trabajo, el usuario de Kubernetes proporcionainformación a Kubernetes en un archivo de configuración. Por lo general,se usa un archivo YAML. kubectl convierte la información al formatoJSON al realizar la solicitud de API.

Nota Los nombres de los recursos de Kubernetes que se incluyen en losarchivos YAML deben seguir las convenciones de Kubernetes. Paraobtener información, consulte Nombres en la documentación deKubernetes.

Panel de control deKubernetes

El panel de control de Kubernetes permite ver los nodos, los espacios denombres, las implementaciones y otros detalles sobre los clústeres deKubernetes.

Usuario de vSphereEl usuario de vSphere puede acceder a vSphere Client para realizar las siguientes tareas:

n Realizar operaciones de ciclo de vida de directivas de almacenamiento de máquina virtual. Porejemplo, cree una directiva de almacenamiento de máquina virtual que se usará en una clase dealmacenamiento de Kubernetes e indique su nombre al usuario de Kubernetes.

n Use la sección de Almacenamiento nativo en la nube de vSphere Client para supervisar elcumplimiento de las directivas de estado y de almacenamiento de los volúmenes contenedores enlos clústeres de Kubernetes.

Componentes de Almacenamiento nativo en la nubeAlmacenamiento nativo en la nube utiliza varios componentes para integrarse con el almacenamiento devSphere.

En la siguiente imagen se muestra cómo interactúan estos componentes.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 9

Page 10: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Complemento de CSISPBM

FCD

vSphere vSAN

Plano de control de

Nodos de Kubernetes

VMFS NFS

Administración ycumplimiento de

Agregado de metadatos

de Kubernetes de CacheDB

Administración devolúmenes de bloque

directivas

almacenamientonativo en la nube

Clúster de Kubernetes En el entorno de Almacenamiento nativo en la nube, un clúster deKubernetes es un clúster de máquinas virtuales o nodos implementados envSphere. Un usuario de Kubernetes interactúa directamente con el clústercuando implementa aplicaciones con estado sobre él.

Interfaz dealmacenamiento decontenedores(Container StorageInterface, CSI) devSphere

vSphere CSI es una interfaz que expone el almacenamiento de vSphere acargas de trabajo en contenedores de orquestadores de contenedores,como Kubernetes. Esta opción habilita vSAN y otros tipos dealmacenamiento de vSphere.

En Kubernetes, el controlador CSI se utiliza con el administrador decontroladoras de nube (Cloud Controller Manager, CCM) de vSphere fueradel árbol.

La interfaz de almacenamiento de contenedores admite volúmenescontenedores de aprovisionamiento dinámico.

La interfaz admite las siguientes funcionalidades:

n Funcionalidad del disco de primera clase de vSphere

n Zonas de Kubernetes

n Montajes convencionales y sin formato

n Clústeres de Kubernetes implementados en varias instancias devCenter Server y centros de datos

n Aprovisionamiento de varios almacenes de datos o clústeres dealmacenes de datos

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 10

Page 11: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Componente deservidor deAlmacenamiento nativoen la nube

El componente de servidor de almacenamiento nativo en la nube reside envCenter Server. Se trata de una extensión de administración de vCenterServer que implementa las operaciones de aprovisionamiento y ciclo devida de los volúmenes contenedores.

Cuando se aprovisionan volúmenes contenedores, interactúa con lafuncionalidad de disco de primera clase para crear discos virtuales querespaldan dichos volúmenes. Adicionalmente, el componente de servidorde almacenamiento nativo en la nube se comunica con la administraciónde almacenamiento basada en directivas para garantizar un nivelnecesario de servicio a los discos.

El almacenamiento nativo en la nube también realiza operaciones deconsulta que permiten administrar y supervisar volúmenes contenedores ysus discos virtuales de respaldo a través de vCenter Server.

Disco de primera clase(First Class Disk, FCD)

También se denomina disco virtual mejorado. Se trata de un disco virtualdesignado que no está asociado con ninguna máquina virtual. Estos discosresiden en un almacén de datos de VMFS, NFS o vSAN, y brindanrespaldo a los volúmenes contenedores.

Administración dealmacenamientobasada en directivas

La administración de almacenamiento basada en directivas es un serviciode vCenter Server que admite el aprovisionamiento de volúmenespersistentes de acuerdo con los requisitos de almacenamientoespecificados. Después del aprovisionamiento, el servicio supervisa elcumplimiento del volumen con las características de directiva requeridas.

Requisitos de Almacenamiento nativo en la nubeEl entorno y las máquinas virtuales de Almacenamiento nativo en la nube que participan en el clúster deKubernetes deben cumplir con varios requisitos.

Requisitos de Almacenamiento nativo en la nuben vSphere 6.7 Update 3 o una versión posterior.

n Kubernetes 1.14 y versiones posteriores.

n Un clúster de Kubernetes con un nodo maestro y varios nodos de trabajo implementados en lasmáquinas virtuales. Los nodos se pueden implementar en varios clústeres y centros de datos.

Requisitos de máquinas virtuales de clústeres de Kubernetesn Máquinas virtuales con la versión de hardware 15 o posterior. Instale VMware Tools en cada máquina

virtual del nodo.

n Sistema operativo invitado recomendado:

n Servidor de PC de 64 bits (AMD64) Ubuntu 18.04.1 LTS (Bionic Beaver). Para obtenerinformación, consulte http://partnerweb.vmware.com/GOSIG/Ubuntu_18_04_LTS.html.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 11

Page 12: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

n Recomendaciones de hardware de máquina virtual:

n Configure la CPU y la memoria de forma adecuada en función de los requisitos de carga detrabajo.

n Utilice el controlador SCSI paravirtual de VMware para el disco principal en la máquina virtual delnodo.

n Todas las máquinas virtuales deben poder acceder a un almacén de datos compartido, como vSAN.

n Establezca el parámetro disk.EnableUUID en cada máquina virtual del nodo. Consulte Configurarmáquinas virtuales de clúster de Kubernetes.

n Para evitar errores y un comportamiento impredecible, no tome instantáneas de las máquinasvirtuales de nodo de CNS.

Imágenes de DockerVMware distribuye y recomienda las siguientes imágenes:

n vmware/vsphere-block-csi-driver:v1.0.0

n vmware/volume-metadata-syncer:v1.0.0

n gcr.io/cloud-provider-vsphere/vsphere-cloud-controller-manager:latest

Además, puede utilizar las siguientes imágenes o cualquiera de las imágenes de contenedor de códigoabierto o disponibles comercialmente que resulten adecuadas para la implementación de CSI:

n quay.io/k8scsi/csi-provisioner:v1.2.0

n quay.io/k8scsi/csi-attacher:v1.1.1

n quay.io/k8scsi/csi-node-driver-registrar:v1.1.0

n quay.io/k8scsi/livenessprobe:v1.1.0

n k8s.gcr.io/kube-apiserver:v1.14.2

n k8s.gcr.io/kube-controller-manager:v1.14.2

n k8s.gcr.io/kube-scheduler:v1.14.2

n k8s.gcr.io/kube-proxy:v1.14.2

n k8s.gcr.io/pause:3.1

n k8s.gcr.io/etcd:3.3.10

n k8s.gcr.io/coredns:1.5.0

Funciones y privilegios de Almacenamiento nativo en lanubeEl usuario de vSphere debe tener privilegios específicos para realizar operaciones relacionadas con elAlmacenamiento nativo en la nube.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 12

Page 13: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Puede crear varias funciones para asignar conjuntos de permisos en los objetos que participan en elentorno de Almacenamiento nativo en la nube.

Para obtener más información sobre las funciones y los permisos en vSphere, y acerca de cómo crearuna función, consulte la documentación sobre Seguridad de vSphere.

Nombre dela función Nombre del privilegio Descripción Se requiere en

CNS-SPBM Profile-Driven Storage > Actualización deProfile-Driven Storage

Permite realizar cambios enlas directivas dealmacenamiento de máquinavirtual (por ejemplo, crear yactualizar directivas dealmacenamiento de máquinavirtual de almacenamiento).

vCenter Server raíz

Profile-Driven Storage > Vista de Profile-DrivenStorage

Permite ver las directivas dealmacenamiento definidas.

CNS-VM Máquina virtual > Configuración > Agregar undisco existente

Permite agregar un discovirtual existente a unamáquina virtual.

Todas las máquinas virtualesdel nodo de clúster

Máquina virtual > Configuración > Agregar oquitar dispositivo

Permite agregar o eliminarcualquier dispositivo que nosea un disco.

CNS-Datastore

Almacén de datos > Operaciones de archivosde bajo nivel

Permite realizar tareas delectura, escritura, eliminacióny cambio de nombre en elexplorador del almacén dedatos.

Almacén de datos compartidoen el que residen volúmenespersistentes

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 13

Page 14: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Nombre dela función Nombre del privilegio Descripción Se requiere en

Solo lectura Función predeterminada Los usuarios con la funciónSolo lectura en un objetopueden ver el estado y losdetalles de ese objeto. Porejemplo, los usuarios conesta función encontrarán quetodas las máquinas virtualesdel nodo pueden acceder alalmacén de datoscompartido.

Para los entornos conreconocimiento de zona ytopología, todos losantecesores de máquinasvirtuales de nodo, como unhost, un clúster o un centrode datos, deben tener lafunción de solo lecturaestablecida en el usuario devSphere configurado parausar el controlador CSI yCCM. Esto es necesario parapermitir la lectura deetiquetas y categorías a fin depreparar la topología de losnodos.

Todos los hosts en los queresiden las máquinas virtualesde los nodos

Centro de datos

CNS UI privilege.Cns.label >privilege.Cns.Searchable.label

Permite al administrador dealmacenamiento ver lainterfaz de usuario dealmacenamiento nativo en lanube.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 14

Page 15: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Configurar un clúster deKubernetes 2Una aplicación con estado que usa almacenamiento persistente se ejecuta en un clúster de Kubernetes.El clúster de Kubernetes se implementa sobre las máquinas virtuales que vSphere administra. El clústerincluye al menos una máquina virtual de nodo maestro y varios nodos de trabajo.

Antes de crear el clúster de Kubernetes, debe configurar las máquinas virtuales de los nodos.

A continuación, instale todos los componentes de Kubernetes necesarios y el tiempo de ejecución decontenedor, configure la interfaz de almacenamiento de contenedores de vSphere y arranque el clúster.

Este capítulo incluye los siguientes temas:

n Configurar máquinas virtuales de clúster de Kubernetes

n Configurar componentes de Kubernetes en máquinas virtuales de nodo

n Inicializar el nodo maestro

n Inicializar nodos de trabajo

n Instalar el administrador de controladoras de nube de vSphere

n Instalar el controlador de la interfaz de almacenamiento de contenedores de vSphere

n Comprobar la configuración del clúster

n Agregar un nodo de Kubernetes después de la instalación de CCM y del controlador CSI

Configurar máquinas virtuales de clúster de KubernetesEn cada máquina virtual del nodo, habilite el parámetro disk.EnableUUID para que las máquinas virtualesse puedan montar correctamente en los discos virtuales.

Siga estos pasos en cada uno de los nodos de máquina virtual que participan en el clúster.

Requisitos previos

n Cree varias máquinas virtuales para el clúster de Kubernetes. Puede utilizar los siguientes nombrespara las máquinas virtuales: k8s-master, k8s-node1, k8s-nodeX, etc. Para conocer los requisitos demáquina virtual, consulte Requisitos de Almacenamiento nativo en la nube.

n Privilegio necesario: Máquina virtual. Configuración. Opciones.

Nota Para evitar errores y un comportamiento impredecible, no tome instantáneas de las máquinasvirtuales de nodo de CNS.

VMware, Inc. 15

Page 16: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 En vSphere Client, haga clic con el botón secundario en la máquina virtual y seleccione Editarconfiguración.

2 Haga clic en la pestaña Opciones de máquina virtual y expanda el menú Opciones avanzadas.

3 Haga clic en Editar configuración junto a Parámetros de configuración.

4 Configure el parámetro disk.EnableUUID.

Si el parámetro existe, asegúrese de que su valor esté establecido como True. Si no existe,agréguelo y establezca su valor como True.

Nombre Valor

disk.EnableUUID True

Configurar componentes de Kubernetes en máquinasvirtuales de nodoInstale el tiempo de ejecución de contenedor y otros componentes de Kubernetes en las máquinasvirtuales de nodo.

La tarea demuestra cómo instalar Docker CE en Ubuntu. También muestra cómo instalar los siguientescomponentes:

n kubeadm es el comando para arrancar el clúster. Se ejecuta en el nodo maestro y en todos los nodosde trabajo.

n kubelet es el componente que se ejecuta en todos los nodos del clúster y realiza tareas comoiniciar los pods y los contenedores.

n kubectl es la utilidad de línea de comandos que permite comunicarse con el clúster. Solo se ejecutaen el nodo maestro.

Requisitos previos

Ejecute todos los comandos de instalación y configuración con el privilegio root. Puede cambiar alentorno raíz usando el comando sudo su.

Procedimiento

1 En todos los nodos del clúster, deshabilite el intercambio.

# swapoff -a

# vi /etc/fstab # remove any swap entries from this file

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 16

Page 17: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

2 Instale Docker en todos los nodos del clúster.

a Instale Docker CE.

Para instalar una versión específica, reemplace la cadena de versión por el número de versión(por ejemplo, 18.06.0~ce~3-0~ubuntu).

# apt update

# apt install apt-transport-https ca-certificates curl software-properties-common

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

# apt-get update

# apt-get install docker-ce=VERSION_STRING

b Configure el daemon.

cat > /etc/docker/daemon.json <<EOF

{

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

"max-size": "100m"

},

"storage-driver": "overlay2"

}

EOF

mkdir -p /etc/systemd/system/docker.service.d

c Reinicie Docker.

# systemctl daemon-reload

# systemctl restart docker

3 Instale kubeadm, kubelet y kubectl en todos los nodos.

Asegúrese de instalar una versión adecuada del paquete. En este ejemplo se utiliza la versión1.14.2-00 de Ubuntu.

# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list

deb https://apt.kubernetes.io/ kubernetes-xenial main

EOF

# apt-get update

# apt-get install -qy kubeadm=1.14.2-00 kubelet=1.14.2-00 kubectl=1.14.2-00

Inicializar el nodo maestroConfigure el nodo maestro del clúster de máquina virtual.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 17

Page 18: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 Cree el archivo de configuración kubeadm init del nodo maestro.

Para obtener información sobre la generación de un token para el archivo, consulte ladocumentación de Kubernetes.

Especifique el proveedor de nube como externo.

# tee /etc/kubernetes/kubeadminitmaster.yaml >/dev/null <<EOF

apiVersion: kubeadm.k8s.io/v1beta1

kind: InitConfiguration

bootstrapTokens:

- groups:

- system:bootstrappers:kubeadm:default-node-token

token: y7yaev.9dvwxx6ny4ef8vlq

ttl: 0s

usages:

- signing

- authentication

nodeRegistration:

kubeletExtraArgs:

cloud-provider: external

---

apiVersion: kubeadm.k8s.io/v1beta1

kind: ClusterConfiguration

useHyperKubeImage: false

kubernetesVersion: v1.14.2

networking:

serviceSubnet: "10.96.0.0/12"

podSubnet: "10.244.0.0/16"

etcd:

local:

imageRepository: "k8s.gcr.io"

imageTag: "3.3.10"

dns:

type: "CoreDNS"

imageRepository: "k8s.gcr.io"

imageTag: "1.5.0"

EOF

2 Arranque el nodo maestro de Kubernetes.

Ejecute el comando kubeadm init con el archivo de configuración kubeadm init que creóanteriormente.

# kubeadm init --config /etc/kubernetes/kubeadminitmaster.yaml

...

Your Kubernetes master has initilized successfully!

...

You should now deploy a pod network to the cluster.

Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:

https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 18

Page 19: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

as root:

kubeadm join [IP of your Kubernetes master]:6443 --token y7yaev.9dvwxx6ny4ef8vlq --discovery-

token-ca

-cert-hash sha256:[sha sum from output above]

3 Ejecute los siguientes comandos para empezar a usar el clúster.

# mkdir -p $HOME/.kube

# cp /etc/kubernetes/admin.conf $HOME/.kube/config

En esta etapa, es posible notar que los pods coredns permanecen en condición pendiente con elestado FailedScheduling. Esto se debe a que el nodo contiene manchas que estos pods corednsno pueden tolerar. Este comportamiento es normal si se ha iniciado kubelet con la configuracióncloud-provider: external. Una vez que se instale el administrador de controladoras de nube devSphere y se inicialicen los nodos, se eliminarán las manchas del nodo y se continuará con laprogramación de los pods coredns.

# kubectl get pods --namespace=kube-system

NAME READY STATUS RESTARTS AGE

coredns-fb8b8dccf-q57f9 0/1 Pending 0 87s

coredns-fb8b8dccf-scgp2 0/1 Pending 0 87s

etcd-k8s-master 1/1 Running 0 54s

kube-apiserver-k8s-master 1/1 Running 0 39s

kube-controller-manager-k8s-master 1/1 Running 0 54s

kube-proxy-rljk8 1/1 Running 0 87s

kube-scheduler-k8s-master 1/1 Running 0 37s

# kubectl describe pod coredns-fb8b8dccf-q57f9 --namespace=kube-system

.

.

Events:

Type Reason Age From Message

---- ------ ---- ---- -------

Warning FailedScheduling 7s (x21 over 2m1s) default-scheduler 0/1 nodes are available: 1

node(s) had taints that the pod didn't tolerate.

4 Instale redes de superposición de pods flannel para que los pods puedan comunicarse entre sí.

Para instalar una red de pods que no sean flannel, siga las instrucciones que aparecen en .

# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/

bc79dd1505b0c8681ece4de4c0d86c5cd2643275/Documentation/kube-flannel.yml

5 Exporte la configuración del nodo maestro que se va a proporcionar a los nodos de trabajo.

# kubectl -n kube-public get configmap cluster-info -o jsonpath='{.data.kubeconfig}' >

discovery.yaml

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 19

Page 20: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

6 Copie el archivo discovery.yaml de manera local y, a continuación, cárguelo en los nodos detrabajo en /etc/kubernetes/discovery.yaml.

Inicializar nodos de trabajoInicialice los nodos de trabajo del clúster de máquina virtual y agréguelos al clúster.

Realice esta tarea en los nodos de trabajo.

Procedimiento

1 Cree el archivo de configuración kubeadm join para los nodos de trabajo.

El archivo hace uso del archivo discovery.yaml como entrada para la detección principal. El tokenes el mismo al que se usó en la configuración principal de kubeadminitmaster.yaml. Especifiqueexternal como proveedor de nube en los nodos de trabajo.

# tee /etc/kubernetes/kubeadminitworker.yaml >/dev/null <<EOF

apiVersion: kubeadm.k8s.io/v1beta1

caCertPath: /etc/kubernetes/pki/ca.crt

discovery:

file:

kubeConfigPath: /etc/kubernetes/discovery.yaml

timeout: 5m0s

tlsBootstrapToken: y7yaev.9dvwxx6ny4ef8vlq

kind: JoinConfiguration

nodeRegistration:

criSocket: /var/run/dockershim.sock

kubeletExtraArgs:

cloud-provider: external

EOF

2 Agregue los nodos de trabajo al clúster.

# kubeadm join --config /etc/kubernetes/kubeadminitworker.yaml

Instalar el administrador de controladoras de nube devSphereConfigure las máquinas virtuales de nodo para que se ejecuten mediante el administrador decontroladoras de nube de vSphere.

Nota Si desea utilizar zonas en la implementación, consulte Capítulo 5 Implementar CCM y CSI en unentorno con varios centros de datos o clústeres.

Requisitos previos

Siga los requisitos de Requisitos de Almacenamiento nativo en la nube.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 20

Page 21: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 En el nodo maestro, cree un elemento configmap cloud-config de la configuración de vSphere.

En el siguiente ejemplo, se muestra la forma de almacenar las credenciales de vCenter Server en elarchivo vsphere.conf.

Nota Es posible almacenar las credenciales de vCenter Server para el administrador decontroladoras de nube en el secreto de Kubernetes. Siga las directrices en https://github.com/kubernetes/cloud-provider-vsphere/blob/master/docs/book/tutorials/deploying_cloud_provider_vsphere_with_rbac.md#3-optional-but-recommended-storing-vcenter-credentials-in-a-kubernetes-secret.

a Defina el elemento configmap cloud-config del archivo vsphere.conf.

El archivo de configuración debe colocarse en el directorio compartido al que se puede accederdesde kubelet, controller-manager y el servidor de la API. En el archivo, especifique lossiguientes detalles de vCenter Server.

Opción Descripción

insecure-flag Se establece en true si no es necesario que CCM compruebe el certificadoSSL en vCenter Server.

user Utilice el nombre de usuario de vCenter Server para el proveedor de nube devSphere.

password Utilice la contraseña de usuario de vCenter Server apropiada.

port Utilice el puerto de vCenter Server. El puerto predeterminado es 443.

datacenters Obtenga una lista de los centros de datos, separados por comas, en los queexisten máquinas virtuales de nodo de Kubernetes.

public-network Establézcala como el nombre del conmutador de red de la interfaz de red deacceso público en las máquinas virtuales del nodo.

tee /etc/kubernetes/vsphere.conf >/dev/null <<EOF

[Global]

insecure-flag = "true"

[VirtualCenter "vCenter Server IP address"]

user = "user"

password = "password"

port = "443"

datacenters = "datacenter"

[Network]

public-network = "VM Network"

EOF

b Cree un elemento configmap cloud-config de la configuración.

# cd /etc/kubernetes

kubectl create configmap cloud-config --from-file=vsphere.conf --namespace=kube-system

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 21

Page 22: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

c Compruebe que configmap cloud-config se haya creado correctamente en el espacio denombres kube-system.

# kubectl get configmap cloud-config --namespace=kube-system

NAME DATA AGE

cloud-config 1 82s

d Elimine el archivo vsphere.conf creado en /etc/kubernetes/.

# rm -rf /etc/kubernetes/vsphere.conf

2 Instale el administrador de controladoras de nube de vSphere.

a Asegúrese de que todos los nodos lleven la mancha node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule.

Cuando se inicia kubelet con el proveedor de nube externo, esta mancha se establece en unnodo para marcarlo como no utilizable. Después de que una controladora del administrador decontroladoras de nube inicializa este nodo, kubelet elimina la mancha.

# kubectl describe nodes | egrep "Taints:|Name:"

Name: k8s-master

Taints: node-role.kubernetes.io/master:NoSchedule

Name: k8s-node1

Taints: node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule

Name: k8s-node2

Taints: node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule

Name: k8s-node3

Taints: node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule

Name: k8s-node4

Taints: node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule

b Instale el administrador de controladoras de nube de vSphere.

En el siguiente ejemplo, se muestra la forma de aplicar las funciones RBAC y los enlaces RBCAal clúster de Kubernetes. También se muestra la forma de implementar el administrador decontroladoras de nube en un conjunto de daemons.

# kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/

manifests/controller-manager/cloud-controller-manager-roles.yaml

clusterrole.rbac.authorization.k8s.io/system:cloud-controller-manager created

# kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/

manifests/controller-manager/cloud-controller-manager-role-bindings.yaml

clusterrolebinding.rbac.authorization.k8s.io/system:cloud-controller-manager created

# kubectl apply -f https://github.com/kubernetes/cloud-provider-vsphere/raw/master/manifests/

controller-manager/vsphere-cloud-controller-manager-ds.yaml

serviceaccount/cloud-controller-manager created

daemonset.extensions/vsphere-cloud-controller-manager created

service/vsphere-cloud-controller-manager created

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 22

Page 23: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

3 Verifique que el administrador de controladoras de nube de vSphere se haya instaladocorrectamente.

a Compruebe que el administrador de controladoras de nube de vSphere y todos los demás podsdel sistema se encuentren activos y en funcionamiento.

# kubectl get pods --namespace=kube-system

NAME READY STATUS RESTARTS AGE

coredns-fb8b8dccf-bq7qq 1/1 Running 0 71m

coredns-fb8b8dccf-r47q2 1/1 Running 0 71m

etcd-k8s-master 1/1 Running 0 69m

kube-apiserver-k8s-master 1/1 Running 0 70m

kube-controller-manager-k8s-master 1/1 Running 0 69m

kube-flannel-ds-amd64-7kmk9 1/1 Running 0 38m

kube-flannel-ds-amd64-dtvbg 1/1 Running 0 63m

kube-flannel-ds-amd64-hq57c 1/1 Running 0 30m

kube-flannel-ds-amd64-j7g4s 1/1 Running 0 22m

kube-flannel-ds-amd64-q4zsn 1/1 Running 0 21m

kube-proxy-6jcng 1/1 Running 0 30m

kube-proxy-bh8kh 1/1 Running 0 21m

kube-proxy-rb9xp 1/1 Running 0 22m

kube-proxy-srhpj 1/1 Running 0 71m

kube-proxy-vh4lg 1/1 Running 0 38m

kube-scheduler-k8s-master 1/1 Running 0 70m

vsphere-cloud-controller-manager-549hb 1/1 Running 0 25s

b Confirme que ProviderID se estableció en todos los nodos registrados.

# kubectl describe nodes | grep ProviderID

ProviderID: vsphere://421f0831-7a05-fe2d-b5ea-78e27585b508

ProviderID: vsphere://421f802f-87f8-aec9-0d07-b5f16de582ed

ProviderID: vsphere://421f1563-a7c0-4569-d5ce-7e93c4d29d1c

ProviderID: vsphere://421ff393-fe0c-577f-8a08-1d52184e5a1c

ProviderID: vsphere://421fb2db-467b-b994-c5ca-bd1788f544ec

c Asegúrese de que el parámetro node.cloudprovider.kubernetes.io/uninitialized seelimine de todos los nodos.

# kubectl describe nodes | egrep "Taints:|Name:"

Name: k8s-master

Taints: node-role.kubernetes.io/master:NoSchedule

Name: k8s-node1

Taints: <none>

Name: k8s-node2

Taints: <none>

Name: k8s-node3

Taints: <none>

Name: k8s-node4

Taints: <none>

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 23

Page 24: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Instalar el controlador de la interfaz de almacenamientode contenedores de vSphereConfigure e instale el controlador de la interfaz de almacenamiento de contenedores (Container StorageInterface, CSI) de vSphere.

Nota Si desea utilizar zonas en la implementación, consulte Capítulo 5 Implementar CCM y CSI en unentorno con varios centros de datos o clústeres.

Requisitos previos

Asegúrese de que los nodos maestros lleven la mancha node-role.kubernetes.io/master=:NoSchedule:

kubectl taint nodes k8s-master node-role.kubernetes.io/master=:NoSchedule

Esta mancha debe estar en los nodos maestros para evitar la programación de pods de complementosde nodo para el conjunto de daemons vsphere-csi-node en los nodos maestros.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 24

Page 25: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 En el nodo maestro, cree un secreto de credencial para el controlador CSI.

Para obtener información sobre el uso de un certificado y una clave privada en lugar de un nombrede usuario y una contraseña en texto sin formato, consulte Usar un certificado para proteger lasconexiones de vCenter Server.

a Defina el archivo de secretos de credenciales vsphere.conf.

En el archivo, especifique los siguientes detalles de vCenter Server.

Opción Descripción

cluster-id Especifique el identificador único del clúster.

Nota Cada clúster de Kubernetes implementado en vCenter Server debetener su propio identificador de clúster único. De lo contrario, los clústerespueden experimentar problemas impredecibles.

Una combinación de nombre de clúster y UUID puede ayudar a identificar losclústeres de Kubernetes y garantizar su exclusividad. Por ejemplo,ProductionTestDev-7f1f6573-6de2-4349-a489-676a4100fde2 oStagingTestDev-9e819595-59e9-43a5-85e9-1d0cc179651d, etc.

insecure-flag Establezca esta opción en true si el controlador CSI no necesita comprobar elcertificado SSL en vCenter Server.

Establezca esta opción en false si el controlador CSI necesita comprobar elcertificado SSL en vCenter Server. Para obtener información, consulte Usar uncertificado para proteger las conexiones de vCenter Server.

user Utilice el nombre de usuario de vCenter Server para el proveedor de nube devSphere.

De forma alternativa, el nombre de usuario puede especificarse como uncertificado. Para obtener información, consulte Usar un certificado paraproteger las conexiones de vCenter Server.

password Utilice la contraseña de usuario de vCenter Server adecuada o especifique unaclave privada. Para obtener información, consulte Usar un certificado paraproteger las conexiones de vCenter Server.

port Utilice el puerto de vCenter Server. El puerto predeterminado es 443.

datacenters Obtenga una lista de los centros de datos, separados por comas, en los queexisten máquinas virtuales de nodo de Kubernetes.

# tee /etc/kubernetes/csi-vsphere.conf >/dev/null <<EOF

[Global]

cluster-id = "cluster-id"

[VirtualCenter "vCenter Server IP address"]

insecure-flag = "true"

user = "user"

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 25

Page 26: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

password = "password"

port = "443"

datacenters = "datacenter"

EOF

b Cree el secreto de credencial.

# kubectl create secret generic vsphere-config-secret --from-file=csi-vsphere.conf --

namespace=kube-system

c Compruebe que el secreto de credencial se haya creado correctamente en el espacio denombres kube-system.

# kubectl get secret vsphere-config-secret --namespace=kube-system

NAME TYPE DATA AGE

vsphere-config-secret Opaque 1 43s

d Elimine el archivo csi-vsphere.conf creado en /etc/kubernetes/.

# rm -rf /etc/kubernetes/csi-vsphere.conf

2 Implemente todos los componentes necesarios para el controlador CSI de vSphere.

tee csi-driver-rbac.yaml >/dev/null <<EOF

kind: ServiceAccount

apiVersion: v1

metadata:

name: vsphere-csi-controller

namespace: kube-system

---

kind: ClusterRole

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: vsphere-csi-controller-role

rules:

- apiGroups: [""]

resources: ["secrets"]

verbs: ["get", "list", "watch"]

- apiGroups: ["storage.k8s.io"]

resources: ["csidrivers"]

verbs: ["create", "delete"]

- apiGroups: [""]

resources: ["nodes"]

verbs: ["get", "list", "watch"]

- apiGroups: [""]

resources: ["persistentvolumes"]

verbs: ["get", "list", "watch", "update", "create", "delete"]

- apiGroups: ["storage.k8s.io"]

resources: ["csinodes"]

verbs: ["get", "list", "watch"]

- apiGroups: ["storage.k8s.io"]

resources: ["volumeattachments"]

verbs: ["get", "list", "watch", "update"]

- apiGroups: [""]

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 26

Page 27: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

resources: ["persistentvolumeclaims"]

verbs: ["get", "list", "watch", "update"]

- apiGroups: ["storage.k8s.io"]

resources: ["storageclasses"]

verbs: ["get", "list", "watch"]

- apiGroups: [""]

resources: ["events"]

verbs: ["list", "watch", "create", "update", "patch"]

- apiGroups: ["snapshot.storage.k8s.io"]

resources: ["volumesnapshots"]

verbs: ["get", "list"]

- apiGroups: ["snapshot.storage.k8s.io"]

resources: ["volumesnapshotcontents"]

verbs: ["get", "list"]

- apiGroups: [""]

resources: ["pods"]

verbs: ["get", "list", "watch"]

---

kind: ClusterRoleBinding

apiVersion: rbac.authorization.k8s.io/v1

metadata:

name: vsphere-csi-controller-binding

subjects:

- kind: ServiceAccount

name: vsphere-csi-controller

namespace: kube-system

roleRef:

kind: ClusterRole

name: vsphere-csi-controller-role

apiGroup: rbac.authorization.k8s.io

---

EOF

# kubectl create -f csi-driver-rbac.yaml

serviceaccount/vsphere-csi-controller created

clusterrole.rbac.authorization.k8s.io/vsphere-csi-controller-role created

clusterrolebinding.rbac.authorization.k8s.io/vsphere-csi-controller-binding created

3 Instale el controlador CSI de vSphere.

tee csi-driver-deploy.yaml >/dev/null <<'EOF'

kind: StatefulSet

apiVersion: apps/v1

metadata:

name: vsphere-csi-controller

namespace: kube-system

spec:

serviceName: vsphere-csi-controller

replicas: 1

updateStrategy:

type: "RollingUpdate"

selector:

matchLabels:

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 27

Page 28: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

app: vsphere-csi-controller

template:

metadata:

labels:

app: vsphere-csi-controller

role: vsphere-csi

spec:

serviceAccountName: vsphere-csi-controller

nodeSelector:

node-role.kubernetes.io/master: ""

tolerations:

- operator: "Exists"

key: node-role.kubernetes.io/master

effect: NoSchedule

hostNetwork: true

containers:

- name: csi-attacher

image: quay.io/k8scsi/csi-attacher:v1.1.1

args:

- "--v=4"

- "--timeout=60s"

- "--csi-address=$(ADDRESS)"

env:

- name: ADDRESS

value: /csi/csi.sock

volumeMounts:

- mountPath: /csi

name: socket-dir

- name: vsphere-csi-controller

image: vmware/vsphere-block-csi-driver:v1.0.0

lifecycle:

preStop:

exec:

command: ["/bin/sh", "-c", "rm -rf /var/lib/csi/sockets/pluginproxy/

block.vsphere.csi.vmware.com"]

args:

- "--v=4"

imagePullPolicy: "Always"

env:

- name: CSI_ENDPOINT

value: unix:///var/lib/csi/sockets/pluginproxy/csi.sock

- name: X_CSI_MODE

value: "controller"

- name: X_CSI_VSPHERE_CLOUD_CONFIG

value: "/etc/cloud/csi-vsphere.conf"

volumeMounts:

- mountPath: /etc/cloud

name: vsphere-config-volume

readOnly: true

- mountPath: /var/lib/csi/sockets/pluginproxy/

name: socket-dir

- name: liveness-probe

image: quay.io/k8scsi/livenessprobe:v1.1.0

args:

- "--csi-address=$(ADDRESS)"

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 28

Page 29: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

env:

- name: ADDRESS

value: /var/lib/csi/sockets/pluginproxy/csi.sock

volumeMounts:

- mountPath: /var/lib/csi/sockets/pluginproxy/

name: socket-dir

- name: vsphere-syncer

image: vmware/volume-metadata-syncer:v1.0.0

args:

- "--v=2"

imagePullPolicy: "Always"

env:

- name: X_CSI_FULL_SYNC_INTERVAL_MINUTES

value: "30"

- name: X_CSI_VSPHERE_CLOUD_CONFIG

value: "/etc/cloud/csi-vsphere.conf"

volumeMounts:

- mountPath: /etc/cloud

name: vsphere-config-volume

readOnly: true

- name: csi-provisioner

image: quay.io/k8scsi/csi-provisioner:v1.2.1

args:

- "--v=4"

- "--timeout=60s"

- "--csi-address=$(ADDRESS)"

- "--feature-gates=Topology=true"

- "--strict-topology"

env:

- name: ADDRESS

value: /csi/csi.sock

volumeMounts:

- mountPath: /csi

name: socket-dir

volumes:

- name: vsphere-config-volume

secret:

secretName: vsphere-config-secret

- name: socket-dir

hostPath:

path: /var/lib/csi/sockets/pluginproxy/block.vsphere.csi.vmware.com

type: DirectoryOrCreate

---

apiVersion: storage.k8s.io/v1beta1

kind: CSIDriver

metadata:

name: block.vsphere.csi.vmware.com

spec:

attachRequired: true

podInfoOnMount: false

---

kind: DaemonSet

apiVersion: apps/v1

metadata:

name: vsphere-csi-node

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 29

Page 30: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

namespace: kube-system

spec:

selector:

matchLabels:

app: vsphere-csi-node

updateStrategy:

type: "RollingUpdate"

template:

metadata:

labels:

app: vsphere-csi-node

role: vsphere-csi

spec:

hostNetwork: true

containers:

- name: node-driver-registrar

image: quay.io/k8scsi/csi-node-driver-registrar:v1.1.0

lifecycle:

preStop:

exec:

command: ["/bin/sh", "-c", "rm -rf /registration/

block.vsphere.csi.vmware.com /var/lib/kubelet/plugins_registry/

block.vsphere.csi.vmware.com /var/lib/kubelet/plugins_registry/block.vsphere.csi.vmware.com-

reg.sock"]

args:

- "--v=4"

- "--csi-address=$(ADDRESS)"

- "--kubelet-registration-path=$(DRIVER_REG_SOCK_PATH)"

env:

- name: ADDRESS

value: /csi/csi.sock

- name: DRIVER_REG_SOCK_PATH

value: /var/lib/kubelet/plugins_registry/block.vsphere.csi.vmware.com/csi.sock

securityContext:

privileged: true

volumeMounts:

- name: plugin-dir

mountPath: /csi

- name: registration-dir

mountPath: /registration

- name: vsphere-csi-node

image: vmware/vsphere-block-csi-driver:v1.0.0

imagePullPolicy: "Always"

env:

- name: CSI_ENDPOINT

value: unix:///csi/csi.sock

- name: X_CSI_MODE

value: "node"

- name: X_CSI_SPEC_REQ_VALIDATION

value: "false"

- name: X_CSI_VSPHERE_CLOUD_CONFIG

value: "/etc/cloud/csi-vsphere.conf"

args:

- "--v=4"

securityContext:

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 30

Page 31: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

privileged: true

capabilities:

add: ["SYS_ADMIN"]

allowPrivilegeEscalation: true

volumeMounts:

- name: vsphere-config-volume

mountPath: /etc/cloud

- name: plugin-dir

mountPath: /csi

- name: pods-mount-dir

mountPath: /var/lib/kubelet

# needed so that any mounts setup inside this container are

# propagated back to the host machine.

mountPropagation: "Bidirectional"

- name: device-dir

mountPath: /dev

- name: liveness-probe

image: quay.io/k8scsi/livenessprobe:v1.1.0

args:

- "--csi-address=$(ADDRESS)"

env:

- name: ADDRESS

value: /csi/csi.sock

volumeMounts:

- name: plugin-dir

mountPath: /csi

volumes:

- name: vsphere-config-volume

secret:

secretName: vsphere-config-secret

- name: registration-dir

hostPath:

path: /var/lib/kubelet/plugins_registry

type: DirectoryOrCreate

- name: plugin-dir

hostPath:

path: /var/lib/kubelet/plugins_registry/block.vsphere.csi.vmware.com

type: DirectoryOrCreate

- name: pods-mount-dir

hostPath:

path: /var/lib/kubelet

type: Directory

- name: device-dir

hostPath:

path: /dev

---

EOF

# kubectl create -f csi-driver-deploy.yaml

statefulset.apps/vsphere-csi-controller created

csidriver.storage.k8s.io/block.vsphere.csi.vmware.com created

daemonset.apps/vsphere-csi-node created

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 31

Page 32: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

4 Compruebe la instalación del controlador CSI de vSphere.

Compruebe que el controlador y sus componentes se hayan instalado.

a Confirme que vsphere-csi-node se está ejecutando en todos los nodos.

# kubectl get statefulset --namespace=kube-system

NAME READY AGE

vsphere-csi-controller 1/1 2m58s

# kubectl get daemonsets vsphere-csi-node --namespace=kube-system

NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE

vsphere-csi-node 4 4 4 4 4 <none> 3m51s

# kubectl get pods --namespace=kube-system

NAME READY STATUS RESTARTS AGE

coredns-fb8b8dccf-bq7qq 1/1 Running 0 3h

coredns-fb8b8dccf-r47q2 1/1 Running 0 3h

etcd-k8s-master 1/1 Running 0 179m

kube-apiserver-k8s-master 1/1 Running 0 179m

kube-controller-manager-k8s-master 1/1 Running 0 179m

kube-flannel-ds-amd64-7kmk9 1/1 Running 0 147m

kube-flannel-ds-amd64-dtvbg 1/1 Running 0 173m

kube-flannel-ds-amd64-hq57c 1/1 Running 0 140m

kube-flannel-ds-amd64-j7g4s 1/1 Running 0 131m

kube-flannel-ds-amd64-q4zsn 1/1 Running 0 131m

kube-proxy-6jcng 1/1 Running 0 140m

kube-proxy-bh8kh 1/1 Running 0 131m

kube-proxy-rb9xp 1/1 Running 0 131m

kube-proxy-srhpj 1/1 Running 0 3h

kube-proxy-vh4lg 1/1 Running 0 147m

kube-scheduler-k8s-master 1/1 Running 0 179m

vsphere-cloud-controller-manager-549hb 1/1 Running 0 110m

vsphere-csi-controller-0 5/5 Running 0 4m18s

vsphere-csi-node-m4kj8 3/3 Running 0 4m18s

vsphere-csi-node-mhzzj 3/3 Running 0 4m18s

vsphere-csi-node-tgs7p 3/3 Running 0 4m18s

vsphere-csi-node-zll7c 3/3 Running 0 4m18s

b Compruebe que el controlador CSI se haya implementado correctamente.

# kubectl get CSINode

NAME CREATED AT

k8s-node1 2019-06-01T00:50:26Z

k8s-node2 2019-06-01T00:50:38Z

k8s-node3 2019-06-01T00:50:26Z

k8s-node4 2019-06-01T00:50:25Z

# kubectl describe CSINode

Name: k8s-node1

Namespace:

Labels: <none>

Annotations: <none>

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 32

Page 33: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

API Version: storage.k8s.io/v1beta1

Kind: CSINode

Metadata:

Creation Timestamp: 2019-06-01T00:50:26Z

Owner References:

API Version: v1

Kind: Node

Name: k8s-node1

UID: 31fc47ad-83f3-11e9-91d9-0050569f50b7

Resource Version: 20765

Self Link: /apis/storage.k8s.io/v1beta1/csinodes/k8s-node1

UID: 3eb6cfcb-8407-11e9-91d9-0050569f50b7

Spec:

Drivers:

Name: block.vsphere.csi.vmware.com

Node ID: k8s-node1

Topology Keys: <nil>

Events: <none>

Name: k8s-node2

Namespace:

Labels: <none>

Annotations: <none>

API Version: storage.k8s.io/v1beta1

Kind: CSINode

Metadata:

Creation Timestamp: 2019-06-01T00:50:38Z

Owner References:

API Version: v1

Kind: Node

Name: k8s-node2

UID: 2efcb8e9-83f4-11e9-91d9-0050569f50b7

Resource Version: 20807

Self Link: /apis/storage.k8s.io/v1beta1/csinodes/k8s-node2

UID: 461d3184-8407-11e9-91d9-0050569f50b7

Spec:

Drivers:

Name: block.vsphere.csi.vmware.com

Node ID: k8s-node2

Topology Keys: <nil>

Events: <none>

Name: k8s-node3

Namespace:

Labels: <none>

Annotations: <none>

API Version: storage.k8s.io/v1beta1

Kind: CSINode

Metadata:

Creation Timestamp: 2019-06-01T00:50:26Z

Owner References:

API Version: v1

Kind: Node

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 33

Page 34: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Name: k8s-node3

UID: 6c7ddc6b-83f5-11e9-91d9-0050569f50b7

Resource Version: 20762

Self Link: /apis/storage.k8s.io/v1beta1/csinodes/k8s-node3

UID: 3e85c4ca-8407-11e9-91d9-0050569f50b7

Spec:

Drivers:

Name: block.vsphere.csi.vmware.com

Node ID: k8s-node3

Topology Keys: <nil>

Events: <none>

Name: k8s-node4

Namespace:

Labels: <none>

Annotations: <none>

API Version: storage.k8s.io/v1beta1

Kind: CSINode

Metadata:

Creation Timestamp: 2019-06-01T00:50:25Z

Owner References:

API Version: v1

Kind: Node

Name: k8s-node4

UID: 7b45e01c-83f5-11e9-91d9-0050569f50b7

Resource Version: 20750

Self Link: /apis/storage.k8s.io/v1beta1/csinodes/k8s-node4

UID: 3e0324c9-8407-11e9-91d9-0050569f50b7

Spec:

Drivers:

Name: block.vsphere.csi.vmware.com

Node ID: k8s-node4

Topology Keys: <nil>

Events: <none>

# kubectl get csidrivers

NAME CREATED AT

block.vsphere.csi.vmware.com 2019-06-01T00:50:14Z

# kubectl describe csidrivers

Name: block.vsphere.csi.vmware.com

Namespace:

Labels: <none>

Annotations: <none>

API Version: storage.k8s.io/v1beta1

Kind: CSIDriver

Metadata:

Creation Timestamp: 2019-06-01T00:50:14Z

Resource Version: 20648

Self Link: /apis/storage.k8s.io/v1beta1/csidrivers/block.vsphere.csi.vmware.com

UID: 37c52534-8407-11e9-91d9-0050569f50b7

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 34

Page 35: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Spec:

Attach Required: true

Pod Info On Mount: false

Events: <none

Usar un certificado para proteger las conexiones de vCenterServerCuando se crea un secreto para el controlador CSI de vSphere, se proporcionan credenciales de vCenterServer para que el controlador CSI pueda establecer una conexión con vCenter Server. Para evitar eluso de credenciales en texto sin formato, puede utilizar un certificado y una clave privada.

Si desea obtener información sobre cómo crear el secreto de credenciales, consulte Instalar elcontrolador de la interfaz de almacenamiento de contenedores de vSphere.

El siguiente ejemplo muestra cómo establecer el certificado de usuario vpxd y la clave privada paraestablecer una conexión entre vCenter Server y los pods de controlador CSI. Como alternativa al usuariovpxd, puede crear un nuevo usuario con los privilegios necesarios, y utilizar su certificado y su clave.

Procedimiento

1 Inicie sesión en vCenter Server mediante SSH y obtenga el certificado de usuario vpxd y la claveprivada.

$ /usr/lib/vmware-vmafd/bin/vecs-cli entry getcert --store vpxd --alias vpxd --output vpxd.crt

$ /usr/lib/vmware-vmafd/bin/vecs-cli entry getkey --store vpxd --alias vpxd --output vpxd.key

2 Reemplace la nueva línea en el certificado y el archivo de claves con \n como se muestra en elsiguiente ejemplo. Utilice las cadenas recuperadas como nombre de usuario y contraseña.

$ # awk '{printf "%s\\n", $0}' vpxd.crt

-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIJANc4yqDsTx+zMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD

\nVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/IsZAEZ

\nFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExMDAuBgNV

\nBAoMJ3NjLXJkb3BzLXZtMDMtZGhjcC05MC0yMi5lbmcudm13YXJlLmNvbTEbMBkG

\nA1UECwwSVk13YXJlIEVuZ2luZWVyaW5nMB4XDTE5MDcxNzAwMTYwMVoXDTI5MDcx

\nMTAwMjUxMVowfzENMAsGA1UEAwwEdnB4ZDEXMBUGCgmSJomT8ixkARkWB3ZzcGhl\ncmUxFTATBgoJkiaJk/

IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxMTAvBgNVBAsM

\nKG1JRC05Y2IxNjk5Ny1mODQzLTQxYmEtYTUzYy1kYTUzZGE3YTQyNzkwggEiMA0G

\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAFG6piTTVxG/mu5quzglDaAPElQwS\nauDn9DLRF/

rDUqrBqn01MgZJvojX6HPNBvzTqo/ik/j9mEu5opzEMUFG8jD39sK0\nd0BF/WK7U59SEw7z7/

Bdim6tQHYFvqcbruf72u9FE2/R8SdghAr9ZiYpFn/GgYbG\n961vkUBmdUhVEzTHcxZV+

+nmn2AnJ3xxDjHcv0vkqgk3QlpDLp5CjKnNc9AYK6pB\n6cYQCIDHaRjmTFv/Ugoy1qrQfLnYR7YUHlzobxIdqdIlVNtjhipbJ

+59IMOhbkpT\nN5iQAtD8zLgSbM6VeKUFU98IynhLZa28K79KpDJLM5m/efKS6oLGl+xZAgMBAAGj

\ngd0wgdowCwYDVR0PBAQDAgXgMDIGA1UdEQQrMCmCJ3NjLXJkb3BzLXZtMDMtZGhj

\ncC05MC0yMi5lbmcudm13YXJlLmNvbTAdBgNVHQ4EFgQURlLfiEhmgWPgS93/mUBK\nMnFZenEwHwYDVR0jBBgwFoAUg/

kOFBRc+2Ahi60D5e7ExYguA84wVwYIKwYBBQUH

\nAQEESzBJMEcGCCsGAQUFBzAChjtodHRwczovL3NjLXJkb3BzLXZtMDMtZGhjcC05\nMC0yMi5lbmcudm13YXJlLmNvbS9hZm

QvdmVjcy9jYTANBgkqhkiG9w0BAQsFAAOC\nAQEAnoTu2XwNUEPqJLAkYQkBogKeEN3+ZF/VTNfWSQl7CQsQNbA+LQPDIl/

mLf90\nWaok+CmuzKKakD5/bCT3cPgGdVTZXyG43BpfSitBJavf4WycCzRc+rgtj+7eNNwr

\ntQ443ABnOGvKK5jfOXPpqFDHBsM5QmVfiLoFw2oCjA5amJU3/MapP/IzhJ2A87mx\nxjZ6BW/

S94MV6ynmHT6TBnAJhpW9aQ5gp/zQvxqGH7e6kXOvNEC7Ku0DQmTW4bjD\nu7GMk+OuacuO+nVTlc9poZeLBb7rkbk+/

ZwLYRRJaNjMUxWb4P59Ozi0Y5xFooXv\nqQR7IsEC2R/6/BBX+AR6WL3Xfw==\n-----END CERTIFICATE-----\n\n

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 35

Page 36: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

$ # awk '{printf "%s\\n", $0}' vpxd.key

-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAFG6piTTVxG/m

\nu5quzglDaAPElQwSauDn9DLRF/rDUqrBqn01MgZJvojX6HPNBvzTqo/ik/j9mEu5\nopzEMUFG8jD39sK0d0BF/

WK7U59SEw7z7/Bdim6tQHYFvqcbruf72u9FE2/R8Sdg\nhAr9ZiYpFn/GgYbG961vkUBmdUhVEzTHcxZV+

+nmn2AnJ3xxDjHcv0vkqgk3QlpD\nLp5CjKnNc9AYK6pB6cYQCIDHaRjmTFv/Ugoy1qrQfLnYR7YUHlzobxIdqdIlVNtj

\nhipbJ+59IMOhbkpTN5iQAtD8zLgSbM6VeKUFU98IynhLZa28K79KpDJLM5m/efKS\n6oLGl

+xZAgMBAAECggEAD1fSeyJloQm+8oxbz8jPfp3pZyOMwk/dRUoBYShsNHv+\n/ddThxNG408f

+TctQNxlB7dhJPUy93bZ3as6oIVatIMWHEiOxwGblbumzlXgrRqu\noBezeJVdP

+OdSdov2QtApqKXaEokLX346kHB6vnk5HVSoZWpIW2ZYgcVQNnvfDQY

\nGmqe1vKXrWgn1MqAzRpXtS6Ht1OXZtVnEX0XGvZWqn6bEz6CChxOkoP8kg1Az8db\nynvaWbe8G3FVZB/

X72e0K5LRb1FhD9/XZXlW5TVhQ2wHz31Vj+oIDnE+FHizUR1/\n29AFt2YVlymd3s4PnSYbZsbvEJMyqG/

ydbbXMT7gcQKBgQDk7s2xZ9keIG8L0SZE

\n3Nfo6doGigOCn1RQwjDiw1fgKHbkfD1tB7X49seoH3Zum68Y8zkkG4fLp8Co5npq\nQfUZ0V

+qpgtLgbTeBHT4Sc6a2ua4iEU8IIona5f+Up1zUqWsf93baumVYlXLY4yO

\nqG9pDKH4HWvNSBDjdR6HtRlRzQKBgQDWyi9IyLR+BUexWXXeDzFOZnBBG07PPZG3\nNS+VQNW9uHyGle

+kuMqtnVuwaHtzIP2egEGLTT4O4OBogUSQd3dg9JXJEXkMeHMV\ntX1ABt7anKM4KP9XABWOEZ/bCnuQwFMjx9tcVhv/

KTVlJXewWoKOoadgMwyLAUiL\nZFje8hiovQKBgHV2Ob/ewr38cj2j8HjAv19YLW/RfH+W9JIDMUYIaJww5t/RB0tb\n

+3hkVojiq8eQxcSNdzIZlhFeXzHKH+FJOlMm5GkQjRcO1BhePQ3wALvfuSXRdYSm\nRXx4biIljXfQXgUmDlU4g

+UL8W1MBKBlt9Q0kR5XKirH4TJzs1h6CSW5AoGAbFBv\nQdv8sSRGgBfmCYJN0gR0jVCREI8y4VnP0gts/gx/t3r6621Iv/5/

k1lND8TOQNTa\nuL3OEsCySeEOS3ADYoBU3J2UFobTOlpYfCY60bF12cdK5HulYwxeOZ5yq49hHcUW

\nSN0fpzAHvicD0YoDFpxMhIWZyKtwAuMqsdsSNl0CgYAtxabwN0qL+eNI7aWnGtFE

\no1tHW5a4JRZo977y4ZC4pGd6LUepdZzSlM/

qTLLL8DufsCzIAutp6slCxMUs95B0\nn7c43jVp8qF9xzSc7vxSvXYk7Cj6NVL26iwZ0V9+ppDUX2PATvcfjzx7yIwasQBc

\nUELbogDdpMBBIknwLCjrQA==\n-----END PRIVATE KEY-----\n\n

3 Especifique el certificado como nombre de usuario y la clave como contraseña en el archivo csi-vsphere.conf.

Nota Establezca insecure-flag en true si la conexión no es segura.

[Global]

cluster-id = "cluster-id"

[VirtualCenter "dirección IP de vCenter Server"]

insecure-flag = "true"

user = "-----BEGIN CERTIFICATE-----\nMIIEjzCCA3egAwIBAgIJANc4yqDsTx

+zMA0GCSqGSIb3DQEBCwUAMIGuMQswCQYD\nVQQDDAJDQTEXMBUGCgmSJomT8ixkARkWB3ZzcGhlcmUxFTATBgoJkiaJk/

IsZAEZ\nFgVsb2NhbDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExMDAuBgNV

\nBAoMJ3NjLXJkb3BzLXZtMDMtZGhjcC05MC0yMi5lbmcudm13YXJlLmNvbTEbMBkG

\nA1UECwwSVk13YXJlIEVuZ2luZWVyaW5nMB4XDTE5MDcxNzAwMTYwMVoXDTI5MDcx

\nMTAwMjUxMVowfzENMAsGA1UEAwwEdnB4ZDEXMBUGCgmSJomT8ixkARkWB3ZzcGhl\ncmUxFTATBgoJkiaJk/

IsZAEZFgVsb2NhbDELMAkGA1UEBhMCVVMxMTAvBgNVBAsM

\nKG1JRC05Y2IxNjk5Ny1mODQzLTQxYmEtYTUzYy1kYTUzZGE3YTQyNzkwggEiMA0G

\nCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDAFG6piTTVxG/mu5quzglDaAPElQwS\nauDn9DLRF/

rDUqrBqn01MgZJvojX6HPNBvzTqo/ik/j9mEu5opzEMUFG8jD39sK0\nd0BF/WK7U59SEw7z7/

Bdim6tQHYFvqcbruf72u9FE2/R8SdghAr9ZiYpFn/GgYbG\n961vkUBmdUhVEzTHcxZV+

+nmn2AnJ3xxDjHcv0vkqgk3QlpDLp5CjKnNc9AYK6pB\n6cYQCIDHaRjmTFv/Ugoy1qrQfLnYR7YUHlzobxIdqdIlVNtjhipbJ

+59IMOhbkpT\nN5iQAtD8zLgSbM6VeKUFU98IynhLZa28K79KpDJLM5m/efKS6oLGl+xZAgMBAAGj

\ngd0wgdowCwYDVR0PBAQDAgXgMDIGA1UdEQQrMCmCJ3NjLXJkb3BzLXZtMDMtZGhj

\ncC05MC0yMi5lbmcudm13YXJlLmNvbTAdBgNVHQ4EFgQURlLfiEhmgWPgS93/mUBK\nMnFZenEwHwYDVR0jBBgwFoAUg/

kOFBRc+2Ahi60D5e7ExYguA84wVwYIKwYBBQUH

\nAQEESzBJMEcGCCsGAQUFBzAChjtodHRwczovL3NjLXJkb3BzLXZtMDMtZGhjcC05\nMC0yMi5lbmcudm13YXJlLmNvbS9hZm

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 36

Page 37: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

QvdmVjcy9jYTANBgkqhkiG9w0BAQsFAAOC\nAQEAnoTu2XwNUEPqJLAkYQkBogKeEN3+ZF/VTNfWSQl7CQsQNbA+LQPDIl/

mLf90\nWaok+CmuzKKakD5/bCT3cPgGdVTZXyG43BpfSitBJavf4WycCzRc+rgtj+7eNNwr

\ntQ443ABnOGvKK5jfOXPpqFDHBsM5QmVfiLoFw2oCjA5amJU3/MapP/IzhJ2A87mx\nxjZ6BW/

S94MV6ynmHT6TBnAJhpW9aQ5gp/zQvxqGH7e6kXOvNEC7Ku0DQmTW4bjD\nu7GMk+OuacuO+nVTlc9poZeLBb7rkbk+/

ZwLYRRJaNjMUxWb4P59Ozi0Y5xFooXv\nqQR7IsEC2R/6/BBX+AR6WL3Xfw==\n-----END CERTIFICATE-----\n\n"

password = "-----BEGIN PRIVATE KEY-----

\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAFG6piTTVxG/m\nu5quzglDaAPElQwSauDn9DLRF/

rDUqrBqn01MgZJvojX6HPNBvzTqo/ik/j9mEu5\nopzEMUFG8jD39sK0d0BF/WK7U59SEw7z7/

Bdim6tQHYFvqcbruf72u9FE2/R8Sdg\nhAr9ZiYpFn/GgYbG961vkUBmdUhVEzTHcxZV++nmn2AnJ3xxDjHcv0vkqgk3QlpD

\nLp5CjKnNc9AYK6pB6cYQCIDHaRjmTFv/Ugoy1qrQfLnYR7YUHlzobxIdqdIlVNtj\nhipbJ

+59IMOhbkpTN5iQAtD8zLgSbM6VeKUFU98IynhLZa28K79KpDJLM5m/efKS\n6oLGl+xZAgMBAAECggEAD1fSeyJloQm

+8oxbz8jPfp3pZyOMwk/dRUoBYShsNHv+\n/ddThxNG408f

+TctQNxlB7dhJPUy93bZ3as6oIVatIMWHEiOxwGblbumzlXgrRqu\noBezeJVdP

+OdSdov2QtApqKXaEokLX346kHB6vnk5HVSoZWpIW2ZYgcVQNnvfDQY

\nGmqe1vKXrWgn1MqAzRpXtS6Ht1OXZtVnEX0XGvZWqn6bEz6CChxOkoP8kg1Az8db\nynvaWbe8G3FVZB/

X72e0K5LRb1FhD9/XZXlW5TVhQ2wHz31Vj+oIDnE+FHizUR1/\n29AFt2YVlymd3s4PnSYbZsbvEJMyqG/

ydbbXMT7gcQKBgQDk7s2xZ9keIG8L0SZE

\n3Nfo6doGigOCn1RQwjDiw1fgKHbkfD1tB7X49seoH3Zum68Y8zkkG4fLp8Co5npq\nQfUZ0V

+qpgtLgbTeBHT4Sc6a2ua4iEU8IIona5f+Up1zUqWsf93baumVYlXLY4yO

\nqG9pDKH4HWvNSBDjdR6HtRlRzQKBgQDWyi9IyLR+BUexWXXeDzFOZnBBG07PPZG3\nNS+VQNW9uHyGle

+kuMqtnVuwaHtzIP2egEGLTT4O4OBogUSQd3dg9JXJEXkMeHMV\ntX1ABt7anKM4KP9XABWOEZ/bCnuQwFMjx9tcVhv/

KTVlJXewWoKOoadgMwyLAUiL\nZFje8hiovQKBgHV2Ob/ewr38cj2j8HjAv19YLW/RfH+W9JIDMUYIaJww5t/RB0tb\n

+3hkVojiq8eQxcSNdzIZlhFeXzHKH+FJOlMm5GkQjRcO1BhePQ3wALvfuSXRdYSm\nRXx4biIljXfQXgUmDlU4g

+UL8W1MBKBlt9Q0kR5XKirH4TJzs1h6CSW5AoGAbFBv\nQdv8sSRGgBfmCYJN0gR0jVCREI8y4VnP0gts/gx/t3r6621Iv/5/

k1lND8TOQNTa\nuL3OEsCySeEOS3ADYoBU3J2UFobTOlpYfCY60bF12cdK5HulYwxeOZ5yq49hHcUW

\nSN0fpzAHvicD0YoDFpxMhIWZyKtwAuMqsdsSNl0CgYAtxabwN0qL+eNI7aWnGtFE

\no1tHW5a4JRZo977y4ZC4pGd6LUepdZzSlM/

qTLLL8DufsCzIAutp6slCxMUs95B0\nn7c43jVp8qF9xzSc7vxSvXYk7Cj6NVL26iwZ0V9+ppDUX2PATvcfjzx7yIwasQBc

\nUELbogDdpMBBIknwLCjrQA==\n-----END PRIVATE KEY-----\n\n"

port = "443"

datacenters = "datacenter"

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 37

Page 38: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

4 Para establecer una conexión segura, establezca insecure-flag en false y realice los siguientespasos adicionales.

a Descargue los certificados de CA raíz de confianza de vCenter Server en https://<vCenter-IP-Address>/certs/download.zip, extraiga el archivo download.zip que contiene loscertificados y cree un mapa de configuración mediante el certificado que se encuentra en eldirectorio certs/lin.

$ cd /etc/kubernetes/

$ curl -LO https://<vCenter-FQDN>/certs/download.zip

$ unzip download.zip

$ tree certs/

certs/

├── lin│ ├── ad102b28.0│ └── ad102b28.r0├── mac│ ├── ad102b28.0│ └── ad102b28.r0└── win ├── ad102b28.0.crt └── ad102b28.r0.crl

b Cree un mapa de configuración para el certificado de CA raíz.

$ cd /etc/kubernetes/certs/lin

$ kubectl create configmap vc-root-ca-cert --from-file=ad102b28.0 --namespace=kube-system

configmap/vc-root-ca-cert created

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 38

Page 39: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

c Monte vc-root-ca-cert configmap como un volumen en la ubicación de CA raíz de loscontenedores vsphere-syncer y vsphere-csi-controller en el pod vsphere-csi-controller-0.

containers:

- name: vsphere-csi-controller

volumeMounts:

- mountPath: /etc/ssl/certs/ad102b28.0

subPath: ad102b28.0

name: vc-root-ca-cert

- name: vsphere-syncer

volumeMounts:

- mountPath: /etc/ssl/certs/ad102b28.0

subPath: ad102b28.0

name: vc-root-ca-cert

volumes:

- name: vc-root-ca-cert

configMap:

name: vc-root-ca-cert

d Si la función de división en zonas y aprovisionamiento de volúmenes con reconocimiento detopología está habilitada, monte vc-root-ca-cert configmap en todos los pods creados por elDaemonSet vsphere-csi-node.

Agregue volumeMounts y volúmenes al archivo YAML de implementación para implementar elDaemonSet vsphere-csi-node como se muestra en el siguiente ejemplo.

containers:

- name: vsphere-csi-node

volumeMounts:

- mountPath: /etc/ssl/certs/ad102b28.0

subPath: ad102b28.0

name: vc-root-ca-cert

volumes:

- name: vc-root-ca-cert

configMap:

name: vc-root-ca-cert

Comprobar la configuración del clústerEn el nodo maestro, compruebe que todos los nodos se unieron al clúster y que el identificador deproveedor está configurado correctamente.

Procedimiento

1 Compruebe que todos los nodos de trabajo se unieron al nodo maestro y que están listos.

# kubectl get nodes

NAME STATUS ROLES AGE VERSION

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 39

Page 40: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

k8s-master Ready master 5m13s v1.14.2

k8s-node1 Ready <none> 23s v1.14.2

k8s-node2 Ready <none> 23s v1.14.2

k8s-node3 Ready <none> 23s v1.14.2

k8s-node4 Ready <none> 23s v1.14.2

2 Confirme que ProviderID se estableció en todos los nodos.

# kubectl describe nodes | grep "ProviderID"

ProviderID: vsphere://4204a018-f286-cf3c-7f2d-c512d9f7d90d

ProviderID: vsphere://42040e14-690a-af11-0b8e-96b09570d8a3

ProviderID: vsphere://4204bf92-3a32-5e50-d2c1-74e446f4f741

ProviderID: vsphere://4204eaf5-883c-23c7-50a8-868988cc0ae0

ProviderID: vsphere://42049175-beac-93eb-b6cb-5a827184f1e3

Agregar un nodo de Kubernetes después de la instalaciónde CCM y del controlador CSIDespués de instalar CCM y el controlador CSI, siga estos pasos para agregar un nodo al clúster deKubernetes.

Procedimiento

1 En el nuevo nodo, establezca la marca de proveedor de nube kubelet en externa.

2 Reinicie kubelet mediante los siguientes comandos.

root@k8s-node3:~# systemctl daemon-reload

root@k8s-node3:~# systemctl restart kubelet

Nota Compruebe que se haya establecido la mancha en el nodo nuevo. CCM requiere esta manchapara establecer el valor de ProviderID en el nuevo nodo. Si no se estableció la mancha, ejecute elsiguiente comando en el nodo maestro para aplicar la mancha:

root@k8s-master:~# kubectl taint nodes k8s-node2

node.cloudprovider.kubernetes.io/uninitialized=true:NoSchedule

3 Copie el archivo discovery.yaml del nodo maestro al nuevo nodo en /etc/kubernetes/discovery.yaml.

4 Ejecute el comando kubeadm join de la misma manera que lo hizo con otros nodos.

# tee /etc/kubernetes/kubeadminitworker.yaml >/dev/null <<EOF

apiVersion: kubeadm.k8s.io/v1beta1

caCertPath: /etc/kubernetes/pki/ca.crt

discovery:

file:

kubeConfigPath: /etc/kubernetes/discovery.yaml

timeout: 5m0s

tlsBootstrapToken: y7yaev.9dvwxx6ny4ef8vlq

kind: JoinConfiguration

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 40

Page 41: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

nodeRegistration:

criSocket: /var/run/dockershim.sock

kubeletExtraArgs:

cloud-provider: external

EOF

# kubeadm join --config /etc/kubernetes/kubeadminitworker.yaml

5 En el nodo maestro, compruebe que se haya establecido ProviderID para el nuevo nodo.

root@k8s-master:~# kubectl describe nodes | egrep "ProviderID:|Name:"

Name: k8s-master

ProviderID: vsphere://422fce18-ab8a-484f-6278-f6c0f37ecd82

Name: k8s-node1

ProviderID: vsphere://422f1805-f210-2f9b-edbf-487dc77c8969

Name: k8s-node2

ProviderID: vsphere://422f98b8-cfcd-dede-6da2-988a7022c4b8

Name: k8s-node3

ProviderID: vsphere://422f4c6e-2843-9c78-288a-27f6d5b5d6ae

6 Compruebe que el conjunto de daemons del nodo se encuentre en ejecución para el nuevo nodo.

# kubectl get pods --namespace=kube-system

NAME READY STATUS RESTARTS AGE

coredns-6557d7f7d6-59psv 1/1 Running 0 18m

coredns-6557d7f7d6-xklr5 1/1 Running 0 18m

etcd-k8s-master 1/1 Running 0 17m

kube-apiserver-k8s-master 1/1 Running 0 17m

kube-controller-manager-k8s-master 1/1 Running 0 17m

kube-flannel-ds-amd64-5czhc 1/1 Running 0 17m

kube-flannel-ds-amd64-5f468 1/1 Running 0 18m

kube-flannel-ds-amd64-h4k4q 1/1 Running 0 75s

kube-flannel-ds-amd64-nzrzh 1/1 Running 0 16m

kube-proxy-cpx55 1/1 Running 0 17m

kube-proxy-m7xmg 1/1 Running 0 16m

kube-proxy-nc647 1/1 Running 0 75s

kube-proxy-tpvhg 1/1 Running 0 18m

kube-scheduler-k8s-master 1/1 Running 0 17m

vsphere-cloud-controller-manager-glk95 1/1 Running 0 11m

vsphere-csi-controller-0 5/5 Running 0 9m38s

vsphere-csi-node-qrwbt 3/3 Running 0 7m29s

vsphere-csi-node-v5bqn 3/3 Running 0 7m29s

vsphere-csi-node-xfnd9 3/3 Running 0 55s

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 41

Page 42: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Implementar una aplicación conestado 3Cree una aplicación en contenedor con estado y utilice vSphere Client para acceder a los volúmenes querespaldan la aplicación.

El siguiente flujo de trabajo de ejemplo muestra la forma de implementar una aplicación MongoDB conuna réplica.

Al realizar las tareas del flujo de trabajo, se deben alternar las funciones de un usuario de vSphere y deun usuario de Kubernetes. Las tareas emplean los siguientes elementos:

n Archivo YAML de StorageClass.

n Archivo YAML del servicio MongoDB.

n Archivo YAML de StatefulSet.

Procedimiento

1 Crear una directiva de almacenamiento

El disco virtual (VMDK) que respaldará la aplicación en contenedor debe cumplir con requisitos dealmacenamiento específicos. Como usuario de vSphere, debe crear una directiva dealmacenamiento de máquinas virtuales con base en los requisitos que le haya proporcionado elusuario de Kubernetes.

2 Crear una clase de almacenamiento

Como usuario de Kubernetes, debe definir e implementar la clase de almacenamiento que hacereferencia a la directiva de almacenamiento de máquinas virtuales creada anteriormente.

3 Definir e implementar un servicio de Kubernetes para la aplicación

Como usuario de Kubernetes, defina e implemente un servicio de Kubernetes. El servicioproporciona un endpoint de redes para la aplicación.

4 Crear e implementar un objeto StatefulSet

Como usuario de Kubernetes, defina e implemente un objeto StatefulSet que especifique el númerode réplicas que se usará en la aplicación.

5 Revisar el VMDK del volumen contenedor

El archivo VMDK asociado a la directiva de almacenamiento especificada respalda el estado de laaplicación después de que esta se implementa. Como administrador de vSphere, puede revisar elVMDK que se creó para el volumen contenedor.

VMware, Inc. 42

Page 43: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Crear una directiva de almacenamientoEl disco virtual (VMDK) que respaldará la aplicación en contenedor debe cumplir con requisitos dealmacenamiento específicos. Como usuario de vSphere, debe crear una directiva de almacenamiento demáquinas virtuales con base en los requisitos que le haya proporcionado el usuario de Kubernetes.

La directiva de almacenamiento se asociará con el VMDK que respalda la aplicación.

Si cuenta con varias instancias de vCenter Server en el entorno, cree la directiva de almacenamiento demáquinas virtuales en cada instancia. Utilice el mismo nombre de directiva en todas las instancias.

Requisitos previos

n El usuario de Kubernetes identifica el clúster de Kubernetes en el que se implementará la aplicaciónen contenedor con estado.

n El usuario de Kubernetes recopila los requisitos de almacenamiento relativos a la aplicación encontenedor y los comunica al usuario de vSphere.

n Privilegios necesarios: Directivas de almacenamiento de máquina virtual. Actualizar y Directivasde almacenamiento de máquina virtual. Ver.

Procedimiento

1 En vSphere Client, abra el asistente Crear directiva de almacenamiento de máquina virtual.

a Haga clic en Menú > Directivas y perfiles.

b En Directivas y perfiles, haga clic en Directivas de almacenamiento de máquina virtual.

c Haga clic en Crear directiva de almacenamiento de máquina virtual.

2 Introduzca el nombre y la descripción de la directiva, y haga clic en Siguiente.

Opción Acción

vCenter Server Seleccione la instancia de vCenter Server.

Nombre Introduzca el nombre de la directiva de almacenamiento (por ejemplo,Con uso eficiente del espacio).

Descripción Introduzca la descripción de la directiva de almacenamiento.

3 En la sección Reglas específicas del almacén de datos de la página Estructura de directiva,seleccione Habilitar reglas para el almacenamiento de vSAN y haga clic en Siguiente.

4 En la página vSAN, defina el conjunto de reglas de la directiva y haga clic en Siguiente.

a En la pestaña Disponibilidad, defina las opciones Tolerancia ante desastres de sitio yErrores que se toleran.

b En la pestaña Reglas de directivas avanzadas, defina las reglas de directivas avanzadas,como el número de fracciones de disco por objeto y la reserva de Flash Read Cache.

5 En la página Compatibilidad de almacenamiento, revise la lista de almacenes de datos de vSANque coinciden con esta directiva y haga clic en Siguiente.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 43

Page 44: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

6 En la página Revisar y finalizar, revise la configuración de la directiva y haga clic en Finalizar.

Pasos siguientes

Ahora puede informar del nombre de la directiva de almacenamiento al usuario de Kubernetes. Ladirectiva de almacenamiento de máquina virtual que creó se utilizará como parte de la definición de clasede almacenamiento del aprovisionamiento dinámico de volúmenes.

Crear una clase de almacenamientoComo usuario de Kubernetes, debe definir e implementar la clase de almacenamiento que hacereferencia a la directiva de almacenamiento de máquinas virtuales creada anteriormente.

Use kubectl para realizar los siguientes pasos. Por lo general, la información que se pasa a kubectl seproporciona en un archivo YAML. kubectl convierte la información al formato JSON al realizar lasolicitud de API.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 44

Page 45: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 Cree un archivo YAML de StorageClass que describa los requisitos de almacenamiento delcontenedor y que haga referencia a la directiva de almacenamiento de máquinas virtuales que seutilizará.

Al crear el archivo YAML, puede incluir los siguientes elementos.

Parámetro Descripción

storagepolicyname Incluye el nombre de la directiva de almacenamiento de máquinas virtuales que seva a aplicar. El VMDK de volumen persistente que cree tendrá asociada ladirectiva de almacenamiento de máquinas virtuales.

fstype Especifica el tipo de sistema de archivos que se va a montar. Por ejemplo, ext4,ext3 u otros sistemas de archivos.

DatastoreURL Especifica la URL del almacén de datos en el que se debe aprovisionar el volumencontenedor.

El siguiente archivo YAML de ejemplo incluye la directiva de almacenamientoCon uso eficiente del espacio que creó anteriormente con vSphere Client. El VMDK delvolumen persistente resultante se coloca en un almacén de datos compatible que cuenta con lacantidad máxima de espacio disponible que satisface los requisitos de directiva de almacenamientode Con uso eficiente del espacio.

$ cat mongodb-storageclass.yaml

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

name: mongodb-sc

annotations:

storageclass.kubernetes.io/is-default-class: "false"

provisioner: block.vsphere.csi.vmware.com

parameters:

storagepolicyname: "Space-Efficient"

fstype: ext4

2 Implemente el objeto StorageClass con kubectl.

$ kubectl create -f mongodb-storageclass.yaml

Los resultados son similares al siguiente:

storageclass.storage.k8s.io/mongodb-sc created

3 Confirme que se creó el objeto StorageClass.

$ kubectl get storageclass mongodb-sc

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 45

Page 46: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Obtendrá resultados similares al siguiente:

NAME PROVISIONER AGE

mongodb-sc block.vsphere.csi.vmware.com 5s

Definir e implementar un servicio de Kubernetes para laaplicaciónComo usuario de Kubernetes, defina e implemente un servicio de Kubernetes. El servicio proporciona unendpoint de redes para la aplicación.

Procedimiento

1 Cree el archivo YAML que define el servicio.

El siguiente es un archivo YAML de ejemplo que define el servicio de la aplicación MongoDB.

$ cat mongodb-service.yaml

apiVersion: v1

kind: Service

metadata:

name: mongodb-service

labels:

name: mongodb-service

spec:

ports:

- port: 27017

targetPort: 27017

clusterIP: None

selector:

role: mongo

2 Implemente el servicio mediante kubectl.

$ kubectl create -f mongodb-service.yaml

service/mongodb-service created

Crear e implementar un objeto StatefulSetComo usuario de Kubernetes, defina e implemente un objeto StatefulSet que especifique el número deréplicas que se usará en la aplicación.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 46

Page 47: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 Cree un secreto para el archivo de claves. MongoDB usará esta clave para comunicarse con elclúster interno.

$ openssl rand -base64 741 > key.txt

$ kubectl create secret generic shared-bootstrap-data --from-file=internal-auth-mongodb-

keyfile=key.txt

secret/shared-bootstrap-data created

2 Defina las especificaciones de la aplicación en contenedor en el archivo YAML de StatefulSet.

La siguiente especificación de ejemplo solicita una instancia de la aplicación MongoDB, especifica laimagen externa que se va a utilizar y hace referencia a la clase de almacenamiento mongodb-sc quecreó anteriormente. Esta clase de almacenamiento se asigna a la directiva de almacenamiento demáquina virtual Con uso eficiente del espacio que definió anteriormente en el lado de vSphereClient.

$ cat mongodb-statefulset.yaml

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: mongod

spec:

serviceName: mongodb-service

replicas: 3

selector:

matchLabels:

role: mongo

environment: test

replicaset: MainRepSet

template:

metadata:

labels:

role: mongo

environment: test

replicaset: MainRepSet

spec:

containers:

- name: mongod-container

image: mongo:3.4

command:

- "numactl"

- "--interleave=all"

- "mongod"

- "--bind_ip"

- "0.0.0.0"

- "--replSet"

- "MainRepSet"

- "--auth"

- "--clusterAuthMode"

- "keyFile"

- "--keyFile"

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 47

Page 48: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

- "/etc/secrets-volume/internal-auth-mongodb-keyfile"

- "--setParameter"

- "authenticationMechanisms=SCRAM-SHA-1"

resources:

requests:

cpu: 0.2

memory: 200Mi

ports:

- containerPort: 27017

volumeMounts:

- name: secrets-volume

readOnly: true

mountPath: /etc/secrets-volume

- name: mongodb-persistent-storage-claim

mountPath: /data/db

volumes:

- name: secrets-volume

secret:

secretName: shared-bootstrap-data

defaultMode: 256

volumeClaimTemplates:

- metadata:

name: mongodb-persistent-storage-claim

annotations:

volume.beta.kubernetes.io/storage-class: "mongodb-sc"

spec:

accessModes: [ "ReadWriteOnce" ]

resources:

requests:

storage: 1Gi

3 Use kubectl para implementar el objeto StatefulSet.

$ kubectl create -f mongodb-statefulset.yaml

Verá resultados similares al siguiente.

statefulset.apps/mongo created

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 48

Page 49: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

4 Confirme que se creó MongoDB.

Espere a que se inicien los pods y se creen PVC para cada réplica.

$ kubectl get statefulset mongod

NAME READY AGE

mongod 3/3 96s

$ kubectl get pod -l role=mongo

NAME READY STATUS RESTARTS AGE

mongod-0 1/1 Running 0 13h

mongod-1 1/1 Running 0 13h

mongod-2 1/1 Running 0 13h

$ kubectl get pvc

NAME STATUS VOLUME

CAPACITY ACCESS MODES STORAGECLASS AGE

mongodb-persistent-storage-claim-mongod-0 Bound pvc-ea98b22a-b8cf-11e9-b1d3-005056a0e4f0

1Gi RWO mongodb-sc 13h

mongodb-persistent-storage-claim-mongod-1 Bound pvc-0267fa7d-b8d0-11e9-b1d3-005056a0e4f0

1Gi RWO mongodb-sc 13h

mongodb-persistent-storage-claim-mongod-2 Bound pvc-24d86a37-b8d0-11e9-b1d3-005056a0e4f0

1Gi RWO mongodb-sc 13h

5 Determine la configuración del conjunto de réplicas.

Conéctese a uno de los procesos de contenedor mongod para configurar el conjunto de réplicas.

Ejecute el siguiente comando para conectarse al primer contenedor. En el shell, inicie el conjunto deréplicas. Puede confiar en que los nombres de host serán los mismos, ya que se utilizó Statefulset.

$ kubectl exec -it mongod-0 -c mongod-container bash

root@mongod-0:/# mongo

> rs.initiate({_id: "MainRepSet", version: 1, members: [

... { _id: 0, host : "mongod-0.mongodb-service.default.svc.cluster.local:27017" },

... { _id: 1, host : "mongod-1.mongodb-service.default.svc.cluster.local:27017" },

... { _id: 2, host : "mongod-2.mongodb-service.default.svc.cluster.local:27017" }

... ]});

{ "ok" : 1 }

mongodb-0 se convirtió en el nodo maestro y los otros dos nodos son secundarios.

Almacenamiento nativo en la nube crea un VMDK que cumple con los requisitos de almacenamiento deaplicaciones y lo asocia de forma dinámica a uno de los nodos de Kubernetes del clúster.

Pasos siguientes

Ahora puede comprobar los volúmenes en vSphere Client.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 49

Page 50: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Revisar el VMDK del volumen contenedorEl archivo VMDK asociado a la directiva de almacenamiento especificada respalda el estado de laaplicación después de que esta se implementa. Como administrador de vSphere, puede revisar el VMDKque se creó para el volumen contenedor.

Nota Si se producen errores en el servidor de CNS de Kubernetes, es posible que los objetos de CNSen vSphere Client no se muestren correctamente hasta que se produzca la sincronización completa.

Procedimiento

1 En vSphere Client, desplácese hasta una máquina virtual de nodo adecuada.

2 Haga clic en la pestaña Resumen y revise el disco duro recién creado.

3 Desplácese hasta la instancia de vCenter Server, un centro de datos o un almacén de datos.

4 Haga clic en la pestaña Supervisar y, a continuación, haga clic en Volúmenes contenedores enAlmacenamiento nativo en la nube.

5 Observe los volúmenes contenedores disponibles en su entorno y supervise el estado decumplimiento de la directiva de almacenamiento de estos.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 50

Page 51: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Administrar volúmenescontenedores 4Después de implementar la aplicación en contenedor, puede utilizar vSphere Client para supervisar losvolúmenes contenedores. También puede realizar tareas de administración, por ejemplo, aumentar elnúmero de réplicas de su aplicación en contenedor.

Este capítulo incluye los siguientes temas:

n Supervisar volúmenes contenedores en clústeres de Kubernetes

n Escalar horizontalmente la aplicación en contenedor

Supervisar volúmenes contenedores en clústeres deKubernetesMuestre los volúmenes contenedores de su entorno y supervise el estado de cumplimiento de la directivade almacenamiento de estos.

Procedimiento

1 Desplácese hasta la instancia de vCenter Server, un centro de datos o un almacén de datos.

2 Haga clic en la pestaña Supervisar y, a continuación, haga clic en Volúmenes contenedores enAlmacenamiento nativo en la nube.

3 Observe los volúmenes contenedores disponibles en su entorno y supervise el estado decumplimiento de la directiva de almacenamiento de estos.

VMware, Inc. 51

Page 52: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

4 Para obtener más detalles, haga clic en el vínculo VER TODO de la columna Etiqueta.

5 Haga clic en el vínculo de la columna Nombre de volumen para revisar detalles como la colocación,el cumplimiento y la directiva de almacenamiento.

Nota Esta vista solo está disponible si el almacén de datos subyacente es vSAN.

Escalar horizontalmente la aplicación en contenedorUtilice el objeto StatefulSet de Kubernetes para aumentar el número de réplicas de la aplicación encontenedor.

Puede utilizar kubectl para escalar horizontalmente la aplicación en contenedor. Siga esta tarea deejemplo para aumentar el número de réplicas de MongoDB de tres a cinco.

Procedimiento

1 Ejecute el siguiente comando para verificar el número de réplicas.

$ kubectl get statefulset

NAME READY AGE

mongod 3/3 13h

2 Ejecute el siguiente comando para aumentar el número de réplicas a cinco.

$ kubectl scale statefulset mongod --replicas=5

statefulset.apps/mongod scaled

ESXi crea nuevos objetos de disco virtual.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 52

Page 53: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

3 Confirme que las nuevas réplicas se hayan creado.

a Muestra todas las réplicas.

$ kubectl get pod

NAME READY STATUS RESTARTS AGE

busybox 1/1 Running 13 13h

mongod-0 1/1 Running 0 13h

mongod-1 1/1 Running 0 13h

mongod-2 1/1 Running 0 13h

mongod-3 1/1 Running 0 85s

mongod-4 1/1 Running 0 41s

$ kubectl get pvc

NAME STATUS

VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE

mongodb-persistent-storage-claim-mongod-0 Bound pvc-ea98b22a-b8cf-11e9-

b1d3-005056a0e4f0 1Gi RWO mongodb-sc 13h

mongodb-persistent-storage-claim-mongod-1 Bound pvc-0267fa7d-b8d0-11e9-

b1d3-005056a0e4f0 1Gi RWO mongodb-sc 13h

mongodb-persistent-storage-claim-mongod-2 Bound pvc-24d86a37-b8d0-11e9-

b1d3-005056a0e4f0 1Gi RWO mongodb-sc 13h

mongodb-persistent-storage-claim-mongod-3 Bound pvc-14cf008f-b944-11e9-

b1d3-005056a0e4f0 1Gi RWO mongodb-sc 91s

mongodb-persistent-storage-claim-mongod-4 Bound pvc-2ec9e6d0-b944-11e9-

b1d3-005056a0e4f0 1Gi RWO mongodb-sc 47

b Obtenga la descripción de StatefulSet.

$ kubectl get statefulset

El número de réplicas en los resultados cambió a 5.

NAME READY AGE

mongod 5/5 13h

4 Muestra volúmenes de contenedor en vSphere Client.

a Desplácese hasta una instancia de vCenter Server, un centro de datos o un almacén de datos.

b Haga clic en la pestaña Supervisar y, a continuación, haga clic en Volúmenes contenedoresen Almacenamiento nativo en la nube.

Ahora puede ver los dos volúmenes contenedores en la lista.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 53

Page 54: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Implementar CCM y CSI en unentorno con varios centros dedatos o clústeres 5Cuando se implementan CCM y CSI en un entorno de vSphere que contiene varios centros de datos oclústeres de hosts, es posible usar la división en zonas.

La división en zonas permite que los sistemas de orquestación, como Kubernetes, se integren conrecursos de almacenamiento de vSphere que no se encuentran igualmente disponibles para todos losnodos. Como resultado, el sistema de orquestación puede tomar decisiones inteligentes al aprovisionarvolúmenes dinámicamente y evitar situaciones como, por ejemplo, cuando no se puede iniciar un poddebido a que no se puede acceder al recurso de almacenamiento necesario.

Este capítulo incluye los siguientes temas:

n Configurar zonas en el entorno de CNS de vSphere

n Implementar cargas de trabajo mediante zonas

n Usar aprovisionamiento de volúmenes con reconocimiento de topología en Kubernetes

n Migrar máquinas virtuales de nodo de Kubernetes a zonas o regiones diferentes

Configurar zonas en el entorno de CNS de vSphereSegún el entorno de almacenamiento de vSphere, se pueden utilizar diferentes escenarios deimplementación para las zonas. Por ejemplo, puede tener zonas por clúster de hosts, por centro de datoso tener una combinación de ambas.

En el siguiente ejemplo, el entorno de vCenter Server incluye tres clústeres con máquinas virtuales denodo ubicadas en los tres clústeres.

VMware, Inc. 54

Page 55: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

El flujo de trabajo de muestra crea zonas por clúster y por centro de datos.

Procedimiento

1 Crear zonas mediante etiquetas de vSphere

Puede utilizar etiquetas de vSphere para etiquetar zonas en el entorno de vSphere.

2 Habilitar zonas para CCM y el controlador CSI

Instale CCM y el controlador CSI mediante las entradas zone y region.

Crear zonas mediante etiquetas de vSpherePuede utilizar etiquetas de vSphere para etiquetar zonas en el entorno de vSphere.

La tarea asume que el entorno de vCenter Server incluye tres clústeres (cluster1, cluster2 y cluster3) conlas máquinas virtuales de nodo en los tres clústeres. En la tarea, cree dos categorías de etiquetas,k8s-zone y k8s-region. Etiquete los clústeres como tres zonas (zone-a, zone-b y zone-c) y marque elcentro de datos como una región, region-1.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 55

Page 56: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Requisitos previos

Asegúrese de tener los privilegios de etiquetado adecuados que controlen su capacidad para trabajarcon etiquetas. Consulte Privilegios de etiquetado de vSphere en la documentación de Seguridad devSphere.

Nota Los antecesores de las máquinas virtuales de nodo, como el host, el clúster y el centro de datos,deben tener la función de solo lectura establecida para el usuario de vSphere que se configuró con el finde utilizar el controlador CSI y CCM. Esto es necesario para permitir la lectura de etiquetas y categoríasa fin de preparar la topología de los nodos.

Procedimiento

1 En vSphere Client, cree dos categorías de etiquetas, k8s-zone y k8s-region.

Para obtener más información, consulte Crear, editar o eliminar una categoría de etiquetas en ladocumentación de Administración de vCenter Server y hosts.

2 En cada categoría, cree las etiquetas de zona correspondientes.

Para obtener información sobre la creación de etiquetas, consulte Crear, editar o eliminar unaetiqueta en la documentación de Administración de vCenter Server y hosts.

Categorías Etiquetas

k8s-zone zone-a

zone-b

zone-c

k8s-region region-1

3 Aplique las etiquetas correspondientes al centro de datos y a los clústeres, tal como se indica en latabla.

Para obtener información, consulte Asignar o quitar una etiqueta en la documentación deAdministración de vCenter Server y hosts.

Objetos de vSphere Etiquetas

datacenter region-1

cluster1 zone-a

cluster2 zone-b

cluster3 zone-c

Habilitar zonas para CCM y el controlador CSIInstale CCM y el controlador CSI mediante las entradas zone y region.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 56

Page 57: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Procedimiento

1 Instale CCM.

En los campos de valor del archivo configmap cloud-config, especifique region y zone.

Asegúrese de agregar los nombres de las categorías que definió en vSphere, como k8s-region yk8s-zone.

[Global]

insecure-flag = "true"

[VirtualCenter "vCenter Server IP address"]

user = "user"

password = "password"

port = "443"

datacenters = "datacenter"

[Network]

public-network = "VM Network"

[Labels]

region = k8s-region

zone = k8s-zone

cd /etc/kubernetes

kubectl create configmap cloud-config --from-file=vsphere.conf --namespace=kube-system

kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/

manifests/controller-manager/cloud-controller-manager-roles.yaml

kubectl apply -f https://raw.githubusercontent.com/kubernetes/cloud-provider-vsphere/master/

manifests/controller-manager/cloud-controller-manager-role-bindings.yaml

kubectl apply -f https://github.com/kubernetes/cloud-provider-vsphere/raw/master/manifests/

controller-manager/vsphere-cloud-controller-manager-ds.yaml

2 Compruebe que la instalación de CCM se haya realizado correctamente.

Después de la instalación, se aplicarán las etiquetas failure-domain.beta.kubernetes.io/region y failure-domain.beta.kubernetes.io/zone a todos los nodos.

kubectl get nodes -L failure-domain.beta.kubernetes.io/zone -L failure-domain.beta.kubernetes.io/

region

NAME STATUS ROLES AGE VERSION ZONE REGION

k8s-master Ready master 32m v1.14.2 zone-a region-1

k8s-node1 Ready <none> 18m v1.14.2 zone-a region-1

k8s-node2 Ready <none> 18m v1.14.2 zone-b region-1

k8s-node3 Ready <none> 18m v1.14.2 zone-b region-1

k8s-node4 Ready <none> 18m v1.14.2 zone-c region-1

k8s-node5 Ready <none> 18m v1.14.2 zone-c region-1

3 Instale el controlador CSI.

Asegúrese de que se implemente external-provisioner con los siguientes argumentos.

- "--feature-gates=Topology=true"

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 57

Page 58: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

En el archivo de secretos de credenciales, agregue entradas para region y zone.

[Global]

cluster-id = "cluster-id"

[VirtualCenter "vCenter Server IP address"]

insecure-flag = "true"

user = "user"

password = "password"

port = "443"

datacenters = "datacenter"

[Labels]

region = k8s-region

zone = k8s-zone

cd /etc/kubernetes

kubectl create secret generic vsphere-config-secret --from-file=vsphere.conf --namespace=kube-

system

4 Compruebe que la instalación del controlador CSI se haya realizado correctamente.

# kubectl get csinodes -o jsonpath='{range .items[*]}{.metadata.name} {.spec}{"\n"}{end}'

k8s-node1 map[drivers:[map[name:block.vsphere.csi.vmware.com nodeID:k8s-node1 topologyKeys:

[failure-domain.beta.kubernetes.io/region failure-domain.beta.kubernetes.io/zone]]]]

k8s-node2 map[drivers:[map[name:block.vsphere.csi.vmware.com nodeID:k8s-node2 topologyKeys:

[failure-domain.beta.kubernetes.io/region failure-domain.beta.kubernetes.io/zone]]]]

k8s-node3 map[drivers:[map[name:block.vsphere.csi.vmware.com nodeID:k8s-node3 topologyKeys:

[failure-domain.beta.kubernetes.io/region failure-domain.beta.kubernetes.io/zone]]]]

k8s-node4 map[drivers:[map[name:block.vsphere.csi.vmware.com nodeID:k8s-node4 topologyKeys:

[failure-domain.beta.kubernetes.io/region failure-domain.beta.kubernetes.io/zone]]]]

k8s-node5 map[drivers:[map[name:block.vsphere.csi.vmware.com nodeID:k8s-node5 topologyKeys:

[failure-domain.beta.kubernetes.io/region failure-domain.beta.kubernetes.io/zone]]]]

Implementar cargas de trabajo mediante zonasCon las zonas, puede implementar una carga de trabajo de Kubernetes en una zona o una regiónespecíficas.

Utilice el flujo de trabajo de muestra para aprovisionar y verificar las cargas de trabajo.

Procedimiento

1 Cree un elemento StorageClass que defina la asignación de zona y región.

En el archivo YAML de StorageClass, agregue zone-a y region-1 al campo allowedTopologies.

tee example-zone-sc.yaml >/dev/null <<'EOF'

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

name: example-vanilla-block-zone-sc

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 58

Page 59: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

provisioner: block.vsphere.csi.vmware.com

allowedTopologies:

- matchLabelExpressions:

- key: failure-domain.beta.kubernetes.io/zone

values:

- zone-a

- key: failure-domain.beta.kubernetes.io/region

values:

- region-1

# kubectl create -f example-zone-sc.yaml

storageclass.storage.k8s.io/example-vanilla-block-zone-sc created

2 Cree un elemento PersistenceVolumeClaim.

tee example-zone-pvc.yaml >/dev/null <<'EOF'

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: example-vanilla-block-zone-pvc

spec:

accessModes:

- ReadWriteOnce

resources:

requests:

storage: 5Gi

storageClassName: example-vanilla-block-zone-sc

# kubectl create -f example-zone-pvc.yaml

persistentvolumeclaim/example-vanilla-block-zone-pvc created

3 Compruebe que se haya creado un volumen para PersistentVolumeClaim.

# kubectl get pvc example-vanilla-block-zone-pvc

NAME STATUS VOLUME CAPACITY

ACCESS MODES STORAGECLASS AGE

example-vanilla-block-zone-pvc Bound pvc-5b340a9b-a990-11e9-b26e-005056a04307 5Gi

RWO example-vanilla-block-zone-sc 58s

# kubectl get pvc example-vanilla-block-zone-pvc

NAME STATUS VOLUME CAPACITY

ACCESS MODES STORAGECLASS AGE

example-vanilla-block-zone-pvc Bound pvc-5b340a9b-a990-11e9-b26e-005056a04307 5Gi

RWO example-vanilla-block-zone-sc 91s

4 Compruebe que el volumen persistente se aprovisione con reglas de afinidad de nodo quecontengan una zona y una región especificadas en StorageClass.

# kubectl describe pv pvc-5b340a9b-a990-11e9-b26e-005056a04307

Name: pvc-5b340a9b-a990-11e9-b26e-005056a04307

Labels: <none>

Annotations: pv.kubernetes.io/provisioned-by: block.vsphere.csi.vmware.com

Finalizers: [kubernetes.io/pv-protection]

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 59

Page 60: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

StorageClass: example-vanilla-block-zone-sc

Status: Bound

Claim: default/example-vanilla-block-zone-pvc

Reclaim Policy: Delete

Access Modes: RWO

VolumeMode: Filesystem

Capacity: 5Gi

Node Affinity:

Required Terms:

Term 0: failure-domain.beta.kubernetes.io/zone in [zone-a]

failure-domain.beta.kubernetes.io/region in [region-1]

Message:

Source:

Type: CSI (a Container Storage Interface (CSI) volume source)

Driver: block.vsphere.csi.vmware.com

VolumeHandle: 8f1f5e44-fafa-4404-91f7-d7a9bfd30e16

ReadOnly: false

VolumeAttributes: fstype=

storage.kubernetes.io/csiProvisionerIdentity=1563472725085-8081-

block.vsphere.csi.vmware.com

type=vSphere CNS Block Volume

Events: <none>

5 Cree un pod.

tee example-zone-pod.yaml >/dev/null <<'EOF'

apiVersion: v1

kind: Pod

metadata:

name: example-vanilla-block-zone-pod

spec:

containers:

- name: test-container

image: gcr.io/google_containers/busybox:1.24

command: ["/bin/sh", "-c", "echo

'hello' > /mnt/volume1/index.html && chmod o+rX /mnt

/mnt/volume1/index.html && while true ; do sleep 2 ; done"]

volumeMounts:

- name: test-volume

mountPath: /mnt/volume1

restartPolicy: Never

volumes:

- name: test-volume

persistentVolumeClaim:

claimName: example-vanilla-block-zone-pvc

# kubectl create -f example-zone-pod.yaml

pod/example-vanilla-block-zone-pod created

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 60

Page 61: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

6 Compruebe que el pod se haya programado en el nodo k8s-node1 que pertenece a zone-a yregion-1.

# kubectl describe pod example-vanilla-block-zone-pod | egrep "Node:"

Node: k8s-node1/10.160.78.255

Usar aprovisionamiento de volúmenes conreconocimiento de topología en KubernetesEl controlador CSI de vSphere admite el aprovisionamiento de volúmenes con reconocimiento detopología. Este tipo de aprovisionamiento permite a Kubernetes tomar decisiones inteligentes y encontrarel mejor lugar para aprovisionar dinámicamente un volumen para un pod. En los clústeres de variaszonas, los volúmenes se aprovisionan en una zona adecuada que puede ejecutar el pod, lo que permiteimplementar y escalar fácilmente las cargas de trabajo con estado en los dominios de errores a fin deproporcionar alta disponibilidad y tolerancia a errores.

Requisitos previos

Debe implementarse un aprovisionador externo con los argumentos de --strict-topology.

Este argumento controla qué información de topología se pasa aCreateVolumeRequest.AccessibilityRequirements en caso de un enlace demorado. Para obtenerinformación sobre cómo esta opción cambia el resultado, consulte la tabla en https://github.com/kubernetes-csi/external-provisioner#topology-support. Esta opción no tiene efecto si la función Topologíaestá deshabilitada o si se utiliza el modo de enlace de volumen inmediato.

Procedimiento

1 Habilite la función Topología.

Cree un objeto StorageClass con el parámetro volumeBindingMode establecido enWaitForFirstConsumer.

tee topology-aware-standard.yaml >/dev/null <<'EOF'

apiVersion: v1

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

name: topology-aware-standard

provisioner: block.vsphere.csi.vmware.com

volumeBindingMode: WaitForFirstConsumer

# kubectl create -f topology-aware-standard.yaml

storageclass.storage.k8s.io/topology-aware-standard created

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 61

Page 62: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Esta nueva opción solicita al aprovisionador de volúmenes que, en lugar de crear un volumeninmediatamente, espere hasta que un pod que utiliza una instancia de PVC asociada se ejecute através de la programación. Tenga en cuenta que en el objeto StorageClass anterior, failure-domain.beta.kubernetes.io/zone y failure-domain.beta.kubernetes.io/region seespecificaron en la entrada de allowedTopologies. No es necesario que vuelva a especificarlos, yaque las directivas del pod son las que ahora orientan la decisión de qué zona se debe utilizar para elaprovisionamiento de volúmenes.

2 Cree un pod y una instancia de PVC con el objeto StorageClass creado anteriormente.

En el siguiente ejemplo, se muestran varias directivas de programación y restricciones en cuanto apods.

tee topology-aware-statefulset.yaml >/dev/null <<'EOF'

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: web

spec:

replicas: 2

selector:

matchLabels:

app: nginx

serviceName: nginx

template:

metadata:

labels:

app: nginx

spec:

affinity:

nodeAffinity:

requiredDuringSchedulingIgnoredDuringExecution:

nodeSelectorTerms:

-

matchExpressions:

-

key: failure-domain.beta.kubernetes.io/zone

operator: In

values:

- zone-a

- zone-b

podAntiAffinity:

requiredDuringSchedulingIgnoredDuringExecution:

-

labelSelector:

matchExpressions:

-

key: app

operator: In

values:

- nginx

topologyKey: failure-domain.beta.kubernetes.io/zone

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 62

Page 63: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

containers:

- name: nginx

image: gcr.io/google_containers/nginx-slim:0.8

ports:

- containerPort: 80

name: web

volumeMounts:

- name: www

mountPath: /usr/share/nginx/html

- name: logs

mountPath: /logs

volumeClaimTemplates:

- metadata:

name: www

spec:

accessModes: [ "ReadWriteOnce" ]

storageClassName: topology-aware-standard

resources:

requests:

storage: 5Gi

- metadata:

name: logs

spec:

accessModes: [ "ReadWriteOnce" ]

storageClassName: topology-aware-standard

resources:

requests:

storage: 1Gi

EOF

# kubectl create -f topology-aware-statefulset.yaml

statefulset.apps/web created

3 Compruebe que el objeto StatefulSet esté activo y en ejecución.

$ kubectl get statefulset

NAME READY AGE

web 2/2 5m1s

4 Revise los pods y nodos.

Los pods se crean en las zonas zone-a y zone-b especificadas en la entrada de nodeAffinity. Elnombre de host web-0 está programado en node k8s-node3, que pertenece a zone-b. El nombrede host web-1 está programado en node k8s-node1, que pertenece a zone-a.

$ kubectl get pods -o json | egrep "hostname|nodeName|claimName"

"hostname": "web-0",

"nodeName": "k8s-node3",

"claimName": "www-web-0"

"claimName": "logs-web-0"

"hostname": "web-1",

"nodeName": "k8s-node1",

"claimName": "www-web-1"

"claimName": "logs-web-1"

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 63

Page 64: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

$ kubectl get nodes k8s-node3 k8s-node1 -L failure-domain.beta.kubernetes.io/zone -L failure-

domain.beta.kubernetes.io/region --no-headers

k8s-node3 Ready <none> 25h v1.14.2 zone-b region-1

k8s-node1 Ready <none> 25h v1.14.2 zone-a region-1

5 Compruebe que los volúmenes estén aprovisionados en las zonas de acuerdo con las directivasestablecidas por el pod.

Según dónde estén programados los pods, los volúmenes asociados también se aprovisionan en lamisma zona.

$ kubectl describe pvc www-web-0 | egrep "volume.kubernetes.io/selected-node"

volume.kubernetes.io/selected-node: k8s-node3

$ kubectl describe pvc logs-web-0 | egrep "volume.kubernetes.io/selected-node"

volume.kubernetes.io/selected-node: k8s-node3

$ kubectl describe pvc www-web-1 | egrep "volume.kubernetes.io/selected-node"

volume.kubernetes.io/selected-node: k8s-node1

$ kubectl describe pvc logs-web-1 | egrep "volume.kubernetes.io/selected-node"

volume.kubernetes.io/selected-node: k8s-node1

$ kubectl get pv -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.claimRef.name}{"\t"}

{.spec.nodeAffinity}{"\n"}{end}'

pvc-2253dc52-a9ed-11e9-b26e-005056a04307 www-web-0 map[required:map[nodeSelectorTerms:

[map[matchExpressions:[map[key:failure-domain.beta.kubernetes.io/region operator:In values:

[region-1]] map[operator:In values:[zone-b] key:failure-domain.beta.kubernetes.io/zone]]]]]]

pvc-22575240-a9ed-11e9-b26e-005056a04307 logs-web-0 map[required:map[nodeSelectorTerms:

[map[matchExpressions:[map[key:failure-domain.beta.kubernetes.io/zone operator:In values:[zone-

b]] map[key:failure-domain.beta.kubernetes.io/region operator:In values:[region-1]]]]]]]

pvc-3c963150-a9ed-11e9-b26e-005056a04307 www-web-1 map[required:map[nodeSelectorTerms:

[map[matchExpressions:[map[key:failure-domain.beta.kubernetes.io/zone operator:In values:[zone-

a]] map[operator:In values:[region-1] key:failure-domain.beta.kubernetes.io/region]]]]]]

pvc-3c98978f-a9ed-11e9-b26e-005056a04307 logs-web-1 map[required:map[nodeSelectorTerms:

[map[matchExpressions:[map[key:failure-domain.beta.kubernetes.io/zone operator:In values:[zone-

a]] map[key:failure-domain.beta.kubernetes.io/region operator:In values:[region-1]]]]]]]

6 Si es necesario, especifique allowedTopologies.

Cuando un operador de clúster especifica el modo de enlace de volúmenesWaitForFirstConsumer, en la mayoría de las situaciones, ya no es necesario restringir elaprovisionamiento a topologías específicas. Sin embargo, si es necesario, puede especificarallowedTopologies.

En el siguiente ejemplo, se muestra cómo restringir la topología a una zona específica.

kind: StorageClass

apiVersion: storage.k8s.io/v1

metadata:

name: example-vanilla-block-sc

provisioner: block.vsphere.csi.vmware.com

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 64

Page 65: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

volumeBindingMode: WaitForFirstConsumer

allowedTopologies:

- matchLabelExpressions:

- key: failure-domain.beta.kubernetes.io/zone

values:

- zone-b

- key: failure-domain.beta.kubernetes.io/region

values:

- region-1

Migrar máquinas virtuales de nodo de Kubernetes a zonaso regiones diferentesDespués de definir las ubicaciones de zona y región para las máquinas virtuales de nodo de Kubernetes,puede reemplazar las etiquetas de zona y región existentes para cambiar la asignación.

Procedimiento

1 Reemplace las etiquetas existentes en el nodo por la zona o la región de destino.

$ kubectl label nodes k8s-node1 failure-domain.beta.kubernetes.io/zone=zone-b --overwrite=true

node/k8s-node1 labeled

2 Elimine la definición CRD de csinode asociada con el nodo de Kubernetes.

$ kubectl delete csinode k8s-node1

3 Migre el nodo a la nueva zona o región.

4 Elimine el pod de vsphere-csi-node daemonset que se ejecuta en el nodo.

Se volverán a crear el pod y la definición CRD de csinode con la topología actualizada.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 65

Page 66: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

Solucionar problemas deAlmacenamiento nativo en lanube para vSphere 6Puede utilizar los archivos de registro para solucionar los problemas relacionados con el entorno deAlmacenamiento nativo en la nube.

Para solucionar problemas relacionados con la implementación del clúster de Kubernetes, consulte ladocumentación de Kubernetes.

Este capítulo incluye los siguientes temas:

n Usar archivos de registro de CNS

n Modificar el nivel de registro

Usar archivos de registro de CNSSi necesita solucionar los problemas que se producen al crear o eliminar volúmenes o pods, use losarchivos de registro relacionados con el pod vsphere-csi-controller-0.

El pod vsphere-csi-controller-0 ejecuta los contenedores csi-attacher, vsphere-csi-controller, liveness-probe, vsphere-syncer y csi-provisioner.

n Cuando experimente problemas al crear o eliminar volúmenes, examine los registros de csi-provisioner y vsphere-csi-controller.

n Cuando experimente problemas al crear o eliminar pods, examine los registros de csi-attacher yvsphere-csi-controller.

Utilice el comando kubectl logs para obtener los archivos de registro. Por ejemplo:

$ kubectl logs vsphere-csi-controller-0 --namespace=kube-system -c csi-provisioner

$ kubectl logs vsphere-csi-controller-0 --namespace=kube-system -c vsphere-csi-controller

También puede comprobar los archivos de registro del nodo maestro en el que está programado el pod.Los archivos se encuentran en /var/log/containers en el nodo maestro. Busque los archivos con elprefijo vsphere-csi-controller-0. Por ejemplo:

$ pwd

/var/log/containers

$ ls -la | grep "vsphere-csi-controller-0"

lrwxrwxrwx 1 root root 106 Jul 25 17:07 vsphere-csi-controller-0_kube-system_csi-

VMware, Inc. 66

Page 67: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

attacher-37dbb7c510a8e441dd4c3de567336d36b45d1eff7e4a52ebe3b56745dab59ff1.log -> /var/log/pods/kube-

system_vsphere-csi-controller-0_5a203037-af39-11e9-b26e-005056a04307/csi-attacher/0.log

lrwxrwxrwx 1 root root 109 Jul 25 17:07 vsphere-csi-controller-0_kube-system_csi-

provisioner-3355757fa31283cd01cbe85ab3d4780f7c5a80ef0f5712374eff0991e0d9d1ad.log -> /var/log/pods/

kube-system_vsphere-csi-controller-0_5a203037-af39-11e9-b26e-005056a04307/csi-provisioner/0.log

lrwxrwxrwx 1 root root 108 Jul 25 17:07 vsphere-csi-controller-0_kube-system_liveness-

probe-0ea1802644a959a46f0d871f3d03b2c2422678a2f2ac551bcf352094eec8ad26.log -> /var/log/pods/kube-

system_vsphere-csi-controller-0_5a203037-af39-11e9-b26e-005056a04307/liveness-probe/0.log

lrwxrwxrwx 1 root root 116 Jul 25 17:07 vsphere-csi-controller-0_kube-system_vsphere-csi-

controller-d82966b97372338818b657892918d061f964cdc8c7898f84d8737367e19c670e.log -> /var/log/pods/kube-

system_vsphere-csi-controller-0_5a203037-af39-11e9-b26e-005056a04307/vsphere-csi-controller/0.log

lrwxrwxrwx 1 root root 108 Jul 25 17:07 vsphere-csi-controller-0_kube-system_vsphere-syncer-

fb45ae5d4e0ca7ce595ff767ef449d1c087b920031e48863431e1671071fe079.log -> /var/log/pods/kube-

system_vsphere-csi-controller-0_5a203037-af39-11e9-b26e-005056a04307/vsphere-syncer/0.log

Para comprobar los registros en vCenter Server, busque aquellos que tienen el prefijo cns en lassiguientes ubicaciones:

n Para comprobar los registros relacionados con el flujo de trabajo de aprovisionamiento, use elarchivo /var/log/vmware/vsan-health/vsanvcmgmtd.log en vCenter Server.

n Para comprobar los registros relacionados con los problemas de autenticación y permisos, use elarchivo /var/log/vmware/vsan-health/vmware-vsan-health-service.log en vCenter Server.

Modificar el nivel de registroPara poder examinar problemas relacionados con el entorno de CNS, aumente el nivel de registro parael controlador CSI de vSphere y en el lado de vCenter Server.

Procedimiento

1 Para examinar los problemas relacionados con el controlador CSI de vSphere, aumente el nivel deregistro para los contenedores csi-attacher, vsphere-csi-controller, liveness-probe,vsphere-syncer y csi-provisioner.

a Abra el archivo YAML utilizado para la implementación del controlador CSI de vSphere y busquela opción --v en los argumentos del contenedor.

b Aumente el valor de esta opción a 4.

c Ejecute el comando kubectl apply para volver a cargar los pods con la nueva configuración.

$ kubectl apply -f csi-driver-deploy.yaml

statefulset.apps/vsphere-csi-controller configured

csidriver.storage.k8s.io/block.vsphere.csi.vmware.com unchanged

daemonset.apps/vsphere-csi-node configured

2 En vCenter Server, cambie el nivel de registro predeterminado a verbose.

a SSH a vCenter Server.

b Abra /usr/lib/vmware-vpx/vsan-health/VsanVcMgmtConfig.xml.

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 67

Page 68: Introducción al almacenamiento nativo en la nube de VMware ...Almacenamiento nativo en la nube es una solución que proporciona una administración de datos integral de las aplicaciones

c Quite el comentario de nivel de registro predeterminado y utilice el modo detallado.

<!-- default log level -->

<!-- <level>verbose</level> -->

d Reinicie el servicio de vsan-health.

vmon-cli --restart vsan-health

Introducción al almacenamiento nativo en la nube de VMware

VMware, Inc. 68