Setting Up a Single Node Kubernetes Environment
Делаю:
2026.01.04
// Kubernetes требует отключения swap
# Временное отключение swap
# sudo swapoff -a
# Постоянное отключение - закомментировать строку с swap в /etc/fstab
# sudo sed -i '/swap/s/^/#/' /etc/fstab
// 1. Установить containerd
$ sudo apt-get update
$ sudo apt-get install -y containerd
// 2. Настроить containerd
$ sudo mkdir -p /etc/containerd
$ containerd config default | sudo tee /etc/containerd/config.toml
// 3. Включить SystemdCgroup (важно для k8s)
$ sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml
// 4. Перезапустить containerd
$ sudo systemctl restart containerd
$ sudo systemctl enable containerd
// 5. Проверить статус
$ sudo systemctl status containerd
Setup kubernetes repo and install components
$ sudo apt-get install -y apt-transport-https ca-certificates curl gpg
// Создаем директорию для ключей если её нет
$ sudo mkdir -p /etc/apt/keyrings
// Скачиваем и добавляем ключ
$ curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes.gpg
// Добавляем репозиторий
$ echo "deb [signed-by=/etc/apt/keyrings/kubernetes.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
$ sudo apt-mark hold kubelet kubeadm kubectl
$ sudo apt install -y net-tools
$ ifconfig
***
enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.12 netmask 255.255.255.0 broadcast 192.168.56.255
ether 08:00:27:31:f3:b1 txqueuelen 1000 (Ethernet)
RX packets 1066 bytes 86689 (86.6 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1051 bytes 165332 (165.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
***
$ echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
$ sudo kubeadm init --apiserver-advertise-address xxx.xxx.xxx.xxx --pod-network-cidr=192.168.0.0/16
// Обычно процесс kubeadm init занимает 3-10 минут в зависимости от скорости интернета и железа.
$ sudo kubeadm init \
--apiserver-advertise-address=192.168.56.12 \
--pod-network-cidr=192.168.0.0/16
$ sudo systemctl status kubelet
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* kubernetes-admin@kubernetes kubernetes kubernetes-admin
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
marley-virtualbox NotReady control-plane 50s v1.30.14
Установка Calico
// 1. Установить полный манифест Calico
$ curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.0/manifests/calico.yaml -O
// 2. Проверить что CIDR совпадает (192.168.0.0/16)
$ grep -n "192.168.0.0/16" calico.yaml
// 3. Применить
$ kubectl apply -f calico.yaml
$ kubectl get pods -n kube-system -l k8s-app=calico-node
$ kubectl get pods -n kube-system -l k8s-app=calico-kube-controllers
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
marley-virtualbox Ready control-plane 10m v1.30.14
// Разрешить на control-plane разворачивать pod
$ kubectl taint nodes --all node-role.kubernetes.io/control-plane:NoSchedule-
$ kubectl run test-busybox --image=busybox --restart=Never -- sleep 3600
$ kubectl get pods
$ kubectl delete pod test-busybox