CoreDNS не работает в кластере Kubernetes
Я пытаюсь настроить кластер Kubernetes, но не могу запустить CoreDNS. Я запустил следующее, чтобы запустить кластер:
sudo swapoff -a
sudo sysctl net.bridge.bridge-nf-call-iptables=1
sudo kubeadm init
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s- version=$(kubectl version | base64 | tr -d '\n')"
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
Чтобы проверить POD с kubectl get pods --all-namespaces
, Я получил
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-68fb79bcf6-6s5bp 0/1 CrashLoopBackOff 6 10m
kube-system coredns-68fb79bcf6-hckxq 0/1 CrashLoopBackOff 6 10m
kube-system etcd-myserver 1/1 Running 0 79m
kube-system kube-apiserver-myserver 1/1 Running 0 79m
kube-system kube-controller-manager-myserver 1/1 Running 0 79m
kube-system kube-proxy-9ls64 1/1 Running 0 80m
kube-system kube-scheduler-myserver 1/1 Running 0 79m
kube-system kubernetes-dashboard-77fd78f978-tqt8m 1/1 Running 0 80m
kube-system weave-net-zmhwg 2/2 Running 0 80m
Так что CoreDNS продолжает падать. Единственные сообщения об ошибках, которые я мог найти, были от/var/log/syslog
:
Oct 4 18:06:44 myserver kubelet[16397]: E1004 18:06:44.961409 16397 pod_workers.go:186] Error syncing pod c456a48b-c7c3-11e8-bf23-02426706c77f ("coredns-68fb79bcf6-6s5bp_kube-system(c456a48b-c7c3-11e8-bf23-02426706c77f)"), skipping: failed to "StartContainer" for "coredns" with CrashLoopBackOff: "Back-off 5m0s restarting failed container=coredns pod=coredns-68fb79bcf6-6s5bp_kube-system(c456a48b-c7c3-11e8-bf23-02426706c77f)"
и из kubectl logs coredns-68fb79bcf6-6s5bp -n kube-system
:
.:53
2018/10/04 11:04:55 [INFO] CoreDNS-1.2.2
2018/10/04 11:04:55 [INFO] linux/amd64, go1.11, eb51e8b
CoreDNS-1.2.2
linux/amd64, go1.11, eb51e8b
2018/10/04 11:04:55 [INFO] plugin/reload: Running configuration MD5 = f65c4821c8a9b7b5eb30fa4fbc167769
2018/10/04 11:04:55 [FATAL] plugin/loop: Seen "HINFO IN 3256902131464476443.1309143030470211725." more than twice, loop detected
Некоторые решения, которые я нашел, должны выпустить
kubectl -n kube-system get deployment coredns -o yaml | \
sed 's/allowPrivilegeEscalation: false/allowPrivilegeEscalation: true/g' | \
kubectl apply -f -
и изменить /etc/resolv.conf
указывать на реальный DNS, а не на localhost, который я тоже пробовал.
Проблема описана в https://kubernetes.io/docs/setup/independent/troubleshooting-kubeadm/, и я пробовал много разных сетей Pod, но без помощи.
Я бегал sudo kubeadm reset && rm -rf ~/.kube/ && sudo kubeadm init
несколько раз.
Я использую Ubuntu 16.04, Kubernetes 1.12 и Docker 17.03. Есть идеи?
4 ответа
У меня тоже есть такая же проблема.
Я решил эту проблему, удалив плагин "петли" в см coredns. но я не знаю, будет ли это облако причиной других проблем.
1 edit kubectl edit cm coredns -n kube-system
2 、 удалить "цикл", сохранить и выйти
3、 перезапустите стручки cornns: "kubctel удалить стручки cornns.... -n kube-system"
В некоторой степени решается с помощью этого способа:
- откройте и отредактируйте конфигурационную карту сердечников.
kubectl edit cm coredns -n kube-system
- msgstr "замена прокси. /etc/resolv.conf на ip-адрес вашего вышестоящего DNS, например прокси. 8.8.8.8." По ссылке в выводе журнала coredns (в конце страницы)
- Сохранить и выйти.
kubectl get pods -n kube-system -oname | grep coredns | xargs kubectl удалить -n kube-system
Причина проблемы объяснена в ссылке. Вы можете найти эту ссылку в выходных данных этого cmd
kubectl logs coredns-7d9cd4f75b-cpwxp -n kube-system
Эта ссылка находится в выходных данных CoreDNS-1.2.4.
Я обновляю CoreDNS, используя этот cmd
Развертывание исправления kubectl -n=kube-system coredns -p '{"spec": {"template": {"spec":{"Containers":[{"image":"k8s.gcr.io/coredns:1.2.4", "name":"coredns","resources":{"limit ":{"memory":"1Gi"}," questions":{"cpu":"100m","memory":"70Mi"}}}]}}}}"
Я думаю просто удали loop
Функция от Kubernetes не является чистым подходом. CoreDNS Github предоставляет некоторые рекомендации по устранению неполадок в этой проблеме.
Они предлагают в своем руководстве около 3 подходов
- Добавьте следующее в kubelet: --resolv-conf . Ваш "настоящий" resolv.conf - это тот, который содержит фактические IP-адреса ваших вышестоящих серверов, а не локальный адрес / адрес обратной связи. Этот флаг указывает kubelet передавать альтернативный resolv.conf в Pods. Для систем, использующих systemd-resolved, /run/systemd/resolve/resolv.conf обычно является местоположением "реального" resolv.conf, хотя это может отличаться в зависимости от вашего дистрибутива.
- Отключите локальный кэш DNS на узлах узла и восстановите /etc/resolv.conf в исходное состояние.
- Быстрое и грязное решение - отредактировать ваш Corefile, заменив прокси. /etc/resolv.conf с IP-адресом вышестоящего DNS, например прокси. 8.8.8.8. Но это только устраняет проблему для CoreDNS, kubelet продолжит пересылать недопустимый resolv.conf всем модулям dnsPolicy по умолчанию, оставляя их неспособными разрешить DNS.
Мое решение было удалить --network-plugin=cni
в /var/lib/kubelet/kubeadm-flags.env
Да ты прав. Проблема была описана здесь и на GitHub. И разрешение заключается в том, чтобы обновить Docker, отключить SElinux или изменить allowPrivilegeEscalation
в true
, Однако сегодня я попытался воспроизвести вашу проблему и не смог этого сделать. Предоставляя вам команды и вывод, возможно, это поможет вам создать рабочую версию с самого начала.
Docker версии 17.03.2-ce, Kubernetes v1.12.0, Ubuntu 16.04, CoreDNS-1.2.2, экземпляр, созданный в GCP.
#apt-get update && apt-get install -y mc ebtables ethtool docker.io apt-transport-https curl
#curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
#cat <<EOF >/etc/apt/sources.list.d/kubernetes.list \
deb http://apt.kubernetes.io/ kubernetes-xenial main \
EOF
#apt-get update && apt-get install -y kubelet kubeadm kubectl
#kubeadm init
$mkdir -p $HOME/.kube
$sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$sudo chown $(id -u):$(id -g) $HOME/.kube/config
$kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
serviceaccount / weave-net создан
clusterrole.rbac.authorization.k8s.io/weave-net создан
clusterrolebinding.rbac.authorization.k8s.io/weave-net создан
role.rbac.authorization.k8s.io/weave-net создан
rolebinding.rbac.authorization.k8s.io/weave-net создан
daemonset.extensions/weave-net создан
$kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-576cbf47c7-6qbtq 0/1 Pending 0 79s
kube-system pod/coredns-576cbf47c7-jr6hb 0/1 Pending 0 79s
kube-system pod/etcd-kube-weave-master-1 1/1 Running 0 38s
kube-system pod/kube-apiserver-kube-weave-master-1 1/1 Running 0 28s
kube-system pod/kube-controller-manager-kube-weave-master-1 1/1 Running 0 30s
kube-system pod/kube-proxy-4p9l5 1/1 Running 0 79s
kube-system pod/kube-scheduler-kube-weave-master-1 1/1 Running 0 34s
kube-system pod/weave-net-z6mhw 0/2 ContainerCreating 0 8s
И снова через минуту:
$kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system pod/coredns-576cbf47c7-6qbtq 1/1 Running 0 98s
kube-system pod/coredns-576cbf47c7-jr6hb 1/1 Running 0 98s
kube-system pod/etcd-kube-weave-master-1 1/1 Running 0 57s
kube-system pod/kube-apiserver-kube-weave-master-1 1/1 Running 0 47s
kube-system pod/kube-controller-manager-kube-weave-master-1 1/1 Running 0 49s
kube-system pod/kube-proxy-4p9l5 1/1 Running 0 98s
kube-system pod/kube-scheduler-kube-weave-master-1 1/1 Running 0 53s
kube-system pod/weave-net-z6mhw 2/2 Running 0 27s
Описание стручка Coredns:
kubectl describe pod/coredns-576cbf47c7-6qbtq -n kube-system
Name: coredns-576cbf47c7-6qbtq
Namespace: kube-system
Priority: 0
PriorityClassName: <none>
Node: kube-weave-master-1/10.154.0.8
Start Time: Fri, 05 Oct 2018 11:06:54 +0000
Labels: k8s-app=kube-dns
pod-template-hash=576cbf47c7
Annotations: <none>
Status: Running
IP: 10.32.0.3
Controlled By: ReplicaSet/coredns-576cbf47c7
Containers:
coredns:
Container ID: docker://db1712600b4c927b99063fa41bc36c3346c55572bd63730fc993f03379fa457b
Image: k8s.gcr.io/coredns:1.2.2
Image ID: docker-pullable://k8s.gcr.io/coredns@sha256:3e2be1cec87aca0b74b7668bbe8c02964a95a402e45ceb51b2252629d608d03a
Ports: 53/UDP, 53/TCP, 9153/TCP
Host Ports: 0/UDP, 0/TCP, 0/TCP
Args:
-conf
/etc/coredns/Corefile
State: Running
Started: Fri, 05 Oct 2018 11:06:57 +0000
Ready: True
Restart Count: 0
Limits:
memory: 170Mi
Requests:
cpu: 100m
memory: 70Mi
Liveness: http-get http://:8080/health delay=60s timeout=5s period=10s #success=1 #failure=5
Environment: <none>
Mounts:
/etc/coredns from config-volume (ro)
/var/run/secrets/kubernetes.io/serviceaccount from coredns-token-wp7tm (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
config-volume:
Type: ConfigMap (a volume populated by a ConfigMap)
Name: coredns
Optional: false
coredns-token-wp7tm:
Type: Secret (a volume populated by a Secret)
SecretName: coredns-token-wp7tm
Optional: false
QoS Class: Burstable
Node-Selectors: <none>
Tolerations: CriticalAddonsOnly
node-role.kubernetes.io/master:NoSchedule
node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 23m (x12 over 24m) default-scheduler 0/1 nodes are available: 1 node(s) had taints that the pod didn't tolerate.
Normal Scheduled 23m default-scheduler Successfully assigned kube-system/coredns-576cbf47c7-6qbtq to kube-weave-master-1
Normal Pulled 23m kubelet, kube-weave-master-1 Container image "k8s.gcr.io/coredns:1.2.2" already present on machine
Normal Created 23m kubelet, kube-weave-master-1 Created container
Normal Started 23m kubelet, kube-weave-master-1 Started container
Также предоставьте config.yaml
что используется kubeadm init --config config.yaml
чтобы лучше понять вашу проблему с указанием расположения файла конфигурации.
Мое решение заключалось в том, чтобы удалить --network-plugin=cni в /var/lib/kubelet/kubeadmflags.env, а затем перезапустить компьютер, COredns будет запущен. Удачи
У меня тоже есть такая же проблема.
**Running**:
1 master + 2 nodes (all on Red Hat Enterprise Linux Server release 7.5 (Maipo))
**Docker**: 18.06.1-ce
**Kubernete**s-
Client Version: v1.12.0
Server Version: v1.12.0
**Core DNS**: CoreDNS-1.2.2
**Errors**:
[root@kubemast ~]# kubectl logs coredns-68fb79bcf6-2lk8k -n=kube-system
.:53
2018/10/05 15:14:30 [INFO] CoreDNS-1.2.2
2018/10/05 15:14:30 [INFO] linux/amd64, go1.11, eb51e8b
CoreDNS-1.2.2
linux/amd64, go1.11, eb51e8b
2018/10/05 15:14:30 [INFO] plugin/reload: Running configuration MD5 = f65c4821c8a9b7b5eb30fa4fbc167769
2018/10/05 15:14:36 [FATAL] plugin/loop: Seen "HINFO IN 5745769668098465527.4020143478923175228." more than twice, loop detected
[root@kubemast ~]#