Atualizar clusters

Depois de criar um cluster com bmctl, é possível atualizar os recursos personalizados desse cluster. O arquivo de configuração é armazenado como bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml, a menos que você tenha especificado um local diferente.

Como adicionar ou remover nós em um cluster

Nos clusters do Anthos em bare metal, você adiciona ou remove nós em um cluster editando as definições do pool de nós do cluster. Use o comando bmctl para alterar essas definições.

Há três tipos de pools de nós nos clusters do Anthos em bare metal: plano de controle, balanceador de carga e pools de nós de trabalho.

Como visualizar o status do nó

Também é possível ver o status dos nós e os respectivos pools com o comando kubectl get.

Por exemplo, o comando a seguir mostra o status dos pools de nós no namespace do cluster my-cluster:

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

O sistema retorna resultados semelhantes aos seguintes:

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

Se você precisar de mais informações sobre como diagnosticar os clusters, consulte Como diagnosticar e redefinir clusters.

Como alterar nós

A maioria das alterações de nó é especificada no arquivo de configuração do cluster, que depois é aplicado ao cluster. Recomendamos que você use o arquivo de configuração do cluster como a principal origem para atualizar o cluster É uma prática recomendada armazenar o arquivo de configuração em um sistema de controle de versões que rastreie as alterações para fins de solução de problemas. Para todos os tipos de cluster, use o comando bmctl update para atualizar o cluster com as alterações de nó.

Os clusters do Anthos no arquivo de configuração do cluster bare metal incluem uma seção de cabeçalho com informações de credenciais. As entradas de credenciais e o restante do arquivo de configuração são YAML válidos, mas as entradas de credenciais não são válidas para o recurso do cluster. Use bmctl update credentials para atualizações de credenciais.

Quando você remove nós de um cluster, eles são drenados primeiro para qualquer pod. Os nós não serão removidos do cluster se não for possível reprogramar os pods em outros nós. O comando bmctl update analisará o arquivo de configuração do cluster e aplicará recursos personalizados com base no resultado analisado.

Veja uma configuração de amostra com dois nós:

---
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

Exclua uma entrada do pool de nós para excluí-la:

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

Para atualizar o cluster, execute o seguinte comando para os clusters autogerenciados, como clusters de administrador e autônomos:

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

Depois que o comando bmctl update for executado, levará algum tempo para que os pods machine-init ou machine-reset sejam concluídos.

As seções a seguir descrevem algumas diferenças importantes para atualizar tipos de nós específicos.

Nós do plano de controle e do balanceador de carga

As especificações do pool de nós do plano de controle e do balanceador de carga para clusters do Anthos em bare metal são especiais. Essas especificações declaram e controlam os recursos essenciais do cluster. A fonte canônica desses recursos é a respectiva seção no arquivo de configuração do cluster.

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

Para adicionar ou remover nós do plano de controle ou do balanceador de carga, edite a matriz de endereços em nodes na seção correspondente do arquivo de configuração do cluster.

Em uma configuração de alta disponibilidade (HA, na sigla em inglês), é necessário um número ímpar de pools de nós do plano de controle (três ou mais) para estabelecer um quórum. Assim, se um plano de controle falhar, outros assumirão o controle. Se você tiver um número par de nós temporariamente durante a adição ou remoção de nós para manutenção ou substituição, sua implantação manterá a alta disponibilidade, desde que você tenha quórum suficiente.

Nós de trabalho

É possível adicionar ou remover nós de trabalho diretamente com o comando bmctl. Os pools de nós de trabalho precisam ter pelo menos um nó pretendido. No entanto, se você quiser remover todo o pool de nós, use o comando kubectl. No exemplo a seguir, o comando exclui um pool de nós chamado np1, em que a variável do namespace do cluster é my-cluster:

kubectl -n my-cluster delete nodepool np1

Outros campos mutáveis

Além de adicionar e remover nós, também é possível usar o comando bmctl update para modificar determinados elementos da configuração do cluster. Normalmente, para atualizar o recurso do cluster, você edita a versão local do arquivo de configuração do cluster e usa bmctl update para aplicar as alterações. O comando bmctl update é semelhante ao comando kubectl apply.

Veja nas seções a seguir alguns exemplos comuns de como atualizar um cluster atual alterando um valor de campo ou modificando um recurso personalizado relacionado.

loadBalancer.addressPools

A seção addressPools contém campos para especificar pools de balanceamento de carga para balanceadores de carga em pacote. É possível adicionar mais pools de endereços de balanceamento de carga a qualquer momento, mas não é possível remover ou modificar pools de endereços existentes.

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

O valor padrão do campo bypassPreflightCheck é false. Se você definir esse campo como true no arquivo de configuração do cluster, as verificações de simulação internas serão ignoradas para aplicar recursos aos clusters atuais.

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

Defina o campo loginUser na configuração de acesso do nó. Este campo suporta o recurso sudo sem senha para login na 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

BGPLoadBalancer

bmctl permite aplicar e atualizar balanceadores de carga baseados em BGP por meio da opção do pacote do Google empacotado.

apiVersion: "networking.gke.io/v1alpha1"
kind: BGPLoadBalancer
metadata:
 name: default
 namespace: cluster-cluster1
spec:
 localASN: 65001
 peers:
 - peerASN: 65000
   peerIP: 10.0.1.1

NetworkAttachmentDefinition

É possível usar o comando bmctl update para modificar recursos personalizados NetworkAttachmentDefinition que correspondam à rede.

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"

Depois de modificar o arquivo de configuração, atualize o cluster executando o comando bmctl update. Ele analisará o arquivo de configuração do cluster e aplicará recursos personalizados com base no resultado analisado.

Para os clusters autogerenciados, como clusters administrativos e autônomos, execute:

bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG

Para clusters de usuário, execute:

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