Info
24년 12월 ~ 25년 1월 작업 내용을 간단히 요약한 글입니다.
문제 상황
일반적으로 Kubernetes 리소스를 주기적으로 재시작하지는 않습니다.
하지만 다음과 같이 몇 가지 상황에서 임시 조치를 위해 주기적으로 재시작이 필요한 상황이 있었습니다.
- 메모리 누수가 발생하는 경우
- 지속적으로 Pod의 크기가 커져 스냅샷 등으로 인해 디스크 용량이 부족해지는 경우
- 임시 파일이나 디버그 로그 등의 원인이 있을 수 있습니다.
해결 방법
-
우선 수동으로 재시작하는 명령어는 다음과 같습니다.
kubectl rollout restart deployment <deployment-name>
Deployment로 구성이 되어 있다는 가정 하에,
kubectl delete
명령어보다 더 안전합니다. -
주기적으로 재시작을 해야 한다면, 우선
crontab
파일로 설정을 고려해 볼 수 있습니다.
다음 명령어를 통해 편집 모드로 들어갑니다.crontab -e
이후 다음과 같이 작업을 설정합니다.
*/10 * * * * kubectl rollout restart deployment <deployment-name>
위 명령어는 매 10분마다 재시작 명령어를 실행합니다. 주기는 자유롭게 설정할 수 있습니다.
-
더 정교한 방법으로 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>", ]
실제 업무에서는 이렇게 임시 조치를 한 뒤, 원인을 찾아 영구적인 해결책을 적용했습니다.