Backup/Restore e Update do cluster K8S
Backup e Restore do Etcd:
O kubernetes armazena o status de todos os objetos do cluster em um banco de dados etcd, ou seja, se perdermos o etcd basicamente perdemos nosso cluster k8s, para não correr esse risco temos técnicas de alta disponibilidade e a possibilidade de ter um cluster etcd. É altamente recomendado ser capaz de realizar o backup e restore do etcd, o assunto está relacionado com o tópico CLuster Maintenance ( Manutenção do Cluster ) e possue uma boa relevância para a CKA.
BACKUP
O procedimento de backup consiste em alguns passos, sendo eles:
- Identificar o pod responsavel pelo etcd;
kubectl get po -A | grep etcd
- Saber localizar e apontar os arquivos de CA, CERTIFICADO e KEY no pod:
kubectl -n kube-system exec -it etcd-master01.capivara.k8s -- sh
kube
cd /etc/kubernetes/pki/etcd/
echo *
ca.crt ca.key healthcheck-client.crt healthcheck-client.key peer.crt peer.key server.crt server.key
ca.crt (CA) - server.crt (CERTIFICADO) - server.key (KEY)
- E por fim realizar o backup via o comando etcdctl snapshot save em um lugar especifico do pod:
kubectl -n kube-system exec -it etcd-master01.capivara.k8s -- sh -C 'ETCDCTL_API=3 etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --endpoints 127.0.0.1:2679 snapshot save /tmp/snapshotdb '
Entendendo o comando de backup do etcd:
ETCDCTL_API=3 => Variavel de ambiente informando que vamos usar a vers~ao 3 do etcd
etcdctl => O binario do etcd parar gerenciar o servico
–cacert="/etc/kubernetes/pki/etcd/ca.crt" –cert="/etc/kubernetes/pki/etcd/server.crt" –key="/etc/kubernetes/pki/etcd/server.key" => CA, Certificado e key nesse ordem
–endpoints 127.0.0.1:2679 => Aqui apontamos como vamos nos comunicar com etcd
snapshot save => O parametro para salvar o snapshot do estado atual do etcd
/tmp/snapshotdb => Onde vamos salvar o snapshot e o nome do arquivo.
RESTORE
Para realizar o restore devemos identificar o pod do etcd e os certificados usados para interagir com o serviço ( passos 1 e 2 do backup), em seguidas mais os dois procedimentos a seguir:
- Validar o seu snapshop:
kubectl -n kube-system exec -it etcd-master01.capivara.k8s -- sh -C 'ETCDCTL_API=3 etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --endpoints 127.0.0.1:2679 snapshot status /tmp/snapshotdb '
- Realizar o restore do snapshot criado:
kubectl -n kube-system exec -it etcd-master01.capivara.k8s -- sh -C 'ETCDCTL_API=3 etcdctl --cacert="/etc/kubernetes/pki/etcd/ca.crt" --cert="/etc/kubernetes/pki/etcd/server.crt" --key="/etc/kubernetes/pki/etcd/server.key" --endpoints 127.0.0.1:2679 snapshot restore /tmp/snapshotdb '
Upgrading kubeadm clusters
Para realizar o update do seu cluster k8s você precisa seguir os seguintes passos:
- Upgrade o control plane primário
- Upgrade o control plane secundário
- Upgrade os demais nodes
Antes de começar é sempre importe ler a release notes para não ter nenhuma surpresa e realizar o backup do etcd.
obs: todos os containers vão ser reiniciados durante o upgrade.
No meu lab estou usando CentOS mas o processo para as demais distribuições segue a mesma idéia.
Upgrade o control plane primário
Update Kubeadm
- Verifique a versão atual do kubeadm:
sudo kubeadm version
- Em seguida podemos atualizar o pacote, excluindo o exclude do repositório do kubernetes
yum update -y kubeadm --disableexcludes=kubernetes
- Verifique se o pacote está disponível conforme previsto:
sudo kubeadm version
- Execute o plano de atualização do kubeadm, esse comando é bem útil porque ele vai informar qual é o comando exato para realizar o update.
sudo kubeadm upgrade plain
- Em seguida podemos aplicar o upgrade:
sudo kubeadm upgrade apply v1.20.x
Update Kubelet e kubectl
Nosso kubeadm foi atualizado com o sucesso, agora vamos passar para o update do kunelet e kubectl
- Antes de atualizar nos vamos deixar o nosso node em manutenção:
kubectl drain <nome-do-node> --ignore-daemonsets
- Uma vez com o cluster em manutenção podemos executar os updates dos pacotes:
yum install -y kubelet-1.20.x-0 kubectl-1.20.x-0 --disableexcludes=kubernetes
- Faça o restart do serviço via systemd:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
- E retire o node de manutenção:
kubectl uncordon <node-to-drain>
Fazendo o update nos workers nodes:
Update Kubeadm
- Update do pacote kubeadm:
yum install -y kubeadm-1.20.x-0 --disableexcludes=kubernetes
- Aplicar o upgrade:
sudo kubeadm upgrade node
Update Kubelet e Kubectl
- Node em modo de manutenção:
kubectl drain node-name --ignore-daemonsets
- Update dos pacotes kubelet e kubectl:
yum install -y kubelet-1.20.x-0 kubectl-1.20.x-0 --disableexcludes=kubernetes
- Restart do servico kubelet:
sudo systemctl daemon-reload
sudo systemctl restart kubelet
- Por fim retiramos o node de manutenção.
kubectl uncordon node-name
- Verifique se os updates ocorreram conforme o esperado:
kubectl get node
Observações finais:
- Se acontecer alguma coisa de errado com o upgrade podemos executar o kubeadm upgrade apply –force, dessa forma podemos realizar o downgrade para a ultima versãso estáveis instalada.
- Durante o processo de upgrade, o kubeadm gera um backup no /etc/kubernetes/tmp
Em breve como adicionar nodes adcionais***
Links úteis:
-
Perform a version upgrade on a Kubernetes cluster using Kubeadm. - Kubernetes Documentation > Tasks > Administer a Cluster > Administration with kubeadm > Upgrading kubeadm clusters
-
Implement etcd backup and restore. - Kubernetes Documentation > Tasks > Administer a Cluster > Operating etcd clusters for Kubernetes