Kubernetes cluster from scratch. Часть 1. Планирование. Предварительная настройка.
[kubernetes
k8s
]
Данной записью хочу начать серию постов о развертывании кластера kubernetes с нуля (from scratch). На данный момент существует несколько дистрибутивов, облегчающих операцию развертывания кластера. Список доступных установщиков есть здесь и здесь. Но что бы понять как работает кластер, какие компоненты есть и как они взаимодействуют, было решено пройти всю процедуру по шагам самостоятельно, без какой либо сторонней автоматизации.
Предварительный план постов:
- Часть 1. Планирование. Предварительная настройка. Установка утилит.
- Часть 2. Генерация сертификатов.
- Часть 3. Генерация Kubernetes Config Files.
- Часть 4. Генерация Data Encryption Config и Encryption Key.
- Часть 5. Установка и конфигурирование etcd
- Часть 6. Установка и конфигурирование flannel.
- Часть 7. Установка и конфигурирования master.
- Часть 8. Установка и конфигурирование worker nodes.
- Часть 9. Деплой DNS Add-on’а
- Чать 10. Проверка работоспособности.
В данном цикле описано создание кластера из четырех серверов. Операционная система - Centos 7. Распределение ролей по серверам:
knode01 (10.3.0.201) - masternode01 (10.3.0.201) - worker node 01node02 (10.3.0.202) - worker node 02knode04 (10.3.0.223) - etcd
Каждая роль требует установки следующих компонент:
Master
- Kubernetes
- API Server
- Scheduler
- Controller Manager
- Flannel
- iptables
Worker Nodes
- Kubernetes
- kubelet
- kube-proxy
- Flannel daemon
- Docker
- iptables
etcd
- собственно сам etcd, который является хранилицем типа ключ-значение.
Прежде чем перейти к практической части, необходимо подготовить некоторые данные.
POD_NETWORK=100.64.0.0/16 - подсеть, которая будет использоваться для overlay network. Из нее будут выделяться IP адреса для pod’ов.
SERVICE_CLUSTER_IP_RANGE="100.65.0.0/24" - подсеть, которая будет использоваться только для services в kubernetes кластере.
KUBE_DNS="100.65.0.10" - адрес сервиса DNS, взят из SERVICE_CLUSTER_IP_RANGE.
MASTER_IP="10.3.0.201" - физический IP адрес сервера с master ролями.
CLUSTER_NAME="dev-kube-cluster" - имя кластера
K8S_SERVICE_IP=100.65.0.1 # IP адрес Kubernetes API Service. K8S_SERVICE_IP будет первым IP адресом из подсети SERVICE_IP_RANGE. Первый IP адрес из сети 100.65.0.0/24 будет 100.65.0.1.
Подготовка серверов.
Нижеописанные действия нужно выполнить на каждом сервере, который будет в кластере.
- Добавляем в файл
/etc/hostsзаписи:10.3.0.211 node01 10.3.0.202 node02 10.3.0.201 knode01 10.3.0.223 knode04 - Файл /etc/resolv.conf:
# Generated by NetworkManager nameserver 10.3.0.2 nameserver 10.3.0.4 - Отключаем selinux
# cat /etc/sysconfig/selinux SELINUX=disabled - Останавливаем и отключаем firewalld
# systemctl stop firewalld # systemctl disable firewalld - Отключаем swap, так как kubelet требует отключенного swap на машине (можно использовать флаг –fail-swap-on для kubelet)
[root@knode02 cert_nodes]# swapoff -aНужно закомментировать или удалить строки связанные с типом fs - swap
[root@knode02 cert_nodes]# vim /etc/fstab #/dev/mapper/centos-swap swap swap defaults 0 0 -
Устанавливаем docker-ce (официальная документация тут)
- Если стоит старая версия, ее нужно удалить:
# yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine - Устанавливаем утилиты:
# yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 - Добавляем репозиторий:
# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo - Устанавливаем последнюю стабильную версию docker-ce:
# yum install docker-ce docker-ce-cli containerd.io - Запускаем демон и добавляем его в автозагрузку:
# systemctl start docker # systemctl enable docker
- Если стоит старая версия, ее нужно удалить:
- На этом подготоврительные процедуры заверщены. Перезагружаем все сервера для применения изменений.
# reboot now
