Установка кластера Kubernetes вручную
|
Данное руководство описывает процесс установки кластера Kubernetes в окружении РЕД ОС и Astra Linux с использованием подключения к Интернету. Для развертывания кластера с помощью автономного установщика обратитесь к разделу Установка кластера Kubernetes с помощью Kubespray. Обратите внимание, что список ОС, в которых поддерживается офлайн-установка, ограничен. Для развертывания кластера в окружении Альт Сервер или Альт СП Сервер обратитесь к официальной документации Альт Сервер. |
В данном руководстве установка кластера Kubernetes производится с использованием среды выполнения контейнеров containerd и сетевого плагина Calico.
-
Можно использовать любую поддерживаемую среду выполнения из списка, приведенного в разделе технических требований.
-
Использование альтернативных сетевых плагинов, таких как Flannel, не поддерживается.
Установка Kubernetes на узлы кластера
| Нижеприведенные действия выполняются на каждом узле кластера. Все узлы кластера должны быть подключены к Интернету. |
Чтобы установить Kubernetes на узле кластера, выполните следующие действия:
-
Для корректной работы агентов kubelet отключите использование файлов подкачки и исключите их из файла
/etc/fstab, чтобы их использование не возобновилось после перезагрузки узла:swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab -
Для автозагрузки модулей ядра, необходимых для работы сервиса containerd, в каталоге
/etc/modules-load.dсоздайте файлcontainerd.confсо следующим содержимым:overlay br_netfilter -
Загрузите модули ядра overlay и br_netfilter:
modprobe overlay modprobe br_netfilter -
Убедитесь, что модули загружены и работают, с помощью следующей команды:
lsmod | egrep "br_netfilter|overlay" -
Для обеспечения работы внутренней сети Kubernetes в каталоге
/etc/sysctl.d/создайте файл99-kubernetes-cri.confсо следующим содержимым:net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 -
Чтобы избежать ошибок разрешения имен, отключите использование IPv6. Для этого в каталоге
/etc/sysctl.d/создайте файл99-disable-ipv6.confсо следующим содержимым:net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1 -
Примените изменения параметров sysctl, выполнив следующую команду:
sysctl --system -
Установите пакеты, необходимые для работы Kubernetes. Список пакетов зависит от ОС, в окружении которой будет развернут кластер.
-
Установка пакетов для РЕД ОС:
dnf install kubernetes kubernetes-kubeadm cri-tools tc ipvsadm ebtables socat conntrack git curl wget runc containerd
-
Установка пакетов для Astra Linux:
apt-get install kubelet kubeadm kubectl containerd cri-tools socat conntrack
Если некоторые из требуемых пакетов недоступны в репозитории производителя ОС, вы можете установить их из репозитория Kubernetes. Подробности приведены в официальной документации Kubernetes. -
-
Установите утилиту nerdctl:
-
Скачайте архив утилиты, выполнив следующую команду:
curl -O https://github.com/containerd/nerdctl/releases/download/v2.1.6/nerdctl-2.1.6-linux-amd64.tar.gz -
Распакуйте архив в каталог
/usr/local/bin, выполнив следующую команду:tar -xzvf nerdctl-2.1.6-linux-amd64.tar.gz -C /usr/local/bin
-
-
Если на узле не установлена утилита iptables, установите ее согласно документации производителя ОС.
-
Разрешите проброс портов, выполнив следующую команду:
iptables -P FORWARD ACCEPT -
Установите настройки по умолчанию для конфигурации контейнеров, выполнив следующую команду:
containerd config default | sudo tee /etc/containerd/config.toml -
Разрешите использование контрольных групп (cgroup) Kubernetes:
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml -
Чтобы обеспечить работу сокета containerd, в каталоге
/etcсоздайте файлcrictl.yaml, если он не существует, и добавьте в него следующие строки:runtime-endpoint: unix:///var/run/containerd/containerd.sock image-endpoint: unix:///var/run/containerd/containerd.sock timeout: 30 debug: false -
Запустите службу containerd и добавьте ее в автозагрузку:
systemctl enable --now containerd -
Добавьте службу kubelet в автозагрузку:
systemctl enable kubelet.service -
На master-узлах кластера выполните следующие действия:
-
Загрузите образы контейнеров, необходимых инструменту kubeadm для инициализации узла кластера:
kubeadm config images pullЕсли доступ узла в Интернет осуществляется через прокси-сервер, необходимо скопировать его конфигурацию в файл конфигурации прокси containerd:
-
В каталоге
/etc/systemd/system/containerd.service.dсоздайте файлhttp-proxy.conf, если он не существует. -
Скопируйте в
http-proxy.confсодержимое файла/etc/environment:cat /etc/environment > /etc/systemd/system/containerd.service.d/http-proxy.conf
После копирования добавьте исключения в список
NO_PROXYфайла/etc/environment.Приведенный список исключений указан в качестве примера, для вашей сети он может отличаться. Ознакомьтесь с рекомендациями по настройке списка
NO_PROXY.10.96.0.0/12,10.233.0.0/18,10.244.0.0/16,.svc,.cluster.local -
-
Запустите инициализацию master-узла в одноранговом кластере.
kubeadm init --pod-network-cidr=<internal_cluster_net>Здесь:
-
<internal_cluster_net>— адрес внутренней подсети для кластера, например,10.244.0.0/16.
Пример вывода команды после успешной инициализации master-узла
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 192.168.186.86:6443 --token kb0ejg.qtsdbljcnfcc3acd \ --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7 -
-
Настройте параметры управления кластером:
-
Для управления кластером от имени локального пользователя выполните следующие команды:
mkdir /home/$USER/.kube cp -i /etc/kubernetes/admin.conf /home/$USER/.kube/config chown $USER. /home/$USER/.kube /home/$USER/.kube/config -
Для управления кластером от имени суперпользователя (root) выполните следующие команды:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /root/.bashrc source .bashrc export KUBECONFIG=/etc/kubernetes/admin.conf
-
-
Если настройка управления кластером производилась для локального пользователя, выйдите из сеанса пользователя root командой
exitи дальнейшие действия по настройке кластера выполняйте от имени локального пользователя. -
Установите внутреннюю конфигурацию сети в кластере, выполнив следующую команду:
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml -
Проверьте список и статус подов control plane (плоскости управления) кластера, выполнив следующую команду:
kubectl get pod -n kube-systemПример вывода списка подов control plane кластера
NAME READY STATUS RESTARTS AGE calico-kube-controllers-6c99c8747f-cxxdr 1/1 Running 0 1m calico-node-cxtrl 1/1 Running 0 1m coredns-5d78c9869d-phl6k 1/1 Running 0 1m coredns-5d78c9869d-w27xw 1/1 Running 0 1m etcd.test.rvision.local 1/1 Running 0 1m kube-apiserver.test.rvision.local 1/1 Running 0 1m kube-controller-manager.test.rvision.local 1/1 Running 0 1m kube-proxy-sw9qt 1/1 Running 0 1m kube-scheduler.test.rvision.local 1/1 Running 0 1m
-
Если установка выполняется на единственный узел, удалите все свойства taint с узла:
-
Получите список свойств taint узла, выполнив следующую команду:
kubectl get nodes <node_name> -o jsonpath='{.spec.taints}'Здесь:
-
<node_name>— имя узла.
Пример вывода списка свойств taint для узла
[{"effect":"NoSchedule","key":"node-role.kubernetes.io/master"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane"}] -
-
Удалите свойства taint с узла, выполнив для каждого свойства следующую команду:
kubectl taint node <node_name> <taint_key>-Здесь:
-
<node_name>— имя узла. -
<taint_key>— имя свойства, находящееся в полеkeyсведений о нем.
-
-
-
Установите дополнительные пакеты для инсталляции системы.
-
Установка пакетов для РЕД ОС:
dnf install ansible yq jq -
Установка пакетов для Astra Linux:
apt-get install helm ansible yq jq
Если какие-либо из указанных пакетов недоступны в репозитории производителя ОС, установите их согласно официальной документации производителя ОС. -
-
Для успешной установки менеджера логов Loki в составе системы измените имя сервиса kube-dns на coredns:
-
Создайте копию файла конфигурации сервиса kube-dns:
kubectl -n kube-system get svc kube-dns -o yaml > core.yaml -
Измените имя сервиса kube-dns на coredns:
sed -i 's/name: kube-dns/name: coredns/g' core.yaml -
Удалите существующий сервис kube-dns:
kubectl -n kube-system delete svc kube-dns -
Создайте сервис coredns, применив его конфигурацию:
kubectl apply -f core.yaml
-
-
Выведите команду для присоединения worker-узла, выполнив следующую команду:
kubeadm token create --print-join-commandПример команды для присоединения worker-узла
kubeadm join 192.168.186.86:6443 --token kb0ejg.qtsdbljcnfcc3acd --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7
-
-
На каждом из worker-узлов выполните вышеуказанную команду для присоединения worker-узла к кластеру.
Включение шифрования трафика между узлами кластера
Чтобы настроить шифрование трафика между узлами кластера, вы можете включить использование протокола WireGuard для сетевого плагина Calico. После этого плагин начнет создавать защищенные туннели между узлами кластера.
|
| Инструкции по устранению типичных проблем при работе WireGuard приведены в разделе Устранение проблем при эксплуатации системы. |
Чтобы включить шифрование трафика между узлами кластера, выполните следующие действия:
-
Убедитесь что на всех узлах кластера открыт порт 51820.
-
Подключитесь к терминалу master-узла кластера.
-
Чтобы отслеживать статус WireGuard, установите утилиту wg с помощью менеджера пакетов вашей операционной системы, например:
sudo dnf install -y yq wireguard-tools -
Включите параметр
wireguardEnabledв ресурсе FelixConfiguration, выполнив следующую команду:kubectl patch felixconfiguration default --type='merge' -p '{"spec":{"wireguardEnabled":true}}' -
Убедитесь, что шифрование трафика между узлами кластера включено:
-
Проверьте, что в информации об узлах Calico появилось поле
wireguardPublicKey:for node in $(kubectl get nodes -o yaml| yq '.items[].metadata.name'); do echo ">>> $node"; calicoctl get node $node -o yaml | grep wireguardPublicKey; done -
Проверьте, что утилита wg возвращает информацию о конфигурации, с помощью следующих команд:
sudo wg showsudo wg showconf wireguard.cali
-
|
В Calico процесс обновления ключей WireGuard полностью автоматизирован и не требует ручных действий. Он встроен в работу компонента Felix на каждом узле кластера. Описание алгоритма обновления ключей приведено в разделе Обновление ключей WireGuard. |
Была ли полезна эта страница?