Перейти к содержанию

Введение в 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 Как всё работает в реальности

  1. Ты описываешь желаемое состояние (например, "3 копии nginx") в YAML-манифесте.

  2. Отправляешь манифест в kube-apiserver с помощью kubectl apply.

  3. Kubernetes сравнивает текущее и желаемое состояние и сам приводит кластер к нужному виду.

  4. Если 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.
Также могу помочь с примерами конкретных сценариев — скажи, что интересно!