Después de crear un clúster, puedes cambiar algunos aspectos de su configuración. Por ejemplo, puedes hacer lo siguiente:
- Agregar, quitar o reemplazar nodos.
- Agregar anotaciones al clúster o quitarlas.
- Modificar los valores de los campos mutables en los recursos del clúster y del grupo de nodos.
- Modificar otros recursos personalizados.
Puedes usar bmctl
o Google Cloud CLI para realizar actualizaciones en un clúster. Si creaste un clúster de administrador o de usuario mediante Terraform, puedes usar Terraform para actualizar el clúster. Ten en cuenta lo siguiente:
Muchos aspectos de la configuración del clúster son inmutables y no se pueden actualizar después de crear el clúster. Para obtener una lista completa de los campos inmutables y mutables, consulta la referencia del campo 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.
gcloud CLI y Terraform solo admiten la actualización de clústeres de administrador y de usuario. Debes usar
bmctl
para actualizar otros tipos de clústeres.gcloud CLI y Terraform solo admiten cambios en los recursos del clúster y del grupo de nodos. Debes usar
kubectl
obmctl
para actualizar otros recursos personalizados que afecten el clúster.
Cómo actualizar clústeres
Por lo general, realizas la siguiente secuencia de acciones para actualizar un clúster:
bmctl
Cambia los valores de los campos aplicables 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
:bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
Reemplaza lo siguiente:
CLUSTER_NAME
: Es el nombre del clúster que deseas actualizar.KUBECONFIG
: para los clústeres de administrador, híbridos o independientes, ingresa la ruta de acceso al archivo kubeconfig del clúster. Para un clúster de usuario, ingresa la ruta de acceso al archivo kubeconfig del clúster de administrador.
CLI de gcloud
Especifica solo las marcas de la configuración que deseas modificar.
Ejecuta el comando de actualización aplicable:
Clústeres de administrador:
gcloud container bare-metal admin-clusters update
Clústeres de usuarios:
gcloud container bare-metal clusters update
.Grupos de nodos en un clúster de usuario:
gcloud container bare-metal node-pools update
Terraform
Cambia los valores de los campos aplicables en el archivo de configuración de Terraform que usaste para crear el clúster o grupo de nodos. Consulta la documentación de referencia de Terraform para obtener descripciones de campos detalladas:
Actualiza la configuración mediante la ejecución del comando
terraform apply
.
En las siguientes secciones, se describen algunos ejemplos comunes para actualizar un clúster existente.
Agrega o quita nodos en un clúster
Un grupo de nodos es un conjunto 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 Google Distributed Cloud: plano de control, balanceador de cargas y grupos de nodos trabajadores. En las siguientes secciones, se describe cómo agregar o quitar nodos de cada tipo de grupo de nodos.
bmctl
Puedes agregar o quitar un nodo de un grupo de nodos si agregas o quitas 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: quitar un nodo trabajador
Este es un archivo de configuración de clúster de muestra que presenta 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: 192.0.2.1
- address: 192.0.2.2
Para quitar un nodo, haz lo siguiente:
(Opcional) Si el nodo que quitas ejecuta Pods fundamentales, primero coloca el nodo en modo de mantenimiento.
Puedes supervisar el proceso de vaciado de nodos para nodos trabajadores si ves 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 cluster1 \ --kubeconfig=ADMIN_KUBECONFIG
CLI de gcloud
Usa un comando de update
para agregar o quitar nodos. El comando de update
que uses y la marca en la que especifiques la dirección IP dependen del tipo de grupo de nodos que quieras actualizar:
Grupo de nodos trabajadores: Ejecuta
gcloud container bare-metal node-pools update
y especifica la dirección IP en la marca--node-configs 'node-ip=IP_ADDRESS'
.Grupo de nodos del plano de control en un clúster de administrador: Ejecuta
gcloud container bare-metal admin-clusters update
y especifica la dirección IP en la marca--control-plane-node-configs 'node-ip=IP_ADDRESS'
.Grupo de nodos del plano de control en un clúster de usuario: Ejecuta
gcloud container bare-metal clusters update
y especifica la dirección IP en la marca--control-plane-node-configs 'node-ip=IP_ADDRESS'
.Grupo de nodos del balanceador de cargas: Ejecuta
gcloud container bare-metal clusters update
y especifica la dirección IP en la marca--metal-lb-load-balancer-node-configs 'node-ip=IP_ADDRESS'
o
--bgp-load-balancer-node-configs 'node-ip=IP_ADDRESS'
La marca en la que especificas la dirección IP solo acepta un node-ip
. Incluyes la marca para cada dirección IP en el grupo de nodos.
Los comandos update
reemplazan todas las direcciones IP por las direcciones IP que especifiques. Para agregar un nodo, incluye las direcciones IP de los nodos existentes y la dirección IP del nodo nuevo en el comando update
. Del mismo modo, para quitar nodos solo debes incluir las direcciones IP de los nodos que deseas conservar.
Ejemplo: quitar un nodo trabajador
En esta sección, se muestra cómo quitar un nodo trabajador de un grupo de nodos con datos de ejemplo. También se incluyen comandos adicionales de gcloud CLI que pueden resultarte útiles en los siguientes pasos.
(Opcional) Si el nodo que quitas ejecuta Pods fundamentales, primero coloca el nodo en modo de mantenimiento.
Puedes supervisar el proceso de vaciado de nodos para nodos trabajadores si ves los campos
status.nodesDrained
ystatus.nodesDraining
en el recursoNodePool
.Ejecuta el comando
list
para enumerar todos los grupos de nodos del clúster:gcloud container bare-metal node-pools list \ --cluster=abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1
El resultado es similar a este:
NAME LOCATION STATE node-pool-1 us-central1 RUNNING node-pool-2 asia-east1 RUNNING
Ejecuta el comando
describe
para enumerar todas las direcciones IP en el grupo de nodos:gcloud container bare-metal node-pools describe node-pool-1 \ --cluster=abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1
El siguiente resultado de ejemplo se trunca para facilitar la lectura:
annotations: ... baremetal.cluster.gke.io/version: 1.29 ... name: projects/example-project-12345/locations/us-central1/bareMetalClusters/abm-user-cluster1/bareMetalNodePools/node-pool-1 nodePoolConfig: nodeConfigs: - nodeIp: 192.0.2.1 - nodeIp: 192.0.2.2 operatingSystem: LINUX state: RUNNING ...
Ten en cuenta lo siguiente en el resultado de ejemplo:
El campo
name
contiene el nombre completamente calificado del grupo de nodos. Cuando especificas el nombre del grupo de nodos en un comando, puedes especificar el nombre completamente calificado o el nombre del grupo de nodos, por ejemplo,node-pool-1
, junto con--cluster
,--project
y las marcas--location
.En la sección
nodeConfigs
, se incluyen dos camposnodeIp
con las direcciones IP de los nodos.
Ejecuta el siguiente comando para quitar el nodo con la dirección IP 192.0.2.1:
gcloud container bare-metal node-pools update node-pool-1 \ --cluster=abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1 \ --node-configs='node-ip=192.0.2.2'
El comando
update
reemplaza todas las direcciones IP por las direcciones IP que especifiques. Debido a que no se incluye 192.0.2.1, se quita el nodo.El resultado del comando es similar al siguiente:
Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9] to complete
En el resultado de ejemplo, la string
operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9
es elOPERATION_ID
de la operación de larga duración. Para averiguar el estado de la operación, ejecuta el siguiente comando en otra ventana de terminal:gcloud container bare-metal operations describe operation-1697154681749-6078d9def4030-76686d6e-9fcb1de9 \ --project= example-project-12345 \ --location=us-central1
Puedes volver a ejecutar el comando de vez en cuando para verificar el estado.
Si la eliminación del nodo falla, puedes forzar su eliminación del clúster. Para obtener más información, consulta Eliminación forzada de nodos rotos.
Reemplaza los nodos del plano de control de HA
bmctl
Puedes usar bmctl
para reemplazar los nodos del plano de control con alta disponibilidad (HA) en todos los tipos de clústeres.
Reemplaza un nodo de un clúster mediante 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 en el clúster.
- Agrega la dirección IP de un nodo nuevo al mismo archivo de configuración del clúster.
- Actualiza el clúster.
Ejemplo: Reemplaza un nodo del plano de control de alta disponibilidad
Este es un archivo de configuración de clúster de muestra que presenta 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: 192.0.2.11
- address: 192.0.2.12
- address: 192.0.2.13
Para reemplazar el último nodo que aparece en la sección spec.controlPlane.nodePoolSpec.nodes
, realiza los siguientes pasos:
Para quitar el nodo, borra la entrada de su dirección IP en el archivo de configuración del clúster. Después de realizar este cambio, el archivo de configuración del clúster debe verse de la siguiente manera:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 192.0.2.11 - address: 192.0.2.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 un clúster autoadministrado (como un clúster independiente o de administrador), reemplaza KUBECONFIG por la ruta de acceso al archivo kubeconfig del clúster. Si el clúster es un clúster de usuario, como 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, lleva 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. Una vez que el grupo de nodos y los nodos estén listos, puedes continuar con el siguiente paso.Para agregar un nodo del plano de control nuevo al grupo de nodos, agrega la dirección IP del nodo del plano de control nuevo a la sección
spec.controlPlane.nodePoolSpec.nodes
del archivo de configuración del clúster. Después de realizar este cambio, el archivo de configuración del clúster debe verse de la siguiente manera:--- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: user-cluster namespace: cluster-user-cluster spec: controlPlane: nodePoolSpec: nodes: - address: 192.0.2.11 - address: 192.0.2.12 - address: 192.0.2.14
Actualiza el clúster mediante la ejecución del siguiente comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
CLI de gcloud
Puedes usar gcloud CLI para reemplazar los nodos del plano de control de alta disponibilidad (HA) en los clústeres de administrador y de usuario.
Reemplaza un nodo de un clúster mediante los siguientes pasos:
Quita la dirección IP del nodo mediante la ejecución del comando
update
aplicable:- Clúster de usuario:
gcloud container bare-metal clusters update
- Clúster de administrador:
gcloud container bare-metal admin-clusters update
- Clúster de usuario:
Ejecuta
gcloud container bare-metal operations describe OPERATION_ID
para verificar el estado de la eliminación de nodos en el clúster.Agrega la dirección IP del nodo nuevo mediante la ejecución del comando
update
aplicable.
Ejemplo: Reemplaza un nodo del plano de control de alta disponibilidad
En esta sección, se muestra cómo reemplazar un plano de control de un clúster mediante datos de ejemplo. También se incluyen comandos adicionales de gcloud CLI que pueden resultarte útiles en los siguientes pasos.
Ejecuta el comando
list
para enumerar todos los clústeres de usuario en un proyecto de Google Cloud:gcloud container bare-metal clusters list \ --project=example-project-12345 \ --location=-
Cuando configuras
--location=-
, significa que se deben enumerar todos los clústeres en todas las regiones. Si necesitas reducir el alcance de la lista, configura--location
en una región específica.El resultado es similar a este:
NAME LOCATION VERSION ADMIN_CLUSTER STATE abm-user-cluster1a us-central1 1.29 abm-admin-cluster1 RUNNING abm-user-cluster1b europe-west1 1.29 abm-admin-cluster1 RUNNING
Ejecuta el comando
describe
en el clúster:gcloud container bare-metal clusters describe abm-user-cluster1 \ --project=example-project-12345 \ --location=us-central1
El resultado de ejemplo se trunca para facilitar la lectura:
... controlPlane: controlPlaneNodePoolConfig: nodePoolConfig: nodeConfigs: - nodeIp: 192.0.2.11 - nodeIp: 192.0.2.12 - nodeIp: 192.0.2.13 operatingSystem: LINUX ... name: projects/example-project-1234567/locations/us-central1/bareMetalClusters/abm-user-cluster1a ...
Ten en cuenta lo siguiente en el resultado de ejemplo:
El campo
name
contiene el nombre completamente calificado del clúster. Cuando especificas el nombre del clúster en un comando, puedes especificar el nombre completamente calificado o el nombre del clúster, por ejemplo,abm-user-cluster1a
, junto con--project
y las--location flags
.La sección
nodeConfigs
contiene tres camposnodeIp
con las direcciones IP de los nodos del plano de control.
Quita el nodo con la dirección IP
192.0.2.13
:gcloud container bare-metal cluster update abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --control-plane-node-configs 'node-ip=192.0.2.11' --control-plane-node-configs 'node-ip=192.0.2.12'
El resultado del comando es similar al siguiente:
Waiting for operation [projects/example-project-12345/locations/us-central1/operations/operation-1956154681749-6078d9def4030-76686d6e-9fcb1d7] to complete
En el resultado de ejemplo, la string
operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7
es elOPERATION_ID
de la operación de larga duración. Para averiguar el estado de la operación, ejecuta el siguiente comando en otra ventana de terminal:gcloud container bare-metal operations describe operation-1956154681749-6078d9def4030-76686d6e-9fcb1de7 \ --project= example-project-12345 \ --location=us-central1
Puedes volver a ejecutar el comando de vez en cuando para verificar el estado.
Agrega el nodo nuevo con la dirección IP
192.0.2.14
:gcloud container bare-metal cluster update abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --control-plane-node-configs 'node-ip=192.0.2.11' --control-plane-node-configs 'node-ip=192.0.2.12' --control-plane-node-configs 'node-ip=192.0.2.14'
Verifica tus actualizaciones
kubectl
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 progreso. Debes esperar hasta que el estado cambie a Reconciling=0
.
También puedes verificar el estado de los nodos del clúster mediante la ejecución del siguiente comando:
kubectl get nodes --kubeconfig=KUBECONFIG
CLI de gcloud
Como se describió antes, después de ejecutar un comando update
, puedes verificar el estado de la operación con gcloud container bare-metal
operations describe OPERATIONS_ID
. La salida del comando proporciona el estado de los nodos, por ejemplo:
...
metrics:
- intValue: '1'
metric: NODES_RECONCILING
- intValue: '2'
metric: NODES_HEALTHY
- intValue: '0'
metric: NODES_FAILED
- intValue: '0'
metric: NODES_IN_MAINTENANCE
- intValue: '3'
metric: NODES_TOTAL
stage: HEALTH_CHECK
...
Sin importar la herramienta que uses para actualizar un grupo de nodos, puedes obtener el estado actual de un grupo mediante la ejecución del comando describe
aplicable como se mostró antes.
Si necesitas más información sobre cómo diagnosticar tus clústeres, consulta Crea instantáneas para diagnosticar clústeres.
Grupos de direcciones del balanceador de cargas
bmctl
La sección addressPools
contiene campos para especificar grupos de balanceo de cargas para los balanceadores de cargas de MetalLB y del protocolo de puerta de enlace de frontera (BGP). Puedes agregar más grupos de direcciones de balanceo de cargas en cualquier momento, pero no puedes quitar ningún grupo de direcciones existente. A partir de la versión 1.16.0 de Google Distributed Cloud, puedes modificar los valores de addressPools.avoidBuggyIPs
y addressPools.manualAssign
en cualquier momento.
addressPools:
- name: pool1
addresses:
- 198.51.100.0-198.51.100.4
- 198.51.100.240/28
- name: pool2
addresses:
- 198.51.100.224/28
CLI de gcloud
Puedes agregar más grupos de direcciones de balanceo de cargas en cualquier momento para los balanceadores de cargas en paquetes, pero no puedes quitar ningún grupo de direcciones existente. La marca que especificas en gcloud container bare-metal clusters update
para agregar un grupo de direcciones depende del tipo de balanceador de cargas en paquetes:
- MetalLB (capa 2): Usa la marca
--metal-lb-address-pools
. - Protocolo de puerta de enlace de frontera (BGP): Usa la marca
--bgp-address-pools
.
El valor de las marcas tiene el siguiente formato:
'pool=NAME,avoid-buggy-ips=True|False,manual-assign=True|False,addresses=IP_ADDRESS_RANGE_1;IP_ADDRESS_RANGE_2;...' \
El valor tiene segmentos que comienzan con las palabras clave pool
, avoid-buggy-ip
, manual-assign
y addresses
. Separa cada segmento con una coma.
pool
: Un nombre de tu elección para el grupo de nodos.avoid-buggy-ips
: Si configuras esto comoTrue
, el controlador de administración de direcciones IP (IPAM) no asignará direcciones IP que terminen en.0
o.255
a los servicios. Esto evita el problema de los dispositivos consumidores con errores que descartan por error el tráfico enviado a esas direcciones IP especiales. Si no se especifica, el valor predeterminado esFalse
. A partir de la versión 1.16.0 de Google Distributed Cloud, puedes modificar este valor en un grupo de direcciones existente.manual-assign
: Si no quieres que el controlador IPAM asigne de forma automática direcciones IP de este grupo a objetos Service, configura esto comoTrue
. Luego, un desarrollador puede crear un objeto Service de tipoLoadBalancer
y especificar de forma manual una de las direcciones del grupo. Si no se especifica,manual-assign
se establece enFalse
. A partir de la versión 1.16.0 de Google Distributed Cloud, puedes modificar este valor en un grupo de direcciones existente.En la lista de
addresses
: cada dirección debe ser un rango en formato CIDR o rango con guion. Si deseas especificar una sola dirección IP en un grupo (como para la VIP de entrada), usa/32
en la notación CIDR (por ejemplo, 192.0.2.1/32).
Ten en cuenta las siguientes reglas de sintaxis:
- Encierra todo el valor entre comillas simples.
- No se permite espacio en blanco.
- Separa cada rango de direcciones IP con un punto y coma.
Puedes especificar más de una instancia de la marca, como se muestra en el siguiente ejemplo:
--metal-lb-address-pools='pool=pool2,avoid-buggy-ips=False,manual-assign=True,addresses=198.51.100.0/30;198.51.100.64-198.51.100.72' --metal-lb-address-pools='pool=pool3,avoid-buggy-ips=True,manual-assign=True,addresses=203.0.113.0/28'
Para obtener más información sobre los grupos de direcciones del balanceador de cargas, consulta loadBalancer.addressPools en Configura el balanceo de cargas en paquetes.
Evita la eliminación involuntaria de clústeres
bmctl
Si agregas la anotación baremetal.cluster.gke.io/prevent-deletion: "true"
al archivo de configuración del clúster, no se podrá borrar el clúster. 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:
CLI de gcloud
Si especificas la marca --add-annotations
con el valor baremetal.cluster.gke.io/prevent-deletion="true"
, no se podrá borrar el clúster. Por ejemplo:
Agrega la anotación para evitar la eliminación accidental de un clúster:
gcloud container bare-metal clusters update abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --add-annotations=baremetal.cluster.gke.io/prevent-deletion="true"
Intenta borrar el clúster de usuario:
gcloud container bare-metal clusters delete abm-user-cluster1a \ --project=example-project-12345 \ --location=us-central1 \ --force \ --allow-missing
La respuesta del comando es similar a la siguiente:
ERROR: (gcloud.container.bare-metal.clusters.delete) INVALID_ARGUMENT: invalid request: admission webhook "vcluster.kb.io" denied the request: annotations[baremetal.cluster.gke.io/prevent-deletion]: Invalid value: "true": Annotation "baremetal.cluster.gke.io/prevent-deletion" should be removed in order to delete this cluster
Para quitar la anotación, especifica
--remove-annotations=baremetal.cluster.gke.io/prevent-deletion="true"
en el comandoupdate
.
Omite las comprobaciones preliminares
Esta función solo está disponible con bmctl update
.
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
Agrega o quita administradores de clústeres
bmctl
Puedes agregar o quitar un usuario o una cuenta de servicio como administrador del clúster para un clúster de usuario si especificas direcciones de correo electrónico en la sección clusterSecurity.authorization.clusterAdmin.gcpAccounts
del archivo de configuración del clúster. A las cuentas se les otorga el rol de administrador de clúster en el clúster, lo que proporciona acceso completo al clúster.
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
clusterSecurity:
authorization:
clusterAdmin:
gcpAccounts:
- alex@example.com
- hao@example.com
- my-sa@example-project-12345.iam.gserviceaccount.com
Cuando actualices un clúster de usuario para agregar una cuenta, asegúrate de incluir todas las cuentas en la lista (tanto las cuentas existentes como las nuevas) porque bmctl update
reemplaza la lista por lo que especificas en el archivo de configuración. Para quitar una cuenta, quítala del archivo de configuración del clúster y ejecuta bmctl update
.
CLI de gcloud
Puedes agregar o quitar un usuario o una cuenta de servicio como administrador del clúster si especificas una dirección de correo electrónico en la marca --admin-users
. La marca solo acepta una dirección de correo electrónico. Para agregar varios usuarios, especifica una cuenta en cada marca, por ejemplo:
gcloud container bare-metal clusters update abm-user-cluster1a \
--project=example-project-12345 \
--location=us-central1 \
--admin-users=alex@example.com \
--admin-users=hao@example.com
--admin-users=my-sa@example-project-12345.iam.gserviceaccount.com
El comando update
reemplaza toda la lista de otorgamientos. Especifica todos los usuarios nuevos y existentes que deseas que sean administradores del clúster.
Configura un usuario de acceso
Puedes especificar un nombre de usuario no raíz que deseas usar para un acceso con capacidad sudo
sin contraseña a las máquinas de nodo en tu clúster. Tu clave SSH, sshPrivateKeyPath
, debe funcionar para el usuario especificado. Las operaciones de creación y actualización de clústeres verifican que se pueda acceder a las máquinas de nodo con el usuario y la clave SSH especificados.
bmctl
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
CLI de gcloud
Especifica el usuario que deseas usar para acceder a las máquinas de nodo en la marca --login-user
, por ejemplo:
gcloud container bare-metal clusters update abm-user-cluster1a \
--project=example-project-12345 \
--location=us-central1 \
--login-user=abm
Para habilitar el acceso sudo
sin contraseña para un usuario, sigue estos pasos en cada máquina de nodo del clúster:
Usa
sudo visudo
para abrir el archivo de sudoers para editarlo:sudo visudo -f /etc/sudoers
El comando
visudo
bloquea el archivo de sudoers para evitar ediciones simultáneas y valida la sintaxis del archivo cuando se guarda.Para tu usuario de acceso, agrega una entrada al archivo de sudoers como la siguiente:
USERNAME ALL=(ALL) NOPASSWD: ALL
Cierra y guarda el archivo.
Para ejecutar comandos con los privilegios de tu usuario de acceso, ejecuta el siguiente comando:
su - USERNAME
Para verificar que no se requiere una contraseña para que el usuario de acceso ejecute comandos de
sudo
, ejecuta el siguiente comando desudo
:sudo ip a
Herramientas de redes avanzadas
Debes configurar funciones de herramientas de redes avanzadas en varios recursos personalizados después de crear el clúster. Para usar los recursos personalizados y las funciones de red relacionadas, debes habilitar las herramientas de redes avanzadas cuando crees tu clúster.
bmctl
Configura clusterNetwork.advancedNetworking
como true
en la configuración del clúster cuando lo crees:
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
clusterNetwork:
...
advancedNetworking: true
...
CLI de gcloud
Incluye la marca --enable-advanced-networking
en el comando gcloud container bare-metal clusters create
cuando crees el clúster.
Después de crear el clúster con las herramientas de redes avanzadas habilitadas, puedes configurar los recursos personalizados descritos en esta sección mediante kubectl apply
.
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.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
Balanceo de cargas de BGP
Configura el balanceo de cargas del protocolo de puerta de enlace de frontera (BGP) en el recurso del clúster y otros recursos personalizados. Los comandos gcloud container bare-metal clusters
create
y update
admiten la configuración de BGP en el recurso del clúster, pero no en los recursos personalizados.
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.
BGPLoadBalancer
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
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
Aumenta el rango de la red del servicio
Para crear más servicios que el límite inicial, puedes reducir la máscara de CIDR del servicio IPv4 para aumentar la red de servicios de tu clúster. Reducir la máscara (el valor después de “/”) da como resultado un rango de red mayor. 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 “/”).
bmctl
apiVersion: baremetal.cluster.gke.io/v1
kind: Cluster
metadata:
name: cluster1
namespace: cluster-cluster1
spec:
...
clusterNetwork:
services:
cidrBlocks:
- 192.0.2.0/14
...
CLI de gcloud
Para aumentar el rango del CIDR de servicio IPv4 en un clúster de usuario, especifica el rango nuevo en la marca --island-mode-service-address-cidr-blocks
.
gcloud container bare-metal clusters update cluster1 \
--project=example-project-12345 \
--location=us-central1 \
--island-mode-service-address-cidr-blocks=192.0.2.0/14
Establece la configuración de extracción de imágenes de kubelet
Kubelet se ejecuta en cada nodo de tu clúster. Kubelet es responsable de supervisar los contenedores en un nodo y de garantizar que estén en buen estado. Cuando es necesario, kubelet consulta y extrae imágenes de Container Registry.
Actualizar la configuración de kubelet de forma manual y mantenerlas sincronizadas 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 tus nodos se pierden cuando actualizas el clúster.
Para ayudar a que las actualizaciones sincronizadas sean más fáciles y persistentes, Google Distributed Cloud te permite especificar algunas opciones de configuración de kubelet para cada uno de tus grupos 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 persiste 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.
bmctl
Los siguientes campos compatibles controlan las operaciones de extracción de Container Registry para kubelet:
registryBurst
(el valor predeterminado es 10)registryPullQPS
(el valor predeterminado es 5)serializeImagePulls
(el valor predeterminado es 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 la especificación de NodePool para los siguientes grupos de nodos:
- Especificación del clúster:
- Nodos del plano de control
spec.controlPlane.nodePoolSpec.kubeletConfig
- Nodos del balanceador de cargas
spec.loadBalancer.nodePoolSpec.kubeletConfig
- Especificación del grupo de nodos:
- Nodos trabajadores
spec.kubeletConfig
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.
CLI de gcloud
Las siguientes marcas controlan las operaciones de extracción de Container Registry para kubelet:
Nodos del plano de control
Nodos del balanceador de cargas
- --bgp-load-balancer-registry-burst
- --bgp-load-balancer-registry-pull-qps
- --disable-bgp-load-balancer-serialize-image-pulls
- --enable-bgp-load-balancer-serialize-image-pulls
- --metal-lb-load-balancer-registry-burst
- --metal-lb-load-balancer-registry-pull-qps
- --disable-metal-lb-load-balancer-serialize-image-pull
- --enable-metal-lb-load-balancer-serialize-image-pulls
Nodos trabajadores
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 tarda 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 se deben implementar imágenes nuevas de Google Distributed Cloud en un nodo). Si te afectan los retrasos de extracción de imágenes, puedes inhabilitar la serialización de extracciones de imágenes 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 aumentar*-registry-pull-qps
y*-registry-burst
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 ayudar a abordar otros problemas relacionados con la limitación. No se permiten valores negativos.