En este tema se explica cómo crear, actualizar y eliminar grupos de nodos en un clúster de carga de trabajo. Los grupos de nodos permiten que un único clúster de carga de trabajo contenga y administre distintos tipos de nodos para satisfacer las diversas necesidades de diferentes aplicaciones.
Por ejemplo, un clúster puede utilizar nodos con alta capacidad de almacenamiento para ejecutar un almacén de datos y nodos de nodos para procesar solicitudes de aplicaciones.
NotaNo puede crear grupos de nodos en clústeres de nodo único.
Para crear y utilizar grupos de nodos en clústeres de carga de trabajo creados por vSphere with Tanzu, debe estar ejecutando vSphere v7.0 U3 o una versión posterior.
Si utiliza vSphere with Tanzu, los clústeres de vSphere with Tanzu deben utilizar la APIv1alpha2
para ejecutar correctamente los comandosnode-pool
. Para obtener más información, consulte la documentación de vSphere with Tanzu.
Los grupos de nodos definen propiedades para los conjuntos de nodos de trabajo que utiliza un clúster de carga de trabajo.
Algunas propiedades del grupo de nodos dependen de las opciones de máquina virtual que están disponibles en la infraestructura subyacente, pero todos los grupos de nodos en todas las infraestructuras de nube comparten las siguientes propiedades:
name
: un identificador único para el grupo de nodos, que se utiliza para operaciones como actualizaciones y eliminación.replicas
: el número de nodos del grupo, todos los cuales comparten las mismas propiedades.labels
: los pares de clave/valor se establecen como metadatos en los nodos para que las cargas de trabajo coincidan con los nodos del grupo. Para obtener más información y etiquetas de ejemplo, consulte Etiquetas y selectores en la documentación de Kubernetes.Para los clústeres de carga de trabajo en vSphere, los clústeres de administración independientes siguen de forma predeterminada las reglas de antiafinidad para implementar nodos de plano de control y de trabajo de grupo de nodos en diferentes hosts ESXi. Para desactivar las reglas de antiafinidad para la colocación de nodos, consulte Desactivar reglas de antiafinidad.
Todos los clústeres de carga de trabajo se crean con un primer grupo de nodos original. Cuando se crean grupos de nodos adicionales para un clúster, como se describe a continuación, el primer grupo de nodos proporciona valores predeterminados para las propiedades no establecidas en las nuevas definiciones de grupos de nodos.
Para inspeccionar los grupos de nodos disponibles actualmente en un clúster, ejecute:
tanzu cluster node-pool list CLUSTER-NAME
El comando devuelve una lista de todos los grupos de nodos del clúster y el estado de las réplicas de cada grupo de nodos.
Para crear un grupo de nodos en un clúster:
Cree un archivo de configuración para el grupo de nodos. Consulte Configuración de ejemplo para un archivo de configuración de ejemplo.
Para obtener una lista completa de las propiedades de configuración, consulte Propiedades de configuración.
Cree el grupo de nodos definido por el archivo de configuración:
tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
Opciones:
--namespace
especifica el espacio de nombres del clúster. El valor predeterminado es default
--base-machine-deployment
especifica el objecto base MachineDeployment
a partir del cual crear el nuevo grupo de nodos.
MachineDeployment
como aparece en el resultado del clúster de tanzu cluster get
en Details
.MachineDeployment
objetos, representados internamente como workerMDs[0]
.A continuación, se proporciona un ejemplo de configuración para la infraestructura subyacente.
name
,
replicas
y
labels
, los archivos de configuración de los grupos de nodos en vSphere pueden incluir un bloque de
vsphere
para definir propiedades opcionales específicas con el fin de configurar máquinas virtuales en vSphere.
Ejemplo de definición de grupo de nodos para vSphere clúster:
name: tkg-wc-oidc-md-1
replicas: 4
labels:
key1: value1
key2: value2
vsphere:
memoryMiB: 8192
diskGiB: 64
numCPUs: 4
datacenter: dc0
datastore: iscsi-ds-0
storagePolicyName: name
folder: vmFolder
resourcePool: rp-1
vcIP: 10.0.0.1
template: templateName
cloneMode: clone-mode
network: network-name
Los valores que no se establecen en el bloque vsphere
se heredan de los valores del primer grupo de nodos del clúster.
Para el valor vcIP
, los grupos de nodos del clúster de carga de trabajo deben ejecutarse en la misma instancia de vCenter que el plano de control del clúster.
Para los clústeres implementados por un supervisor vSphere with Tanzu, defina storageClass
, tkr
y vmClass
. Para obtener más información sobre las propiedades, consulte TanzuKubernetesCluster v1alpha3 API – Annotated en la documentación de vSphere with Tanzu.
De forma predeterminada, los clústeres de carga de trabajo en vSphere se implementan siguiendo reglas de antiafinidad que distribuyen los nodos de plano de control y los nodos de trabajo dentro de cada grupo de nodos en varios hosts ESXi. Para desactivar o reactivar las reglas de antiafinidad, consulte Activar reglas de antiafinidad (vSphere) a continuación.
name
,
replicas
y
labels
, los archivos de configuración de los grupos de nodos en AWS admiten las siguientes propiedades opcionales:
az
: Zona de disponibilidadnodeMachineType
: Tipo de instanciaEs posible que se omita esta configuración, en cuyo caso sus valores heredan del primer grupo de nodos del clúster.
Ejemplo de definición de grupo de nodos para un clúster de AWS:
name: tkg-aws-wc-np-1
replicas: 2
az: us-west-2b
nodeMachineType: t3.large
labels:
key1: value1
key2: value2
NotaLos grupos de nodos del clúster de carga de trabajo en AWS deben estar en la misma zona de disponibilidad que el clúster de administración independiente.
name
,
replicas
y
labels
anteriormente, los archivos de configuración de los grupos de nodos en Microsoft Azure admiten las siguientes propiedades opcionales:
az
: Zona de disponibilidadnodeMachineType
: Tipo de instanciaSi se omite la configuración, sus valores heredan del primer grupo de nodos del clúster.
Ejemplo de definición de grupo de nodos para el clúster de Azure:
name: tkg-azure-wc-np-1
replicas: 2
az: 2
nodeMachineType: Standard_D2s_v3
labels:
key1: value1
key2: value2
En la siguiente tabla se enumeran todas las propiedades que puede definir en un archivo de configuración de grupo de nodos para clústeres de carga de trabajo.
NotaNo puede agregar o cambiar de otro modo las propiedades de vSphere o
labels
,az
,nodeMachineType
de un grupo de nodos existente. Para cambiar estas propiedades, debe crear un nuevo grupo de nodos en el clúster con las propiedades deseadas, migre las cargas de trabajo al nuevo grupo de nodos y elimine el original.
Nombre | Tipo | Objeto de clúster | Proveedor | Notas |
---|---|---|---|---|
name |
cadena | Cualquiera | Todo | Nombre del grupo de nodos que se va a crear o actualizar. |
replicas |
entero | Cualquiera | Todo | Número de nodos en el grupo de nodos. |
az |
cadena | Cualquiera | TKG en AWS o Azure | AZ para colocar los nodos dentro. |
nodeMachineType |
cadena | Cualquiera | TKG en AWS o Azure | instanceType o vmSize para el nodo en AWS y Azure, respectivamente. |
labels |
map[string]string | Cualquiera | Todo | Etiquetas que se establecerán en el nodo mediante kubeletExtraArgs (‐‐node-labels ). |
vmClass |
cadena | Cualquiera | Todo | Nombre de un vmClass de Kubernetes. Coincide con el vmClass definido en el clúster de TKC. Esta clase establece la CPU y la memoria disponibles para el nodo. Para ver una lista de las clases de máquinas virtuales disponibles, ejecute kubectl describe virtualmachineclasses . |
storageClass |
cadena | Cualquiera | Todo | Nombre de un kubernetes StorageClass que se utilizará para el grupo de nodos. Esta clase se aplica a los discos que almacenan los sistemas de archivos raíz de los nodos. Para ver una lista de las clases de almacenamiento disponibles, ejecute kubectl describe storageclasses . |
volumes :
|
[]objeto | Cualquiera | Todo | Volúmenes que se utilizarán para los nodos. |
tkr :
|
objeto | Basado en TKC | Todo | Nombre del TKR que se utilizará para el grupo de nodos. Por ejemplo, v1.27.5---vmware.2-tkg.2 . |
tkrResolver |
cadena | Basado en clases | Todo | Obligatorio para clústeres basados en clases. Valor de la anotación run.tanzu.vmware.com/resolve-os-image del recurso Cluster . |
nodeDrainTimeout |
metav1. Duración | Cualquiera | Todo | Tiempo de espera de purga de nodo. |
vsphere |
objeto | Cualquiera | Todo | Consulte [Propiedades de configuración (solo vSphere)](#vsphere-properties). |
workerClass |
cadena | Basado en clases | Todo | Obligatorio para clústeres basados en clases. workerClass del ClusterClass del clúster que quiere que use el grupo de nodos. |
Para obtener información sobre las variables de configuración VSPHERE_*
, consulte vSphere en Referencia de variables de archivo de configuración.
Nombre | Tipo | Tipo de clúster de administración | Notas |
---|---|---|---|
cloneMode |
cadena | Independiente | Igual que VSPHERE_CLONE_MODE . |
datacenter |
cadena | Independiente | Igual que VSPHERE_DATACENTER . |
datastore |
cadena | Independiente | Igual que VSPHERE_DATASTORE . |
storagePolicyName |
cadena | Independiente | Igual que VSPHERE_STORAGE_POLICY_NAME . |
taints |
[]corev1. Mancha | Supervisor | Manchas que se aplicarán al nodo. |
folder |
cadena | Independiente | Igual que VSPHERE_FOLDER . |
network |
cadena | Independiente | Igual que VSPHERE_NETWORK . |
nameservers |
[]cadena | Independiente | Igual que VSPHERE_WORKER_NAMESERVERS . |
tkgIPFamily |
cadena | Independiente | Igual que TKG_IP_FAMILY . |
resourcePool |
cadena | Independiente | Igual que VSPHERE_RESOURCE_POOL . |
vcIP |
cadena | Independiente | Igual que VSPHERE_SERVER . |
template |
cadena | Independiente | Igual que VSPHERE_TEMPLATE . |
memoryMiB |
entero | Independiente | Igual que VSPHERE_WORKER_MEM_MIB . |
diskGiB |
entero | Independiente | Igual que VSPHERE_WORKER_DISK_GIB . |
numCPUs |
entero | Independiente | Igual que VSPHERE_WORKER_NUM_CPUS . |
Para asignar una carga de trabajo a un grupo de nodos:
nodeSelector
en el valor de labels
que definió en el archivo de configuración del grupo de nodos. Para obtener información sobre los recursos de carga de trabajo de Kubernetes, consulte Carga de trabajo en la documentación de Kubernetes.kubectl apply -f
.Para reasignar una carga de trabajo a un grupo de nodos diferente:
nodeSelector
al nuevo valor.kubectl apply -f
.Si solo necesita cambiar el número de nodos en un grupo de nodos, utilice el comando de la CLI de Tanzu en Escalar nodos solo. Si desea agregar etiquetas, siga el procedimiento descrito en Agregar etiquetas y escalar nodos.
PrecauciónCon estos procedimientos, no cambie las etiquetas existentes, la zona de disponibilidad, el tipo de instancia de nodo (en AWS o Azure) ni las propiedades de máquina virtual (en vSphere) del grupo de nodos. Esto puede tener efectos negativos graves en las cargas de trabajo en ejecución. Para cambiar estas propiedades, cree un nuevo grupo de nodos con estas propiedades y reasigne las cargas de trabajo al nuevo grupo de nodos antes de eliminar el original. Para obtener instrucciones, consulte la sección anterior Asignar cargas de trabajo a un grupo de nodos.
Para cambiar el número de nodos en un grupo de nodos, ejecute:
tanzu cluster scale CLUSTER-NAME -p NODE-POOL-NAME -w NODE-COUNT
Donde:
CLUSTER-NAME
es el nombre del clúster de carga de trabajo.NODE-POOL-NAME
es el nombre del grupo de nodos.NODE-COUNT
es el número de nodos, como un número entero, que pertenecen a este grupo de nodos.Puede agregar etiquetas a un grupo de nodos y escalar sus nodos al mismo tiempo a través del archivo de configuración del grupo de nodos.
Abra el archivo de configuración del grupo de nodos que desea actualizar.
Si va a aumentar o reducir el número de nodos en este grupo de nodos, actualice el número después de replicas
.
Si va a agregar etiquetas, aplíquelas a continuación de labels
. Por ejemplo:
labels:
key1: value1
key2: value2
Guarde el archivo de configuración del grupo de nodos.
En un terminal, ejecute:
tanzu cluster node-pool set CLUSTER-NAME -f /PATH/TO/CONFIG-FILE
Si CLUSTER-NAME
en el comando y name
en el archivo de configuración coinciden con un grupo de nodos del clúster, este comando actualiza el grupo de nodos existente en lugar de crear uno nuevo.
Para eliminar un grupo de nodos, ejecute:
tanzu cluster node-pool delete CLUSTER-NAME -n NODE-POOL-NAME
Donde CLUSTER-NAME
es el nombre del clúster de carga de trabajo y NODE-POOL-NAME
es el nombre de grupo del nodo.
De forma opcional, utilice --namespace
para especificar el espacio de nombres del clúster. El valor predeterminado es default
.
PrecauciónReasigne las cargas de trabajo de estos nodos a otros grupos de nodos antes de realizar esta operación.
tanzu cluster node-pool delete
no migra las cargas de trabajo fuera de los nodos antes de eliminarlas. Para obtener instrucciones, consulte la sección anterior Asignar cargas de trabajo a un grupo de nodos.
De forma predeterminada, los clústeres de carga de trabajo en vSphere se implementan siguiendo reglas de antiafinidad que distribuyen los nodos de plano de control y los nodos de trabajo dentro de cada grupo de nodos en varios hosts ESXi. Realice lo siguiente para desactivar o reactivar las reglas de antiafinidad durante la creación del clúster:
Establezca el contexto kubectl
en el clúster de administración:
kubectl config use-context MGMT-CLUSTER-NAME-admin@MGMT-CLUSTER-NAME
Donde MGMT-CLUSTER-NAME
es el nombre del clúster.
Ejecute kubectl get deployment
en el controlador CAPV para recopilar los valores de args
para su contenedor manager
, por ejemplo:
kubectl get deployment -n capv-system capv-controller-manager -o=json | jq '.spec.template.spec.containers[] | select(.name=="manager") | .args'
[
"--leader-elect",
"--logtostderr",
"--v=4",
"--feature-gates=NodeAntiAffinity=true,NodeLabeling=true"
]
Con los resultados copiados del paso anterior, cambie los valores de --feature-gates
y pase la lista de argumentos a un comando kubectl patch
que revise sus valores en el objeto. Por ejemplo, para establecer las puertas de función NodeAntiAffinity
y NodeLabeling
en false
, lo que desactiva las reglas de antiafinidad del nodo:
kubectl patch deployment -n capv-system capv-controller-manager --type=json -p '[{"op":"replace", "path":"/spec/template/spec/containers/0/args", "value": [
"--leader-elect",
"--logtostderr",
"--v=4",
"--feature-gates=NodeAntiAffinity=false,NodeLabeling=false"
]}]'