Workload Redources
Mundarija
Workload Resources Nima?
Umumiy Tushuncha
Workload - bu Kubernetes'da ishlaydigan ilova yoki service. Workload Resource'lar esa pod'larni yaratish va boshqarish uchun ishlatiladigan yuqori darajali abstraktsiyalardir.
Nima uchun Pod'ni bevosita ishlatmaymiz?
Pod'lar ephemeral (vaqtinchalik) va disposable. Ular:
- O'lib qolishi mumkin
- Node nosoz bo'lsa yo'qoladi
- Restart qilinganda yangi IP oladi
- Manual management qiyin
Workload Resource'lar muammoni hal qiladi:
- Avtomatik pod yaratish va o'chirish
- Self-healing
- Scaling
- Update va rollback strategiyalari
- Desired state management
Workload Resource Turlari
- Deployment: Stateless ilovalar uchun
- ReplicaSet: Pod'larni replicate qilish (odatda Deployment orqali)
- StatefulSet: Stateful ilovalar uchun (database, queue)
- DaemonSet: Har bir node'da bitta pod
- Job: Bir martalik vazifalar
- CronJob: Schedule bo'yicha vazifalar
Pod Lifecycle
Pod Fazalari
Pod hayot sikli davomida turli fazalardan o'tadi:
1. Pending
Ma'nosi: Pod yaratildi, lekin hali ishga tushmadi.
Sabablar:
- Scheduler hali node tanlayapti
- Container image download qilinayapti
- Volume'lar prepare qilinayapti
- Resource'lar yetishmayapti
Debug:
kubectl describe pod <pod-name>
# Events bo'limiga qarang
2. Running
Ma'nosi: Pod node'ga assign qilindi va kamida bitta konteyner ishlamoqda.
Holat:
- Barcha konteynerlar yaratildi
- Kamida bittasi running yoki starting/restarting
3. Succeeded
Ma'nosi: Barcha konteynerlar muvaffaqiyatli yakunlandi va qayta ishga tushmaydi.
Qachon: Job'lar uchun odatiy holat.
4. Failed
Ma'nosi: Barcha konteynerlar tugadi va kamida bittasi xato bilan to'xtadi.
Sabablar:
- Container crash bo'ldi
- OOMKilled (Out of Memory)
- Configuration xatosi
- Image pull error
5. Unknown
Ma'nosi: Pod holatini aniqlashning imkoni yo'q.
Sabab: Node bilan aloqa uzildi.
Container Holatlari
Har bir konteyner o'z holatiga ega:
1. Waiting
Konteyner ishga tushmagan:
- Image pull
- Volume mount
- Secrets load
2. Running
Konteyner ishlayapti. startupProbe, livenessProbe, readinessProbe tekshiriladi.
3. Terminated
Konteyner to'xtadi:
- Exit code 0: Normal tugash
- Exit code ≠ 0: Xato bilan tugash
Restart Policy
Pod spec'da restartPolicy belgilash mumkin:
1. Always (default):
spec:
restartPolicy: Always
Har doim restart qilish. Stateless ilovalar uchun.
2. OnFailure:
spec:
restartPolicy: OnFailure
Faqat fail bo'lganda restart. Job'lar uchun.
3. Never:
spec:
restartPolicy: Never
Hech qachon restart qilmaslik. One-time task'lar uchun.
Pod Conditions
Pod condition'lar pod holatini batafsil tavsiflaydi:
- PodScheduled: Pod node'ga assign qilindimi?
- ContainersReady: Barcha konteynerlar ready holatidami?
- Initialized: Barcha init konteynerlar muvaffaqiyatli tugadimi?
- Ready: Pod trafikni qabul qilishga tayyormi?
Ko'rish:
kubectl describe pod <pod-name>
# Conditions bo'limiga qarang
Init Containers
Ta'rif: Init container'lar asosiy konteynerlar ishga tushishidan oldin ishlaydi.
Xususiyatlari:
- Ketma-ket ishga tushadi (sequential)
- Har biri muvaffaqiyatli tugashi kerak
- Asosiy konteynerlardan oldin
Foydalanish holatlari:
- Database migration
- Config file yaratish
- External service'ni kutish
- Dependency check
Misol:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
spec:
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
Bu misolda:
- Birinchi init container
myserviceDNS'ni kutadi - Ikkinchi init container
mydbDNS'ni kutadi - Ikkisi ham tayyor bo'lgach, asosiy konteyner ishga tushadi
ReplicaSet
Ta'rif
ReplicaSet - bu ma'lum miqdordagi identik pod'larni ishlab turganini ta'minlaydigan controller.
Asosiy vazifa: Desired number of pods = Running pods
Qanday Ishlaydi?
ReplicaSet doimiy ravishda pod'larni kuzatadi:
Desired Replicas: 3
Current Replicas: 2
→ ReplicaSet 1 ta yangi pod yaratadi
Desired Replicas: 3
Current Replicas: 4
→ ReplicaSet 1 ta pod'ni o'chiradi
ReplicaSet YAML
Basic ReplicaSet:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: frontend
labels:
app: guestbook
tier: frontend
spec:
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: php-redis
image: gcr.io/google_samples/gb-frontend:v3
Muhim qismlar:
- replicas: Nechta pod kerak
- selector: Qaysi pod'larni boshqarish kerak
- template: Pod template (yangi pod'lar uchun)
Selector
Selector pod'larni tanlash uchun ishlatiladi.
matchLabels (equality-based):
selector:
matchLabels:
app: nginx
environment: production
matchExpressions (set-based):
selector:
matchExpressions:
- key: tier
operator: In
values:
- frontend
- backend
- key: environment
operator: NotIn
values:
- development
Operator'lar:
In: Qiymat ro'yxatda borNotIn: Qiymat ro'yxatda yo'qExists: Key mavjud (value muhim emas)DoesNotExist: Key mavjud emas
Pod Template
Template - bu yangi pod'lar yaratish uchun blueprint.
Muhim:
- Template label'lari selector bilan mos kelishi kerak
- Template o'zgartirilsa, faqat yangi pod'larga ta'sir qiladi
- Mavjud pod'lar o'zgarmaydi
Scaling
Manual Scaling:
Kubectl orqali:
kubectl scale replicaset frontend --replicas=5
YAML edit:
kubectl edit replicaset frontend
# replicas: 3 → 5
YAML apply:
spec:
replicas: 5
kubectl apply -f replicaset.yaml
ReplicaSet vs Deployment
Nega ReplicaSet'ni bevosita ishlatmaymiz?
ReplicaSet - low-level resource. Deployment - high-level abstraction.
Deployment qo'shimcha funktsiyalar:
- Rolling updates
- Rollback
- Update strategy
- Pause/Resume
- History
Tavsiya: Doimo Deployment ishlating, bevosita ReplicaSet emas!
Deployment
Ta'rif
Deployment - bu stateless ilovalarni deploy qilish va boshqarish uchun eng ko'p ishlatiladigan resource.
Deployment = ReplicaSet + Update Strategy + Rollback
Asosiy Imkoniyatlar
- Deklarativ yangilanishlar: Desired state belgilang, Deployment qolganini hal qiladi
- Rolling Updates: Zero-downtime yangilanish
- Rollback: Oldingi versiyaga qaytish
- Scaling: Pod'lar sonini o'zgartirish
- Pause/Resume: Yangilanishni to'xtatish va davom ettirish
- Status tracking: Deployment holatini kuzatish
Deployment YAML
Basic Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
Advanced Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
revisionHistoryLimit: 10
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 3
periodSeconds: 3
Update Strategies
Deployment ikkita update strategiyasini qo'llab-quvvatlaydi:
1. RollingUpdate (Default)
Qanday ishlaydi: Eski pod'lar bosqichma-bosqich yangilar bilan almashtiriladi.
Parametrlar:
maxSurge:
- Desired replica count'dan qancha ortiq pod yaratish mumkin
- Raqam yoki foiz:
1yoki25% - Default: 25%
maxUnavailable:
- Nechta pod unavailable bo'lishi mumkin
- Raqam yoki foiz:
1yoki25% - Default: 25%
Misol:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Replicas: 3
- Yangi pod yaratiladi (jami 4 ta pod)
- Yangi pod Ready bo'lsa, eski pod o'chiriladi (jami 3 ta pod)
- Yana yangi pod yaratiladi (jami 4 ta pod)
- Jarayon davom etadi
Afzalliklar:
- Zero downtime
- Gradual rollout
- Quick rollback
Kamchiliklar:
- Sekinroq
- Qisqa vaqt davomida ikkita versiya parallel ishlaydi
2. Recreate
Qanday ishlaydi: Barcha eski pod'lar o'chiriladi, keyin yangilar yaratiladi.
strategy:
type: Recreate
Afzalliklar:
- Oddiy
- Faqat bitta versiya ishlaydi
Kamchiliklar:
- Downtime
- Barcha pod'lar bir vaqtda restart
Qachon ishlatish:
- Database migration kerak
- Ikkita versiya parallel ishlay olmasa
- Development environment
Deployment Operatsiyalari
1. Yaratish
# YAML dan
kubectl apply -f deployment.yaml
# Imperativ
kubectl create deployment nginx --image=nginx:1.19 --replicas=3
2. Ko'rish
# Barcha deployment'lar
kubectl get deployments
# Batafsil
kubectl describe deployment nginx-deployment
# YAML ko'rish
kubectl get deployment nginx-deployment -o yaml
Output:
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 5m
- READY: Tayyor pod'lar / Desired pod'lar
- UP-TO-DATE: Yangi pod template bilan pod'lar
- AVAILABLE: Foydalanuvchilarga ochiq pod'lar
3. Yangilash (Update)
Image yangilash:
kubectl set image deployment/nginx-deployment nginx=nginx:1.20
YAML orqali:
# YAML'ni o'zgartiring
kubectl apply -f deployment.yaml
Edit:
kubectl edit deployment nginx-deployment
Update jarayonini kuzatish:
kubectl rollout status deployment/nginx-deployment
Output:
Waiting for deployment "nginx-deployment" rollout to finish: 1 out of 3 new replicas have been updated...
Waiting for deployment "nginx-deployment" rollout to finish: 2 out of 3 new replicas have been updated...
deployment "nginx-deployment" successfully rolled out
4. Rollback
Rollout history:
kubectl rollout history deployment/nginx-deployment
Output:
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment/nginx-deployment nginx=nginx:1.20
3 kubectl set image deployment/nginx-deployment nginx=nginx:1.21
Oldingi versiyaga qaytish:
kubectl rollout undo deployment/nginx-deployment
Ma'lum revisiyaga qaytish:
kubectl rollout undo deployment/nginx-deployment --to-revision=2
Rollback jarayonini kuzatish:
kubectl rollout status deployment/nginx-deployment
5. Pause va Resume
Pause:
kubectl rollout pause deployment/nginx-deployment
Bu deployment yangilanishni to'xtatadi. Bir nechta o'zgarishlar qilishingiz mumkin:
kubectl set image deployment/nginx-deployment nginx=nginx:1.20
kubectl set resources deployment/nginx-deployment -c=nginx --limits=cpu=200m,memory=512Mi
Resume:
kubectl rollout resume deployment/nginx-deployment
Barcha o'zgarishlar bir vaqtda qo'llaniladi.
6. Scaling
# Manual
kubectl scale deployment nginx-deployment --replicas=5
# Autoscaling (keyingi mavzularda)
kubectl autoscale deployment nginx-deployment --min=3 --max=10 --cpu-percent=80
7. O'chirish
kubectl delete deployment nginx-deployment
Deployment Status
Deployment uchta holatga ega:
1. Progressing
Deployment quyidagi vazifalarni bajarayapti:
- Yangi ReplicaSet yaratish
- ReplicaSet scaling
- Yangi pod'larni Ready holatiga keltirish
Shartlar:
type: Progressingstatus: "True"reason: NewReplicaSetAvailable
2. Complete
Deployment muvaffaqiyatli yakunlandi:
- Barcha replika'lar yangilandi
- Barcha replika'lar available
- Eski ReplicaSet'lar 0 ga scale qilindi
Shartlar:
type: Progressingstatus: "True"reason: NewReplicaSetAvailable
3. Failed
Deployment bajarilmadi:
- Resource yetishmaydi (quota)
- Readiness probe fail
- Image pull xatosi
- Insufficient permissions
Shartlar:
type: Progressingstatus: "False"reason: ProgressDeadlineExceeded
Deployment Best Practices
1. Resource Requests va Limits
Doim belgilang:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
2. Health Checks
Liveness va Readiness probe'lar:
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
3. Update Strategy
Zero-downtime uchun:
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
4. Labels
Yaxshi label'lar ishlating:
labels:
app: myapp
version: v1.0.0
environment: production
team: backend
5. Revision History
spec:
revisionHistoryLimit: 10
StatefulSet
Ta'rif
StatefulSet - bu stateful ilovalar (database, queue, cache) uchun workload resource.
Stateful vs Stateless:
| Stateless (Deployment) | Stateful (StatefulSet) |
|---|---|
| Pod'lar identik | Har bir pod unique |
| Istalgan tartibda yaratiladi | Ketma-ket yaratiladi |
| Random nomlar | Predictable nomlar |
| Ephemeral storage | Persistent storage |
StatefulSet Xususiyatlari
1. Stable Network Identity
Har bir pod unique va stable hostname:
myapp-0.myapp.default.svc.cluster.local
myapp-1.myapp.default.svc.cluster.local
myapp-2.myapp.default.svc.cluster.local
Pattern: $(podname).$(service name).$(namespace).svc.cluster.local
2. Ordered Deployment va Scaling
Pod'lar ketma-ket yaratiladi:
myapp-0 → Ready
↓
myapp-1 → Ready
↓
myapp-2 → Ready
Scaling:
- Scale up: myapp-3, myapp-4, ...
- Scale down: myapp-4, myapp-3, ... (teskari tartibda)
3. Stable Storage
Har bir pod o'zining PersistentVolume'iga ega:
myapp-0 → pvc-myapp-0
myapp-1 → pvc-myapp-1
myapp-2 → pvc-myapp-2
Pod o'chirilsa ham, PVC saqlanadi va qayta yaratilganda qayta attach qilinadi.
StatefulSet YAML
Basic StatefulSet:
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
name: web
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.19
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Muhim qismlar:
- serviceName: Headless service nomi
- volumeClaimTemplates: Har bir pod uchun PVC template
Headless Service
StatefulSet headless service kerak:
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
clusterIP: None # Headless
selector:
app: nginx
ports:
- port: 80
Nima uchun?
- Har bir pod individual DNS entry oladi
- Direct pod-to-pod communication
StatefulSet Operatsiyalari
1. Yaratish
kubectl apply -f statefulset.yaml
Pod'lar ketma-ket yaratiladi:
kubectl get pods -w
Output:
NAME READY STATUS AGE
web-0 0/1 ContainerCreating 0s
web-0 1/1 Running 10s
web-1 0/1 ContainerCreating 0s
web-1 1/1 Running 10s
web-2 0/1 ContainerCreating 0s
web-2 1/1 Running 10s
2. Scaling
kubectl scale statefulset web --replicas=5
Yangi pod'lar ketma-ket yaratiladi:
web-3 → web-4
Scale down:
kubectl scale statefulset web --replicas=3
Pod'lar teskari tartibda o'chiriladi:
web-4 → web-3
3. Update
RollingUpdate (default):
spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 0
Pod'lar teskari tartibda yangilanadi:
web-2 → web-1 → web-0
Partition:
spec:
updateStrategy:
type: RollingUpdate
rollingUpdate:
partition: 2
Faqat web-2, web-3, ... yangilanadi. web-0 va web-1 eski versiyada qoladi.
OnDelete:
spec:
updateStrategy:
type: OnDelete
Pod'lar qo'lda o'chirilganda yangilanadi.
4. O'chirish
# StatefulSet o'chirish (pod'lar ham o'chiriladi)
kubectl delete statefulset web
# PVC'lar qoladi!
kubectl get pvc
PVC'larni o'chirish:
kubectl delete pvc www-web-0 www-web-1 www-web-2
StatefulSet Foydalanish Holatlari
-
Databases:
- MySQL, PostgreSQL
- MongoDB, Cassandra
- Redis cluster
-
Message Queues:
- RabbitMQ
- Kafka
- NATS
-
Distributed Systems:
- Zookeeper
- etcd
- Consul
StatefulSet vs Deployment
| StatefulSet | Deployment |
|---|---|
| Unique pod identity | Identical pods |
| Stable network ID | Random IP |
| Persistent storage | Ephemeral storage |
| Ordered operations | Parallel operations |
| Databases | Web servers |
DaemonSet
Ta'rif
DaemonSet - bu har bir node'da bitta pod ishlab turishini ta'minlaydi.
Xususiyatlari:
- Yangi node qo'shilsa → avtomatik pod yaratiladi
- Node o'chirilsa → pod o'chiriladi
- Replica count yo'q (har bir node'da bittadan)
DaemonSet YAML
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
labels:
app: fluentd
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluentd:v1.11
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
hostPath:
path: /var/log
Node Selector
Ma'lum node'larda ishlatish:
spec:
template:
spec:
nodeSelector:
disktype: ssd
Faqat disktype=ssd label'iga ega node'larda pod yaratiladi.
Foydalanish Holatlari
-
Monitoring:
- Node exporter (Prometheus)
- Datadog agent
- New Relic agent
-
Logging:
- Fluentd
- Filebeat
- Logstash
-
Networking:
- CNI plugins
- kube-proxy
- Network policy agent
-
Security:
- Security scanning
- Compliance checking
-
Storage:
- Storage daemon
- Volume manager
Job
Ta'rif
Job - bu bir martalik vazifalarni bajarish uchun. Pod muvaffaqiyatli tugaguncha ishlaydi.
Job YAML
Simple Job:
apiVersion: batch/v1
kind: Job
metadata:
name: pi
spec:
template:
spec:
containers:
- name: pi
image: perl:5.34
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restartPolicy: Never
backoffLimit: 4
Parallel Job:
apiVersion: batch/v1
kind: Job
metadata:
name: parallel-job
spec:
completions: 10
parallelism: 3
template:
spec:
containers:
- name: worker
image: busybox
command: ["sh", "-c", "echo Working... && sleep 10"]
restartPolicy: Never
Job Parametrlari
1. completions
Nechta pod muvaffaqiyatli tugashi kerak:
spec:
completions: 5
5 ta pod ketma-ket ishlab, muvaffaqiyatli tugashi kerak.
2. parallelism
Bir vaqtda nechta pod ishlashi mumkin:
spec:
parallelism: 2
Maksimal 2 ta pod parallel ishlaydi.
Misol:
- completions: 10
- parallelism: 3
Pod1, Pod2, Pod3 → Running
Pod1 → Completed
Pod4 → Running
Pod2, Pod3 → Completed
Pod5, Pod6 → Running
...
3. backoffLimit
Pod fail bo'lsa, necha marta retry qilish:
spec:
backoffLimit: 4
Default: 6
4. activeDeadlineSeconds
Job maksimal necha soniya ishlashi mumkin:
spec:
activeDeadlineSeconds: 100
100 soniyadan keyin job to'xtatiladi (success yoki fail).
5. ttlSecondsAfterFinished
Job tugagandan keyin necha soniyadan so'ng o'chirilsin:
spec:
ttlSecondsAfterFinished: 100
100 soniya o'tgach, job va pod'lar o'chiriladi.
Job Patterns
1. Single Job
Bitta pod, bir marta ishga tushadi:
spec:
completions: 1
parallelism: 1
2. Parallel Fixed Completion Count
Ko'p pod, umumiy soni ma'lum:
spec:
completions: 10
parallelism: 3
3. Work Queue
Ko'p pod, queue'dan vazifa oladi:
spec:
parallelism: 3
# completions yo'q
CronJob
Ta'rif
CronJob - bu schedule bo'yicha Job'larni ishga tushiradi.
CronJob YAML
apiVersion: batch/v1
kind: CronJob
metadata:
name: hello
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: hello
image: busybox
command: ["sh", "-c", "date; echo Hello from Kubernetes CronJob"]
restartPolicy: OnFailure
Cron Schedule Format
┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12)
│ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday)
│ │ │ │ │
* * * * *
Misollar:
*/1 * * * * → Har daqiqa
0 * * * * → Har soat
0 0 * * * → Har kun yarim tunda
0 0 * * 0 → Har hafta yakshanba yarim tunda
0 0 1 * * → Har oyning 1-kuni
0 0 1 1 * → Har yil 1-yanvar
*/5 * * * * → Har 5 daqiqada
0 9-17 * * 1-5 → Dushanba-Juma, 9:00-17:00
CronJob Parametrlari
1. concurrencyPolicy
Agar oldingi job hali ishlab turibsayu yangi job vaqti kelsa:
Allow (default):
spec:
concurrencyPolicy: Allow
Ikkalasi ham parallel ishlaydi.
Forbid:
spec:
concurrencyPolicy: Forbid
Yangi job skip qilinadi.
Replace:
spec:
concurrencyPolicy: Replace
Eski job to'xtatiladi, yangi job ishga tushadi.
2. successfulJobsHistoryLimit
Nechta muvaffaqiyatli job saqlansin:
spec:
successfulJobsHistoryLimit: 3
Default: 3
3. failedJobsHistoryLimit
Nechta failed job saqlansin:
spec:
failedJobsHistoryLimit: 1
Default: 1
4. startingDeadlineSeconds
Agar CronJob o'z vaqtida ishga tushmasa, maksimal qancha kechikish mumkin:
spec:
startingDeadlineSeconds: 100
Agar 100 soniya kechiksa, job skip qilinadi.
Foydalanish Holatlari
-
Backup:
- Database backup
- File system backup
- S3 sync
-
Data Processing:
- ETL jobs
- Report generation
- Data aggregation
-
Cleanup:
- Log rotation
- Temporary file cleanup
- Old data deletion
-
Monitoring:
- Health checks
- Metrics collection
- Alert testing
Xulosa
Workload Resource'lar Kubernetes'ning asosiy tushunchalaridir:
✅ Pod: Eng kichik birlik, to'g'ridan-to'g'ri ishlatilmaydi ✅ ReplicaSet: Pod'larni replicate qilish (Deployment orqali) ✅ Deployment: Stateless ilovalar, rolling updates ✅ StatefulSet: Stateful ilovalar, stable identity ✅ DaemonSet: Har bir node'da bitta pod ✅ Job: Bir martalik vazifalar ✅ CronJob: Schedule bo'yicha vazifalar