Kubernetes и DNS, часть 2

Продолжение темы DNS.

00:30 — имя системы внутри контейнера.
05:02 — файл /etc/hosts в контейнере
07:32 — файл /etc/resolv.conf в контейнере
09:56 — поиск ошибки
16:05 — ошибка dial tcp 10.233.0.3:53: i/o timeout
20:42 — логическая ошибка в /etc/resolv.conf

Файлы, используемые в видео: https://github.com/BigKAA/kubernetes-dns

Kubernetes и DNS

DNS в kubernetes. Как устроено, особенности установки DNS при помощи kubespray.

01:09 — теория
07:46 — домен кластера
09:08 — конфигурация coredns
12:43 — конфигурация nodelocaldns
20:27 — правила именования сервисов и подов

Установка кластера kubernetes при помощи Rancher.

Установка кластера kubernetes при помощи Rancher. (видео перезалито, добавлено немного плюшек.)

Иногда надо быстро.

Спонтанное видео, совсем без подготовки. На работе потребовалось разобраться с установкой кластера при помощи Rancher. Сделал тестовую среду и заодно записал видео.

nodelocaldns dial tcp 10.233.0.3:53: i/o timeout

Чудесная ошибка nodelocaldns

dial tcp 10.233.0.3:53: i/o timeout

Исходные данные

10.233.0.3, как наверное понятно из контекста — это DNS сервер кластера. Обычно этот IP используется при установке кластера кубернетес при помощи kubespray. На самом деле — это сервис типа ClusterIP, который перекидывает данные на два пода coredns. В системе это выглядит как то так:

# ipvsadm -Ln | grep -A2 10.233.0.3
TCP 10.233.0.3:53 rr
  -> 10.233.65.9:53 Masq 1 0 32
  -> 10.233.66.210:53 Masq 1 0 32

nodelocaldns, установленные на нодах кластера, пытаются до него достучаться по протоколу tcp.

Когда появляется ошибка

После добавления новой ноды в кластер при помощи kubespray. Что то типа такого:

 # ansible-playbook -i inventory/my-cluster/inventory.ini scale.yml

После этого все поды на новой ноде перестанут резолвить DNS имена. При этом прямое обращение по IP к coredns будет работать.

# telnet 10.233.65.9 53
Trying 10.233.65.9...
Connected to 10.233.65.9.
Escape character is '^]'.
Connection closed by foreign host.

А вот обращение на IP сервиса уже нет.

Как лечить

При добавлении ноды в кластер никогда не используйте scale.yml. Пользуйтесь только cluster.yml, Т.е. добавили новую ноду в инвентори файл и сразу cluster.yml.

Если всё же сначала сделали scale и получили ошибку, просто перезапустите плейбук cluster.yml. И все станет хорошо.

Kubernetes, volumes, configMap

Рассматриваем использование configMap для подключения конфигурационных файлов и переменных среды окружения.

Файлы, используемые в видео: https://github.com/BigKAA/kubernetes-volumes/tree/master/03-config

Kubernetes, volumes [02], hostPath

Тома типа hostPath

Запуск пода с правами определенного пользователя и группы.

Файлы, используемые в видео: https://github.com/BigKAA/kubernetes-volumes/tree/master/02-hostPath

Страница на моем web сайте: https://www.kryukov.biz/kubernetes/lokalnye-volumes/hostpath/