Ответ
При обновлении Kubernetes (особенно minor/major версий) сталкиваюсь со следующими проблемами:
1. Устаревание и удаление API (API Deprecation):
Манифесты, использующие deprecated API (например, extensions/v1beta1 для Deployments), перестанут работать. Перед обновлением необходимо провести аудит и миграцию.
# Используем kubectl convert для проверки и конвертации старых манифестов
kubectl convert -f old-deployment.yaml --output-version apps/v1
2. Изменения в поведении компонентов: Например, в версии 1.21 изменилась политика безопасности для PodSecurityPolicy, а в 1.25 она была полностью удалена, что требовало перехода на Pod Security Admission.
3. Несовместимость сетевых плагинов (CNI) или CSI-драйверов:
Плагин Calico или Cilium может требовать определенной версии kube-proxy или иметь свои ограничения.
4. Даунтайм рабочих нагрузок: При обновлении control-plane нод (особенно в self-managed кластерах) возможны кратковременные перебои в работе API-сервера и планировщика.
Моя стратегия безопасного обновления:
- План: Изучаю
kubeadm upgrade plan(для managed-сервисов — документацию провайдера) и changelog на предмет breaking changes. - Бэкап: Всегда делаю снапшот etcd и экспорт критических ресурсов через
kubectl get all -A -o yaml > backup.yaml. - Поэтапное обновление: Сначала обновляю одну worker-ноду, дренирую ее (
kubectl drain) и проверяю, что поды успешно переехали и работают. - Контроль: После обновления запускаю набор health-чеков и smoke-тестов для ключевых сервисов.