Как обновить Kubernetes Cluster без простоя

«Как обновить Kubernetes Cluster без простоя» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для обновления кластера Kubernetes без простоя применяется стратегия последовательного обновления узлов. Ключевой принцип — обновлять узлы по одному, перенося поды на другие узлы, чтобы обеспечить непрерывность работы приложений.

Процесс обновления Worker Nodes:

  1. Подготовка узла: Вывести узел из обслуживания, чтобы планировщик не назначал на него новые поды, и эвакуировать существующие поды.
    kubectl drain <node-name> --ignore-daemonsets --delete-emptydir-data

    Флаг --ignore-daemonsets необходим для DaemonSet'ов (например, сборщиков логов), которые должны оставаться на узле.

  2. Обновление: На самом узле обновить компоненты kubeadm, kubelet и kubectl.
    # Для узла на Ubuntu/Debian
    sudo apt-get update && sudo apt-get install -y kubeadm=<новая-версия> kubelet=<новая-версия> kubectl=<новая-версия>
    sudo kubeadm upgrade node
    sudo systemctl restart kubelet
  3. Возврат в строй: Вернуть узел в рабочее состояние.
    kubectl uncordon <node-name>
  4. Повторить шаги 1-3 для каждого worker-узла.

Процесс обновления Control Plane (для HA-кластера):

  1. Обновить kubeadm на первом control-plane узле.
  2. Выполнить kubeadm upgrade plan для проверки и kubeadm upgrade apply для обновления статических подов control plane.
  3. Обновить kubelet и kubectl на этом узле и перезапустить kubelet.
  4. Повторить для остальных control-plane узлов, выполняя только kubeadm upgrade node (так как кластер уже обновлен).

Важные проверки перед обновлением:

  • Изучить официальную документацию по обновлению для вашей версии.
  • Проверить совместимость версий между kube-apiserver и kubelet (обычно kubelet может быть на одну минорную версию старше).
  • Убедиться, что все критичные приложения имеют Pod Disruption Budgets (PDB) для контроля доступности во время drain.
  • Протестировать процесс на staging-окружении.