Установка Jenkins в Kubernetes

Первое видео

Как установить Jenkins в kubernetes, руками без хелмчартов.
Как заставить kubernetes (docker) работать с частным хранилищем docker образов по https с «левым» сертификатом

  • 01:32 — схема.
  • 02:59 — собираем кастом контейнеры.
  • 08:30 — подключаем кастомное хранилище по https.
  • 15:23 — деплоим Jenkins.

Файлы, используемые в видео: https://github.com/BigKAA/youtube/tree/master/jenkins

Второе видео.

Продолжение видео по установке Jenkins:

  • 00:25 — Настройка плагина kubernetes
  • 06:10 -Тесовый pipeline
  • 07:36 — Сборка и деплой приложения.

Kubernetes, StatefulSet, Nexus

Хороший пример для объяснения зачем нужен StatefulSet. Начало серии видео по devops инструментам в кубернетес. Nexus внутри kubernetes, делаем свой docker registry.

  • 03:43 — Про Nexus, общие вопросы выбора технологии деплоймента.
  • 06:40 — StatefulSet — теория.
  • 10:54 — Namespace для nexus, LimitRange на namespace, проект в rancher.
  • 13:48 — Файлы деплоя nexus:
  • 14:20 — Headless service
  • 16:25 — StatefulSet
  • 21:09 — Service, ссылка на конкретный pod в StatefulSet. Вот оно!
  • 23:28 — Ingress.
  • 26:31 — Пароль админа nexus и первоначальная настройка nexus.
  • 27:49 — Настройка репозитория для хранения docker контейнеров. Пользователи и роли.
  • 32:00 — ssl порт и сертификат для репозитория.
  • 41-05 — пушим образы!

Файлы, используемые в видео: https://github.com/BigKAA/youtube/tree/master/nexus

Kubernetes RBAC

Role Based Access Control. Будем вводить ограничения.

Первое видео:

  • 00:44 — Теория.
  • 15:05 — «Добавление» пользователя
  • 24:19 — Файл config

Второе видео:

Role Based Access Control, продолжаем ограничивать права пользователей и приложений.

  • 01:36 — Создание простейшей роли.
  • 06:08 — Усложняем роль методом жалоб пользователей.
  • 11:57 — Поговорим о verbs.
  • 15:47 — pods/log и pods/exec
  • 19:22 — Приложения, токен.
  • 22:00 — ServiceAccount.

Файлы на Git hub: https://github.com/BigKAA/kubetest2

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, Persistent volume provisioner

Автоматическое создание PV.

Алгоритм работы provisioner.
Изменяем хранилище для метрик и логов Rancher.

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

Установка кластера 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. И все станет хорошо.