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