View
4
Download
0
Category
Preview:
Citation preview
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
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:
docfeedback@vmware.com
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
$ # 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
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
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
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
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
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
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
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
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
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
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
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
- "/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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
$ 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
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
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
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
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