DevOps Kubernetes Lab
Cloud Native

DevOps практики та оркестрація Kubernetes

Комплексний посібник з DevOps: CI/CD pipelines, контейнеризація Docker, оркестрація Kubernetes, моніторинг та інфраструктура як код (IaC).

Docker Kubernetes GitLab CI Terraform

Що таке DevOps і Cloud Native

DevOps — культура, практики та інструменти, що об'єднують розробку (Development) та операції (Operations) для прискорення доставки програмного забезпечення. Cloud Native — підхід до побудови та запуску додатків, що використовує переваги хмарних обчислень.

01

Continuous Integration

Автоматична збірка та тестування коду при кожному коміті. Забезпечує раннє виявлення проблем та швидкий feedback loop для розробників.

02

Continuous Delivery

Автоматична доставка коду в production-like середовища. Деплой стає рутинною, передбачуваною операцією, а не стресовою подією.

03

Infrastructure as Code

Управління інфраструктурою через конфігураційні файли. Terraform, Ansible, Pulumi дозволяють версіонувати та відтворювати інфраструктуру.

CI/CD Pipeline: від коміту до production

Типовий pipeline складається з кількох етапів, кожен з яких має чіткий контракт входу/виходу та автоматичні gates для якості.

Build
Test
Security Scan
Deploy

GitOps підхід

Git як єдине джерело правди. Всі зміни в інфраструктурі йдуть через pull requests. ArgoCD або Flux автоматично синхронізують стан кластера з Git-репозиторієм. Це дає повну історію змін та можливість швидкого відкату.

Blue-Green Deployment

Два ідентичні середовища: blue (поточне) та green (нове). Нову версію розгортають на green, тестують, потім перемикають трафік. При проблемах — миттєвий rollback перемиканням назад.

Калькулятор ресурсів Kubernetes

Розрахунок необхідних ресурсів для кластера K8s залежно від навантаження, реплік та резервування для відмовостійкості.

Рекомендується мінімум 3 вузли для production HA.
Загальних подів -
CPU (cores) -
RAM (GB) -
Ресурс на вузол -
Розподіл ресурсів по вузлам кластера

Kubernetes маніфести та Helm чарти

Декларативне описання інфраструктури. Маніфести YAML визначають бажаний стан, а Kubernetes controllers постійно прагнуть його досягти.

# deployment.yaml
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+  name: web-app
+  namespace: production
+spec:
+  replicas: 3
+  selector:
+    matchLabels:
+      app: web-app
+  template:
+    metadata:
+      labels:
+        app: web-app
+    spec:
+      containers:
+      - name: app
+        image: registry/app:v1.2.3
+        ports:
+        - containerPort: 8080
+        resources:
+          requests:
+            memory: "256Mi"
+            cpu: "250m"
+          limits:
+            memory: "512Mi"
+            cpu: "500m"
+        livenessProbe:
+          httpGet:
+            path: /health
+            port: 8080
+          initialDelaySeconds: 10
+          periodSeconds: 5
# service-ingress.yaml
+apiVersion: v1
+kind: Service
+metadata:
+  name: web-app-service
+spec:
+  selector:
+    app: web-app
+  ports:
+  - port: 80
+    targetPort: 8080
+  type: ClusterIP
+---
+apiVersion: networking.k8s.io/v1
+kind: Ingress
+metadata:
+  name: web-app-ingress
+  annotations:
+    cert-manager.io/cluster-issuer: "letsencrypt"
+spec:
+  tls:
+  - hosts:
+    - app.example.com
+    secretName: app-tls
+  rules:
+  - host: app.example.com
+    http:
+      paths:
+      - path: /
+        pathType: Prefix
+        backend:
+          service:
+            name: web-app-service
+            port:
+              number: 80

Архітектура Kubernetes кластера

Control Plane керує станом кластера, Worker Nodes виконують контейнеризовані додатки. Розуміння компонентів критично для troubleshooting та оптимізації.

🔧 Control Plane

etcd API Server Scheduler Controller Manager

⚙️ Worker Nodes

kubelet kube-proxy Container Runtime Pod 1 Pod 2 Pod 3
Компонент Роль Висока доступність
API Server Frontend для кластера, обробка REST запитів Load balancer перед декількома інстансами
etcd Розподілене сховище стану кластера 3+ nodes, quorum (n/2)+1
Scheduler Призначення подів на вузли Leader election, standby instances
Controller Manager Підтримка бажаного стану (reconciliation loop) Leader election
kubelet Агент на кожному вузлі, управління подами Самовідновлення через systemd

