Como gerenciar um cluster Rancher que falhou? Use o RKE!

Se você é usuário do Rancher, provavelmente criou clusters personalizados usando o Rancher Server. No entanto, em alguns casos, pode ocorrer de o Rancher Server não conseguir mais gerenciar esses clusters devido a problemas como exclusão acidental ou perda de backup. Nesses cenários, uma solução comum seria reiniciar o Rancher Server e importar os clusters downstream novamente, mas isso pode causar complicações, como a impossibilidade de expandir novos nós no cluster.

Para evitar essas limitações, podemos usar o RKE para assumir o controle dos clusters personalizados criados pelo Rancher Server.

Como sabemos, clusters personalizados criados via UI do Rancher utilizam o RKE no back end. Portanto, o RKE tem a capacidade de gerenciar esses clusters diretamente, desde que sejam fornecidos três arquivos essenciais:

  • cluster.yml: O arquivo de configuração do cluster RKE.
  • kube_config_cluster.yml: Este arquivo contém as credenciais necessárias para acessar o cluster.
  • cluster.rkestate: Um estado persistente do cluster Kubernetes.

Com esses arquivos em mãos, podemos utilizar o binário RKE para continuar gerenciando o cluster, incluindo adicionar novos nós.

Ambiente Demonstrativo

Este guia foi testado nas versões v2.4.x e v2.5.x do Rancher. Outras versões podem não ser compatíveis.

Configuração Inicial

Vamos começar criando um cluster personalizado no Rancher Server (eexcutado via Docker) com dois nós: ip-172-31-2-203 e ip-172-31-1-111.

# kubectl get nodes
NAME              STATUS   ROLES                      AGE     VERSION
ip-172-31-1-111   Ready    worker                     2m2s    v1.18.14
ip-172-31-2-203   Ready    controlplane,etcd,worker   3m23s   v1.18.14

Agora, vamos simular uma falha no Rancher Server desligando o nó ip-172-31-8-56.

Reucperando Arquivos Essenciais

Passo 1: Recuperando kube_config_cluster.yml

No nó controlplane, execute o seguinte comando para recuperar o arquivo de configuração:

docker run --rm --net=host \
-v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro \
--entrypoint bash $(docker inspect $(docker images -q --filter=label=io.cattle.agent=true) \
--format='{{index .RepoTags 0}}' | tail -1) \
-c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml get configmap \
-n kube-system full-cluster-state \
-o json | jq -r .data."full-cluster-state" | jq \
-r .currentState.certificatesBundle."kube-admin".config | sed \
-e "/^[[:space:]]*server:/ s_:.*_: \"https://127.0.0.1:6443\"_"' \
> kubeconfig_admin.yml

Verifique se o arquivo foi recuperado corretamente:

kubectl --kubeconfig kubeconfig_admin.yml get nodes

Passo 2: Recuperando cluster.rkestate

Execute o seguinte comando no nó controlplane:

docker run --rm --net=host \
-v $(docker inspect kubelet --format '{{ range .Mounts }}{{ if eq .Destination "/etc/kubernetes" }}{{ .Source }}{{ end }}{{ end }}')/ssl:/etc/kubernetes/ssl:ro \
--entrypoint bash $(docker inspect $(docker images -q --filter=label=org.label-schema.vcs-url=https://github.com/rancher/hyperkube.git) \
--format='{{index .RepoTags 0}}' | tail -1) \
-c 'kubectl --kubeconfig /etc/kubernetes/ssl/kubecfg-kube-node.yaml \
-n kube-system get configmap full-cluster-state \
-o json | jq -r .data."full-cluster-state" | jq -r .' \
> cluster.rkestate

Passo 3: Criando o cluster.yml

Embora não haja uma maneira automática garantida de recuperar o cluster.yml, você pode usá-lo como base a partir do cluster.rkestate. Por exemplo:

nodes:
  - address: 172.31.2.203
    user: ubuntu
    role:
      - controlplane
      - etcd
      - worker
  - address: 172.31.1.111
    user: ubuntu
    role:
      - worker
kubernetes_version: v1.18.14-rancher1-1

Caso deseje adicionar novos nós, insira-os neste arquivo.

Adicionando Novos Nós

Com todos os arquivos prontos, use o RKE para atualizar o cluster:

rke up

Após a conclusão, verifique os nós:

kubectl --kubeconfig kubeconfig_admin.yml get nodes

Resultado esperado:

NAME              STATUS   ROLES                      AGE     VERSION
ip-172-31-1-111   Ready    worker                     8m6s    v1.18.14
ip-172-31-2-203   Ready    controlplane,etcd,worker   9m27s   v1.18.14
ip-172-31-5-186   Ready    worker                     29s     v1.18.14

Agora você pode gerenciar o cluster diretamente com o RKE.

Tags: RKE rancher kubernetes

Publicado em 9-26 09:06