Добрый день , меня зовут Минисламов Руслан. В данной статье будет описан процесс настройки ванильного однонодового кластера 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)


  1. F11GAR0
    13.09.2023 13:40
    -1

    попробуйте "РЕД Виртуализация"


    1. devops-off Автор
      13.09.2023 13:40
      +1

      Зачем другой продукт использовать у которого назначение виртуализация? Это обычный kvm куда придется поставить так же ОС.
      Люди которые используют РедОС, переходят на ОС из-за импортозамещения, а так если они купят эту виртуализцию, надо будет поставить так же туда ОС, поставят они туда думаете ubuntu? Нет. Туда то же ставить надо РедОС.
      Не понимаю вашего комментария.


      1. F11GAR0
        13.09.2023 13:40

        из коробки она идет сразу с осью монолитным образом


  1. ALexhha
    13.09.2023 13:40
    +3

    Статью написал так как на данный момент других мануалов нет

    Вот серьезно ?! Или это такой тонкий юмор. Открывая статью ожидал увидеть, что нибудь в стиле "The Hard Way", а по итогу банальные команды с офф доки кубернетиса

    Зачем в заголовке указана редос, если в статье нет ни одной настройки и/или пакета, специфичной для этой ОС ? Она указана чтобы что ?


    1. devops-off Автор
      13.09.2023 13:40
      +1

      Вопрос, а я должен был создавать репозиторий или собирать все из исходников? И да, статей нет, если вы их видели, прошу дать, по Вики на их портале вы не поднимите выше 1.24.12.

      И что специфичного у этой ОС? Что специфичного в настройке кубера должно быть для этой ОС, на Хабре куча мануалов по установке кубера на разные ОС с разным cni.

      Пост написал так как были в комьюнити чате кубера в ТГ, а так же в чате самой ОС редОС вопросы по установке кубера.

      Если есть предложения как улучшить скрипт, буду рад, если вы ожидаете что то ещё, возможно вы напишите статью которую потом разработчики к себе в Вики перенесут или предложите что то конкретное что для вас hard way.


  1. 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.

    я об этом и говорю, зачем делать акцент


    1. devops-off Автор
      13.09.2023 13:40
      -1

      В вашей ссылке общие рекомендации по установке, для этой ОС не подойдут репозитории для той же Федоры или centos и банальным yum или dnf именно тут не обойтись. Тут мы или подключаем репозиторий и скачиваем ещё пакет чтобы поставился он с зависимостями, я бы рекомендовал вам скачать образ и поиграть с этой ОС.

      Основная цель была, написать статью которая поможет специалистам начинающим поставить кластер на ОС - конкретной которая указана в заголовке и для них было ясно где и что тестировалось, не тратить много времени и на поиск инфы в интернете,пакетов которые надо скачать, и так далее, а взять скрипт и привести под свои нужды, сложность статьи сразу указана "низкий" поэтому я не пойму что из hard way вы хотели бы увидеть.


      1. ColdPhoenix
        13.09.2023 13:40
        +1

        для этой ОС не подойдут репозитории для той же Федоры или centos

        При этом все адреса что вы использовали они почему-то от centos/rhel


        1. devops-off Автор
          13.09.2023 13:40

          Вы же видите что там скачивается затем отдельный пакет и ставится из rpm? Только с такими плясками получилось его добавить. Если просто добавлять репозиторий пакет не ставится. Я рад исправить в скриптах что поможет начинающим поставить, людям которые давно с кубером и сертифицированные тут ничего не найдут сверхъестественного для себя


          1. ColdPhoenix
            13.09.2023 13:40

            Кубер ставите с репозитория.

            При этом про containerd вы сказали что:

            Можем добавить репозиторий, но мне не нравится этот вариант, так как там пакет 1.6.9

            При ставите тот же 1.6.9, но руками.

            И так же оно ставится или нет? Если прочесть процитированое место, то я вижу что оно все же ставится.


            1. devops-off Автор
              13.09.2023 13:40

              Нет, мы из репозиторий ставим 1.6.9.

              А другой вариант, мы скачиваем из github, с репозитория официального, там скачиваем и заменяем на самый последний релиз 1.7...


  1. tommyfrozen
    13.09.2023 13:40

    Хотелось бы конечно видеть не просто набор команд, а какой-нибудь bash скрипт или ansible плейбук для автоматизации. А так наверно для новичков хорошая простенькая выжимка с оф. документации ????


    1. devops-off Автор
      13.09.2023 13:40

      Так в конце статьи же и есть ссылка на скрипты для разных cni (containerd и crio)


      1. tommyfrozen
        13.09.2023 13:40

        Супер ????????????


  1. slonopotamus
    13.09.2023 13:40

    Да что ж вы все это так сложно делаете. emerge k3s && rc-update add k3s default && /etc/init.d/k3s start - всё, вы великолепны. sudo snap install microk8s --classic - вы опять великолепны. Что мешает в этой РедОС нормальные пакеты для софта сделать?


  1. dinisoft
    13.09.2023 13:40
    +1

    Ну вот не серьезно. :(

    Взяли самый лёгкий путь и прошли по официальной доке. Думал будет детектив, а тут...

    Запустили бы на альте, ну, или на худой конец, на астре.


    1. devops-off Автор
      13.09.2023 13:40

      Есть скрипт для астры, могу выложить если надо или отправить на email


      1. tommyfrozen
        13.09.2023 13:40

        Выложи на астру скрипт. Оч полезно будет!


        1. devops-off Автор
          13.09.2023 13:40

          Скрипт по настройке AstraLinux и k8s, сразу предупреждаю, я не помню какой версии тут ставится из репозитория containerd, есть так же где то скрипт где можно containerd скачивать и заменять на пакет полученный с github, но найти не смог его оперативно. Выложу позднее.

          ссылка на скрипт с репозиторием для установки k8s в ОС AstraLinux https://github.com/RuslanMinislamov/install_k8s_on_AstraLinux/tree/main


          1. tommyfrozen
            13.09.2023 13:40

            Спасибо большое. Посмотрю. Если что посмотрю доработаю)


  1. 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


    1. amra-dk
      13.09.2023 13:40

      Ой, не увидел ссылку на вики в статье