이 문서에서는 Kubernetes 클러스터 운영 시 유용한 패턴과 방법론을 정리합니다.

Rollout (재시작) 전략

수동 재시작

다음 명령어로 Deployment를 안전하게 재시작할 수 있습니다.

kubectl rollout restart deployment <deployment-name>

kubectl delete pod보다 안전하며, Rolling Update 방식으로 무중단 재시작이 가능합니다.

주기적 재시작

메모리 누수나 디스크 용량 증가 등 Application에 문제가 있을 때 임시 조치로 주기적 재시작이 필요한 경우가 있습니다.

Warning

주기적 재시작은 임시 조치입니다. 추후에 근본 원인(메모리 누수, 로그 또는 임시 파일 축적 등)을 파악하여 영구적인 해결책을 적용해야 합니다.

방법 1: crontab 사용

crontab -e
*/10 * * * * kubectl rollout restart deployment <deployment-name>

방법 2: Kubernetes CronJob 사용

apiVersion: batch/v1
kind: CronJob
metadata:
  name: rollout-restart
spec:
  schedule: "*/10 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          serviceAccountName: rollout-restart-sa # 적절한 RBAC 권한 필요
          containers:
            - name: rollout-restart
              image: alpine/kubectl:latest
              command:
                - kubectl
                - rollout
                - restart
                - deployment
                - <deployment-name>
          restartPolicy: OnFailure

GitOps 환경에서 Rollout 트리거

GitOps(ArgoCD, Flux 등)에서 이미지 태그 변경 없이 Rollout을 트리거하는 방법입니다.

Annotation 기반 트리거

Deployment의 annotation에 timestamp 등 고유한 값을 넣고, GitOps에서 이 값을 변경하면 Rollout이 발생합니다.

spec:
  template:
    metadata:
      annotations:
        rollout-trigger: "2025-12-12T10:00:00"

Manifest List Digest

manifest list digest를 사용하면 아키텍처(arm64, amd64 등)에 맞는 이미지가 자동으로 선택됩니다. Digest를 변경하여 Rollout을 트리거할 수 있습니다.