spinny:~/writing $ less introduction-to-kubernetes.md
12Якщо ви працюєте у світі розробки програмного забезпечення, ви напевно чули про Kubernetes. Але що це саме, і чому він став стандартом де-факто для управління контейнеризованими додатками? Цей посібник проведе вас від основ до фундаментальних концепцій, з практичними прикладами та діаграмами.34## До Kubernetes: Трохи Історії561. **Традиційне Розгортання**: Спочатку додатки запускались на фізичних серверах. Дорого, складно масштабувати та схильно до конфліктів ресурсів.72. **Віртуалізоване Розгортання**: Потім з'явились Віртуальні Машини (VM). VM дозволяли запускати кілька ізольованих додатків на одному обладнанні, але кожна VM запускає повну ОС.83. **Контейнеризоване Розгортання**: Контейнери (як Docker) діляться тією ж хост-ОС, але запускають ізольовані процеси. Вони легкі, швидко запускаються та портативні.910Контейнери вирішили проблему портативності, але створили іншу: як керувати сотнями (або тисячами) контейнерів у продакшн-середовищі?1112Тут з'являється **Kubernetes**.1314## Що таке Kubernetes?1516Kubernetes (часто скорочується до **K8s**) - це платформа з відкритим кодом для оркестрації контейнерів. Він автоматизує розгортання, масштабування та управління контейнеризованими додатками. Створений Google та підтримуваний Cloud Native Computing Foundation (CNCF).1718## Архітектура Кластера Kubernetes1920```mermaid21graph TD22 subgraph "Control Plane (Master)"23 A["API Server"]24 B["etcd"]25 C["Scheduler"]26 D["Controller Manager"]27 end2829 subgraph "Worker Node 1"30 E["Kubelet"] --- F["Container Runtime"]31 G["Kube-proxy"]32 F --- H["Pod"]33 F --- I["Pod"]34 end3536 subgraph "Worker Node 2"37 J["Kubelet"] --- K["Container Runtime"]38 L["Kube-proxy"]39 K --- M["Pod"]40 end4142 A -- "Communicates with" --> E43 A -- "Communicates with" --> J44 User -- "kubectl" --> A45 C -- "Assigns Pods to Nodes" --> E46 D -- "Maintains state" --> A47 A -- "Saves/Reads state" --> B48```4950### Control Plane5152Control Plane - це "мозок" кластера:5354- **API Server (`kube-apiserver`)**: Точка входу в кластер. Надає Kubernetes API.55- **etcd**: Консистентна та високодоступна база даних ключ-значення.56- **Scheduler (`kube-scheduler`)**: Призначає нові Pods на доступні Worker Nodes.57- **Controller Manager (`kube-controller-manager`)**: Запускає контролери, які стежать за станом кластера.5859### Worker Node6061Worker Nodes - це машини, де фактично працюють додатки:6263- **Kubelet**: Агент, який забезпечує роботу контейнерів.64- **Kube-proxy**: Мережевий проксі, який керує мережевими правилами.65- **Container Runtime**: ПЗ для запуску контейнерів (Docker, `containerd`, `CRI-O`).6667## Фундаментальні Об'єкти Kubernetes6869### Pod7071**Pod** - найменша одиниця виконання в Kubernetes. Представляє один або більше контейнерів, що працюють разом.7273### Deployment7475**Deployment** описує бажаний стан для групи ідентичних Pods.7677```yaml78# nginx-deployment.yaml79apiVersion: apps/v180kind: Deployment81metadata:82 name: nginx-deployment83spec:84 replicas: 385 selector:86 matchLabels:87 app: nginx88 template:89 metadata:90 labels:91 app: nginx92 spec:93 containers:94 - name: nginx95 image: nginx:1.14.296 ports:97 - containerPort: 8098```99100### Service101102**Service** надає **стабільну точку доступу** для групи Pods.103104```mermaid105graph TD106 subgraph "Service (nginx-service)"107 A["ClusterIP: 10.96.0.10"]108 end109110 subgraph "Pods"111 B("Pod 1 - IP: 192.168.1.2")112 C("Pod 2 - IP: 192.168.1.3")113 D("Pod 3 - IP: 192.168.1.4")114 end115116 A -- "Selector: app=nginx" --> B117 A -- "Selector: app=nginx" --> C118 A -- "Selector: app=nginx" --> D119120 Client -- "Request to nginx-service" --> A121```122123```yaml124# nginx-service.yaml125apiVersion: v1126kind: Service127metadata:128 name: nginx-service129spec:130 selector:131 app: nginx132 ports:133 - protocol: TCP134 port: 80135 targetPort: 80136 type: ClusterIP # Default - exposes the service only within the cluster137```138139Типи Services:140- `ClusterIP`: Робить сервіс доступним на внутрішньому IP кластера (за замовчуванням).141- `NodePort`: Робить сервіс доступним на статичному порту на кожному Worker Node.142- `LoadBalancer`: Створює зовнішній балансувальник навантаження у хмарного провайдера.143144### Ingress145146**Ingress** діє як "інтелектуальний маршрутизатор" для зовнішнього трафіку.147148```mermaid149graph LR150 User -- "mysite.com/api" --> Ingress151 User -- "mysite.com/ui" --> Ingress152153 subgraph "Cluster"154 Ingress -- "/api" --> ServiceA("api-service")155 Ingress -- "/ui" --> ServiceB("ui-service")156157 ServiceA --> PodA1("API Pod 1")158 ServiceA --> PodA2("API Pod 2")159160 ServiceB --> PodB1("UI Pod 1")161 ServiceB --> PodB2("UI Pod 2")162 end163```164165```yaml166# example-ingress.yaml167apiVersion: networking.k8s.io/v1168kind: Ingress169metadata:170 name: example-ingress171spec:172 rules:173 - host: mysite.com174 http:175 paths:176 - path: /api177 pathType: Prefix178 backend:179 service:180 name: api-service181 port:182 number: 8080183 - path: /ui184 pathType: Prefix185 backend:186 service:187 name: ui-service188 port:189 number: 3000190```191192### Інші Корисні Об'єкти193194- **Namespace**: Дозволяє створювати "віртуальні кластери" всередині фізичного кластера.195- **ConfigMap та Secret**: Для керування конфігураційними даними та секретами.196- **StatefulSet**: Подібний до Deployment, але специфічний для stateful додатків.197- **PersistentVolume (PV) та PersistentVolumeClaim (PVC)**: Для керування постійним сховищем.198199## Висновок200201Kubernetes - неймовірно потужний інструмент, але крива навчання може бути крутою.202203**Що робити далі?**204- **Експериментуйте локально**: Встановіть [Minikube](https://minikube.sigs.k8s.io/docs/start/) або [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/).205- **Використовуйте `kubectl`**: Ознайомтесь із командою `kubectl`.206- **Вивчайте офіційні підручники**: [Документація Kubernetes](https://kubernetes.io/docs/tutorials/) - фантастичний ресурс.207208Оркестрація контейнерів - фундаментальна навичка у cloud-native світі. Успіхів!209
:Вступ до Kubernetes: Оркестратор Контейнерівlines 1-209 (END) — press q to close