Это примерный процесс обновления, который проверен на версиях 1.15-1.18 На более поздних версиях этот процесс должен быть сильно проще, особенно в плане обновления сертификата kubelet на master-нодах
На master-нодах
- Обновить сертификаты компонентов кубера с помощью kubeadm
for cert in apiserver apiserver-kubelet-client front-proxy-client admin.conf controller-manager.conf scheduler.conf; do /usr/local/bin/kubeadm alpha certs renew $cert; done - Обновить сертификаты kubelet
#!/bin/bash set -eu -o pipefail ## kubelet kube_dir="/etc/kubernetes" ### v3 extensions settings cat << EOF > ${kube_dir}/v3_ext keyUsage=keyEncipherment,digitalSignature extendedKeyUsage=clientAuth EOF ### get cert and key cat ${kube_dir}/kubelet.conf | grep certificate-data | awk '{print $2}' | base64 -d > ${kube_dir}/kubelet.crt cat ${kube_dir}/kubelet.conf | grep key-data | awk '{print $2}' | base64 -d > ${kube_dir}/kubelet.key ### generate csr and sign it openssl x509 -x509toreq -in ${kube_dir}/kubelet.crt -out ${kube_dir}/kubelet.csr -signkey ${kube_dir}/kubelet.key openssl x509 -req -in ${kube_dir}/kubelet.csr -CA ${kube_dir}/ssl/ca.crt -CAkey ${kube_dir}/ssl/ca.key -CAcreateserial -out ${kube_dir}/kubelet.crt -days 365 -extfile ${kube_dir}/v3_ext ### insert cert to kubelet.conf cert_data=$(cat ${kube_dir}/kubelet.crt | base64 -w0) sed -i "s/client-certificate-data: .*$/client-certificate-data: $cert_data/" ${kube_dir}/kubelet.conf rm -f ${kube_dir}/kubelet.csr ${kube_dir}/kubelet.crt ${kube_dir}/kubelet.key ${kube_dir}/v3_ext
Это же можно сделать проще
/usr/local/bin/kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) >/etc/kubernetes/kubelet.confДля версии >=1.20 можно также задать cluster-name
/usr/local/bin/kubeadm alpha kubeconfig user --org system:nodes --client-name system:node:$(hostname) --cluster-name cluster.local >/etc/kubernetes/kubelet.conf
- Перезапустить docker и kubelet
systemctl restart docker kubelet
На worker-нодах надо что-то делать только если уже не было включено автоматическое обновление
Включить автоматическое обновление сертификата kubelet
grep -Fr rotateCertificates /etc/kubernetes/kubelet-config.yaml || echo "rotateCertificates: true" >> /etc/kubernetes/kubelet-config.yamlПерезапустить kubelet
systemctl restart kubelet
