Kubernetes CronJob을 사용하여 S3에 대한 MongoDB 백업 예약



소개



Kubernetes CronJob을 사용하면 시간 기반 일정에 따라 Jobs을 매우 쉽게 실행할 수 있습니다. 이러한 자동화된 작업은 Linux 또는 UNIX 시스템에서 Cron 작업처럼 실행됩니다.

이 게시물에서는 Kubernetes CronJob을 사용하여 MongoDB 데이터베이스의 반복 백업을 예약하고 백업 아카이브를 AWS S3에 업로드합니다. 모든 소스 코드는 GitHub 리포지토리에서 사용할 수 있습니다.


툴라다르 / k8s-백업-mongodb


Kubernetes CronJob을 사용하여 S3에 대한 MongoDB 백업을 예약합니다.






시작하다



계속해서 MongoDB에서 최소한의 권한으로 백업을 수행하는 전용 사용자를 생성해 보겠습니다.

루트 사용자로 MongoDB 셸에 로그인합니다.

mongo admin --host <hostname> --authenticationDatabase admin -u root

다음 명령을 실행하여 백업 사용자를 생성합니다.

db.createUser({
 user: 'backup_user',
 pwd: 'oO9eV5cG6cF2oM1r',
 roles: [{ role: 'backup',db:'admin'}]
})



쿠버네티스 네임스페이스



cronjob을 배포하기 위해 Kubernetes에 전용 네임스페이스를 만듭니다.

kubectl apply -f https://raw.githubusercontent.com/tuladhar/k8s-backup-mongodb/main/kubernetes/namespace.yaml

출력은 다음과 유사합니다.

namespace/backup-mongodb created

해당 컨텍스트에서 실행할 모든 후속 kubectl 명령에 대한 네임스페이스를 저장해 보겠습니다.

kubectl config set-context --current --namespace=backup-mongodb



쿠버네티스 시크릿



Kubernetes Secrets을 통해 중요한 정보를 저장하고 관리할 수 있습니다. 비밀에 기밀 정보를 저장하는 것은 Pod 정의 또는 container image 에 그대로 두는 것보다 더 안전하고 유연합니다.

MongoDB URI 저장

export MONGODB_URI=mongodb://backup_user:oO9eV5cG6cF2oM1r@<mongodb-hostname>:27017

kubectl create secret generic mongodb-uri --from-literal=MONGODB_URI=$MONGODB_URI

AWS 자격 증명 및 S3 버킷 URI 저장



export AWS_ACCESS_KEY_ID=***
export AWS_SECRET_ACCESS_KEY=***
export BUCKET_URI=s3://bucket-name
export AWS_DEFAULT_REGION=us-east-1

kubectl create secret generic aws --from-literal=AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID

kubectl create secret generic aws --from-literal=AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY

kubectl create secret generic aws --from-literal=BUCKET_URI=$BUCKET_URI

kubectl create secret generic aws --from-literal=AWS_DEFAULT_REGION=$AWS_DEFAULT_REGION



CronJob 배포



이제 다음 명령을 실행하여 MongoDB 백업 cronjob을 배포할 수 있습니다.

kubectl apply -f https://raw.githubusercontent.com/tuladhar/k8s-backup-mongodb/main/kubernetes/cronjob.yaml

출력은 다음과 유사합니다.

cronjob.batch/backup-mongodb created

기본 일정은 매시간 실행하는 것입니다. 일정을 조정하려면 다음 명령을 실행하고 일정 속성을 수정합니다.

kubectl edit cronjob backup-mongodb



cronjob을 만든 후 다음 명령을 실행하여 해당 상태를 가져올 수 있습니다.

kubectl get cronjob

출력은 다음과 유사합니다.

NAME             SCHEDULE      SUSPEND   ACTIVE   LAST SCHEDULE

backup-mongodb   0 */1 * * *   False     0        <none>

명령 결과에서 알 수 있듯이 cronjob은 아직 작업을 예약하거나 실행하지 않았습니다. 다음 명령을 실행하여 작업을 나열할 수 있습니다.

kubectl get jobs

작업의 포드 로그를 보려면 다음 명령어를 실행하세요.

pods=**$(**kubectl get pods --selector=job-name=<job-name> --output=jsonpath={.items[*].metadata.name}**)**

kubectl logs $pods



결론



좋은 웹페이지 즐겨찾기