Kubernetes для homelab: пошаговое освоение контейнерной оркестрации

Отличное руководство по освоению Kubernetes в домашних условиях. От сложной теории до практического развертывания приложений в вашем self-hosting окружении.

Не указано

Введение в Kubernetes

Kubernetes (K8s) — система для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Может использоваться не только в корпоративной среде, но и дома для обучения и развертывания проектов.

Подготовка системы

Обновляем систему и устанавливаем необходимые пакеты, добавляем репозиторий Docker и устанавливаем Docker.

sudo apt update
sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl gnupg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo usermod -aG docker $USER

Отключение swap

Kubernetes не работает с включенным swap, поэтому необходимо его отключить.

sudo swapoff -a
sudo sed -i '/ swap / s/^(.*)$/#\1/g' /etc/fstab

Установка компонентов Kubernetes

Добавляем репозиторий Kubernetes и устанавливаем kubeadm, kubelet и kubectl.

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl

Инициализация кластера

Запускаем инициализацию управляющей ноды и настраиваем доступ для kubectl.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Установка сетевого плагина

Устанавливаем сетевой плагин Flannel, без которого поды не смогут общаться друг с другом.

kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Проверка кластера

Проверяем, что все поды в пространстве имен kube-system перешли в состояние Running, и статус ноды.

kubectl get pods -n kube-system
kubectl get nodes

Развертывание первого приложения

Создаем деплоймент с NGINX и сервис для доступа к нему извне.

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get svc

Масштабирование приложения

Увеличиваем количество подов NGINX до трех для демонстрации горизонтального масштабирования.

kubectl scale deployment nginx --replicas=3
kubectl get pods

Управление кластером

Основные команды для просмотра ресурсов, логов pod'ов и входа внутрь pod.

kubectl get all
kubectl describe deployment nginx
kubectl logs <имя_пода>
kubectl logs -f <имя_пода>
kubectl exec -it <имя_пода> -- /bin/bash

Мониторинг кластера

Устанавливаем метрический сервер для просмотра использования ресурсов подами.

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl top pods