Skip to main content

Workload Redources

Mundarija

  1. Workload Resources Nima?
  2. Pod Lifecycle
  3. ReplicaSet
  4. Deployment
  5. StatefulSet
  6. DaemonSet
  7. Job
  8. CronJob

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

  1. Deployment: Stateless ilovalar uchun
  2. ReplicaSet: Pod'larni replicate qilish (odatda Deployment orqali)
  3. StatefulSet: Stateful ilovalar uchun (database, queue)
  4. DaemonSet: Har bir node'da bitta pod
  5. Job: Bir martalik vazifalar
  6. 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:

  1. PodScheduled: Pod node'ga assign qilindimi?
  2. ContainersReady: Barcha konteynerlar ready holatidami?
  3. Initialized: Barcha init konteynerlar muvaffaqiyatli tugadimi?
  4. 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:

  1. Birinchi init container myservice DNS'ni kutadi
  2. Ikkinchi init container mydb DNS'ni kutadi
  3. 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:

  1. replicas: Nechta pod kerak
  2. selector: Qaysi pod'larni boshqarish kerak
  3. 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 bor
  • NotIn: Qiymat ro'yxatda yo'q
  • Exists: 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

  1. Deklarativ yangilanishlar: Desired state belgilang, Deployment qolganini hal qiladi
  2. Rolling Updates: Zero-downtime yangilanish
  3. Rollback: Oldingi versiyaga qaytish
  4. Scaling: Pod'lar sonini o'zgartirish
  5. Pause/Resume: Yangilanishni to'xtatish va davom ettirish
  6. 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: 1 yoki 25%
  • Default: 25%

maxUnavailable:

  • Nechta pod unavailable bo'lishi mumkin
  • Raqam yoki foiz: 1 yoki 25%
  • Default: 25%

Misol:

strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0

Replicas: 3

  1. Yangi pod yaratiladi (jami 4 ta pod)
  2. Yangi pod Ready bo'lsa, eski pod o'chiriladi (jami 3 ta pod)
  3. Yana yangi pod yaratiladi (jami 4 ta pod)
  4. 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: Progressing
  • status: "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: Progressing
  • status: "True"
  • reason: NewReplicaSetAvailable

3. Failed

Deployment bajarilmadi:

  • Resource yetishmaydi (quota)
  • Readiness probe fail
  • Image pull xatosi
  • Insufficient permissions

Shartlar:

  • type: Progressing
  • status: "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 identikHar bir pod unique
Istalgan tartibda yaratiladiKetma-ket yaratiladi
Random nomlarPredictable nomlar
Ephemeral storagePersistent 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:

  1. serviceName: Headless service nomi
  2. 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

  1. Databases:

    • MySQL, PostgreSQL
    • MongoDB, Cassandra
    • Redis cluster
  2. Message Queues:

    • RabbitMQ
    • Kafka
    • NATS
  3. Distributed Systems:

    • Zookeeper
    • etcd
    • Consul

StatefulSet vs Deployment

StatefulSetDeployment
Unique pod identityIdentical pods
Stable network IDRandom IP
Persistent storageEphemeral storage
Ordered operationsParallel operations
DatabasesWeb 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

  1. Monitoring:

    • Node exporter (Prometheus)
    • Datadog agent
    • New Relic agent
  2. Logging:

    • Fluentd
    • Filebeat
    • Logstash
  3. Networking:

    • CNI plugins
    • kube-proxy
    • Network policy agent
  4. Security:

    • Security scanning
    • Compliance checking
  5. 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

  1. Backup:

    • Database backup
    • File system backup
    • S3 sync
  2. Data Processing:

    • ETL jobs
    • Report generation
    • Data aggregation
  3. Cleanup:

    • Log rotation
    • Temporary file cleanup
    • Old data deletion
  4. 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