일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 그라파나 시각화
- EKS 클러스터
- Aurora cluster
- headless service
- 그라파나 대시보드
- 쿠버네티스 컴포넌트
- SAA 합격 후기
- grafana on kubernetes
- Solution Architecture
- Prometheus install
- Firelens
- helm
- Kubernetes
- AWS 딥레이서
- 딥레이서 보상함수
- Kubernets on Jenkins
- LoadBalancer Controller
- 쿠버네티스
- 깃허브 액션
- 메탈LB
- terraform
- kubernetes 동작 원리
- jenkins
- livenessPorbe
- 솔데스크
- github action 사용법
- blue-green
- 로드밸런서 컨트롤러
- 딥레이서
- EFS CSI Driver
mingming
kubernetes init container 본문
init container
main container를 시작하기 위한 초기화 컨테이너
- 앱 컨테이너 실행 전에 미리 동작 시킬 컨테이너 ( init container가 동작하지 않으면 main container도 동작하지 않음)
- init container 가 모두 실행 된 후에 main container를 실행
Kubernetes에서 "Init Container"는 Pod 내에서 메인 컨테이너가 시작되기 전에 실행되는 부가적인 컨테이너입니다. Init Container는 주로 메인 컨테이너가 시작되기 전에 필요한 초기화 작업을 수행하는 데 사용됩니다. 이는 애플리케이션의 시작 전에 필요한 준비 작업이나 데이터 로딩, 설정 구성 등을 처리하는 데 유용합니다.
초기화 및 사전 조건 작업: Init Container는 메인 컨테이너가 시작되기 전에 실행되므로, 애플리케이션이 동작하기 전에 필요한 초기화 작업을 수행할 수 있습니다. 예를 들어, 데이터베이스 초기화, 파일 다운로드, 환경 변수 설정 등을 처리할 수 있습니다.
종속성 해결: 애플리케이션이 여러 종속성을 가지고 있는 경우, Init Container를 사용하여 이러한 종속성을 미리 처리하고 애플리케이션을 시작할 때에는 완전히 준비된 상태로 실행할 수 있습니다.
병렬 처리: Init Container와 메인 컨테이너는 병렬로 실행될 수 있습니다. 따라서 Init Container가 작업을 처리하는 동안 메인 컨테이너가 시작되도록 할 수 있습니다.
컨테이너 간 데이터 공유: Init Container는 Pod 내의 다른 컨테이너와 동일한 볼륨을 공유하므로, 데이터를 생성하거나 처리한 후에 해당 데이터를 볼륨에 저장하고 메인 컨테이너와 공유할 수 있습니다.
실행 완료 후 종료: Init Container는 자신의 작업을 완료한 후 종료됩니다. 따라서 메인 컨테이너가 시작될 때에는 더 이상 필요하지 않은 컨테이너가 제거되게 됩니다.
Init Container는 Kubernetes의 Deployment, StatefulSet, Job 등과 함께 사용될 수 있으며, 애플리케이션 배포 및 관리 과정에서 초기화 및 사전 조건 작업을 효과적으로 처리하는 데 도움을 줍니다.
init-container.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app.kubernetes.io/name: MyApp
spec:
containers:
- name: myapp-container
image: busybox:1.28
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox:1.28
command: ['sh', '-c', "until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]
myservice
until nslookup myservice.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for myservice; sleep 2; done
nslookup myservice 명령어가 실행되지 않으면 echo wating for myservice 명령어를 반복하게 하는 명령어 입니다.
mydb
until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb;
nslookup mydb 명령어가 실행되지 않으면 echo wating for mydb 명령어를 반복하게 하는 명령어 입니다.
따라서 initContainer가 동작하지 않아 main container가 동작하지 않는다 .
myservice.yaml
---
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
myservice를 먼저 동작시켜보기 !
kubectl apply -f myservice.yaml
두개의 init container 중 init-service container가 실행된 것을 확인할 수 있습니다.
mydb.yaml
---
apiVersion: v1
kind: Service
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
mydb 동작 시켜보기
kubectl apply -f mydb.yaml
init-service container가 실행되고 메인 컨테이너가 실행되었습니다.
Infra Container
실행되는 Pod 안에 아무일도 하지 않는 Pause라는 컨테이너가 생성된다. Pod에 대한 ip , hostname 등 관리하고 생성해주는 컨테이너
'kubernetes' 카테고리의 다른 글
kubernetes static Pod (0) | 2023.08.30 |
---|---|
kubernets Metal LB 설치하기 (0) | 2023.08.30 |
kubernetes livenessProve (1) | 2023.08.27 |
EKS Amazon EFS CSI Driver (helm) (1) | 2023.08.25 |
EKS AWS Load Balancer Controller (helm) (0) | 2023.08.25 |