Actualiza clústeres

Después de crear un clúster con bmctl, puedes actualizar los recursos personalizados de ese clúster. Por ejemplo, puedes agregar o quitar nodos en un grupo de nodos. El archivo de configuración se almacena como bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml, a menos que hayas especificado una ubicación diferente.

En este documento, se muestra qué opciones de configuración del clúster se pueden actualizar después de crear un clúster, como agregar o quitar nodos.

Agrega o quita nodos en un clúster

En los clústeres de Anthos en equipos físicos, puedes agregar o quitar nodos en un clúster si editas las definiciones de su grupo de nodos. Usas la dirección IP de los nodos para agregarlos o quitarlos de un grupo de nodos. Puedes usar el comando bmctl para cambiar estas definiciones.

Existen tres tipos diferentes de grupos de nodos en clústeres de Anthos en equipos físicos: plano de control, balanceador de cargas y grupos de nodos trabajadores.

Visualiza el estado del nodo

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 my-cluster:

kubectl -n my-cluster get nodepools.baremetal.cluster.gke.io

El sistema muestra resultados similares al siguiente:

NAME                    READY   RECONCILING   STALLED   UNDERMAINTENANCE   UNKNOWN
my-cluster              3       0             0         0                  0
my-cluster-lb           2       0             0         0                  0
np1                     3       0             0         0                  0

Si necesitas más información sobre el diagnóstico de tus clústeres, consulta Crea instantáneas para diagnosticar clústeres.

Cambia nodos

La mayoría de los cambios en los nodos se especifican en el archivo de configuración del clúster, que luego se aplica al clúster. Te recomendamos usar el archivo de configuración del clúster como la fuente principal de actualización del clúster. Se recomienda almacenar el archivo de configuración en un sistema de control de versiones para realizar un seguimiento de los cambios con el fin de solucionar problemas. Para todos los tipos de clústeres, usa el comando bmctl update a fin de actualizar el clúster con los cambios en el nodo.

Los clústeres de Anthos en el archivo de configuración de clúster de equipos físicos incluyen una sección de encabezado con información de credenciales. Las entradas de credenciales y el resto del archivo de configuración son YAML válidos, pero las entradas de credenciales no son válidas para el recurso del clúster. Usa bmctl update credentials para actualizar las credenciales.

Cuando quitas nodos de un clúster, primero se desvían los pods. Los nodos no se quitarán del clúster si no se pueden reprogramar los Pods en otros nodos. El comando bmctl update analizará el archivo de configuración del clúster y aplicará recursos personalizados en función del resultado analizado.

A continuación, se muestra una configuración de ejemplo con dos nodos:

---
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 del grupo, borra su entrada de dirección IP:

---
apiVersion: baremetal.cluster.gke.io/v1
kind: NodePool
metadata:
  name: nodepool1
  namespace: cluster-cluster1
spec:
  clusterName: cluster1
  nodes:
  - address: 172.18.0.5

A fin de actualizar el clúster, ejecuta el siguiente comando para los clústeres autoadministrados, como los clústeres independientes y de administrador:

bmctl update cluster -c CLUSTER_NAME \
    --kubeconfig=KUBECONFIG

Una vez que el comando bmctl update se ejecute de forma correcta, los pods machine-init o machine-reset tardarán un tiempo en completarse.

En las siguientes secciones, se describen algunas diferencias importantes para actualizar tipos de nodos específicos.

Plano de control y nodos del balanceador de cargas

Las especificaciones del plano de control y el grupo de nodos del balanceador de cargas para los clústeres de Anthos en equipos físicos son especiales. Estas especificaciones declaran y controlan los recursos críticos del clúster. La fuente canónica de estos recursos es sus respectivas secciones en el archivo de configuración del clúster:

  • spec.controlPlane.nodePoolSpec
  • spec.LoadBalancer.nodePoolSpec

Puedes agregar o quitar nodos del plano de control o del balanceador de cargas si editas el array de direcciones en nodes en la sección correspondiente del archivo de configuración del clúster.

En una configuración de alta disponibilidad (HA), se requiere un número impar de grupos de nodos del plano de control (tres o más) para establecer un quórum a fin de garantizar que, si falla un plano de control, otros asuman el trabajo. Si tienes una cantidad par de nodos de manera temporal al momento de agregar o quitar nodos para el mantenimiento o el reemplazo, tu implementación mantiene la alta disponibilidad siempre y cuando tengas suficiente quórum.

Nodos trabajadores

Puedes agregar o quitar nodos trabajadores directamente con el comando de bmctl. Los grupos de nodos trabajadores deben tener, al menos, un nodo deseado. Sin embargo, si deseas quitar todo el grupo de nodos, usa el comando kubectl. En el siguiente ejemplo, el comando borra un grupo de nodos llamado np1, en el que la variable del espacio de nombres del clúster es my-cluster:

kubectl -n my-cluster delete nodepool np1

Otros campos mutables

Además de agregar y quitar nodos, también puedes usar el comando bmctl update para modificar ciertos elementos de la configuración del clúster. Por lo general, para actualizar el recurso de clúster, debes editar la versión local del archivo de configuración del clúster y usar bmctl update a fin de aplicar los cambios. El comando bmctl update es similar al comando kubectl apply.

En las siguientes secciones, se describen algunos ejemplos comunes para actualizar un clúster existente. Para ello, cambia un valor de campo o modifica un recurso personalizado relacionado.

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

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"

Después de modificar el archivo de configuración, puedes actualizar el clúster mediante la ejecución del comando bmctl update. Analizará el archivo de configuración del clúster y aplicará recursos personalizados en función del resultado analizado.

Para los clústeres de administración automática, como los clústeres independientes y de administrador, ejecuta lo siguiente:

bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG

Para los clústeres de usuario, ejecuta el siguiente comando:

bmctl update cluster -c CLUSTER_NAME --admin-kubeconfig=ADMIN_KUBECONFIG