Kubernetes CoreDNS в CrashLoopBackOff на рабочем узле

Я искал CoreDns в CrashLoopBackOff, но мне ничего не помогло.

Мой набор

k8s - v1.20.2
CoreDns-1.7.0
Установлен kubespray вместе с этим https://kubernetes.io/ko/docs/setup/production-environment/tools/kubespray

Моя проблема

Модули CoreDNS на главном узле находятся в рабочем состоянии, а модули coreDns на рабочем узле находятся в состоянии crashLoopBackOff.

введите здесь описание изображения

kubectl logs -f coredns-847f564ccf-msbvp -n kube-system
.:53
[INFO] plugin/reload: Running configuration MD5 = 5b233a0166923d642fdbca0794b712ab
CoreDNS-1.7.0
linux/amd64, go1.14.4, f59c03d
[INFO] SIGTERM: Shutting down servers then terminating
[INFO] plugin/health: Going into lameduck mode for 5s

Контейнер CoreDns некоторое время запускает команду / coredns -conf /etc/resolv.conf, а затем уничтожается.

введите здесь описание изображения

Вот Corefile

Corefile: |
    .:53 {
        errors
        health {
            lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods insecure
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
          prefer_udp
        }
        cache 30
        loop
        reload
        loadbalance
    }

И одно из событий разбитого стручка

kubectl get event --namespace kube-system --field-selector involvedObject.name=coredns-847f564ccf-lqnxs
LAST SEEN   TYPE      REASON      OBJECT                         MESSAGE
4m55s       Warning   Unhealthy   pod/coredns-847f564ccf-lqnxs   Liveness probe failed: Get "http://10.216.50.2:8080/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
9m59s       Warning   BackOff     pod/coredns-847f564ccf-lqnxs   Back-off restarting failed container

А вот описание CoreDns

Containers:
  coredns:
    Container ID:  docker://a174cb3a3800181d1c7b78831bfd37bbf69caf60a82051d6fb29b4b9deeacce9
    Image:         k8s.gcr.io/coredns:1.7.0
    Image ID:      docker-pullable://k8s.gcr.io/coredns@sha256:73ca82b4ce829766d4f1f10947c3a338888f876fbed0540dc849c89ff256e90c
    Ports:         53/UDP, 53/TCP, 9153/TCP
    Host Ports:    0/UDP, 0/TCP, 0/TCP
    Args:
      -conf
      /etc/coredns/Corefile
    State:          Running
      Started:      Wed, 21 Apr 2021 21:51:44 +0900
    Last State:     Terminated
      Reason:       Completed
      Exit Code:    0
      Started:      Wed, 21 Apr 2021 21:44:42 +0900
      Finished:     Wed, 21 Apr 2021 21:46:32 +0900
    Ready:          False
    Restart Count:  9943
    Limits:
      memory:  170Mi
    Requests:
      cpu:        100m
      memory:     70Mi
    Liveness:     http-get http://:8080/health delay=0s timeout=5s period=10s #success=1 #failure=10
    Readiness:    http-get http://:8181/ready delay=0s timeout=5s period=10s #success=1 #failure=10
    Environment:  <none>
    Mounts:
      /etc/coredns from config-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from coredns-token-qqhn6 (ro)
Conditions:
  Type              Status
  Initialized       True
  Ready             False
  ContainersReady   False
  PodScheduled      True
Volumes:
  config-volume:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      coredns
    Optional:  false
QoS Class:       Burstable
Node-Selectors:  kubernetes.io/os=linux
Tolerations:     node-role.kubernetes.io/control-plane:NoSchedule
                 node-role.kubernetes.io/master:NoSchedule
                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                       From     Message
  ----     ------     ----                      ----     -------
  Normal   Pulled     18m (x9940 over 30d)      kubelet  Container image "k8s.gcr.io/coredns:1.7.0" already present on machine
  Warning  Unhealthy  8m37s (x99113 over 30d)   kubelet  Liveness probe failed: Get "http://10.216.50.2:8080/health": context deadline exceeded (Client.Timeout exceeded while awaiting headers)
  Warning  BackOff    3m35s (x121901 over 30d)  kubelet  Back-off restarting failed container

