uz
BK
июня 23, 2025
Обновлено июня 23, 2025

Как развернуть и управлять Kubernetes?

Kubernetes

Современный цифровой ландшафт характеризуется стремительным ростом количества приложений, сервисов и облачных услуг, требующих эффективного использования ресурсов. С увеличением вычислительных мощностей и необходимостью их оптимизации возникла потребность в инструментах, позволяющих:
Развертывать множество приложений на одном оборудовании.
Управлять ресурсами (CPU, RAM, хранилище) с минимальными издержками.
Обеспечивать изоляцию и безопасность рабочих нагрузок.

 

 

Первым шагом к решению этих задач стали гипервизоры, которые позволили запускать изолированные виртуальные машины. Однако с развитием контейнеризации появилась потребность в более гибких и легковесных решениях. Именно для этого была создана платформа Kubernetes.

Определение

Kubernetes (K8s) — это открытая платформа для оркестрации контейнеризированных приложений. Её ключевые функции:
Автоматизация развертывания, масштабирования и управления приложениями.
Оптимизация использования ресурсов кластера.
Обеспечение отказоустойчивости и самовосстановления.
Изначально разработанная Google на основе внутренней системы Borg, в 2014 году Kubernetes стала проектом Cloud Native Computing Foundation (CNCF). Сегодня это стандарт для управления распределенными системами в гибридных и мультиоблачных средах.

Почему Kubernetes, а не гипервизоры?

В отличие от гипервизоров, которые работают с виртуальными машинами, Kubernetes оперирует контейнерами — легковесными, быстро запускаемыми процессами с общей ОС. Это обеспечивает:
– Более высокую плотность размещения рабочих нагрузок.
– Минимизацию накладных расходов.
– Портативность приложений между средами.

Предназначение

Основное предназначение Kubernetes — автоматизация развертывания, масштабирования и управления контейнеризированными приложениями, включая самовосстановление, балансировку нагрузки, работу с хранилищами, безопасность и поддержку гибридных сред. Он обеспечивает отказоустойчивость, оптимизацию ресурсов и единое управление приложениями в облаках или on-premise-инфраструктуре.

Что позволяет решать K8s сразу несколько проблем:
1. Устраняет хрупкость контейнеров, то есть следит за их восстановлением
2. Позволяет автоматизировать ручное масштабирование, и сделать добавлять ресурсы без остановки сервисов
3. Помогает уменьшить и автоматизировать сложность сетевых настроек
4. Помогает эффективнее использовать ресурсы, без простоев.

Основные понятия

1. Deployment — объект для управления жизненным циклом Pod’ов: обеспечивает развертывание, масштабирование и обновление приложений.
2. Pod — минимальная единица Kubernetes, запускающая один или несколько контейнеров с общими сетевыми/хранимыми ресурсами.
3. Service — абстракция, предоставляющая стабильный доступ к Pod’ам через балансировку нагрузки и DNS.
4. ConfigMap и Secret — хранят конфигурации (ConfigMap) и секретные данные (Secret) для безопасного использования в приложениях.
5. Volume — предоставляет постоянное хранилище данных для Pod’ов, сохраняющееся после их перезапуска.
6. Namespace — логическое разделение кластера на изолированные среды (например, dev/prod) для управления доступом и ресурсами.

Архитектура

Архитектура K8s делится на две части:

1. Control Plane (Управляющая плоскость) – предназначена для управления кластером

Архитектура управляющей плоскости Kubernetes
Рисунок 1 – Архитектура управляющей плоскости Kubernetes

2. Worker Nodes (Рабочие ноды) – предназначена для выполнения рабочих задач

Компоненты рабочих узлов Kubernetes
Рисунок 2 – Компоненты рабочих узлов Kubernetes

 

Требования для развертывания K8s

Для развертывания полноценного k8s необходимо следующее:
1. Развертывание минимум одного мастер-узла (control plane) и произвольного количества рабочих узлов (worker nodes)
2. IP-адрес для каждого узла
3. Минимальное требование к железу 2 vCPU ядра и два 2 GBi
4. Связь между двумя нодами

Установка k8s

1. Обновление системы и установка зависимостей – для устранения уязвимости и установить пакеты (apt-transport-https, gnupg2), необходимые для работы с репозиториями Kubernetes и CRI-O.

2. Отключение swap-памяти – для предотвращения конфликта управления памятью в Kubernetes. Swap может вызывать ошибки OOM Killer и снижать производительность. Путем выполнения следующей команды:

swapoff -a # Временное отключение
sudo rm /swap.img # Удаление swap-файла
sed -i '/swap/d' /etc/fstab # Закомментировать строку с swap в /etc/fstab

3. Включение модулей ядра br_netfilter и overlaybr_netfilter — для сетевой фильтрации и работы CNI-плагинов и overlay — для поддержки overlay-файловых систем (требуется для хранения данных контейнеров). Путем выполнения следующей команды.

modprobe br_netfilter overlay
echo "br_netfilter" >> /etc/modules
echo "overlay" >> /etc/modules

4. Настройка IP-пересылки – для разрешения маршрутизации сетевого трафика между подами и узлами. Путем выполнения следующей команды:

echo 1 > /proc/sys/net/ipv4/ip_forward

