Если вы работаете или работали с Kubernetes, скорее всего, вы столкнулись с некоторыми из проблем, описанных здесь.
Это случается с лучшими из нас: вы приходите в офис в понедельник, ваша NMS вся в минусе, узлы кластера Kubernetes не работают, а балансировщик нагрузки не работает.
Я здесь, чтобы сэкономить вам время на устранение неполадок, рассмотрев типичные проблемы, которые я видел в своих собственных развертываниях.
Я занимаюсь разработкой и передовым кодом, и мне всегда нравится экспериментировать с новыми способами развертывания узлов Kubernetes и различных оверлейных сетей. Именно в этих развертываниях возникает большинство моих проблем с Kubernetes.
Давайте приступим.
Нет ответа от удаленного Kubectl
The connection to the server localhost:8080 was refused — did you specify the right host or port?
Большинство администраторов Kubernetes когда-то сталкивались с этой ошибкой. Это происходит, когда либо API Kubernetes недоступен по указанному URL-адресу, либо есть проблема с API Kubernetes.
Обратите внимание, что проблема с разрешениями в Kubernetes API, скорее всего, приведет к другой ошибке.
Для начала убедимся, что kubectl установлен и имеет правильную версию:
kubectl version
Результат должен быть примерно таким, как показано ниже:
Client Version: version.Info{Major:”1", Minor:”12", GitVersion:”v1.12.1", GitCommit:”4ed3216f3ec431b140b1d899130a69fc671678f4", GitTreeState:”clean”, BuildDate:”2018–10–05T16:46:06Z”, GoVersion:”go1.10.4", Compiler:”gc”, Platform:”linux/amd64"}
Если есть другие ошибки (команда не найдена и т. Д.):
- Убедитесь, что вы запускаете kubectl от имени пользователя, у которого есть доступ для выполнения команд kubectl.
- Убедитесь, что пути kubectl настроены правильно.
- По умолчанию kubectl не работает с учетной записью «root».
Если сам kubectl работает должным образом, мы можем перейти к устранению неполадок кластера.
ssh
к одному из ваших главных узлов:
ssh [email protected]
Одна из наиболее распространенных проблем - сбой службы etcd
на одном или нескольких главных узлах.
Вы можете проверить статус услуги через:
service etcd status
Если служба сообщает о мертвой, значит, проблема здесь.
Одна из наиболее распространенных причин сбоя службы etcd
(особенно после перезагрузки главного узла) заключается в том, что на узле включен свопинг. Это особенно актуально для кластеров под управлением kubeadm.
Как root, запустите:
swapoff -ased -i '/ swap / s/^/#/' /etc/fstab
Затем отключите запуск подкачки при загрузке:
nano /etc/fstab# Comment out the second line mentioning swap # Save the file
Своп также может повлиять на службу kubelet
.
Вы можете проверить статус услуги через:
service kubelet status
Вы также можете найти журналы обеих служб в /var/log
для дальнейшего устранения неполадок.
Выполните эти проверки на всем etcd
кластере (на всех главных узлах).
Теперь у вас должен быть исправный кластер, и kubectl должен работать.
Проблемы с постоянными объемами
Устранение неполадок постоянных томов состоит из двух частей:
- Устранение неполадок с претензиями на объем.
- Устранение неполадок с привязкой модуля тома.
Доступность тома
Первый шаг - проверить, видит ли кластер Kubernetes PV. Самый простой способ посмотреть PV в кластере - через панель управления Kubernetes.
Если у вас не установлена панель управления, у вас есть несколько вариантов:
- Получите приложение для iOS или Android под названием Kuber и подключитесь к своему кластеру.
- Настройте приборную панель. (Вот подробное руководство).
- Используйте kubectl.
Чтобы просмотреть PV через kubectl, запустите:
lyokowarrior@kube-client:~$ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 10Gi RWO Retain Bound default/task-pv-claim manual 20h
В приведенных выше выходных данных указан один исправный связанный том.
Общие шаги по устранению неполадок:
- Если вы используете NFS, убедитесь, что общие ресурсы NFS доступны для кластера.
- Убедитесь, что тома исправны и находятся в состоянии «привязка».
- Ознакомьтесь с примером руководства по PV здесь:
Служба недоступна
Распространенная проблема в любом кластере заключается в том, что развернутая служба недоступна при развертывании или становится недоступной по какой-либо причине.
Например, у нас есть развертывание HTTPD, работающее на порте 3182, который должен быть доступен в локальной сети через балансировщик нагрузки.
- Сценарий 1. Служба вообще недоступна. (Нет ответа от curl localhost: 3182).
- Сценарий 2: Услуга доступна только изнутри.
Распространенной проблемой здесь является то, что либо развертывание не было отображено правильно, либо что-то случилось с развертыванием служебных сообщений.
Еще раз, панель управления Kubernetes может помочь вам понять статус ваших сервисов. Если у вас нет панели инструментов, вы можете использовать kubectl.
Чтобы повторно развернуть службу:
kubectl delete service affected-service
(Замените имя службы своим собственным).
kubectl expose deployment affected-deployment -n=default --type=LoadBalancer --name=affected-service --external-ip=192.168.2.54 --port=3182
Воссоздайте выставленный сервис. (Замените имена, IP-адреса и пространства имен своими собственными).
Примечание. Проверьте конфигурацию модуля и убедитесь, что порт, который прослушивает сервер HTTPD, соответствует указанному порту.
Не могу войти в Личный кабинет
Панели мониторинга на автономных кластерах Kubernetes могут быть непростыми. Распространенная проблема - невозможность войти в панель управления.
Токен требуется для входа в большинство установок, и первый шаг - проверить, работает ли токен и был ли выбран правильный:
kubectl get secrets -n=kube-system | grep dashboard
Должен появиться список всего secrets
, относящегося к приборной панели. Если ничего не отображается, возможно, что-то не так с развертыванием панели мониторинга.
Ознакомьтесь с моим руководством по развертыванию или по одной из приведенных ниже ссылок с инструкциями по развертыванию информационной панели.
Теперь давайте получим содержимое secret
:
kubectl describe secret kubernetes-dashboard-token-xxx0x-n=kube-system
(Замените имя secret
именем из списка из предыдущего шага).
Скопируйте и вставьте secret
на страницу входа в панель управления. Теперь вы можете войти в систему.
Распространенной проблемой является ошибка аутентификации HTTP при попытке доступа к панели управления.
Обходной путь - использовать Firefox, поскольку он не так строг, как некоторые другие браузеры, при проверке действительности веб-сайта. Фактическим решением этой проблемы является повторное развертывание панели мониторинга в поддерживаемой конфигурации развертывания.
Примечание. Чтобы полностью удалить все компоненты приборной панели:
kubectl delete deployment kubernetes-dashboard --namespace=kube-system
kubectl delete service kubernetes-dashboard --namespace=kube-system
kubectl delete role kubernetes-dashboard-minimal --namespace=kube-system
kubectl delete rolebinding kubernetes-dashboard-minimal --namespace=kube-system
kubectl delete sa kubernetes-dashboard --namespace=kube-system
kubectl delete secret kubernetes-dashboard-certs --namespace=kube-system
kubectl delete secret kubernetes-dashboard-key-holder --namespace=kube-system
Убедитесь, что все компоненты панели управления удалены:
kubectl get secret,sa,role,rolebinding,services,deployments --namespace=kube-system | grep dashboard
Как всегда, приветствую комментарии и вопросы.
Ресурсы
Чтобы ознакомиться с полными руководствами по приборной панели, посмотрите:
~ Павел