반응형

지난 3편에 이어 다음!!

 

OCP 3scale 백업 자동화 고도화하기 - 3편(이미지생성, 권한부여)

백업 자동화 고도화 작업 3탄이다. OCP 3scale 백업 자동화 고도화하기 - 2편(dockerfile, 쉘스크립트) 아래 1편에서 고도화할 작업을 정리해두었다. OCP 3scale 백업 자동화 고도화하기 - 1편(도입부) 저번

flowlog.tistory.com

지난 포스팅까지 base 이미지가 생성되었다.

이제 마지막으로 cronjob / pvc / serviceaccount / rolebinding / scc 권한을 해주면 끝난다.

 

serviceAccount 

pod가 기동될때 사용할 서비스어카운트를 생성한다.

서비스 어카운트를 생성하면 secret에 token이 생기는데 해당 토큰으로 부여된 권한에 한해서 조회/생성/삭제 등을 할 수 있다.

apiVersion: v1
kind: ServiceAccount
metadata:
  name: backup-user
  namespace: 3scale

 

admin rolebinding

생성된 서비스어카운트에 admin 권한을 부여한다.

롤은 클러스터전체 또는 네임스페이스 단위로 지정할 수 있는데

네임스페이스 단위로 지정하려면 아래 yam 처럼 namespace가 지정된다.

(kind가 ClusterRole 이라 전체인줄 알았는데, 클러스터전체는 namespace 항목이 없어야됨)

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: backup-user-3scale-admin-rolebinding
  namespace: 3scale
subjects:
  - kind: ServiceAccount
    name: backup-user
    namespace: 3scale
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin

 

 

PersistentVolumeClaim

실제 백업파일을 보존할 pvc를 생성한다.

필자는 ARO 환경에 AzureFile을 StorageClass로 사용하고 있기 때문에, pvc만 만들면 자동으로 pv가 binding 된다.

pvc name : 3scale-backup 

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: 3scale-backup
  namespace: 3scale
  annotations:
    volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/azure-file
    volume.kubernetes.io/storage-provisioner: kubernetes.io/azure-file
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: azure-file
  volumeMode: Filesystem

 

scc 권한 부여

dockerfile 에서 지정한 유저의 uid 는 1000 이다.

 

ocp 에서는 project 마다 생성되는 uid를 제한하는데,

$ oc describe project <namespace>

위 명령어로 조회해보면, 아래 내용 중 uid-range 항목에 컨테이너 기동 유저의 id를 임의로 지정한다.

(리눅스는 uid 제한이 0~65535)

더보기
Name:                   openshift-apiserver
Created:                3 hours ago
Labels:                 kubernetes.io/metadata.name=openshift-apiserver
                        olm.operatorgroup.uid/f62101a1-cd94-4f8d-9e92-c401e3916a3b=
                        openshift.io/cluster-monitoring=true
                        pod-security.kubernetes.io/audit=privileged
                        pod-security.kubernetes.io/enforce=privileged
                        pod-security.kubernetes.io/warn=privileged
Annotations:            openshift.io/node-selector=
                        openshift.io/sa.scc.mcs=s0:c23,c22
                        openshift.io/sa.scc.supplemental-groups=1000550000/10000
                        openshift.io/sa.scc.uid-range=1000550000/10000
                        workload.openshift.io/allowed=management
Display Name:           <none>
Description:            <none>
Status:                 Active
Node Selector:          <none>
Quota:                  <none>
Resource limits:        <none>

이로인해 ocp에서는 컨테이너 기동 유저의 id가 100550000 보다 낮을경우(위 프로젝트 예시값) error 가 발생한다.

그래서 scc 권한을 부여해주어야하는데, nonroot를 부여해주면 root를 제외한 모든 유저를 사용할 수 있게된다.

$ oc adm policy add-scc-to-user nonroot -z backup-user -n 3scale

 

CronJob 

대망의 크론잡이다.!!!!

 

스케줄 작동 시간은 테스트로 1분마다 실행하도록 지정해놓았고,

dockerfile에서 넣어두었던 start.sh 을 실행시키는 커맨드를 작성하였다.

 

