Как исправить плагин Flannel CNI. Ошибка: [плагин flannel не поддерживает версию конфигурации]

При установке Kubernetes с помощью я застрял на части установки и настройки плагина CNI. Я установил Flannel, но вижу ошибку в журналах kubelet, из-за которой поды coredns находятся в состоянии ожидания.

ОС: Centos7 k8s версия: 1.16 Для настройки кластера используется Kubeadm.

Я установил плагин с помощью: kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Это ошибка, которую я вижу в журналах Kubelet:

Sep 21 04:47:29 peteelizalde2c kubelet: W0921 04:47:29.897759   17817 cni.go:202] Error validating CNI config &{cbr0  false [0xc000fb3ee0 0xc000fb3f60] [123 10 32 32 34 110 97 109 101 34 58 32 34 99 98 114 48 34 44 10 32 32 34 112 108 117 103 105 110 115 34 58 32 91 10 32 32 32 32 123 10 32 32 32 32 32 32 34 116 121 112 101 34 58 32 34 102 108 97 110 110 101 108 34 44 10 32 32 32 32 32 32 34 100 101 108 101 103 97 116 101 34 58 32 123 10 32 32 32 32 32 32 32 32 34 104 97 105 114 112 105 110 77 111 100 101 34 58 32 116 114 117 101 44 10 32 32 32 32 32 32 32 32 34 105 115 68 101 102 97 117 108 116 71 97 116 101 119 97 121 34 58 32 116 114 117 101 10 32 32 32 32 32 32 125 10 32 32 32 32 125 44 10 32 32 32 32 123 10 32 32 32 32 32 32 34 116 121 112 101 34 58 32 34 112 111 114 116 109 97 112 34 44 10 32 32 32 32 32 32 34 99 97 112 97 98 105 108 105 116 105 101 115 34 58 32 123 10 32 32 32 32 32 32 32 32 34 112 111 114 116 77 97 112 112 105 110 103 115 34 58 32 116 114 117 101 10 32 32 32 32 32 32 125 10 32 32 32 32 125 10 32 32 93 10 125 10]}: [plugin flannel does not support config version ""]
Sep 21 04:47:29 peteelizalde2c kubelet: W0921 04:47:29.897824   17817 cni.go:237] Unable to update cni config: no valid networks found in /etc/cni/net.d
Sep 21 04:47:32 peteelizalde2c kubelet: E0921 04:47:32.007379   17817 kubelet.go:2187] Container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

Вот стручки:

kubectl get pods --all-namespaces
NAMESPACE     NAME                                                                        READY   STATUS    RESTARTS   AGE
kube-system   coredns-5644d7b6d9-n4h5x                                                    0/1     Pending   0          114m
kube-system   coredns-5644d7b6d9-t2q54                                                    0/1     Pending   0          114m
kube-system   etcd-ip-10-29-89-124                      1/1     Running   0          113m
kube-system   kube-apiserver-ip-10-29-89-124            1/1     Running   0          113m
kube-system   kube-controller-manager-ip-10-29-89-124   1/1     Running   0          113m
kube-system   kube-flannel-ds-amd64-dqpzj                                                 1/1     Running   0          110m
kube-system   kube-proxy-vzlqb                                                            1/1     Running   0          114m
kube-system   kube-scheduler-ip-10-29-89-124            1/1     Running   0          113m

В /etc/cni/net.d есть файл с именем 10-flannel.conflist. Его содержание:

{
  "name": "cbr0",
  "plugins": [
    {
      "type": "flannel",
      "delegate": {
        "hairpinMode": true,
        "isDefaultGateway": true
      }
    },
    {
      "type": "portmap",
      "capabilities": {
        "portMappings": true
      }
    }
  ]
}

person Himanshu Chowdhary    schedule 21.09.2019    source источник


Ответы (3)


Принятое решение неполное и вызовет головную боль.

Правильное решение сделать это изменение постоянным - отредактировать ConfigMap, созданную flannel в вашем кластере Kubernetes. В противном случае файл будет воссоздан при следующем заполнении томов фланелевых модулей с помощью ConfigMap (например, при перезагрузке узла).

Используйте kubectl edit cm -n kube-system kube-flannel-cfg, чтобы отредактировать ConfigMap, предоставленную flannel, и добавить недостающую строку:

  5 apiVersion: v1
  6 data:
  7   cni-conf.json: |
  8     {
  9       "name": "cbr0",
 10       "cniVersion": "0.2.0",
 11       "plugins": [

Перезагрузите узел или, в качестве альтернативы, внесите изменения вручную в /etc/cni/net.d/10-flannel.conflist, а затем сделайте systemctl restart kubelet, чтобы пропустить перезагрузку.

person eirikrye    schedule 24.09.2019

В конфигурации файла /etc/cni/net.d/10-flannel.conflist отсутствовал ключ cniVersion.

Добавление "cniVersion": "0.2.0" решило проблему.

person Himanshu Chowdhary    schedule 21.09.2019
comment
Подтвердите, что это решило мою проблему, хотя я не уверен, подходит ли мне версия 0.2.0. Как вы пришли к этой версии? - person Nico Balestra; 21.09.2019
comment
Подтверждено также. - person Thomas Welsch; 21.09.2019
comment
Подтверждено, что это также решило мою проблему. Kubernetes 1.16 Ubuntu 18 - person Shams Mali; 23.09.2019
comment
Это решило сообщение об ошибке, но модуль coredns выдает ошибку и вылетает из-за ошибки, так как [FATAL] plugin / loop: Loop (127.0.0.1:44415 - ›: 53) обнаружен для зоны. - person Chakri; 24.09.2019
comment
с Ubuntu и выше изменения codedns вошли в цикл, который произошел из-за сервера имен 127.0.1.1 в /etc/resolv.conf. Избегая этого, используя шаги hiroom2.com/2017/08/24/ubuntu-1610-nameserver-127-0-0-1-en это сработало. CoreDNS теперь работает - person Chakri; 24.09.2019
comment
Пожалуйста, посмотрите мое решение. Это сломается при следующей перезагрузке узла, поскольку файл заполняется из Kubernetes ConfigMap. - person ponycat; 24.09.2019
comment
Да, @ponycat, это исправление, ваше решение - долгосрочное исправление. - person Himanshu Chowdhary; 27.09.2019

Спасибо, это помогло мне, так как это было препятствием для шоу

https://github.com/Microsoft/SDN/blob/master/Kubernetes/flannel/l2bridge/cni/config/cni.conf, чтобы узнать точное местонахождение «cniVersion»: «0.2.0».

person cyril_thank    schedule 24.09.2019
comment
не уверен, что это только я. Но после того, как я перезагрузил главный сервер, директива cniVersion: 0.2.0 ”снова пропала, и мне пришлось снова обновить файл. - person cyril_thank; 24.09.2019
comment
См. Принятый ответ. Карта конфигурации - это то, что нужно отредактировать. medium.com / @ yonahdissen / - person Yonah Dissen; 11.11.2019