Depois de criar um cluster com o bmctl
, é possível alterar alguns aspectos da
configuração com a seguinte sequência de ações:
Altere os valores de determinados campos no arquivo de configuração do cluster, que, por padrão, está localizado aqui:
bmctl-workspace/CLUSTER-NAME/CLUSTER-NAME.yaml
.Para atualizar o cluster, execute o comando
bmctl update
.
Assim, é possível, por exemplo, adicionar ou remover nós ou substituir nós em um cluster. Saiba como fazer isso e outras atualizações em um cluster.
No entanto, é importante observar que muitos aspectos da configuração do cluster são imutáveis e não podem ser atualizados depois da criação. Consulte uma lista abrangente de campos mutáveis e imutáveis na Referência dos campos de configuração do cluster. A referência de campo é uma tabela classificável. Clique nos cabeçalhos das colunas para alterar a ordem de classificação. Clique no nome de um campo para ver a descrição.
Adicionar ou remover nós de um cluster
Um pool de nós é um grupo de nós em um cluster que têm a mesma configuração. Lembre-se de que um nó sempre pertence a um pool. Para adicionar um novo nó a um cluster, adicione o nó a um pool específico. Remover um nó de um pool equivale a remover o nó do cluster por completo.
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.
Para adicionar ou remover um nó de um pool, adicione ou remova o endereço IP do nó de uma determinada seção do arquivo de configuração do cluster. A lista a seguir mostra qual seção de um manifesto você precisa editar em um pool de nós:
- Pool de nós de trabalho: adicione/remova o endereço IP do nó do campo
spec.nodes
que aparece na seçãokind: NodePool
. - Pool de nós do plano de controle: adicione/remova o endereço IP do nó do
campo
spec.controlPlane.nodePoolSpec.nodes
que aparece na seçãokind: Cluster
. - Pool de nós do balanceamento de carga: não é possível fazer alterações (adicionar ou remover endereços IP) em um pool de endereços de um balanceador de carga atual nem remover um pool de endereços do balanceador de carga atual. Depois de criar um cluster, só será possível adicionar novos pools de endereços.
Exemplo: como remover um nó de trabalho
Veja um exemplo de arquivo de configuração de cluster que mostra as especificações de dois nós de trabalho:
---
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
É possível remover um nó do pool de nós de trabalho seguindo estas etapas:
Exclua a entrada de endereço IP do nó do arquivo de configuração do cluster:
--- apiVersion: baremetal.cluster.gke.io/v1 kind: NodePool metadata: name: nodepool1 namespace: cluster-cluster1 spec: clusterName: cluster1 nodes: - address: 172.18.0.5
Atualize o cluster:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Faça as mudanças a seguir:
- Substitua CLUSTER_NAME pelo nome do cluster que você quer atualizar.
- Se o cluster for de autogerenciamento, como o cluster de administrador ou independente, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster. Se o cluster for de usuário, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster de administrador.
É importante observar que o bmctl
precisa drenar os pods de um nó antes que o
nó possa ser removido. Os nós não serão removidos do cluster se não for possível
reprogramar os pods em outros nós.
Depois que o comando bmctl update
for executado, levará algum tempo
para concluir os jobs machine-preflight
e machine-init
. Veja
o status dos nós e os respectivos pools executando os comandos
descritos na seção Verificar as atualizações deste
documento.
Como forçar a remoção de um nó
Se o comando bmctl update
não conseguir remover um nó, talvez seja necessário forçar
essa remoção no cluster. Consulte detalhes em
Forçar a remoção de nós corrompidos.
Substituir nós do plano de controle de alta disponibilidade
É possível substituir nós do plano de controle de alta disponibilidade (HA) em clusters de administrador, usuário, independente e híbrido.
Para substituir um nó em um cluster, siga estas etapas:
- Remova o endereço IP do nó do arquivo de configuração do cluster.
- Atualize o cluster.
- Verifique o status dos nós no cluster.
- Adicione o endereço IP de um novo nó ao mesmo arquivo de configuração do cluster.
- Atualize o cluster.
O restante desta seção mostra um exemplo.
Veja um exemplo de arquivo de configuração de cluster que mostra três nós do plano de controle em um cluster de usuário:
---
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 substituir o último nó listado na seção spec.controlPlane.nodePoolSpec.nodes
,
siga estas etapas:
Remova o nó excluindo a entrada de endereço IP dele no arquivo de configuração do cluster. Depois dessa alteração, o arquivo de configuração do cluster terá esta aparência:
--- 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
Atualize o cluster executando o seguinte comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Faça as mudanças a seguir:
- Substitua CLUSTER_NAME pelo nome do cluster que você quer atualizar.
- Se o cluster for de autogerenciamento, como o cluster de administrador ou independente, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster. Se o cluster for de usuário, como neste exemplo, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster de administrador.
Depois que o comando
bmctl update
for executado, levará algum tempo para concluir os jobsmachine-preflight
emachine-init
. Veja o status dos nós e os respectivos pools executando os comandos descritos na seção Verificar as atualizações deste documento. Quando o pool e os nós estiverem em estado pronto, siga para a próxima etapa.Adicione um novo nó do plano de controle ao pool adicionando o endereço IP do novo nó do plano de controle à seção
spec.controlPlane.nodePoolSpec.nodes
do arquivo de configuração do cluster. Depois dessa alteração, o arquivo de configuração do cluster ficará assim:--- 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
Atualize o cluster executando o seguinte comando:
bmctl update cluster -c CLUSTER_NAME \ --kubeconfig=KUBECONFIG
Faça as mudanças a seguir:
- Substitua CLUSTER_NAME pelo nome do cluster que você quer atualizar.
- Se o cluster for de autogerenciamento, como o cluster de administrador ou independente, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster. Se o cluster for de usuário, como neste exemplo, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster de administrador.
Verificar as atualizações
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 cluster-my-cluster
:
kubectl -n cluster-my-cluster get nodepools.baremetal.cluster.gke.io
O sistema retorna resultados semelhantes aos seguintes:
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 a etapa de reconciliação ainda está em andamento. Aguarde
até o status mudar para Reconciling=0
.
É possível também conferir o status dos nós do cluster executando o seguinte comando:
kubectl get nodes --kubeconfig=KUBECONFIG
Veja como diagnosticar seus clusters em Criar snapshots para diagnosticar clusters.
Recursos que você pode alterar com uma atualização
Além de adicionar, remover ou substituir nós, é possível usar o comando bmctl update
para alterar determinados valores de campos mutáveis, recursos personalizados (CRs, na sigla em inglês) e
anotações no arquivo de configuração do cluster.
Para atualizar um recurso de cluster, edite o arquivo de configuração do cluster e use
bmctl update
para aplicar as alterações.
As seções a seguir descrevem alguns exemplos comuns para atualizar um cluster atual alterando um valor de campo, um CR ou uma anotação.
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
Impedir a exclusão acidental de clusters
Se você adicionar a anotação baremetal.cluster.gke.io/prevent-deletion: "true"
ao
arquivo de configuração do cluster, não será possível excluir o cluster.
Por exemplo, executar kubectl delete cluster
ou bmctl reset cluster
produz
um erro.
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
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
NetworkGatewayGroup
O recurso personalizado NetworkGatewayGroup
é usado para fornecer endereços
IP flutuantes para recursos de rede avançados, como o
gateway NAT de saída ou o
recurso de balanceamento de carga em pacote com o BGP.
Para usar o recurso personalizado NetworkGatewayGroup
e os recursos de rede
relacionados, defina
clusterNetwork.advancedNetworking
como true
ao criar os clusters.
apiVersion: networking.gke.io/v1
kind: NetworkGatewayGroup
name: default
namespace: cluster-bm
spec:
floatingIPs:
- 10.0.1.100
- 10.0.2.100
BGPLoadBalancer
Quando você configura balanceadores de carga em pacote com o BGP, o balanceamento de carga
do plano de dados usa, por padrão, os mesmos pares externos especificados para
o peering do plano de controle. Como alternativa, é possível configurar o balanceamento
de carga do plano de dados separadamente usando o recurso personalizado BGPLoadBalancer
(e o
recurso personalizado BGPPeer
). Para mais informações, consulte
Configurar balanceadores de carga em pacote com o BGP.
apiVersion: networking.gke.io/v1
kind: BGPLoadBalancer
metadata:
name: default
namespace: cluster-bm
spec:
peerSelector:
cluster.baremetal.gke.io/default-peer: "true"
BGPPeer
Quando você configura balanceadores de carga em pacote com o BGP, o balanceamento de carga
do plano de dados usa, por padrão, os mesmos pares externos especificados para
o peering do plano de controle. Como alternativa, é possível configurar o balanceamento
de carga do plano de dados separadamente usando o recurso personalizado BGPPeer
(e o
recurso personalizado BGPLoadBalancer
). Para mais informações, consulte
Configurar balanceadores de carga em pacote com o 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
É 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 seguinte
comando bmctl update
:
bmctl update cluster -c CLUSTER_NAME --kubeconfig=KUBECONFIG
Faça as mudanças a seguir:
- Substitua CLUSTER_NAME pelo nome do cluster que você quer atualizar.
- Se o cluster for de autogerenciamento, como o cluster de administrador ou independente, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster. Se o cluster for de usuário, substitua KUBECONFIG pelo caminho para o arquivo kubeconfig do cluster de administrador.