또, uid 1000(backupuser), gid 2000 으로 실행시키는 정의를 하였다.

특별히 volumeMount 에 serviceaccount token을 가져오는데, 현재 serviceAccountName의 token을 마운트하면 된다.

apiVersion: batch/v1
kind: CronJob
metadata:
  namespace: 3scale
  name: 3scale-backup-cronjob
spec:
  schedule: "*/1 * * * *"
  concurrencyPolicy: "Replace"
  #startingDeadlineSeconds: 200
  #suspend: false
  successfulJobsHistoryLimit: 2
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        metadata:
          labels:
            parent: "3scale-backup-cronjob"
        spec:
          containers:
            - command: ["/bin/sh", "/home/backupuser/start.sh"]
              image: image-registry.openshift-image-registry.svc:5000/3scale/backupjob:1.0
              imagePullPolicy: Always
              name: job-3scale-backup
              resources: {}
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
              volumeMounts:
                - name: 3scale-backup-pvc
                  mountPath: /pv-storage/
                - name: kube-api-access-b4pds
                  readOnly: true
                  mountPath: /var/run/secrets/kubernetes.io/serviceaccount
              securityContext:
                runAsUser: 1000
                runAsGroup: 2000
          dnsPolicy: ClusterFirst
          serviceAccountName: backup-user
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
          restartPolicy: OnFailure
          volumes:
            - name: 3scale-backup-pvc
              persistentVolumeClaim:
                claimName: 3scale-backup
            - name: kube-api-access-b4pds
              projected:
                sources:
                  - serviceAccountToken:
                      expirationSeconds: 3607
                      path: token
                  - configMap:
                      name: kube-root-ca.crt
                      items:
                        - key: ca.crt
                          path: ca.crt
                  - downwardAPI:
                      items:
                        - path: namespace
                          fieldRef:
                            apiVersion: v1
                            fieldPath: metadata.namespace
                  - configMap:
                      name: openshift-service-ca.crt
                      items:
                        - key: service-ca.crt
                          path: service-ca.crt
                defaultMode: 420

 

완료

이제 1분마다 잡이 생성되고, 최신 백업데이터를 5개만 유지한다.

지금까지 쓰인 모든 파일은 gitlab project 에 push하여 형상관리를 하고,

start.sh 를 통한 백업 스크립트를 따로 빼서 테스트하기에도 용이하다.

 

이로써 백업고도화(?) 작업을 마친다.

 

 

 

 

OCP 3scale 백업 자동화 고도화하기 - 1편(도입부)

저번에 아래 포스팅을 통해 ARO 플랫폼에서 3scale을 cronjob을 통해 백업했었다. - dockerhub에 base image를 업로드하고 (수동으로) - root 권한으로 실행시켜버렸고 (귀찮아..) - 백업파일 압축도 안했다 (3s

flowlog.tistory.com

 

OCP 3scale 백업 자동화 고도화하기 - 2편(dockerfile, 쉘스크립트)

아래 1편에서 고도화할 작업을 정리해두었다. OCP 3scale 백업 자동화 고도화하기 - 1편(도입부) 저번에 아래 포스팅을 통해 ARO 플랫폼에서 3scale을 cronjob을 통해 백업했었다. - dockerhub에 base image를

flowlog.tistory.com

 

OCP 3scale 백업 자동화 고도화하기 - 3편(이미지생성, 권한부여)

백업 자동화 고도화 작업 3탄이다. OCP 3scale 백업 자동화 고도화하기 - 2편(dockerfile, 쉘스크립트) 아래 1편에서 고도화할 작업을 정리해두었다. OCP 3scale 백업 자동화 고도화하기 - 1편(도입부) 저번

flowlog.tistory.com

 

OCP 3scale 백업 자동화 고도화하기 - 4편(마지막)

지난 3편에 이어 다음!! OCP 3scale 백업 자동화 고도화하기 - 3편(이미지생성, 권한부여) 백업 자동화 고도화 작업 3탄이다. OCP 3scale 백업 자동화 고도화하기 - 2편(dockerfile, 쉘스크립트) 아래 1편에서

flowlog.tistory.com

 

반응형
복사했습니다!