Init Container
pod의 app container가 실행되기 전에 동작하는 초기화 컨테이너로, Init Container들이 정상 구동이 완료 되어야 Main Container(App)가 실행된다.
만약, Init Container가 실패하면 kubelet은 Init Container가 성공할 때 까지 반복 재시작 하고, restartPolicy를 Never로 설정했을 때 실패하면 k8s는 전체 pod가 실패한 것으로 처리한다.
Init Container는 lifecycle, livenessProbe, readinessProbe 또는 startupProbe를 지원하지 않으며 kubelet이 각 Init Container를 순차적으로 실행한다.
사용법
pod의 YAML 파일 중 pod spec 필드에서 initContainer 필드를 container 항목 배열에 추가하면 된다.
apiVersion: v1
kind: Pod
metadata:
name: init-sample
spec:
containers:
- name: main
image: ubuntu
...
initContainers:
- name: init
image: alpine
...
Init Container는 APP Container와 별도의 이미지를 사용하기 때문에 구동에 관련하여 몇 가지 장점을 가질 수 있습니다.
- 앱 이미지에는 없는 셋업을 위해 다양한 유틸리티나 맞춤 코드를 포함할 수 있으며 sed, awk, python 등 여러 도구를 사용하기 위해 다른 이미지로부터 새로운 이미지를 만들 필요가 없습니다.
- Init Container에는 APP Container가 가질 수 없는 시크릿에 접근 권한을 줘 다른 파일 시스템 뷰를 가질 수 있습니다.(Linux 네임스페이스를 사용하기 때문)
- APP Container의 보안성을 위협할 수 있는 유틸리티나 커스텀 코드를 안전하게 실행할 수 있으며 툴을 분리한 채 유지할 수 있어 이미지에 대한 공격에 노출을 제한할 수 있습니다.
- Init Container는 별도의 이미지로 구동할 수 있어, 공동의 단일 앱 이미지 형태로 만들 필요가 없습니다.
'Docker & Kubenetes' 카테고리의 다른 글
Kubernetes - Cluster Node 제거 (1) | 2024.02.01 |
---|---|
Kubernetes - Static Pod (0) | 2024.01.12 |
Kubernetes Highly Available Clusters - 고가용성(HA) 클러스터 구축 (1) | 2023.11.20 |
EKS - EFS CSI driver (0) | 2023.11.03 |
Helm Operator (Helm Controller)에 대하여 (0) | 2023.10.13 |