Введение в Kubernetes
🔹 Этап 2: Введение в Kubernetes
✅ 2.1 Что такое Kubernetes
Kubernetes (k8s) — это система оркестрации контейнеров, созданная Google и теперь поддерживаемая CNCF (Cloud Native Computing Foundation). Она управляет развертыванием, масштабированием и обновлением контейнеризированных приложений.
Простыми словами: это автоматизированная платформа для запуска и обслуживания Docker-контейнеров в продакшене.
✅ 2.2 Основные сущности Kubernetes
Вот ключевые объекты и их роли:
| Компонент |
Назначение |
| Pod |
Минимальная единица развертывания. Может содержать один или несколько контейнеров. |
| Deployment |
Управляет созданием и обновлением Pod'ов. Обеспечивает отказоустойчивость. |
| Service |
Постоянная точка доступа к Pod'ам. Может быть ClusterIP, NodePort, LoadBalancer. |
| Namespace |
Разделение логических окружений в кластере (dev, prod и т.д.). |
| ConfigMap/Secret |
Хранение конфигурации и чувствительных данных. |
| Volume |
Подключение хранилища к Pod'ам (например, для БД). |
✅ 2.3 Архитектура Kubernetes
🔸 Control Plane (мастер-нода):
| Компонент |
Роль |
kube-apiserver |
Основной интерфейс кластера — принимает команды от kubectl |
etcd |
Хранилище всех данных состояния кластера (key-value store) |
kube-scheduler |
Назначает Pod'ы на worker-ноды |
controller-manager |
Управляет контроллерами (например, репликацией, состоянием и т.д.) |
🔸 Worker Nodes:
| Компонент |
Роль |
kubelet |
Агенты, которые следят за состоянием pod'ов на узле |
kube-proxy |
Управление сетевыми правилами и пробросом трафика |
| Container Runtime |
Запускает контейнеры (чаще всего containerd, Docker, CRI-O) |
✅ 2.4 Как всё работает в реальности
-
Ты описываешь желаемое состояние (например, "3 копии nginx") в YAML-манифесте.
-
Отправляешь манифест в kube-apiserver с помощью kubectl apply.
-
Kubernetes сравнивает текущее и желаемое состояние и сам приводит кластер к нужному виду.
-
Если pod упал — создается новый. Если нагрузка выросла — можно добавить реплик.
✅ 2.5 Типы Service
| Тип |
Описание |
| ClusterIP |
Доступен только внутри кластера (по умолчанию) |
| NodePort |
Доступен извне через порт на ноде (например, node_ip:port) |
| LoadBalancer |
Использует внешний балансировщик (чаще в облаках: AWS/GCP) |
| Ingress |
Управляет внешним HTTP/HTTPS трафиком, аналог reverse-proxy |
✅ 2.6 Примеры YAML-манифестов
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- port: 80
targetPort: 80
type: NodePort
Полный обзор команд kubectl
1. Основные команды для работы с ресурсами
| Команда |
Описание |
kubectl get <resource> |
Вывести список ресурсов (pods, services, deployments и др.) |
kubectl describe <resource> <name> |
Подробная информация о конкретном ресурсе |
kubectl create -f <file.yaml> |
Создать ресурс из YAML-манифеста |
kubectl apply -f <file.yaml> |
Применить изменения (создать или обновить ресурс) |
kubectl delete <resource> <name> |
Удалить ресурс по имени |
kubectl delete -f <file.yaml> |
Удалить ресурс из манифеста |
2. Просмотр и отладка
| Команда |
Описание |
kubectl logs <pod-name> |
Просмотр логов контейнера в Pod |
kubectl logs -f <pod-name> |
Просмотр логов в реальном времени (follow) |
kubectl exec -it <pod-name> -- <command> |
Выполнить команду внутри контейнера (например, bash) |
kubectl top pod |
Просмотр использования ресурсов (CPU, память) по подам (требует Metrics Server) |
kubectl explain <resource> |
Показать документацию и структуру ресурса |
3. Управление контекстами и кластерами
| Команда |
Описание |
kubectl config view |
Показать текущую конфигурацию kubeconfig |
kubectl config get-contexts |
Показать доступные контексты |
kubectl config use-context <context-name> |
Переключиться на другой контекст |
kubectl config set-context <context-name> --cluster=<cluster> --user=<user> |
Создать или изменить контекст |
4. Управление объектами
| Команда |
Описание |
kubectl scale deployment/<name> --replicas=<num> |
Изменить количество реплик deployment |
kubectl rollout status deployment/<name> |
Проверить статус обновления deployment |
kubectl rollout undo deployment/<name> |
Откатить деплоймент к предыдущей версии |
kubectl expose <resource> <name> --port=<port> --target-port=<target-port> --type=<type> |
Создать Service для ресурса |
5. Просмотр и редактирование YAML-манифестов
| Команда |
Описание |
kubectl get <resource> <name> -o yaml |
Вывести ресурс в формате YAML |
kubectl edit <resource> <name> |
Открыть ресурс в редакторе для редактирования |
6. Работа с Namespaces (пространствами имён)
| Команда |
Описание |
kubectl get namespaces |
Список доступных namespaces |
kubectl create namespace <name> |
Создать новый namespace |
kubectl delete namespace <name> |
Удалить namespace |
kubectl config set-context --current --namespace=<namespace> |
Установить namespace по умолчанию для текущего контекста |
7. Просмотр и управление Events (событиями)
| Команда |
Описание |
kubectl get events |
Просмотр событий в кластере |
kubectl describe pod <pod> |
Просмотр событий, связанных с pod |
8. Ресурсы для управления: основные типы
| Ресурс |
Что это |
| pod |
Минимальная единица работы — контейнер(ы) |
| deployment |
Управляет ReplicaSet и Pod'ами |
| replicaset |
Контролирует реплики Pod |
| service |
Сервис для доступа к Pod'ам |
| namespace |
Пространство имён |
| configmap |
Конфигурационные данные |
| secret |
Секретные данные (пароли, ключи) |
| ingress |
Контролирует доступ извне (HTTP) |
9. Полезные дополнительные команды
| Команда |
Описание |
kubectl proxy |
Запускает прокси для API-сервера Kubernetes |
kubectl cluster-info |
Информация о кластере |
kubectl version |
Версия kubectl и Kubernetes API |
kubectl wait --for=condition=ready pod/<pod-name> --timeout=60s |
Ждать пока Pod станет готовым |
kubectl cp <pod>:<path> <local-path> |
Копирование файлов из pod на локальную машину |
Если хочешь, могу подготовить шпаргалку с командами kubectl в удобном формате — например, в Markdown или PDF.
Также могу помочь с примерами конкретных сценариев — скажи, что интересно!