На этом этапе любое предложение будет полезно.

Я нашел кое-что странное. Я тестирую в node1, я могу получить доступ к модулю Coredns в node2, но я не могу получить доступ к модулю Coredns в node1. Я использую бязь для cni

в node1, coredns1 - 1.1.1.1 в node2, coredns2 - 2.2.2.2

в node1.

  • доступ 1.1.1.1:8080/health - ›тайм-аут
  • доступ 2.2.2.2:8080/health - ›ок

в node2.

  • доступ 1.1.1.1:8080/health - ›ок
  • доступ 2.2.2.2:8080/health - ›тайм-аут

person JovialCoding    schedule 21.04.2021    source источник
comment
CoreDNS, получающий SIGTERM, звучит так, как будто его могут убить из-за сбоя зонда. Можете ли вы попытаться описать один из модулей, просмотреть события, чтобы проверить, не работают ли зонды?   -  person AndD    schedule 21.04.2021
comment
Зонд живучести вышел из строя. но когда контейнер CoreDns запускает команду / coredns -conf /etc/resolv.conf curl 10.216.50.2:8080/health было в порядке   -  person JovialCoding    schedule 21.04.2021
comment
Привет, @JovialCoding, и добро пожаловать в StackOverflow! Не могли бы вы показать нам полную livenessProbe конфигурацию, отредактировав вопрос?   -  person Wytrzymały Wiktor    schedule 21.04.2021
comment
@ WytrzymałyWiktor Спасибо за теплый прием. Я отредактировал вопрос и поместил описание Coredns ниже   -  person JovialCoding    schedule 21.04.2021
comment
Привет, @JovialCoding. Извините за поздний ответ. Возможно, проблема в вашем ReadinessProbe. Вы пробовали изменить метод датчика с httpGet на простой exec?   -  person Wytrzymały Wiktor    schedule 29.04.2021
comment
Привет @ WytrzymałyWiktor Спасибо за комментарий, я попробую и оставлю результат.   -  person JovialCoding    schedule 03.05.2021
comment
Привет @JovialCoding. Какой-либо прогресс?   -  person Wytrzymały Wiktor    schedule 10.05.2021
comment
Привет @ WytrzymałyWiktor Я не пробовал использовать метод exec probe. Но я обнаружил странную ситуацию и упомянул об этом в вопросе. проверьте это пожалуйста   -  person JovialCoding    schedule 13.05.2021
comment
Привет @JovialCoding. Спасибо за ваш ответ. Не могли бы вы проверить, могут ли ваши поды связываться между узлами?   -  person Wytrzymały Wiktor    schedule 20.05.2021
comment
Да, может. Поды могут обмениваться данными между разными узлами. но на том же узле они не могли.   -  person JovialCoding    schedule 24.05.2021


Ответы (1)


Если Containerd и Kubelet находятся под прокси-сервером, добавьте диапазон частных IP-адресов: 10.0.0.0/8 в конфигурацию NO_PROXY, чтобы убедиться, что они могут извлекать образы. Например:

[root@dev-systrdemo301z phananhtuan01]# cat /etc/systemd/system/containerd.service.d/proxy.conf
[Service]
Environment="HTTP_PROXY=dev-proxy.prod.xx.local:8300"
Environment="HTTPS_PROXY=dev-proxy.prod.xx.local:8300"
Environment="NO_PROXY=localhost,127.0.0.0/8,100.67.253.157/24,10.0.0.0/8"

См. в этой статье.

person Tuan Phan    schedule 23.05.2021
comment
Привет @JovialCoding. Отвечает ли это на ваш вопрос? - person Wytrzymały Wiktor; 28.05.2021