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