
Liveness probe
Kubernetes의 Liveness Probe는 컨테이너가 실행 중인지 확인하는 메커니즘이다.
Pod의 Spec에서 정의할 수 있고 컨테이너가 정상적으로 작동하지 않아 복구가 필요한 경우, Kubernetes는 이를 자동으로 재시작할 수 있으며, Liveness Probe는 다음 세 가지 방법 중 하나를 사용하여 설정할 수 있다.
- HTTP GET Probe: 지정된 경로에 대해 HTTP GET 요청을 수행한. 응답 코드가 200에서 399 사이이면 성공으로 간주하고, 아니면 오류로 간주하고 컨테이너를 재시작한다.
- TCP Socket Probe: 지정된 포트에 TCP 연결을 시도하고 포트가 열려 있으면 성공으로 간주한다.
- Exec Probe: 컨테이너 내에서 지정된 명령을 실행합니다. 명령이 0으로 종료하면 성공으로 간주하고, 아니면 컨테이너를 다시 시작한다.
HTTP GET Probe 예시
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 2
periodSeconds: 5
failureThreshold: 3
TCP Socket Probe 예시
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 2
periodSeconds: 5
failureThreshold: 3
Exec Probe 예시
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 15
timeoutSeconds: 2
periodSeconds: 5
failureThreshold: 3
- initialDelaySeconds: 컨테이너가 시작된 후 Probe가 시작되기까지의 대기 시간.
- timeoutSeconds: Probe가 타임아웃되기까지의 시간.
- periodSeconds: Probe가 실행되는 주기.
- failureThreshold: Probe가 실패로 간주되기 전에 허용되는 연속 실패 횟수.
InitContainer
Init 컨테이너는 Kubernetes에서 주 애플리케이션 컨테이너가 시작되기 전에 하나 이상의 초기화 컨테이너를 실행할 수 있게 해주는 기능이다.
Init 컨테이너가 성공적으로 완료되어야 주 애플리케이션 컨테이너가 시작되며,
Init 컨테이너는 주로 다음과 같은 작업에 유용하다.
- 주 애플리케이션을 위한 환경 준비 또는 설정, 예를 들어 데이터베이스 마이그레이션 수행, 설정 구성, 또는 다른 서비스가 사용 가능해질 때까지 대기하는 등의 작업
- 주 애플리케이션이 실행되기 위해 필요한 큰 파일이나 비밀 정보를 다운로드하는 작업
- Pod를 관리 서비스에 등록하거나 시작 전 검사를 수행하는 작업
Init 컨테이너는 Pod 사양에서 일반 컨테이너와 마찬가지로 정의되지만, 별도의 initContainers 필드에 정의된다.
이들은 일반 컨테이너가 사용할 수 있는 모든 이미지를 실행할 수 있으며, 명령어와 인자도 포함할 수 있지만,
애플리케이션 컨테이너가 시작되기 전에 종료되어야 하므로, 생명주기 이벤트, 준비성 프로브, 또는 생존성 프로브등 주기적으로 체크를 하는 작업은 지원하지 않는다.
Kubernetes Pod 사양 내에서 init 컨테이너를 정의하는 예시는 다음과 같다.
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: myapp-container
image: myapp:latest
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', 'echo The app is starting; sleep 60']
- Pod는 init-myservice라는 이름의 단일 init 컨테이너를 포함하고 있으며, 이는 BusyBox 이미지를 실행한다.
- Init 컨테이너는 서비스를 준비하거나 대기하기 위해 60초 지연을 시뮬레이션하는 명령어를 실행한다.
- Init 컨테이너가 완료된 후, 주 애플리케이션 컨테이너(myapp-container)가 시작된다.
InfraContainer
인프라 컨테이너(Infra Container)는 Kubernetes 클러스터 내에서 Pod의 기본 컨테이너로 작동한다.
이는 Pod 내의 다른 모든 컨테이너들이 실행되는 환경을 제공하는 역할을 하는데, 인프라 컨테이너는 주로 네트워킹과 볼륨 마운트와 같은 기본적인 인프라 서비스를 설정하고 관리하는 데 사용된다.
Kubernetes에서는 이를 "Pause 컨테이너"라고도 부르며, Pod의 모든 컨테이너들이 공유하는 네임스페이스와 기타 리소스를 초기화하는 데 사용된다.
인프라 컨테이너는 사용자가 직접적으로 인터랙션하는 컨테이너가 아니며, Kubernetes 시스템에 의해 자동으로 생성되고 관리되므로, Pod의 생명주기 동안 지속되며, Pod 내의 애플리케이션 컨테이너들이 시작되기 전에 필요한 시스템 리소스와 환경을 준비한다.
Pause 컨테이너의 주요 목적은 다음과 같다.
- 네트워크 네임스페이스 유지: Pod 내의 모든 컨테이너들이 동일한 네트워크 인터페이스를 공유할 수 있도록 한다.
- 프로세스 ID (PID) 네임스페이스 유지: Pod 내의 컨테이너들이 시스템 프로세스를 공유하고 관리할 수 있게 한다.
- 볼륨 마운트 포인트 제공: Pod에 연결된 볼륨을 Pod 내의 모든 컨테이너들이 접근할 수 있도록 한다.
'Containar' 카테고리의 다른 글
kubernetes Deployment rollingupdate: 무중단 배포하기 (1) | 2024.07.23 |
---|---|
kubernetes controller - ReplicaSet VS ReplcationController (1) | 2024.07.20 |
kubernetes Pod 기능 활용하기: namespace, multi container pod (0) | 2024.06.05 |
쿠버네티스 기초 다지기: 동작 원리, kubectl 사용법 (0) | 2024.06.01 |
컨테이너 기술의 핵심: Kubernates 이해하기 (1) | 2024.05.28 |

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!