Pull to refresh

Ванильный k8s от 1.26.0 до 1.28.1 с containerd на РедОС

Level of difficultyEasy
Reading time4 min
Views13K

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

Tags:
Hubs:
Total votes 11: ↑5 and ↓6+3
Comments24

Articles