Добрый день , меня зовут Минисламов Руслан. В данной статье будет описан процесс настройки ванильного однонодового кластера k8s v1.26.8 c containerd, но сделать многонодовый не составит проблем. Весь код будет в статье и в репозитории, ссылка в конце. Статью написал так как на данный момент других мануалов нет и надеюсь помогу многим специалистам быстрее выполнить настройку k8s на ОС РедОС, буду так же признателен за ОС над тем как улучшить процесс установки. На офф. вики нам предлагают только версии 1.21 и 1.24, в которых достаточно много дыр и как минимум в версии 1.24 почти год как вышли последние изменения.
Настройку я производил на ОС:
NAME="RED OS"
VERSION="MUROM (7.3.3)"
PLATFORM_ID="platform:el7"
Подписку я не оформлял, просто нашел ссылку и скачал образ (Возможно это важно и в платной версии тех поддержка ставит все сама?). Я не являюсь экспертом по этой ОС, установил в первый раз и редко приходилось использовать rpm подобный дистрибутив.
Займемся подготовкой ВМ. Ставим openssh-server и разрешаем подключение root пользователю. Так же указываем имя для нашего сервера. Так как не люблю когда кластер имеет имена localhost и так далее.
yum install openssh-server
sed -ri 's/PermitRootLogin without-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
systemctl restart sshd
hostnamectl set-hostname 'k8s-master'
exec bash
setenforce 0
yum update -y
Любуемся на долгий процесс обновления. тут в некоторых моментах будут ошибки при запуске разных скриптов. Но нас видимо это не должно пугать. В будущем когда будем искать ошибку в systemd, просто потонем и все ну или другая была задумка у разработчиков?
Приступаем к предварительной настройке ВМ для работы k8s.
swapoff -a
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
Добавляем conf файлы для containerd.
cat <<EOF > /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
И для k8s.
cat <<EOF > /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
EOF
Настройки выше будут применяться после ребута ВМ. А сейчас пока вручную их активируем.
modprobe overlay
modprobe br_netfilter
sysctl --system
Добавляем репозиторий kubernetes и обновляем.
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
yum update -y
Важно!!!! Далее мы можем пойти двумя разными путями.
Путь 1. Можем установить containerd из стандартного репозитория "updates", но там пакет старой версии 1.5.18-1.el7, который не поддерживается kubeadm 1.26 и выше, поэтому мы вручную заменим необходимые файлы скачав с github самый последний релиз на момент написания статьи.
dnf install kubelet-1.26.8 kubeadm-1.26.8 kubectl-1.26.8 cri-tools containerd -y
wget https://github.com/containerd/containerd/releases/download/v1.7.5/containerd-1.7.5-linux-amd64.tar.gz && tar xvf containerd-1.7.5-linux-amd64.tar.gz
systemctl stop containerd
cd bin
yes | cp -rf * /usr/bin
systemctl start containerd
containerd --version
containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
systemctl enable --now containerd
systemctl restart containerd
systemctl enable kubelet.service
Путь 2. Можем добавить репозиторий, но мне не нравится этот вариант, так как там пакет 1.6.9, но этот вариант более правильный по моему мнению.
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
wget https://mirrors.aliyun.com/docker-ce/linux/centos/7.0/x86_64/stable/Packages/containerd.io-1.6.9-3.1.el7.x86_64.rpm
yum install -y containerd.io-1.6.9-3.1.el7.x86_64.rpm
dnf install kubelet-1.26.8 kubeadm-1.26.8 kubectl-1.26.8 cri-tools -y
systemctl start containerd
containerd --version
containerd config default | tee /etc/containerd/config.toml
sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml
systemctl enable --now containerd
systemctl restart containerd
systemctl enable kubelet.service
Установка почти закончена. Приступаем к инициализации кластера.
Ниже я использую calico, если вы используете другой плагин заменить не забудьте.
kubeadm config images pull
kubeadm init --pod-network-cidr=192.168.0.0/16
wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" > /etc/environment
export KUBECONFIG=/etc/kubernetes/admin.conf
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl create namespace ingress-nginx
kubectl apply -f calico.yaml
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
Установка закончена. Можно выполнять команды чтобы убедиться, что кластер запущен.
kubectl get nodes -o wide
kubectl get pods -A
P.S.: Чуть позже выложу скрипты по настройке как с containerd, а так же с cri-o в репозиторий.
Комментарии (22)
ALexhha
13.09.2023 13:40+3Статью написал так как на данный момент других мануалов нет
Вот серьезно ?! Или это такой тонкий юмор. Открывая статью ожидал увидеть, что нибудь в стиле "The Hard Way", а по итогу банальные команды с офф доки кубернетиса
Зачем в заголовке указана редос, если в статье нет ни одной настройки и/или пакета, специфичной для этой ОС ? Она указана чтобы что ?
devops-off Автор
13.09.2023 13:40+1Вопрос, а я должен был создавать репозиторий или собирать все из исходников? И да, статей нет, если вы их видели, прошу дать, по Вики на их портале вы не поднимите выше 1.24.12.
И что специфичного у этой ОС? Что специфичного в настройке кубера должно быть для этой ОС, на Хабре куча мануалов по установке кубера на разные ОС с разным cni.
Пост написал так как были в комьюнити чате кубера в ТГ, а так же в чате самой ОС редОС вопросы по установке кубера.
Если есть предложения как улучшить скрипт, буду рад, если вы ожидаете что то ещё, возможно вы напишите статью которую потом разработчики к себе в Вики перенесут или предложите что то конкретное что для вас hard way.
ALexhha
13.09.2023 13:40+1И да, статей нет, если вы их видели, прошу дать, по Вики на их портале вы не поднимите выше 1.24.12.
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/ все это работает и на 1.25+
Пост написал так как были в комьюнити чате кубера в ТГ, а так же в чате самой ОС редОС вопросы по установке кубера.
с таким же успехом можно было писать в комьюнити любой ОС, так как у вас нет никакой специфики
И что специфичного у этой ОС? Что специфичного в настройке кубера должно быть для этой ОС, на Хабре куча мануалов по установке кубера на разные ОС с разным cni.
я об этом и говорю, зачем делать акцент
devops-off Автор
13.09.2023 13:40-1В вашей ссылке общие рекомендации по установке, для этой ОС не подойдут репозитории для той же Федоры или centos и банальным yum или dnf именно тут не обойтись. Тут мы или подключаем репозиторий и скачиваем ещё пакет чтобы поставился он с зависимостями, я бы рекомендовал вам скачать образ и поиграть с этой ОС.
Основная цель была, написать статью которая поможет специалистам начинающим поставить кластер на ОС - конкретной которая указана в заголовке и для них было ясно где и что тестировалось, не тратить много времени и на поиск инфы в интернете,пакетов которые надо скачать, и так далее, а взять скрипт и привести под свои нужды, сложность статьи сразу указана "низкий" поэтому я не пойму что из hard way вы хотели бы увидеть.
ColdPhoenix
13.09.2023 13:40+1для этой ОС не подойдут репозитории для той же Федоры или centos
При этом все адреса что вы использовали они почему-то от centos/rhel
devops-off Автор
13.09.2023 13:40Вы же видите что там скачивается затем отдельный пакет и ставится из rpm? Только с такими плясками получилось его добавить. Если просто добавлять репозиторий пакет не ставится. Я рад исправить в скриптах что поможет начинающим поставить, людям которые давно с кубером и сертифицированные тут ничего не найдут сверхъестественного для себя
ColdPhoenix
13.09.2023 13:40Кубер ставите с репозитория.
При этом про containerd вы сказали что:
Можем добавить репозиторий, но мне не нравится этот вариант, так как там пакет 1.6.9
При ставите тот же 1.6.9, но руками.
И так же оно ставится или нет? Если прочесть процитированое место, то я вижу что оно все же ставится.
devops-off Автор
13.09.2023 13:40Нет, мы из репозиторий ставим 1.6.9.
А другой вариант, мы скачиваем из github, с репозитория официального, там скачиваем и заменяем на самый последний релиз 1.7...
tommyfrozen
13.09.2023 13:40Хотелось бы конечно видеть не просто набор команд, а какой-нибудь bash скрипт или ansible плейбук для автоматизации. А так наверно для новичков хорошая простенькая выжимка с оф. документации ????
devops-off Автор
13.09.2023 13:40Так в конце статьи же и есть ссылка на скрипты для разных cni (containerd и crio)
slonopotamus
13.09.2023 13:40Да что ж вы все это так сложно делаете.
emerge k3s && rc-update add k3s default && /etc/init.d/k3s start
- всё, вы великолепны.sudo snap install microk8s --classic
- вы опять великолепны. Что мешает в этой РедОС нормальные пакеты для софта сделать?
dinisoft
13.09.2023 13:40+1Ну вот не серьезно. :(
Взяли самый лёгкий путь и прошли по официальной доке. Думал будет детектив, а тут...
Запустили бы на альте, ну, или на худой конец, на астре.
devops-off Автор
13.09.2023 13:40Есть скрипт для астры, могу выложить если надо или отправить на email
tommyfrozen
13.09.2023 13:40Выложи на астру скрипт. Оч полезно будет!
devops-off Автор
13.09.2023 13:40Скрипт по настройке AstraLinux и k8s, сразу предупреждаю, я не помню какой версии тут ставится из репозитория containerd, есть так же где то скрипт где можно containerd скачивать и заменять на пакет полученный с github, но найти не смог его оперативно. Выложу позднее.
ссылка на скрипт с репозиторием для установки k8s в ОС AstraLinux https://github.com/RuslanMinislamov/install_k8s_on_AstraLinux/tree/main
amra-dk
13.09.2023 13:40В базе знаний RED ОС есть статьи про установку kubernetes, правда там используются пакеты из репы RED ОС и версия 1.24- https://redos.red-soft.ru/base/server-configuring/container/kubernetes/kubernetes-1-24/?sphrase_id=229106
F11GAR0
попробуйте "РЕД Виртуализация"
devops-off Автор
Зачем другой продукт использовать у которого назначение виртуализация? Это обычный kvm куда придется поставить так же ОС.
Люди которые используют РедОС, переходят на ОС из-за импортозамещения, а так если они купят эту виртуализцию, надо будет поставить так же туда ОС, поставят они туда думаете ubuntu? Нет. Туда то же ставить надо РедОС.
Не понимаю вашего комментария.
F11GAR0
из коробки она идет сразу с осью монолитным образом