5. Установка Kubelet, kubeadm, kubectl – так как kubelet — агент для запуска Pods на узлах, kubeadm — инструмент для инициализации кластера, kubectl — CLI для управления кластером. Путем добавления репозитория Kubernetes и установка пакетов:

apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl # Запрет автообновлений

6. Установка CRI-O (контейнерной среды выполнения) – для замена Docker. CRI-O — легковесная среда, совместимая с Kubernetes CRI (Container Runtime Interface). Путем выполнения следующих команд:

# Добавление репозиториев CRI-O
echo "deb https://download.opensuse.org/.../ /" > /etc/apt/sources.list.d/cri-o.list
apt-get update
apt-get install -y cri-o cri-o-runc
systemctl enable crio && systemctl start crio

7. Инициализация кластера через kubeadm – для развертывания Control Plane (API Server, etcd, Scheduler, Controller Manager). Путем выполнения следующей команды, где –pod-network-cidr задает диапазон IP-адресов для сети Pods.

kubeadm init --pod-network-cidr=10.100.0.0/16

8. Добавление рабочего узла (worker) – для расширения кластера для запуска приложений. Путем использования токена из вывода kubeadm init:


kubeadm join :6443 --token --discovery-token-ca-cert-hash

9. Настройка доступа через kubectl – применяется для управление кластером с локальной машины
Выполним это путем копирования конфигурационного файла:

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config

Управление k8s

Основные команды kubectl

Работа с ресурсами

Просмотр состояния:

kubectl get pods # Список Pods
kubectl get nodes # Список узлов
kubectl get deployments # Список Deployments
kubectl describe pod # Детали Pod

Создание/обновление:

kubectl apply -f deployment.yaml # Развернуть из манифеста
kubectl create deployment nginx --image=nginx:1.25 # Создать Deployment

Масштабирование:

kubectl scale deployment/nginx --replicas=5 # Увеличить количество реплик

Обновление и откат:

kubectl set image deployment/nginx nginx=nginx:1.26 # Обновить образ
kubectl rollout undo deployment/nginx # Откатить изменения

Удаление:

kubectl delete pod kubectl delete -f deployment.yaml # Удалить ресурсы из манифеста

Отладка

Логи контейнеров:

kubectl logs # Логи основного контейнера
kubectl logs
-c # Логи конкретного контейнера

Вход в контейнер:

kubectl exec -it -sh

Мониторинг ресурсов:

kubectl top nodes # Использование CPU/RAM на узлах
kubectl top pods # Использование CPU/RAM Pods

Управление конфигурацией и секретами

ConfigMap

Использование для хранения конфигураций (настройки среды, файлы).
Пример:


apiVersion: v1
kind: ConfigMap
metadata:
name: app-config
data:
app.env: |
LOG_LEVEL=INFO
DB_HOST=postgres
Secret

Используется хранение чувствительных данных (пароли, TLS-сертификаты).
Пример:


apiVersion: v1
kind: Secret
metadata:
name: db-secret
type: Opaque
data:
password: dGVzdC1wYXNzd29yZA== # base64-encoded
Использование в Pods

env:
- name: LOG_LEVEL
valueFrom:
configMapKeyRef:
name: app-config
key: LOG_LEVEL
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-secret
key: password

Работа с хранилищами

Persistent Volumes (PV) и Persistent Volume Claims (PVC)

PV: Физический ресурс хранения (например, облачный диск).
PVC: Запрос на выделение хранилища из PV.
Пример PVC:


apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Использование в Pods

volumes:
- name: data-storage
persistentVolumeClaim:
claimName: data-pvc
containers:
- name: app
volumeMounts:
- mountPath: "/data"
name: data-storage

Безопасность

RBAC (Role-Based Access Control

Для управления правами доступа пользователей и сервисов.
Пример роли:


apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: default
name: pod-reader
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "watch"]

Network Policies

Для ограничения сетевого трафика между Pods.
Пример запрета всего входящего трафика:


apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
spec:
podSelector: {}
policyTypes:
- Ingress

Мониторинг и логирование

Инструменты

Prometheus + Grafana –  Сбор метрик (CPU, RAM, сетевой трафик).
EFK-стек (Elasticsearch, Fluentd, Kibana) – Агрегация и анализ логов.
Kubernetes Dashboard – Веб-интерфейс для управления кластером.

Настройка мониторинга
# Установка Prometheus через Helm
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm install prometheus prometheus-community/prometheus

Автоматизация и CI/CD

GitOps с Argo CDL

Для автоматического развертывание приложений из Git-репозитория.
Пример:


argocd app create my-app --repo https://github.com/user/repo --path manifests

Интеграция с Jenkins/GitLab CI

# .gitlab-ci.yml
deploy:
stage: deploy
script:
- kubectl apply -f k8s/

Устранение неполадок
Проверка событий кластера:

kubectl get events --sort-by=.metadata.creationTimestamp

Проверка состояния узлов:


kubectl describe node # Просмотр ресурсов и проблем

Диагностика сети:


kubectl run -it --rm debug --image=nicolaka/netshoot -- sh # Запуск сетевого дебаг-контейнера
Оценка:
5 из 5
Аverage rating : 5
Оценок: 1
100029 Ташкент Улица Якка Чинар, дом 2/1
ООО «ИТГЛОБАЛКОМ ЛАБС»

Вам также может быть интересно...