3.12.2 Kubernetes - управление контейнеризованными приложениями
Настройка Master-node
Настройка рабочих нод
Окружение
- Версия РЕД ОС: 7.3
- Конфигурация: Сервер графический
- Версия ПО: kubernetes 1.21.5-1
Kubernetes — это программная платформа для автоматического управления контейнеризованными приложениями. Она предлагает базовые механизмы для их развертывания, масштабирования и поддержки.
Nodes (узлы, ноды) - физические или виртуальные машины, на которых разворачиваются и запускаются контейнеры с приложениями. Совокупность нод образует кластер Kubernetes.
Nodes бывают двух типов:
Master (мастер-нода) — узел, управляющий всем кластером. Он отслеживает остальные ноды и распределяет между ними нагрузку с помощью менеджера контроллеров и планировщика. Обычно master занимается только управлением и не берет на себя рабочие нагрузки. Для повышения отказоустойчивости необходимо наличие нескольких мастер-нод.
Worker (рабочие ноды) — узлы, на которых работают контейнеры. В зависимости от параметров ноды (объема памяти и центрального процессора) на одном узле может работать большое количество контейнеров. Чем больше рабочих узлов, тем больше приложений можно запустить. Также количество влияет на отказоустойчивость кластера, потому что при выходе из строя одной ноды нагрузка переносится на другие.
Настройка Master-node
1. Перейдите в сеанс пользователя root:
su -
и установите необходимые пакеты:
dnf install docker-ce tc ipvsadm ebtables kubernetes-1.21.5 kubernetes-kubeadm-1.21.5 -y
Здесь и далее команды выполняются с правами пользователя root, если не указано иное.
2. Запустите службы docker и добавьте их в автозагрузку:
systemctl enable docker --now
3. Добавьте службы kubelet в автозагрузку:
systemctl enable kubelet.service
4. Для работы kubelet отключите swap:
- выполните команду для разового отключения:
swapoff -a
- чтобы swap не появился после перезагрузки сервера, выполните команду:
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
5. Отключите SELinux:
setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
6. Настройте проброс портов в iptables:
iptables -P FORWARD ACCEPT
7. Создайте файл для автозагрузки модулей ядра необходимых для работы сервиса containerd:
cat > /etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF
Загрузите модули в ядро:
modprobe overlay modprobe br_netfilter
Проверьте, что данные модули работают:
lsmod | egrep "br_netfilter|overlay"
8. Создайте конфигурационный файл для работы сети внутри kubernetes:
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
Примените параметры командой:
sysctl --system
9. Загрузите образы контейнеров, необходимых kubeadm для инициализации ноды кластера:
kubeadm config images pull
10. Инициализация мастер-ноды в одноранговом кластере. Данная команда выполнит начальную настройку и подготовку основного узла кластера. Ключ --pod-network-cidr задает адрес внутренней подсети для вашего кластера.
kubeadm init --pod-network-cidr=10.244.0.0/16
В случае успешной инициализации, в конце вывода команды будет отображаться примерно следующее:
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following 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 Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join 10.81.1.135:6443 --token efcuyh.7g69uwy24uitstxw \ --discovery-token-ca-cert-hash sha256:5e579881863ff117fd8f06e88f9d1677242b98379b86c522027ad8b3c81f9bdc
11. Для управления кластером от имени локального пользователя выполните команды:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
12. От имени пользователя root выполните команду:
export KUBECONFIG=/etc/kubernetes/admin.conf
Данная команда используется для подключения рабочих нод к мастеру:
kubeadm join 10.81.1.135:6443 --token efcuyh.7g69uwy24uitstxw \ --discovery-token-ca-cert-hash sha256:5e579881863ff117fd8f06e88f9d1677242b98379b86c522027ad8b3c81f9bdc
Также ее можно получить с помощью команды:
kubeadm token create --print-join-command
13. Для работы кластера установите плагин сети, в данном случае выбран calico:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
14. В файле /etc/systemd/system/kubelet.service.d/kubeadm.conf закомментируйте строку:
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-confdir=/etc/cni/net.d --cni-bin-dir=/usr/libexec/cni"
15. В каталоге /etc/kubernetes/manifests/ в каждом из файлов манифестов удалите строку «- -- port=0».
16. Перезапустите службу kubelet:
systemctl daemon-reload systemctl restart kubelet.service
17. Проверьте список и статус всех подов в кластере:
kubectl get pod -n kube-system
Настройка рабочих нод
1. Перейдите в сеанс пользователя root:
su -
и установите необходимые пакеты:
dnf install docker-ce tc ipvsadm ebtables kubernetes-1.21.5 kubernetes-kubeadm-1.21.5 -y
Здесь и далее команды выполняются с правами пользователя root, если не указано иное.
2. Запустите службы docker и добавьте их в автозагрузку:
systemctl enable docker --now
3. Добавьте службы kubelet в автозагрузку:
systemctl enable kubelet.service
4. Для работы kubelet отключите swap:
- выполните команду для разового отключения:
swapoff -a
- чтобы swap не появился после перезагрузки сервера, выполните команду:
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
5. Отключите SELinux:
setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
6. Настройте проброс портов в iptables:
iptables -P FORWARD ACCEPT
7. Создайте файл для автозагрузки модулей ядра необходимых для работы сервиса containerd:
cat > /etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF
Загрузите модули в ядро:
modprobe overlay modprobe br_netfilter
Проверьте, что данные модули работают:
lsmod | egrep "br_netfilter|overlay"
8. Создайте конфигурационный файл для работы сети внутри kubernetes:
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
Примените параметры командой:
sysctl --system
9. В файле /etc/systemd/system/kubelet.service.d/kubeadm.conf закомментируйте строку:
Environment="KUBELET_NETWORK_ARGS=--network-plugin=cni --cni-confdir=/etc/cni/net.d --cni-bin-dir=/usr/libexec/cni"
10. Перезапустите службу kubelet:
systemctl daemon-reload systemctl restart kubelet.service
После этого на мастер-ноде выполните команду для вывода списка нод кластера и их статус:
kubectl get nodes
Пример вывода:
NAME STATUS ROLES AGE VERSION master Ready control-plane,master 77m v1.21.5 node1 Ready <none> 3m28s v1.21.5
Если вы нашли ошибку, пожалуйста, выделите текст и нажмите Ctrl+Enter.