KUBERNETES мульти-мастер кластер

Всем привет, сегодня будем поднимать Kubernetes кластер на bare metal

Kubernetes сам по себе stateless, то есть он не хранит состояние кластера локально, а использует для этого etcd.
Будем использовать созданный раньше etcd кластер

Кластер состоит из n-го количества мастеров и n-го количества миньоны

Подготовка серверов

Kubernetes рекомендует использовать docker 17.03. Начнем с установки и настройки докера

Устанавливаем дополнительные пакеты:

Добавляем docker репозиторий:

Удаляем старые пакеты, если такие были:

Устанавливаем Docker пакеты:

Запускаем Docker:

Правим Docker конфиг:

Рестартуем Docker и ставим его в автозапуск:

Добавляем kubernetes репозиторий:

Устанавливаем kubernetes пакеты:

Добавляем kubelet в автозапуск и стартуем его:

Добавявлем параметры в systctl:

Применяем:

Мастер ноды

Прописываем в /etc/hosts наши мастера:

Теперь генерируем токен для:

Создаем директорию и файл конфигурации:

Правим файл:

Обозначения:

advertiseAddress IP адрес сервера
etcd endpoints IP адреса etcd серверов
apiServerExtraArgs backend Указывает версию etcd API
apiServerExtraArgs service-node-port-range Разрешает запускать сервисы на указанных портах
networking podSubnet Подсеть для подов
nodeName Хостнейм сервера
kubernetesVersion Версия kube-api
apiServerCertSANs IP и доменные имена мастер серверов
token Полученный токен
tokenTTL Время жизни токена

Теперь запустим инициализацию:

Если все прошло успешно то увидим соответствующее сообщение:

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run (as a regular user):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run «kubectl apply -f [podnetwork].yaml» with one of the options listed at:
http://kubernetes.io/docs/admin/addons/

You can now join any number of machines by running the following on each node
as root:

kubeadm join —token <token> <master-ip>:<master-port> —discovery-token-ca-cert-hash sha256:<hash>

Копируем конфиги:

Устанавливаем сеть, в данном примере используем flannel:

Если все прошло успешно то при запуске команды:

Получим:

NAME STATUS ROLES AGE VERSION
kube-m2 Ready master 3m v1.10.0

На другие мастер ноды копируем директорию /etc/kubernetes/pki. И выполняем команды:

Копируем config.yml и меняем advertiseAddress на IP адрес сервера:

Так же запускаем инициализацию:

Проверяем наши ноды:

Получаем:

NAME STATUS ROLES AGE VERSION
kube-m1 Ready master 10m v1.10.0
kube-m2 Ready master 2m v1.10.0

 Миньоны

На всех миньонах запускаем команду:

При выводе нод миньоны будут без roles. Что б это исправить выполняем:

Если все прошло удачно то увидим наши мастера и миньоны в выводе команды:

NAME STATUS ROLES AGE VERSION
kube-a1 Ready node 1d v1.10.0
kube-a2 Ready node 1d v1.10.0
kube-a3 Ready node 1d v1.10.0
kube-a4 Ready node 1d v1.10.0
kube-m1 Ready master 1d v1.10.0
kube-m2 Ready master 1d v1.10.0
kube-m3 Ready master 1d v1.10.0

На этом мы закончили с установкой кластера. В следующих статьях будем разворачивать приложения и мониторить состояние.