Info

24년 12월 ~ 25년 1월 작업 내용을 간단히 요약한 글입니다.

문제 상황

일반적으로 Kubernetes 리소스를 주기적으로 재시작하지는 않습니다.
하지만 다음과 같이 몇 가지 상황에서 임시 조치를 위해 주기적으로 재시작이 필요한 상황이 있었습니다.

  1. 메모리 누수가 발생하는 경우
  2. 지속적으로 Pod의 크기가 커져 스냅샷 등으로 인해 디스크 용량이 부족해지는 경우
    • 임시 파일이나 디버그 로그 등의 원인이 있을 수 있습니다.

해결 방법

  1. 우선 수동으로 재시작하는 명령어는 다음과 같습니다.

    kubectl rollout restart deployment <deployment-name>

    Deployment로 구성이 되어 있다는 가정 하에, kubectl delete 명령어보다 더 안전합니다.

  2. 주기적으로 재시작을 해야 한다면, 우선 crontab 파일로 설정을 고려해 볼 수 있습니다.
    다음 명령어를 통해 편집 모드로 들어갑니다.

    crontab -e

    이후 다음과 같이 작업을 설정합니다.

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

    위 명령어는 매 10분마다 재시작 명령어를 실행합니다. 주기는 자유롭게 설정할 수 있습니다.

  3. 더 정교한 방법으로 Kubernetes 자체 기능을 사용할 수 있습니다.
    Kubernetes CronJob을 사용하면 주기적으로 재시작을 할 수 있습니다.
    예를 들어, 다음과 같은 파일을 작성해 배포합니다.

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:
      name: rollout-restart
    spec:
      schedule: "*/10 * * * *"
      jobTemplate:
        spec:
          template:
            spec:
              containers:
                - name: rollout-restart
                  image: bitnami/kubectl:latest
                  command:
                    [
                      "kubectl",
                      "rollout",
                      "restart",
                      "deployment",
                      "<deployment-name>",
                    ]

실제 업무에서는 이렇게 임시 조치를 한 뒤, 원인을 찾아 영구적인 해결책을 적용했습니다.