
컨테이너(pod)를 생성했을 때, running상태를 유지하지 못하는 것은 쿠버네티스의 장점인 신뢰성•안정성과 연관된다.
컨테이너가 생성되었지만 running상태를 유지하지 못하는 경우에 Pod 상태는 주로 Terminated이나 Error 또는 CrashLoopBackOff로 표시된다.
이는 쿠버네티스의 주요 기능인 Pod Lifecycle로 인한 것인데, Pod Lifecycle는 Kubernetes가 컨테이너의 상태를 주기적으로 확인하여 해당 컨테이너가 살아있는지 여부를 판단하는 기능이다.
만약 probe가 실패하면(ex. 수행중인 주 프로세스가 없는 경우), Kubernetes는 해당 Pod을 종료하고 다시 시작하려고 시도한다.
따라서 주 프로세스가 종료되면 해당 Pod는 probe를 통해 이를 감지하고 restart policy로 즉시 종료 및 재시작을 시도하게 된다. 이 과정에서 컨테이너가 Terminated되고 ContainerCreatinge되는 과정이 반복되는 것이다. 때문에 이러한 문제를 방지하기 위해서 컨테이너가 시작되는 시점에 프로세스를 수행해주도록 해야한다.
방법 1. Dockerfile로 CMD 명령어 추가하기
FROM ubuntu:latest
'''
'''
CMD ["/bin/bash", "-c", "tail -f /dev/null"]
- CMD: 컨테이너가 실행될 때 실행되는 명령을 정의한다.
- /bin/bash: Bash 셸을 실행하는 명령어이다.
- -c: 이 옵션은 Bash 셸에 명령을 전달할 때 사용한다.
- 'tail -f /dev/null': /dev/null 파일을 계속해서 읽는 tail -f 명령을 실행한다. /dev/null은 표준 입력에서 끝없는 null 바이트 스트림을 생성하는 특수한 파일로, 실제로는 아무런 동작도 수행하지 않는다.
방법 2. yaml로 command 명령어 추가하기
spec:
nodeName: worker
containers:
- name: test
command:
- '/bin/bash'
- '-c'
- 'tail -f /dev/null'
- command: 명시된 내용은 컨테이너가 실행될 때 실행할 명령을 정의한다.
- /bin/bash: Bash 셸을 실행하는 명령어이다.
- -c: 이 옵션은 Bash 셸에 명령을 전달할 때 사용한다.
- 'tail -f /dev/null': /dev/null 파일을 계속해서 읽는 tail -f 명령을 실행한다. /dev/null은 표준 입력에서 끝없는 null 바이트 스트림을 생성하는 특수한 파일로, 실제로는 아무런 동작도 수행하지 않는다.
위의 내용은 프로세스를 계속해서 수행하기 위한 무한 루프를 만드는 방법으로, 해당 컨테이너가 실행 중일 동안 계속해서 프로세스를 수행하고 있는 척하지만, 사실상 아무런 작업도 하지 않고 계속해서 /dev/null을 읽고 있게 한다.
'쿠버네티스(kubernetes)' 카테고리의 다른 글
쿠버네티스 kubectl 명령어 자동완성 설정하기 (0) | 2025.02.05 |
---|---|
Failed to pull image with x509 ImagePullBackOff 해결하기 - CRIO (0) | 2024.12.11 |
쿠버네티스 Ingress와 Service 사용하기 (0) | 2024.06.24 |
쿠버네티스 Secret 사용방법 (0) | 2024.06.24 |