Anti-patterns в Kubernetes

  • Запуск подів без resource limits — risk of noisy neighbor.
  • Використання latest тегу образів — неможливо відкатитися.
  • Зберігання секретів у ConfigMap — використовуйте Secrets + sealing.
  • Running as root — встановлюйте securityContext.
  • Відсутність health checks — Kubernetes не знає про проблеми.

Кар'єрний шлях DevOps Engineer

Junior DevOps

Linux, Bash, Docker basics, CI/CD configuration. Розуміння cloud концепцій.

DevOps Engineer

Kubernetes administration, Terraform, monitoring (Prometheus/Grafana). AWS/GCP/Azure certified.

Senior / Platform Engineer

Architecture design, cost optimization, security hardening. Custom operators, service mesh (Istio/Linkerd).

DevOps Lead / SRE

Стратегія, культура, SLO/SLI, chaos engineering, incident management.

FAQ

У чому різниця між Docker та Kubernetes?

Docker — технологія контейнеризації для упаковки та запуску додатків. Працює на одному хості.

Kubernetes — оркестратор, що управляє багатьма контейнерами на багатьох хостах:

  • Автоматичне масштабування (horizontal pod autoscaler).
  • Самовідновлення при відмові вузлів.
  • Service discovery та load balancing.
  • Керування конфігураціями та секретами.
Що таке Helm і навіщо він потрібен?

Helm — package manager для Kubernetes. Дозволяє:

  • Встановлювати складні додатки однією командою: helm install postgres bitnami/postgresql.
  • Шаблонізувати YAML з values.yaml для різних середовищ.
  • Керувати життєвим циклом: upgrade, rollback до попередніх версій.

Chart — пакет, що містить всі ресурси K8s для додатку.

Як забезпечити High Availability в K8s?
  • Control Plane: 3+ master nodes, etcd на окремих дисках SSD.
  • Worker Nodes: мінімум 3 зони доступності (AZ).
  • Pod Disruption Budgets: гарантія мінімальної кількості реплік.
  • Anti-affinity rules: розподіл реплік по різних вузлах.
  • Cluster Autoscaler: автоматичне додавання вузлів при навантаженні.
Що таке Service Mesh (Istio/Linkerd)?

Infrastructure layer для управління service-to-service комунікаціями:

  • mTLS автоматично — шифрування трафіку між сервісами.
  • Traffic splitting — canary deployments, A/B testing.
  • Retries, circuit breakers, timeouts — resilience patterns.
  • Observability — distributed tracing (Jaeger), metrics.

Sidecar proxy (Envoy) інжектується в кожен pod.

Як моніторити Kubernetes кластер?

Метрики: Prometheus + Grafana для збору та візуалізації.

Логи: EFK (Elasticsearch, Fluentd, Kibana) або Loki + Grafana.

Трейсинг: Jaeger або Tempo для distributed tracing.

Alerts: Alertmanager для сповіщень (PagerDuty, Slack).

Golden signals: Latency, Traffic, Errors, Saturation.

Які хмарні провайдери підтримують Kubernetes?
  • Managed K8s: EKS (AWS), GKE (Google Cloud), AKS (Azure) — провайдер керує control plane.
  • On-premises: OpenShift (Red Hat), Rancher, vanilla K8s.
  • Multi-cloud: Anthos (Google), Tanzu (VMware).

CNCF сертифіковані дистрибутиви гарантують portability маніфестів.

Глосарій Cloud Native

Pod

Найменша розгортувана одиниця в K8s. Може містити декілька контейнерів, що ділять мережу та сховище. Зазвичай 1 контейнер = 1 pod.

ReplicaSet / Deployment

Deployment декларативно управляє ReplicaSet, який гарантує задану кількість реплік pod. Забезпечує rolling updates та rollback.

Service

Абстракція для доступу до групи pod. Types: ClusterIP (внутрішній), NodePort (зовнішній через порт вузла), LoadBalancer (cloud LB).

ConfigMap / Secret

ConfigMap для неконфіденційних даних (налаштування). Secret для паролів, токенів (base64 encoded, але не encrypted за замовчуванням).

Persistent Volume

Абстракція сховища в K8s. PV — ресурс кластера, PVC — запит на використання. Підтримує NFS, cloud disks (EBS, GCE PD).

Namespace

Віртуальний кластер всередині фізичного. Використовується для ізоляції середовищ (dev, staging, production) та multi-tenancy.