Después de crear un clúster con bmctl
, puedes cambiar algunos aspectos de la configuración del clúster mediante la siguiente secuencia de acciones:
Cambia los valores de ciertos campos en el archivo de configuración del clúster, que se encuentra de forma predeterminada aquí:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
.Actualiza el clúster mediante la ejecución del comando
bmctl update
.
De esta manera, por ejemplo, puedes agregar o quitar nodos en un clúster o reemplazar nodos en un clúster. En este documento, se describe cómo realizar estas y otras actualizaciones en un clúster.
Sin embargo, es importante tener en cuenta que muchos aspectos de la configuración de tu clúster son inmutables y no se pueden actualizar después de crearlo. Para obtener una lista completa de los campos inmutables y mutables, consulta la referencia de campos de configuración del clúster. La referencia del campo es una tabla ordenable. Haz clic en los encabezados de las columnas para cambiar el orden de clasificación. Haz clic en el nombre de un campo para ver su descripción.
Agrega o quita nodos en un clúster
Un grupo de nodos es un grupo de nodos dentro de un clúster que tienen la misma configuración. Ten en cuenta que un nodo siempre pertenece a un grupo de nodos. Para agregar un nodo nuevo a un clúster, debes agregarlo a un grupo de nodos en particular. Quitar un nodo de un grupo de nodos equivale a quitarlo del clúster por completo.
Existen tres tipos de grupos de nodos en GDCV para Bare Metal: plano de control, balanceador de cargas y grupos de nodo trabajador.
Para agregar o quitar un nodo de un grupo de nodos, agrega o quita la dirección IP del nodo en una sección específica del archivo de configuración del clúster. En la siguiente lista, se muestra qué sección editar para un grupo de nodos determinado:
- Grupo de nodos trabajadores: agrega o quita la dirección IP del nodo en la sección
spec.nodes
de la especificaciónNodePool
. - Grupo de nodos del plano de control: Agrega o quita la dirección IP del nodo en la sección
spec.controlPlane.nodePoolSpec.nodes
de la especificaciónCluster
. - Grupo de nodos del balanceador de cargas: Agrega o quita la dirección IP del nodo en la sección
spec.loadBalancer.nodePoolSpec.nodes
de la especificaciónCluster
.
Ejemplo: cómo quitar un nodo trabajador
Este es un archivo de configuración de clúster de muestra que muestra las especificaciones de dos nodos trabajadores:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: nodepool1
namespace: cluster-cluster1
spec:
clusterName: cluster1
nodes:
- address: 172.18.0.5
- address: 172.18.0.6
Para quitar un nodo, haz lo siguiente:
Si el nodo que quieres quitar está ejecutando Pods críticos, primero debes poner el nodo en el modo de mantenimiento (opcional).
Puedes supervisar el proceso de vaciado de nodos para los nodos trabajadores si consultas los campos
status.nodesDrained
ystatus.nodesDraining
en el recursoNodePool
.Edita el archivo de configuración del clúster para borrar la entrada de la dirección IP del nodo.
Actualiza el clúster:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=ADMIN_KUBECONFIG
Reemplaza lo siguiente:
CLUSTER_NAME
: Es el nombre del clúster que deseas actualizar.ADMIN_KUBECONFIG
: Es la ruta de acceso al archivo kubeconfig del clúster de administrador.
Una vez que el comando
bmctl update
se haya ejecutado de forma correcta, lleva un tiempo completar los trabajosmachine-preflight
ymachine-init
. Puedes ver el estado de los nodos y sus respectivos grupos de nodos si ejecutas los comandos descritos en la sección Verifica tus actualizaciones de este documento.
Cómo forzar la eliminación de un nodo
Si el comando bmctl update
no puede quitar un nodo, es posible que debas forzar su eliminación del clúster. Para obtener más información, consulta Cómo quitar nodos rotos de manera forzosa.
Reemplaza los nodos del plano de control de alta disponibilidad
Puedes reemplazar los nodos del plano de control de alta disponibilidad (HA) en clústeres de administrador, de usuario, híbridos y independientes.
Para reemplazar un nodo en un clúster, realiza los siguientes pasos:
- Quita la dirección IP del nodo del archivo de configuración del clúster.
- Actualiza el clúster.
- Verifica el estado de los nodos del clúster.
- Agrega la dirección IP de un nodo nuevo al mismo archivo de configuración del clúster.
- Actualiza el clúster.
En el resto de esta sección, se analiza un ejemplo.
Este es un archivo de configuración de clúster de muestra que muestra tres nodos del plano de control en un clúster de usuario:
---
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: user-cluster
namespace: cluster-user-cluster
spec:
controlPlane:
nodePoolSpec:
nodes:
- address: 10.200.0.11
- address: 10.200.0.12
- address: 10.200.0.13
Para reemplazar el último nodo de la lista en la sección spec.controlPlane.nodePoolSpec.nodes
, sigue estos pasos:
Para quitar el nodo, borra su entrada de dirección IP en el archivo de configuración del clúster. Después de realizar el cambio, el archivo de configuración del clúster debería ser similar al siguiente:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12
Actualiza el clúster mediante la ejecución del siguiente comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Realiza los siguientes cambios:
- Reemplaza CLUSTER_NAME por el nombre del clúster que deseas actualizar.
- Si el clúster es de autoadministración (como un clúster de administrador o independiente), reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster. Si el clúster es un clúster de usuario, como se muestra en este ejemplo, reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster admin.
Una vez que el comando
bmctl update
se haya ejecutado de forma correcta, los trabajosmachine-preflight
ymachine-init
tardan un poco en completarse. Puedes ver el estado de los nodos y sus respectivos grupos de nodos si ejecutas los comandos que se describen en la sección Verifica tus actualizaciones de este documento. Una vez que el grupo de nodos y los nodos estén listos, puedes continuar con el siguiente paso.Para agregar un nodo de plano de control nuevo al grupo de nodos, agrega la dirección IP del nodo de plano de control nuevo a la sección
spec.controlPlane.nodePoolSpec.nodes
del archivo de configuración del clúster. Después de realizar el cambio, el archivo de configuración del clúster debería ser similar al siguiente:--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 10.200.0.11 - address: 10.200.0.12 - address: 10.200.0.14
Actualiza el clúster mediante la ejecución del siguiente comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Realiza los siguientes cambios:
- Reemplaza CLUSTER_NAME por el nombre del clúster que deseas actualizar.
- Si el clúster es de autoadministración (como un clúster de administrador o independiente), reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster. Si el clúster es un clúster de usuario, como se muestra en este ejemplo, reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster admin.
Verifica tus actualizaciones
Puedes ver el estado de los nodos y sus respectivos grupos de nodos con el comando kubectl get
.
Por ejemplo, el siguiente comando muestra el estado de los grupos de nodos en el espacio de nombres del clúster cluster-my-cluster
:
kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io
El sistema muestra resultados similares al siguiente:
NAME READY RECONCILING STALLED UNDERMAINTENANCE UNKNOWN
cluster-my-cluster 3 0 0 0 0
cluster-my-cluster-lb 2 0 0 0 0
np1 3 0 0 0 0
Reconciling=1
significa que el paso de conciliación aún está en curso. Debes esperar hasta que el estado cambie a Reconciling=0
.
También puedes ejecutar el siguiente comando para verificar el estado de los nodos de un clúster:
kubectl get nodes --kubeconfig=KUBECONFIG
Si necesitas más información sobre cómo diagnosticar los clústeres, consulta Crea instantáneas para diagnosticar clústeres.
Funciones que puedes cambiar con una actualización
Además de agregar, quitar o reemplazar nodos, puedes usar el comando bmctl update
para modificar ciertos valores de campos mutables, recursos personalizados (CR) y anotaciones en el archivo de configuración del clúster.
Para actualizar un recurso de clúster, edita el archivo de configuración del clúster y usa bmctl update
para aplicar los cambios.
En las siguientes secciones, se describen algunos ejemplos comunes para actualizar un clúster existente cuando se cambia un valor de campo, una CR o una anotación.
loadBalancer.addressPools
La sección addressPools
contiene campos a fin de especificar grupos de balanceo de cargas para balanceadores de cargas en paquetes. Puedes agregar más grupos de direcciones de balanceo de cargas en cualquier momento, pero no puedes quitar ni modificar ningún grupo de direcciones existente.
addressPools:
- name: pool1
addresses:
- 192.168.1.0-192.168.1.4
- 192.168.1.240/28
- name: pool2
addresses:
- 192.168.1.224/28
Evita la eliminación involuntaria de clústeres
Si agregas la anotación baremetal.cluster.gke.io/prevent-deletion: "true"
al archivo de configuración de tu clúster, no podrás borrarlo.
Por ejemplo, ejecutar kubectl delete cluster
o bmctl reset cluster
produce un error.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: ci-10c3c6f4d9c698e
namespace: cluster-ci-10c3c6f4d9c698e
annotations:
baremetal.cluster.gke.io/prevent-deletion: "true"
spec:
clusterNetwork:
bypassPreflightCheck
El valor predeterminado del campo bypassPreflightCheck
es false
. Si estableces este campo en true
en el archivo de configuración del clúster, se ignoran las comprobaciones preliminares internas si aplicas recursos a los clústeres existentes.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
bypassPreflightCheck: true
loginUser
Puedes establecer el campo loginUser
en la configuración de acceso al nodo. Este campo admite la capacidad sudo
sin contraseña para el acceso a la máquina.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
baremetal.cluster.gke.io/private-mode: "true"
spec:
nodeAccess:
loginUser: abm
NetworkGatewayGroup
El recurso personalizado NetworkGatewayGroup
se usa para proporcionar direcciones IP flotantes para funciones avanzadas de redes, como la puerta de enlace NAT de salida o el balanceo de cargas en paquetes con BGP.
Para usar el recurso personalizado NetworkGatewayGroup
y las funciones de red relacionadas, debes configurar clusterNetwork.advancedNetworking
como true
cuando crees los clústeres.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
BGPLoadBalancer
Cuando configuras balanceadores de cargas en paquetes con BGP, el balanceo de cargas del plano de datos usa de forma predeterminada los mismos pares externos que se especificaron para el intercambio de tráfico del plano de control. Como alternativa, puedes configurar el balanceo de cargas del plano de datos por separado mediante el recurso personalizado BGPLoadBalancer
(y el recurso personalizado BGPPeer
). Para obtener más información, consulta Configura balanceadores de cargas en paquetes con BGP.
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
Cuando configuras balanceadores de cargas en paquetes con BGP, el balanceo de cargas del plano de datos usa de forma predeterminada los mismos pares externos que se especificaron para el intercambio de tráfico del plano de control. Como alternativa, puedes configurar el balanceo de cargas del plano de datos por separado mediante el recurso personalizado BGPPeer
(y el recurso personalizado BGPLoadBalancer
). Para obtener más información, consulta Configura balanceadores de cargas en paquetes con BGP.
apiVersion: networking.gke.io/v1
kind: BGPPeer
metadata:
name: bgppeer1
namespace: cluster-bm
labels:
cluster.baremetal.gke.io/default-peer: "true"
spec:
localASN: 65001
peerASN: 65002
peerIP: 10.0.3.254
sessions: 2
NetworkAttachmentDefinition
Puedes usar el comando bmctl update
para modificar los recursos personalizados NetworkAttachmentDefinition
que corresponden a la red.
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: gke-network-1
namespace: cluster-my-cluster
spec:
config: '{
"type": "ipvlan",
"master": "enp2342",
"mode": "l2",
"ipam": {
"type": "whereabouts",
"range": "172.120.0.0/24"
Aumentar el alcance de la red de servicio
Para crear más servicios que el límite inicial, puedes reducir la máscara CIDR del servicio IPv4 a fin de aumentar la red de servicio del clúster. Reducir la máscara (el valor después de “/”) genera un rango de red más amplio.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
...
clusterNetwork:
services:
cidrBlocks:
- 172.26.0.0/14
...
Solo puedes aumentar el rango del CIDR del servicio IPv4. No se puede reducir el rango de red, lo que significa que no se puede aumentar la máscara (el valor después de “/”).
Establece la configuración de extracción de imágenes de kubelet
El kubelet se ejecuta en cada nodo de tu clúster. kubelet es responsable de supervisar los contenedores en un nodo y asegurarse de que estén en buen estado. Cuando es necesario, kubelet consulta y extrae imágenes de Container Registry.
Actualizar la configuración de kubelet manualmente y mantenerla sincronizada en todos los nodos del clúster puede ser un desafío. Para empeorar la situación, los cambios manuales de configuración de kubelet en los nodos se pierden cuando actualizas el clúster.
Para facilitar y hacer que las actualizaciones sincronizadas sean más fáciles y persistentes, GKE en Bare Metal te permite especificar algunas opciones de configuración de kubelet para cada grupo de nodos del clúster: nodos del plano de control, nodos del balanceador de cargas y nodos trabajadores. La configuración se aplica a todos los nodos de un grupo determinado y se mantiene durante las actualizaciones del clúster. Los campos de esta configuración son mutables, por lo que puedes actualizarlos en cualquier momento, no solo durante la creación del clúster.
Los siguientes campos admitidos controlan las operaciones de extracción de Container Registry para kubelet:
registryBurst
(predeterminado: 10)registryPullQPS
(predeterminado: 5)serializeImagePulls
(predeterminado: verdadero)
Para obtener más información sobre cada uno de los campos de configuración de kubelet, consulta la Referencia del campo de configuración del clúster.
Puedes especificar estos campos en las secciones kubeletConfig
de la especificación del clúster y de
NodePool para los siguientes grupos de nodos:
- Especificación de clúster:
- Nodos de plano de control
spec.controlPlane.nodePoolSpec.kubeletConfig
- Nodos del balanceador de cargas
spec.loadBalancer.nodePoolSpec.kubeletConfig
- Nodos de plano de control
- Especificación del grupo de nodos:
- Nodos trabajadores
spec.kubeletConfig
- Nodos trabajadores
En el siguiente ejemplo, se muestran los campos agregados con sus valores predeterminados en el archivo de configuración del clúster. Ten en cuenta que la anotación preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
es obligatoria.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
annotations:
preview.baremetal.cluster.gke.io/custom-kubelet: "enable"
spec:
...
controlPlane:
nodePoolSpec:
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
...
loadBalancer:
nodePoolSpec:
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
...
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
name: node-pool-new
namespace: cluster-cluster1
spec:
clusterName: cluster1
...
kubeletConfig:
registryBurst: 10
registryPullQPS: 5
serializeImagePulls: true
En cada caso, la configuración se aplica a todos los nodos del grupo.
Cómo usarla
Estas son algunas consideraciones para ajustar las extracciones de imágenes:
Debido a que las imágenes se extraen en serie de forma predeterminada, una extracción de imagen que toma mucho tiempo puede retrasar todas las demás extracciones de imágenes programadas en un nodo. Las extracciones de imágenes retrasadas pueden bloquear el proceso de actualización (en especial cuando las imágenes nuevas de GKE en Bare Metal deben implementarse en un nodo). Si te afectan las demoras de extracción de imágenes, puedes establecer
serializeImagePulls
enfalse
para permitir las extracciones de imágenes paralelas.Si encuentras errores de limitación de extracción de imágenes, como
pull QPS exceeded
, te recomendamos que aumentesregistryPullQPS
yregistryBurst
para aumentar la capacidad de procesamiento de extracción de imágenes. Estos dos campos ajustan la tasa de extracción y el tamaño de la cola, y pueden ayudarte a abordar otros problemas relacionados con la limitación. No se permiten valores negativos.
Usa bmctl update
para aplicar los cambios.
Después de modificar el archivo de configuración, actualiza el clúster mediante la ejecución del siguiente comando bmctl update
:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
Realiza los siguientes cambios:
- Reemplaza CLUSTER_NAME por el nombre del clúster que deseas actualizar.
- Si el clúster es de autoadministración (como un clúster de administrador o independiente), reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster. Si el clúster es un clúster de usuario, reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster admin.