#5 DevOps. Устанавливаем Kubernetes с нуля

Подготовим 4 виртуальные машины на Ubuntu Server 22

kube-01 192.168.5.10 kube-01.lan
kube-02 192.168.5.20 kube-02.lan
kube-03 192.168.5.30 kube-03.lan
kube-04 192.168.5.40 kube-04.lan

На роутере в DNS пропишем доменные имена, чтобы не редактировать все hosts

Изменим hostname

sudo su
hostnamectl set-hostname kube-01

kube-02

sudo su
hostnamectl set-hostname kube-02

kube-03

sudo su
hostnamectl set-hostname kube-03

kube-04

sudo su
hostnamectl set-hostname kube-04

На всех ВМ

sudo su

printf "overlay\nbr_netfilter\n" >> /etc/modules-load.d/containerd.conf

modprobe overlay
modprobe br_netfilter

printf "net.bridge.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1\nnet.bridge.bridge-nf-call-ip6tables = 1\n" >> /etc/sysctl.d/99-kubernetes-cri.conf

sysctl --system

wget https://github.com/containerd/containerd/releases/download/v1.7.13/containerd-1.7.13-linux-amd64.tar.gz -P /tmp/
tar Cxzvf /usr/local /tmp/containerd-1.7.13-linux-amd64.tar.gz
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service -P /etc/systemd/system/
systemctl daemon-reload
systemctl enable --now containerd

wget https://github.com/opencontainers/runc/releases/download/v1.1.12/runc.amd64 -P /tmp/
install -m 755 /tmp/runc.amd64 /usr/local/sbin/runc

wget https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgz -P /tmp/
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin /tmp/cni-plugins-linux-amd64-v1.4.0.tgz

mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml

nano /etc/containerd/config.toml

SystemdCgroup = true (не systemd_cgroup)

systemctl restart containerd

swapoff -a

nano /etc/fstab

Закомментировать строку со swap

apt-get update

apt-get install -y apt-transport-https ca-certificates curl gpg

mkdir -p -m 755 /etc/apt/keyrings

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

apt-get update

reboot

sudo su

apt-get install -y kubelet=1.29.1-1.1 kubeadm=1.29.1-1.1 kubectl=1.29.1-1.1

apt-mark hold kubelet kubeadm kubectl

Только на master (control) ноде

kubeadm init --pod-network-cidr 10.10.0.0/16 --kubernetes-version 1.29.1 --node-name kube-01.lan

Your Kubernetes control-plane has initialized successfully! // сохраним данные после строки ниже, они понадобятся нам для подключения

export KUBECONFIG=/etc/kubernetes/admin.conf

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/tigera-operator.yaml

wget https://raw.githubusercontent.com/projectcalico/calico/v3.27.2/manifests/custom-resources.yaml

nano custom-resources.yaml

меняем CIDR на 10.10.0.0/16

kubeadm token create --print-join-command

kubeadm join // сохраняем вывод для worker нод

kubectl get pods --all-namespaces // проверим

Выполняем на worker нодах

kubeadm join… // команда из вывода выше

Подождем и выполним на master ноде

kubectl get nodes

kubectl get pods --all-namespaces