Установка кластера Kubernetes вручную
Данное руководство описывает процесс установки кластера Kubernetes в окружении РЕД ОС, Альт Сервер и Astra Linux с использованием подключения к Интернету. Для офлайн-установки в окружении РЕД ОС обратитесь к разделу Установка кластера Kubernetes с помощью Kubespray. |
В данном руководстве установка кластера Kubernetes производится с использованием среды выполнения контейнеров containerd и сетевого интерфейса Calico.
-
Можно использовать любую поддерживаемую среду выполнения из списка, приведенного в разделе технических требований.
-
Использование альтернативных сетевых интерфейсов, таких как Flannel, не поддерживается.
Нижеприведенные действия выполняются на каждом узле кластера. Все узлы кластера должны быть подключены к Интернету. |
Чтобы установить 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
-
Примените изменения параметров sysctl, выполнив следующую команду:
sysctl --system
-
Установите пакеты, необходимые для работы Kubernetes. Список пакетов зависит от ОС, в окружении которой будет развернут кластер.
-
Установка пакетов для РЕД ОС:
dnf install kubernetes kubernetes-kubeadm cri-tools tc ipvsadm ebtables socat conntrack git curl wget runc containerd
-
Установка пакетов для Альт Сервер:
apt-get install kubernetes-kubeadm kubernetes-kubelet containerd cri-tools
-
Установка пакетов для Astra Linux:
apt-get install kubelet kubeadm kubectl containerd cri-tools socat conntrack
Если некоторые из требуемых пакетов недоступны в репозитории производителя ОС, вы можете установить их из репозитория Kubernetes. Подробности приведены в официальной документации Kubernetes. -
-
Если на узле не установлена утилита 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
-
На управляющем узле кластера выполните следующие действия:
-
Загрузите образы контейнеров, необходимых инструменту 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
-
-
Запустите инициализацию управляющего узла в одноранговом кластере.
kubeadm init --pod-network-cidr=<internal_cluster_net>
Здесь:
-
<internal_cluster_net>
— адрес внутренней подсети для кластера, например,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 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
-
Проверьте список и статус подов контрольной плоскости кластера, выполнив следующую команду:
kubectl get pod -n kube-system
Пример вывода списка подов контрольной плоскости кластера
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
-
Если установка выполняется на единственный узел, удалите все метки (taints) с узла:
-
Получите список меток узла, выполнив следующую команду:
kubectl get nodes <node_name> -o jsonpath='{.spec.taints}'
Здесь:
-
<node_name>
— имя узла.
Пример вывода списка меток узла
[{"effect":"NoSchedule","key":"node-role.kubernetes.io/master"},{"effect":"NoSchedule","key":"node-role.kubernetes.io/control-plane"}]
-
-
Удалите метки с узла, выполнив для каждой метки следующую команду:
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
-
-
Выведите команду для присоединения рабочего узла, выполнив следующую команду:
kubeadm token create --print-join-command
Пример команды для присоединения рабочего узла
kubeadm join 192.168.186.86:6443 --token kb0ejg.qtsdbljcnfcc3acd --discovery-token-ca-cert-hash sha256:92d275184e764076086f4cc86bca47f6ecedd46526568cc494d97dc27958bec7
-
-
На каждом из рабочих узлов выполните вышеуказанную команду для присоединения рабочего узла к кластеру.