Шпаргалка по Kubernetes Время чтения: 2 мин. 48 просмотров Основные сущности Kubernetes Pod – самая базовая единица в Kubernetes. Состоит из одного или нескольких контейнеров, которые разделяют сеть и дисковое пространство;Deployment – контроллер, который управляет созданием и обновлением набора Pod’ов. Обеспечивает масштабирование, обновления без простоя и восстановление Pod’ов в случае их сбоя;Service — объект, который организует стабильный сетевой доступ к группе Pod’ов (обычно из одного Deployment). Скрывает динамические IP Pod’ов и предоставляет постоянную точку доступа;Node — физический или виртуальный сервер в кластере, на котором запускаются Pod’ы. На каждом Node работает kubelet, контейнерный runtime и kube-proxy;Cluster — объединение множества Node’ов, управляемых центральным сервером control plane (включающим API Server, Scheduler, Controller Manager и т.д.). Обеспечивает выполнение, управление и масштабирование приложений;Namespace — логическая изоляция ресурсов внутри кластера. Позволяет разделять окружения (например, dev, test, prod) в рамках одного кластера. Namespaces Основные команды:kubectl get namespaces – вывести список пространств имён; Pod Вывести список Pod’ов: kubectl get pods Создать Pod с именем hello, образом nginx:latest и открыть 80 порт: kubectl run hello --image=nginx:latest --port=80 Удалить Pod с именем hello: kubectl delete pod hello Вывести подробную информацию о Pod hello: kubectl describe pod hello Выполнить команду внутри Pod’a, например, вывести дату: kubectl exec hello -- date Подключиться к интерактивной сессии внутри Pod: kubectl exec -it hello -- /bin/bash Вывести логи Pod’a hello: kubectl logs hello Перенаправить локальный порт 7788 на порт 80 внутри Pod: kubectl port-forward --address 0.0.0.0 hello 7788:80 Deployment Вывести список Deployment’ов: kubectl get deployment Создать Deployment с именем flask и образом winhexs/flask:latest: kubectl create deployment flask --image=winhexs/flask:latest Вывести подробную информацию о Deploymentflask: kubectl describe deployment flask Ручное масштабирование реплик в Deployment flask до 4: kubectl scale deployment flask --replicas 4 Вывести список ReplicaSet: kubectl get replicaset Автоматическое масштабирование количества реплик в Deployment flask: kubectl autoscale deployment flask --min=2 --max=6 --cpu-percent=80 Минимум 2 реплики, максимум 6, при загрузке CPU выше 80% Вывести список AutoScaler’ов: kubectl get hpa Вывести историю обновлений Deployment flask: kubectl rollout history deployment/flask Обновить образ контейнера внутри Deployment flask: kubectl set image deployment/flask flask=winhexs/flask:2.0.0 * где flask — имя контейнера внутри Deployment, посмотреть можно командой kubectl describe deployment Вывести статус текущего обновления Deployment flask: kubectl rollout status deployment/flask Откатиться на предыдущий Deployment flask: kubectl rollout undo deployment/flask Откатиться на конкретную версию Deployment flask: kubectl rollout undo deployment/flask --to-revision=2 Принудительно перезапустить Deployment flask: kubectl rollout restart deployment/flask Manifest Manifest — это YAML-файл, описывающий ресурс, который нужно создать в кластере: Pod, Service, Deployment и т.д.Основные секции манифеста: Поле Описание apiVersion Версия API, которая будет использоваться для создания объекта kind Тип объекта (Pod, Deployment, Service, ConfigMap и т.д.) metadata Метаданные объекта: имя, метки, аннотации и пространство имён spec Спецификация объекта: контейнеры, порты, тома, политики и т.д. Применение manifest с именем файла pod.yaml: kubectl apply -f pod.yaml Удаление manifest: kubectl delete -f pod.yaml Для обновления параметров необходимо удалить manifest и применить заново Пример с Pod'ом: --- apiVersion: v1 # Версия API Kubernetes для объекта (Pod — всегда v1) kind: Pod # Тип ресурса — Pod metadata: name: web # Имя Pod'а labels: # Метки для группировки и поиска объектов env: prod # Метка окружения (например, prod, dev, test) app: main # Метка приложения spec: containers: # Список контейнеров внутри Pod'а - name: container-nginx # Имя контейнера (может быть любым) image: httpd:latest # Docker-образ для контейнера (здесь Apache httpd) ports: - containerPort: 80 # Порт, открытый внутри контейнера Пример с Deployment: --- apiVersion: apps/v1 # Версия API для ресурса Deployment (актуальная — apps/v1) kind: Deployment # Тип объекта — Deployment metadata: name: flask-webapi-prod # Имя Deployment (уникальное в пространстве имён) labels: app: flask-k8s-app # Метка для группировки, фильтрации и поиска объекта env: prod # Метка окружения (prod, dev, stage и т.д.) spec: replicas: 2 # Количество одновременно работающих реплик (Pod'ов) selector: # Селектор для выбора управляемых Pod'ов matchLabels: project: api # Подбирать только Pod'ы с этой меткой template: # Шаблон создаваемого Pod'а metadata: labels: project: api # Метка Pod'а (обязательно совпадает с selector.matchLabels) spec: containers: # Список контейнеров в Pod'е - name: webapi # Имя контейнера (произвольное, уникальное внутри Pod'а) image: winhexs/flask:2.0.0 # Docker-образ для контейнера (с указанием версии) ports: - containerPort: 5000 # Порт, открываемый внутри контейнера для приложений Чтобы включить автоматическое масштабирование Deployment по загрузке ресурсов (CPU, память), в манифест нужно добавить секцию HorizontalPodAutoscaler со следующими параметрами: --- apiVersion: autoscaling/v2 # Актуальная версия API для HorizontalPodAutoscaler (HPA) kind: HorizontalPodAutoscaler # Тип объекта — HPA metadata: name: flask-webapi-prod-autoscaling # Имя HPA (должно быть уникальным в пространстве имён) spec: scaleTargetRef: # Указывает, какой объект будет масштабироваться apiVersion: apps/v1 # API-версия объекта, который масштабируем (Deployment) kind: Deployment # Тип объекта, который масштабируем name: flask-webapi-prod # Имя Deployment, для которого включаем автоскейлинг minReplicas: 2 # Минимальное количество реплик (Pod'ов) maxReplicas: 3 # Максимальное количество реплик (Pod'ов) metrics: # Метрики, по которым будет работать автоскейлинг - type: Resource # Тип метрики — ресурс Pod'а (CPU, память и т.д.) resource: name: cpu # Метрика — загрузка процессора target: type: Utilization # Тип целевого значения — процент загрузки averageUtilization: 75 # Целевое среднее значение загрузки CPU (в %) - type: Resource # Вторая метрика — использование памяти resource: name: memory # Метрика — загрузка памяти target: type: Utilization # Тип целевого значения — процент загрузки averageUtilization: 80 # Целевое среднее значение загрузки памяти (в %)