ФАТАЛЬНАЯ ОШИБКА: ConfigMap “kubeadm-config” в пространстве имен “kube-system” не найден.

Вопрос или проблема

Я недавно обновил kubeadm, kubelet и kubectl до версии 1.30 и провел повторную инициализацию кластера с помощью

sudo kubeadm init phase kubeconfig admin --kubeconfig-dir /tmp/backup/kubelet/$NODE --apiserver-advertise-address $APIIP --cert-dir /etc/kubernetes/

Когда я выполняю

kubectl get nodes

Я вижу свой мастер и узел 1, но мастер все еще на старой версии 1.26 и состояние = NotReady
введите описание изображения здесь

Я попробовал

sudo kubeadm upgrade plan v1.30 --v=5

Я получаю следующую ошибку

[upgrade/config] Используйте ‘kubeadm init phase upload-config –config your-config.yaml’, чтобы повторно загрузить его. ConfigMap “kubeadm-config” в пространстве имен “kube-system” не был найден
k8s.io/kubernetes/cmd/kubeadm/app/cmd/upgrade.enforceRequirements

Когда я выполняю

kubectl -n kube-system get cm kubeadm-config -o yaml

Я вижу, что этот конфигурационный файл существует, но не уверен в форме файла на жестком диске

kubectl -n kube-system get cm kubeadm-config -o yaml apiVersion: v1
data: ClusterConfiguration: |
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.k8s.io
kind: ClusterConfiguration
kubernetesVersion: v1.26.4
networking:
dnsDomain: cluster.local
podSubnet: 10.10.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {} kind: ConfigMap metadata: creationTimestamp: “2023-04-14T14:47:57Z” name: kubeadm-config namespace: kube-system
resourceVersion: “224” uid: db3c3f16-9b13-47c1-abfc-09a7322afbcd

Так нужно ли мне создать физический файл и загрузить его? Если да, то как, пожалуйста? Заранее спасибо

Ответ или решение

Проблема с ConfigMap "kubeadm-config": Анализ и Решения

Введение

Ваша ситуация с ошибкой FATAL: the ConfigMap "kubeadm-config" in the "kube-system" namespace was not found после обновления компонентов Kubernetes до версии 1.30 и повторной инициализации кластера достаточно распространена. Давайте подробно разберем, что произошло и как можно исправить эту ошибку.

Анализ Проблемы

Согласно вашему описанию, вы обновили kubeadm, kubelet и kubectl, но столкнулись с тем, что master-узел по-прежнему работает на версии 1.26 и находится в состоянии NotReady. Это может быть связано с несколькими факторами:

  1. Неправильная конфигурация кластера: kubeadm требует, чтобы конфигурационные файлы были актуальными для версии, на которую вы пытаетесь обновиться.
  2. Отсутствие ConfigMap: Ошибка указывает на то, что ConfigMap kubeadm-config, содержащий настройки вашего кластера, отсутствует или у него устаревшие данные.

Проверка Состояния ConfigMap

Когда вы выполнили команду:

kubectl -n kube-system get cm kubeadm-config -o yaml

Вы подтвердили, что ConfigMap существует, но данные в нему указывают на устаревшую версию кластера (v1.26.4). В этом случае kubeadm не может корректно выполнить апгрейд, так как нужные параметры отсутствуют или неверны.

Решение Проблемы

Для решения проблемы, следуйте приведенным ниже шагам:

  1. Создание конфигурационного файла:
    Вам необходимо создать файл конфигурации YAML, если его нет, или обновить существующий. Пример конфигурации:

    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    metadata:
     name: kubeadm-config
    ...
    networking:
     ...

    Обратите внимание на то, что необходимо указать актуальные параметры, соответствующие версии Kubernetes, которую вы собираетесь использовать.

  2. Создание ConfigMap:
    Теперь, после создания (или обновления) конфигурационного файла, загрузите его в Cluster:

    sudo kubeadm init phase upload-config --config <path-to-your-config-file>
  3. Обновление кластера:
    После успешной загрузки конфигурации попробуйте снова выполнить апгрейд:

    sudo kubeadm upgrade plan v1.30 --v=5
  4. Проверка состояния узлов:
    Убедитесь, что все узлы находятся в состоянии Ready. Для этого выполните:

    kubectl get nodes

Заключение

Если выполненные шаги не исправили ситуацию, обязательно проверьте журналы kubelet на мастер-узле для получения дополнительной информации о проблемах. Обратите внимание на возможные конфликты версий и потери соединения с компонентами кластера.

Понимание процессов управления кластером Kubernetes и их конфигураций критично для успешного администрирования высокодоступных систем. Надеюсь, эти рекомендации помогут вам разрешить возникшую ситуацию. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...