본문 바로가기
공부/Kubernetes

[k8s] 주기적으로 rollout restart 하는 k8s cronjob

by haejang 2024. 8. 4.
728x90
728x90

 

 

 

# 요구사항

- 한 앱이 메모리 누수가 있는데, 당장 고칠 개발팀 리소스가 부족함

- 일단은 매일 새벽에 한번씩 restart 시켜주는 크론잡 만들어주기로 함

- BlueGreen 배포 전략을 사용하느라, argo Rollout 객체를 사용함

 

# 이름 정리

- 앱 이름 : `honglab-app`

- 네임스페이스 : `application`

 

# 필요 객체

크론잡과, RBAC을 위한 SA, Role, RoleBinding이 필요함

애플리케이션과 크론잡은 같은 클러스터, 같은 네임스페이스에 위치시켜 RBAC을 위한 과정을 최소화 함.

 

1) ServiceAccount

apiVersion: v1
kind: ServiceAccount
metadata:
  name: restart-honglab-app-sa
  namespace: application

 

2) Role

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: restart-honglab-app-role
  namespace: application
rules:
  - apiGroups:
    - argoproj.io
    resourceNames:
    - honglab-app
    resources:
    - rollouts
    verbs:
    - get
    - patch

 

3) RoleBinding

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: restart-honglab-app-role
  namespace: application
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: restart-honglab-app-role
subjects:
  - kind: ServiceAccount
    name: restart-honglab-app-sa
    namespace: application

 

4) CronJob

Rollout Restart를 위해서는 Argo Plugin이 필요하다. 플러그인이 깔려있는 이미지를 누가 만들어놨길래 그걸 사용하기로 결정했다.

https://hub.docker.com/r/codefresh/cf-argo-plugin/tags

 

https://hub.docker.com/r/codefresh/cf-argo-plugin/tags

 

hub.docker.com

 

apiVersion: batch/v1
kind: CronJob
metadata:
  name: restart-honglab-app
spec:
  timeZone: "Asia/Seoul"
  schedule: "0 3 * * *" # 매일 새벽 3시에 실행
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  concurrencyPolicy: Replace
  jobTemplate:
    spec:
      backoffLimit: 2
      template:
        spec:
          serviceAccountName: restart-honglab-app-sa
          restartPolicy: OnFailure
          containers:
            - name: restart-honglab-app
              image: codefresh/cf-argo-plugin:0.1.0
              imagePullPolicy: IfNotPresent
              command:
                - /bin/sh
                - -c
                - kubectl argo rollouts restart honglab-app -n application
              resources:
                limits:
                  cpu: 1
                  memory: 1G
                requests:
                  cpu: 0.1
                  memory: 1G

 

 

 

 

 

 

728x90
728x90

댓글