Перейти к основному содержимому

Основы K8s

Презентация​

Ссылка на презентацию
Запись занятия
Последняя редакция: 04.09.26

Теория​

Зачем нужен Kubernetes​

Docker Compose закрывает базовые сценарии, но не решает: масштабирование, автоматизацию, рестарт упавших контейнеров, обновление приложений без даунтайма, балансировку нагрузки, доступ извне - всё это пришлось бы писать руками самому

Kubernetes умеет всё то же, что Docker Compose, и добавляет: поддержку нескольких хостов, механизмы автоматизации, настройку сети, управление используемыми ресурсами, мониторинг, абстракции для интеграции сервисов - фактически, state-of-the-art оркестрация контейнеров

Что нужно, чтобы начать​

  • CLI-инструмент - kubectl
  • Редактор/IDE - на курсе используем VS Code, но есть и специализированные инструменты вроде Lens
  • Кластер k8s
  • Гипервизор - Docker
  • Dashboard (например, Headlamp)

Локальный кластер или облако​

  • Локальный - бесплатно, но нагружает машину и ограничен по сети
  • Облачный (YCloud) - платный, зато доступен снаружи и проще масштабируется

Для курса используем локальный кластер - minikube

Инструменты для локального кластера​

ИнструментОсобенность
MiniKubeПрост для обучения k8s
KindProduction-ready, поддержка Docker
KubeadmProduction-ready, распределённая архитектура
K3sЛегковесный, production-ready

Мы используем MiniKube - он проще всего для обучения k8s

kubectl - основные команды​

  • kubectl apply -f <манифест> - применить манифест (создать/обновить ресурс)
  • kubectl get <сущность> - список ресурсов
  • kubectl describe <сущность> <имя> - подробная информация о ресурсе
  • kubectl logs <под> - логи контейнера
  • kubectl delete <сущность> <имя> - удалить ресурс

minikube - основные команды​

  • minikube start - запустить кластер
  • minikube start --memory 8g --cpus 4 - запустить с заданными ресурсами
  • minikube stop - остановить кластер
  • minikube delete - удалить кластер

Dashboard - Headlamp​

Headlamp - графический dashboard для кластера
Показывает состояние ресурсов в реальном времени, позволяет редактировать их прямо в интерфейсе, поддерживает плагины

Манифесты​

Манифест - YAML-файл, текстовое описание сущности в k8s
Состоит из 4 обязательных полей:

  • apiVersion - версия API
  • kind - вид сущности (Pod, Deployment, Service и т.д.)
  • metadata - метаинформация (имя, лейблы и т.д.)
  • spec - спецификация - что именно нужно создать
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:latest

Базовые абстракции​

  • Pod - базовая единица, может содержать несколько контейнеров
  • Deployment - управляет набором подов (реплики, обновления)
  • Service - сетевой доступ к подам
  • ConfigMap - конфигурация, вынесенная из кода

Подробнее про Pod, Deployment и Service - в следующей теме («Базовые абстракции в K8s»)
Про ConfigMap - отдельно, в теме про развёртывание БД («Развертывание БД в K8s»)

Примеры​

Запуск локального кластера и первый под:

minikube start --memory 8g --cpus 4
kubectl apply -f nginx-pod.yaml
kubectl get pods
kubectl logs nginx

Проверь себя​

1. Какие проблемы решает Kubernetes, но не решает Docker Compose?

Масштабирование, автоматизацию, рестарт упавших контейнеров, обновление приложений без даунтайма, балансировку нагрузки, доступ извне

2. Чем локальный кластер отличается от облачного?

Локальный - бесплатный, но нагружает машину и ограничен по сети
Облачный - платный, но доступен снаружи и проще масштабируется

3. Какой инструмент для локального кластера используем на курсе и почему?

MiniKube - он проще всего для обучения k8s

4. Из каких 4 полей состоит манифест k8s?

apiVersion, kind, metadata, spec

5. Чем kubectl get отличается от kubectl describe?

get - список ресурсов, кратко
describe - подробная информация по одному ресурсу

Практика​

  1. Установи kubectl
  2. Установи minikube и подними локальный кластер: minikube start --memory 8g --cpus 4
  3. Разверни nginx через манифест: kubectl apply -f nginx-pod.yaml
  4. Проверь, что под запущен: kubectl get pods, kubectl logs nginx

Итог / чек-лист​

  • Kubernetes решает то, чего не хватает Docker Compose - масштабирование, автоматизацию, восстановление, балансировку, сеть
  • Для курса - локальный кластер на MiniKube
  • Манифест - YAML с полями apiVersion/kind/metadata/spec
  • Базовые абстракции - Pod, Deployment, Service, ConfigMap; Pod/Deployment/Service - в следующей теме, ConfigMap - в теме про развёртывание БД

Дополнительно​