Gitlab Backup 설정은 아래 링크를 참고한다:
- https://docs.gitlab.com/ee/raketasks/backup_restore.html
S3 API를 지원하기 때문에 S3에 백업하거나, On-premise라면 NAS에 minio설치해서 S3 API로 백업할 수도 있다.
gitlab을 Kubernetes에서 사용 할 경우 crontab을 사용할 수 없어 기본적으론 수동으로 gitlab 파드 안에 들어가서 gitlab-backup create 명령을 수행해주어야 한다.
하지만 이건 번거로우니... Kubernetes의 CronJob을 통해 이를 자동화한다.
주의 사항
gitlab이 statefulset 으로 만들어 져야 한다. deployment 으로 만드는 경우 pod이름이 random하게 생성되기 때문에 role 정의가 불가하다.
Role의 resourceNames에 wildcard를 쓸 수 있으면 좋을려만... K8s에서는 그럴 생각은 없어 보인다. 관련 논의: https://github.com/kubernetes/kubernetes/issues/56582
1. Service Account 생성
$ kubectl -n YOUR_GITLAB_NAMESPACE create sa gitlab-backup-job
2. Role 및 RoleBinding 생성
kind: Role
metadata:
namespace: YOUR_GITLAB_NAMESPACE
name: gitlab-pod-executor
rules:
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create"]
resourceNames: ["gitlab-0"] # Gitlab Pod 이름을 적어준다.
- apiGroups: [""]
resources: ["deployments", "statefulsets"]
verbs: ["list", "get"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: gitlab-backup-job-binding
namespace: YOUR_GITLAB_NAMESPACE
subjects:
- kind: ServiceAccount
name: gitlab-backup-job
roleRef:
kind: Role
name: gitlab-pod-executor
apiGroup: rbac.authorization.k8s.io
3. CronJob 생성
kind: CronJob
apiVersion: batch/v1beta1
metadata:
name: gitlab-backup-cronjob
namespace: YOUR_GITLAB_NAMESPACE
spec:
schedule: 0 3 * * *
concurrencyPolicy: Allow
suspend: false
jobTemplate:
metadata:
creationTimestamp: null
labels:
job: gitlab-backup-cronjob
spec:
template:
metadata:
creationTimestamp: null
labels:
job: gitlab-backup-cronjob
spec:
restartPolicy: OnFailure
serviceAccountName: gitlab-backup-job
containers:
- name: main
image: 'bitnami/kubectl:latest'
command:
- kubectl
- '-n'
- YOUR_GITLAB_NAMESPACE
- exec
- 'statefulset/gitlab' # 수정
- '-c'
- gitlab # 수정 (컨테이너 여러개 있다면. 없으면 -c gitlab 지워도 됌)
- '--'
- 'gitlab-backup'
- 'create'
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
반응형
'개발 및 운영 > Kubernetes' 카테고리의 다른 글
[rook-ceph] external cluster 사용 시 attempt to determine ceph version for the current cluster image timed out 오류 (0) | 2022.01.11 |
---|---|
rados gw s3 사용시 metadata 이름에 따른 403 SignatureDoesNotMatch 문제 (0) | 2022.01.07 |
Kubernetes 노드가 죽은 후에 재-스케쥴링 되지 않음 (0) | 2021.08.21 |
Calico iBGP에서 vxlan.calico의 IP가 NextHop으로 뜨는 경우 (0) | 2020.11.29 |
ceph mon_dns_srv_name 작성방법 (0) | 2020.11.19 |
댓글