KUBERNETES
Mundarija
- Kubernetes Nima?
- Kubernetes Tarixi
- Nima uchun Kubernetes?
- Kubernetes Arxitekturasi
- Asosiy Kontseptsiyalar
Kubernetes Nima?
Ta'rif va Umumiy Ko'rinish
Kubernetes (k8s deb ham ataladi, chunki "k" va "s" o'rtasida 8 ta harf bor) - bu konteynerlashtrilgan ilovalarni avtomatik tarzida deploy qilish, masshtablash va boshqarish uchun mo'ljallangan ochiq kodli platformadir. Bu container orchestration tizimi bo'lib, zamonaviy mikroservis arxitekturasida asosiy vosita hisoblanadi.
Asosiy Maqsad
Kubernetes asosiy maqsadi - dasturchilar va DevOps muhandislariga infratuzilma bilan bog'liq murakkabliklarni yashirib, ilovalarni boshqarishni soddalashtirishdir. Bu platforma quyidagi asosiy vazifalarni bajaradi:
-
Deklarativ Konfiguratsiya: Siz tizimning kerakli holatini (desired state) belgilaysiz, Kubernetes esa bu holatni ta'minlash uchun zarur barcha amallarni bajaradi.
-
Avtomatik Orkestrlash: Konteynerlarni avtomatik ravishda joylashtirish, ishga tushirish va boshqarish.
-
Self-Healing: Noto'g'ri ishlayotgan konteynerlarni avtomatik ravishda qayta ishga tushirish yoki almashtirish.
-
Masshtablash: Ilovalarni avtomatik yoki qo'lda horizontal va vertikal masshtablash.
-
Load Balancing: Trafikni konteynerlar o'rtasida teng taqsimlash.
Kubernetes Ekotizimi
Kubernetes - bu faqat orkestrlash platformasi emas, balki butun ekotizimdir:
- Core Kubernetes: Asosiy platforma
- CNCF Projects: Kubernetes bilan ishlash uchun to'plangan yuzlab loyihalar
- Cloud Providers: AWS, Google Cloud, Azure kabi provayderlarning managed servislari
- Community Tools: Helm, Kustomize, Istio, Prometheus va boshqalar
Kubernetes Tarixi
Google'ning Borg va Omega Sistemalari
Kubernetes Google'ning 15 yillik tajribasiga asoslangan. Google ichki infratuzilmasida Borg va Omega nomli ikkita muhim tizim ishlatilgan:
Borg Tizimi (2003-2004):
- Google'ning birinchi konteyner boshqarish tizimi
- Millionlab konteynerlarni boshqarish imkoniyati
- Resource scheduling va allocation
- Fault tolerance va high availability
Omega Tizimi (2013):
- Borg'ning takomillashtirilgan versiyasi
- Yanada moslashuvchan arxitektura
- Yaxshilangan scheduling algoritmlari
- Distributed architecture
Kubernetes'ning Tug'ilishi
2014-yil, Iyun:
- Google tomonidan Kubernetes loyihasi e'lon qilindi
- Ochiq kodli (open-source) sifatida chiqarildi
- Go dasturlash tilida yozildi
- Apache 2.0 litsenziyasi ostida
2015-yil, Iyul:
- Kubernetes 1.0 versiyasi chiqarildi
- Google va Linux Foundation tomonidan Cloud Native Computing Foundation (CNCF) tashkil etildi
- Kubernetes CNCF'ning birinchi loyihasi bo'ldi
2016-2018:
- Kubernetes industrial standartga aylandi
- Barcha yirik cloud provayderlar qo'llab-quvvatlashni boshladi
- Kubernetes keng qamrovli qabul qilindi
2018-dan buyon:
- Kubernetes eng mashhur container orchestration platformasi
- 90%+ cloud-native ilovalar Kubernetes'da ishlamoqda
- CNCF'ning eng muvaffaqiyatli loyihasi
Nomi va Ma'nosi
"Kubernetes" nomi yunon tilidan kelib chiqqan va "rul'chi" yoki "kema boshqaruvchisi" degan ma'noni anglatadi. Logo'dagi rulning 7 ta nuqtasi 7 ta original Google muhandisiga ishora qiladi.
Nima uchun Kubernetes?
An'anaviy Deployment vs Zamonaviy Yondashuv
Traditional/Physical Deployment Era
Xususiyatlari:
- Ilovalar to'g'ridan-to'g'ri fizik serverlarda ishga tushirilgan
- Resurslar ajratilmagan (no resource isolation)
- Bir serverda bir nechta ilova ishlasa, resurs konfliktlari yuzaga keladi
Muammolar:
- Agar bitta ilova barcha resurslarni iste'mol qilsa, boshqalari zarar ko'radi
- Masshtablash qimmat (yangi fizik server sotib olish kerak)
- Resource utilization past (serverlar to'liq ishlatilmaydi)
- Maintenance murakkab
Virtualized Deployment Era
Xususiyatlari:
- Virtual Machines (VMs) orqali resurslar ajratilgan
- Bir fizik serverda bir nechta VM ishlatish mumkin
- Hypervisor (VMware, KVM, Hyper-V) orqali boshqariladi
Afzalliklar:
- Yaxshiroq resource isolation
- Xavfsizlik yaxshilandi
- Oson masshtablash
- Hardware'dan mustaqillik
Muammolar:
- Har bir VM to'liq OS kerak (heavy weight)
- Boot vaqti sekin (daqiqalar)
- Resource overhead yuqori
- Portability chegaralangan
Container Deployment Era
Xususiyatlari:
- Konteynerlar OS kernelini baham ko'radi
- Lightweight va tez
- Microseconds ichida ishga tushadi
- Portable (istalgan joyda ishlaydi)
Afzalliklar:
- Agile: Tez yaratish va deploy qilish
- Portable: Lokal mashina, cloud, hybrid - hamma joyda bir xil ishlaydi
- Efficient: Kam resurs talab qiladi
- Isolated: Har bir konteyner ajratilgan muhitda ishlaydi
- Consistent: Development, testing, production - hamma joyda bir xil
Muammolar (Kubernetes kelib chiqish sababi):
- Ko'p konteynerlarni qo'lda boshqarish qiyin
- Scaling murakkab
- Networking va service discovery muammolari
- Storage boshqaruvi qiyin
- Zero-downtime deployment qiyin
- Load balancing kerak
Kubernetes Bu Muammolarni Qanday Hal Qiladi?
1. Avtomatik Orkestrlash
Kubernetes konteynerlarni avtomatik ravishda to'g'ri joyga joylashtiradi (scheduling):
- Available resurslarni hisobga oladi
- Hardware va software requirement'larni tekshiradi
- Affinity va anti-affinity qoidalarini qo'llaydi
- Resource requests va limits'ga amal qiladi
2. Self-Healing
Kubernetes muammoli konteynerlarni avtomatik tuzatadi:
- Noto'g'ri ishlayotgan konteynerlarni qayta ishga tushiradi
- O'lib qolgan konteynerlarni almashtiradi
- Health check'lar orqali holatni kuzatadi
- Tayyor bo'lmagan konteynerlarni trafikdan ajratadi
3. Horizontal va Vertikal Masshtablash
Horizontal Scaling:
- Pod'lar sonini avtomatik oshirish yoki kamaytirish
- CPU/Memory utilization'ga qarab
- Custom metrics asosida (masalan, request count)
Vertical Scaling:
- Mavjud pod'larga ko'proq resurs berish
- Resource limits'ni dinamik o'zgartirish
4. Deklarativ Konfiguratsiya
YAML/JSON fayllar orqali:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Siz faqat "3 ta nginx pod kerak" deb aytasiz, Kubernetes qolgani haqida o'ylaydi.
5. Service Discovery va Load Balancing
Kubernetes avtomatik ravishda:
- Konteynerlar uchun DNS nomlarini beradi
- Service endpoint'larini boshqaradi
- Trafikni pod'lar orasida taqsimlaydi
- Internal va external load balancing
6. Storage Orchestration
Kubernetes turli xil storage sistemalarini qo'llab-quvvatlaydi:
- Local storage
- Cloud storage (AWS EBS, Google Persistent Disk, Azure Disk)
- Network storage (NFS, iSCSI, Ceph)
- Dinamik volume provisioning
7. Automated Rollouts va Rollbacks
Zero-downtime deployment:
- Rolling updates (bosqichma-bosqich yangilash)
- Blue-green deployments
- Canary deployments
- Avtomatik rollback agar muammo yuzaga kelsa
8. Secret va Configuration Management
- Parollar, tokenlar, SSH keys'ni xavfsiz saqlash
- Configuration'larni kod'dan ajratish
- Environment-specific settings
- Runtime'da secret injection
9. Batch Execution
- One-time jobs
- Scheduled jobs (cron)
- Parallel processing
- Work queue pattern
Kubernetes Arxitekturasi
Umumiy Ko'rinish
Kubernetes cluster ikkita asosiy qismdan iborat:
- Control Plane (Master Nodes): Cluster'ni boshqaradi
- Worker Nodes: Amaliy ilovalar ishlaydi
Control Plane Komponentlari
1. API Server (kube-apiserver)
Vazifasi: API Server - bu Kubernetes'ning "miyasi". Bu cluster'dagi barcha operatsiyalar uchun markaziy nuqta.
Funktsiyalari:
- REST API endpoint'larini taqdim etadi
- Barcha so'rovlarni qabul qiladi va validate qiladi
- etcd bilan o'zaro aloqa qiladi
- Authentication va authorization
- Admission control
Qanday ishlaydi:
kubectl → API Server → etcd
↓
Controllers, Scheduler
Port: 6443 (HTTPS)
Misol so'rov:
kubectl get pods
# Bu aslida quyidagi API call:
GET https://api-server:6443/api/v1/namespaces/default/pods
2. etcd
Vazifasi: etcd - bu distributed key-value store bo'lib, cluster'ning barcha ma'lumotlarini saqlaydi.
Xususiyatlari:
- Distributed va highly-available
- Consistency: Raft consensus algorithm
- Key-value store (har bir key bir qiymatga ega)
- Watch mechanism (o'zgarishlarni kuzatish)
Nima saqlanadi?
- Cluster state (barcha resource'lar)
- Configuration data
- Metadata
- Secrets (encrypted)
Muhimligi: etcd - bu "haqiqat manbai" (source of truth). Agar etcd yo'qolsa, cluster ma'lumotlari yo'qoladi.
Backup muhim! etcd'ning muntazam backup'ini olish zarur.
Port: 2379 (client), 2380 (peer communication)
3. Scheduler (kube-scheduler)
Vazifasi: Yangi yaratilgan pod'larni qaysi node'da ishga tushirish kerakligini aniqlaydi.
Scheduling Jarayoni:
Bosqich 1: Filtering (Saralash)
- Node'larni filtering qiladi
- Pod requirement'lariga javob bermaydigan node'larni chiqarib tashlaydi
Filtering kriteriylari:
- Resource requirements (CPU, Memory)
- Node selector
- Affinity/Anti-affinity rules
- Taints va tolerations
- Volume requirements
Bosqich 2: Scoring (Baholash)
- Qolgan node'larni baholaydi
- Har bir node'ga ball beradi
- Eng yuqori ball olgan node'ni tanlaydi
Scoring kriteriylari:
- Resource balance
- Pod spread (pod'larni teng taqsimlash)
- Image locality (image allaqachon mavjudmi?)
- Custom priorities
Misol:
Agar siz quyidagi pod yaratsa:
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx
resources:
requests:
memory: "64Mi"
cpu: "250m"
Scheduler:
- Barcha node'larni tekshiradi
- Kamida 64Mi memory va 250m CPU bo'lgan node'larni topadi
- Eng mos node'ni tanlaydi
- Pod'ni shu node'ga assign qiladi
4. Controller Manager (kube-controller-manager)
Vazifasi: Controller'larni ishga tushiradi va boshqaradi. Har bir controller alohida jarayon bo'lib, cluster'ning ma'lum bir qismini boshqaradi.
Asosiy Controller'lar:
a) Node Controller:
- Node'larni monitoring qiladi
- Node heartbeat'larini tekshiradi
- Node noto'g'ri ishlasa harakatlarni boshlaydi
b) Replication Controller:
- Kerakli miqdorda pod'lar ishlab turganini ta'minlaydi
- Agar pod o'lsa, yangisini yaratadi
c) Endpoints Controller:
- Service va pod'lar o'rtasidagi bog'lanishni boshqaradi
- Endpoints obyektini yangilaydi
d) Service Account & Token Controllers:
- Yangi namespace'lar uchun default account yaratadi
- API access token'larini boshqaradi
e) Namespace Controller:
- Namespace o'chirilganda barcha resurslarni tozalaydi
Controller Loop (Control Loop):
Har bir controller doimiy sikl ichida ishlaydi:
1. Hozirgi holatni o'qi (read current state)
↓
2. Kerakli holat bilan solishtir (compare with desired state)
↓
3. Farq bormi? (is there a difference?)
↓
4. Ha: Harakatlarni boshla (take action)
↓
5. Qayta 1-bosqichga o't (repeat)
Bu doimiy sikl tizimni desired state'ga yaqin tutadi.
5. Cloud Controller Manager (CCM)
Vazifasi: Cloud provider bilan integratsiya. Faqat cloud'da ishlatiladi.
Controller'lar:
- Node Controller: Cloud provider'dan node ma'lumotlarini oladi
- Route Controller: Network route'larni sozlaydi
- Service Controller: Cloud load balancer'larni boshqaradi
Misol (AWS):
- LoadBalancer type Service yaratganingizda
- CCM AWS ELB yaratadi
- ELB'ni service bilan bog'laydi
Worker Node Komponentlari
1. Kubelet
Vazifasi: Har bir node'da ishlaydigan agent. Pod'larni boshqaradi.
Funktsiyalari:
- API Server'dan pod spec'larini oladi
- Container runtime bilan gaplashadi
- Pod'larni ishga tushiradi va to'xtatadi
- Pod va konteyner health'ini monitor qiladi
- API Server'ga node va pod status'ini yuboradi
Qanday ishlaydi:
- API Server PodSpec yuboradi
- Kubelet container runtime'ga buyruq beradi
- Container runtime konteynerlarni yaratadi
- Kubelet pod holatini kuzatadi
- Status'ni API Server'ga yuboradi
Health Checks:
Kubelet uchta turdagi probe'lar ishlata oladi:
a) Liveness Probe:
- Konteyner ishlab turibmi?
- Fail bo'lsa → konteyner restart qilinadi
b) Readiness Probe:
- Konteyner trafikni qabul qilishga tayyormi?
- Fail bo'lsa → service endpoint'dan olib tashlanadi
c) Startup Probe:
- Konteyner ishga tushganmi?
- Sekin ishga tushadigan konteynerlar uchun
Port: 10250 (API), 10255 (read-only API)
2. Container Runtime
Vazifasi: Konteynerlarni ishga tushirish.
Qo'llab-quvvatlanadigan Runtime'lar:
a) containerd:
- Eng ko'p ishlatiladigan
- Docker'dan ajratilgan
- CNCF loyihasi
- Yengil va tez
b) CRI-O:
- Kubernetes uchun maxsus
- OCI-compatible
- Minimalist
c) Docker (deprecated):
- Kubernetes 1.20'dan boshlab deprecated
- Kubernetes 1.24'da o'chirildi
- Dockershim orqali ishlagan
Container Runtime Interface (CRI):
- Kubernetes va container runtime o'rtasidagi standart interfeys
- Plugin arxitekturasi
- Runtime'ni osongina almashtirish imkoniyati
3. kube-proxy
Vazifasi: Network proxy. Service abstraction'ni implement qiladi.
Funktsiyalari:
- Network rules'ni boshqaradi (iptables yoki IPVS)
- Service IP'larini real pod IP'lariga yo'naltiradi
- Load balancing
- Service discovery
Ishlash Rejimi:
a) iptables mode (default):
Service IP (10.96.0.1:80)
↓ (iptables rules)
Pod IP (10.244.1.5:80) yoki (10.244.2.3:80)
b) IPVS mode:
- Yanada samarali
- Ko'proq load balancing algoritmlari
- Katta cluster'lar uchun yaxshi
Misol:
Service:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: MyApp
ports:
- port: 80
targetPort: 9376
kube-proxy quyidagilarni qiladi:
- Service uchun virtual IP yaratadi (ClusterIP)
- iptables/IPVS rules qo'shadi
- Trafikni backend pod'larga yo'naltiradi
- Load balancing qiladi
Add-on'lar
Kubernetes o'zida ba'zi core funktsiyalar yo'q. Ular add-on'lar orqali qo'shiladi:
1. DNS (CoreDNS)
Vazifasi: Cluster ichidagi DNS server.
Funktsiyalari:
- Service'lar uchun DNS record yaratadi
- Pod'lar DNS orqali service'larni topishi mumkin
Misol:
# Service name: my-service
# Namespace: default
# Pod ichidan:
curl http://my-service.default.svc.cluster.local
# yoki qisqasi:
curl http://my-service
2. Dashboard
Web-based UI. Cluster'ni browser orqali boshqarish.
3. Container Resource Monitoring
Prometheus, Metrics Server va boshqalar.
4. Cluster-level Logging
Fluentd, Elasticsearch, Kibana (EFK stack).
Asosiy Kontseptsiyalar
Pod
Ta'rif: Pod - Kubernetes'dagi eng kichik va asosiy deploy birlik. Bir yoki bir nechta konteynerlarni o'z ichiga oladi.
Xususiyatlari:
- Bir pod bitta IP address'ga ega
- Ichidagi konteynerlar localhost orqali gaplashadi
- Shared storage (volumes)
- Ephemeral (vaqtinchalik) - pod o'chsa, yangi pod yangi IP bilan yaratiladi
Qachon bir nechta konteyner bitta pod'da?
Faqat quyidagi holatlarda:
- Konteynerlar bir-biriga juda bog'liq (tightly coupled)
- Bir xil lifecycle
- Resource sharing kerak
Misol:
- Web server + Log collector
- Application + Sidecar proxy (Envoy, Istio)
Oddiy Pod YAML:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
Multi-container Pod:
apiVersion: v1
kind: Pod
metadata:
name: multi-container-pod
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
- name: log-aggregator
image: busybox
command: ['sh', '-c', 'tail -f /var/log/nginx/access.log']
Node
Ta'rif: Node - bu cluster'dagi worker mashina (fizik yoki virtual).
Node Komponentlari:
- Kubelet
- Container Runtime
- kube-proxy
Node Holatlari:
- Ready: Node sog'lom va pod'larni qabul qilishi mumkin
- NotReady: Node muammoli, yangi pod'lar joylanmaydi
- Unknown: Node bilan aloqa yo'q
Node Ma'lumotlari:
kubectl get nodes -o wide
Output:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP
node-1 Ready master 10d v1.28.0 10.0.1.10 <none>
node-2 Ready worker 10d v1.28.0 10.0.1.11 <none>
Node Capacity: Har bir node o'zining capacity'siga ega:
capacity:
cpu: "4"
memory: "8Gi"
pods: "110"
Namespace
Ta'rif: Namespace - bu cluster ichida virtual cluster yaratish uchun mexanizm. Resource'larni guruhlash va ajratish imkonini beradi.
Default Namespace'lar:
- default: Oddiy resource'lar uchun
- kube-system: Kubernetes tizim komponentlari
- kube-public: Hammaga ochiq ma'lumotlar
- kube-node-lease: Node heartbeat'lari
Namespace Yaratish:
apiVersion: v1
kind: Namespace
metadata:
name: development
yoki:
kubectl create namespace development
Namespace'da Resource Yaratish:
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: development
spec:
containers:
- name: nginx
image: nginx
Foydalanish holatlari:
- Development, Staging, Production'ni ajratish
- Turli jamoalar (teams) uchun
- Multi-tenant cluster'lar
Labels va Selectors
Labels:
Labels - bu key-value juftliklari bo'lib, obyektlarni tashkil qilish uchun ishlatiladi.
Misol:
metadata:
labels:
environment: production
app: nginx
tier: frontend
version: "1.0"
Naming Conventions:
- Harflar, raqamlar, tire, nuqta ishlatiladi
- 63 belgidan kam
- Harf yoki raqam bilan boshlanishi va tugashi kerak
Selectors:
Selector'lar label'lar orqali obyektlarni tanlaydi.
Equality-based:
selector:
environment: production
tier: frontend
Set-based:
selector:
matchExpressions:
- key: environment
operator: In
values:
- production
- staging
- key: tier
operator: NotIn
values:
- backend
kubectl bilan:
# Barcha production pod'lar
kubectl get pods -l environment=production
# Production va frontend
kubectl get pods -l environment=production,tier=frontend
# Set-based
kubectl get pods -l 'environment in (production,staging)'
Annotations
Ta'rif: Annotations - bu metadata bo'lib, tool'lar va library'lar uchun ma'lumot saqlaydi.
Labels vs Annotations:
| Labels | Annotations |
|---|---|
| Selectors uchun | Metadata uchun |
| Qisqa qiymatlar | Uzun qiymatlar mumkin |
| Tashkiliy maqsad | Ma'lumotli maqsad |
Misol:
metadata:
annotations:
description: "Nginx web server for production"
contact: "devops@company.com"
last-updated: "2024-01-15"
build-version: "v1.2.3-abc123"
Kubernetes Cluster Tuzilishi
Cluster Tiplari
1. Single-Node Cluster
Xususiyatlari:
- Bitta node (master + worker)
- Development va testing uchun
- Resource minimal
Misollar:
- Minikube
- Kind (Kubernetes in Docker)
- K3s (single node)
- MicroK8s
2. Multi-Node Cluster
Xususiyatlari:
- Ko'p node'lar
- High availability
- Production uchun
Tipik konfiguratsiya:
- 3 master node (HA)
- 5-100+ worker node'lar
3. Managed Kubernetes
Cloud provider tomonidan boshqariladigan:
- Google Kubernetes Engine (GKE)
- Amazon Elastic Kubernetes Service (EKS)
- Azure Kubernetes Service (AKS)
- DigitalOcean Kubernetes
Afzalliklar:
- Control plane boshqariladi
- Avtomatik yangilanishlar
- Cloud integratsiyasi
High Availability (HA) Cluster
HA Control Plane:
Kam 3 ta master node:
Master-1: API Server, Scheduler, Controller Manager
Master-2: API Server, Scheduler, Controller Manager
Master-3: API Server, Scheduler, Controller Manager
etcd-1, etcd-2, etcd-3 (alohida yoki master'lar bilan)
Load Balancer:
User/kubectl → Load Balancer → Master-1/2/3
etcd Cluster:
- Raft consensus algorithm
- Leader election
- Toq son node'lar (3, 5, 7)
Networking
Kubernetes networking 4 ta asosiy muammoni hal qiladi:
- Container-to-Container: Bitta pod ichida, localhost orqali
- Pod-to-Pod: Har bir pod unique IP, flat network
- Pod-to-Service: Service abstraction orqali
- External-to-Service: Ingress, LoadBalancer, NodePort
CNI (Container Network Interface):
- Flannel
- Calico
- Weave Net
- Cilium
Xulosa
Kubernetes - bu zamonaviy cloud-native ilovalar uchun fundamental platforma. U konteyner orkestratsiyasini soddalashtiradi va avtomatlashtirishning yuqori darajasini ta'minlaydi.
Asosiy Afzalliklar: ✅ Avtomatik orkestrlash ✅ Self-healing ✅ Horizontal va vertikal masshtablash ✅ Service discovery va load balancing ✅ Storage orkestrlash ✅ Automated rollouts va rollbacks ✅ Secret va configuration management ✅ Keng qamrovli ekotizim