Kubernetes CronJob ile Periyodik Yedekleme Otomatikleştirme
Kubernetes'te düzenli yedekleme işleri çalıştırmak için CronJob kullanırız. Veritabanı dump'ı, log temizliği veya dosya senkronizasyonu gibi görevler belirli saatlerde otomatik yapılabilir.
Burada PostgreSQL veritabanını her gün saat 02:00'de yedekleyen bir CronJob yapılandırması göreceğiz. Yedek dosyası PersistentVolume'e kaydedilecek.
1apiVersion: batch/v12kind: CronJob3metadata:4name: db-backup5namespace: default6spec:7schedule: "0 2 * * *" # Her gün 02:00'de8jobTemplate:9spec:10template:11spec:12serviceAccountName: backup-user13containers:14- name: backup15image: postgres:1516command:17- /bin/sh18- -c19- |20BACKUP_FILE="/backups/db_$(date +%Y%m%d_%H%M%S).sql"21pg_dump -h postgres-service -U postgres -d mydb > $BACKUP_FILE22echo "Yedek tamamlandı: $BACKUP_FILE"23# Son 7 günü tut, eski dosyaları sil24find /backups -name "db_*.sql" -mtime +7 -delete25env:26- name: PGPASSWORD27valueFrom:28secretKeyRef:29name: postgres-secret30key: password31volumeMounts:32- name: backup-storage33mountPath: /backups34resources:35requests:36memory: "256Mi"37cpu: "100m"38limits:39memory: "512Mi"40cpu: "500m"41volumes:42- name: backup-storage43persistentVolumeClaim:44claimName: backup-pvc45restartPolicy: OnFailure46backoffLimit: 3Yedekleme işini çalıştırmak için gerekli Secret ve PVC'yi oluştur:
1# PostgreSQL şifresi için Secret2kubectl create secret generic postgres-secret \3--from-literal=password=your-secure-password45# Yedekleme depolama alanı6apiVersion: v17kind: PersistentVolumeClaim8metadata:9name: backup-pvc10spec:11accessModes:12- ReadWriteOnce13resources:14requests:15storage: 50Gi16storageClassName: standardCronJob'u dağıt ve durumunu kontrol et:
1kubectl apply -f cronjob.yaml2kubectl get cronjob db-backup3kubectl describe cronjob db-backup4kubectl logs -l job-name=db-backup-xxxxxBeklenen çıktı: Yedek dosyaları `/backups` dizininde `db_20250115_020000.sql` formatında oluşturulur. Eski dosyalar otomatik silinir.
Sık hata: `schedule` alanında cron formatı yanlışsa job hiç çalışmaz. Format `minute hour day month weekday` şeklindedir. Test için `schedule: "/5 *"` (5 dakikada bir) kullanabilirsin.
bknz: Veritabanı Backup Testi: Yedek Aldığınız Verileri Geri Yükleyebiliyor musunuz
0 yorum