[Kubernetes] Kubernetes Init Containers 개념쌓기

2024. 5. 20. 15:03·docker & Kubernetes
목차
  1. pod란?
  2. container란?
  3. init container란?
  4. 일반적인 컨테이너와의 차이점
  5. init container 실습하기
  6. 👇🏻 참고 사이트
728x90
반응형

pod란?

kubernetes에서 가장 기본적인 배포 단위이다. 간단히 1개의 가상이미지라고 보면 된다.

container란?

pod를 이루는Application으로 생각하면 된다. init container는 app container가 구동되기 이전에pod를 초기화해주는 container이다.

pod의 환경 설정 또는 기타 다른 부수적인 작업을 하기 위해 일회성으로 구동되는 것이다.

init container란?

init container는 말 그대로 초기화를 위한 목적이기 때문에 container 개수로는 잡히지 않는다. app container와 다른 한 가지 특성이 있다면, 반드시 init container -> app container로 구동된다. 그래서 init container에서 에러가 발생할 경우 app container가 구동되지 않는다.

보안상 이유로 앱 컨테이너 이미지와 같이 두면 안 되는 앱의 소스 코드를 별도로 관리할 때 유용하다.

일반적인 컨테이너와의 차이점

초기화 컨테이너는 앱 컨테이너의 리소스 상한(limit), 볼륨, 보안 세팅을 포함한 모든 필드와 기능을 지원한다. 그러나, 초기화 컨테이너를 위한 리소스 요청량과 상한은 리소스에 문서화된 것처럼 다르게 처리된다.

또한, 초기화 컨테이너는 lifecycle, livenessProbe, readinessProbe 또는 startupProbe 를 지원하지 않는다. 왜냐하면 초기화 컨테이너는 파드가 준비 상태가 되기 전에 완료를 목표로 실행되어야 하기 때문이다.

init container 실습하기

1) 파일 작성하기

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 서비스를 기다리고, 두번째는 mydb 서비스를 기다린다.

2) 파일 생성하기

kubectl apply -f pod-init.yaml

myapp-pod 생성
myapp-pod 생성

위와 같은 command를 작성하면 pod가 생성된다.

3) pod 상태 확인하기

kubectl get -f pod-init.yaml

pod 상태 확인
pod 상태 확인

kubectl describe -f pod-init.yaml

위의 command를 작성하면 아래와 같이 나온다.

Name:          myapp-pod
Namespace:     default
[...]
Labels:        app.kubernetes.io/name=MyApp
Status:        Pending
[...]
Init Containers:
  init-myservice:
[...]
    State:         Running
[...]
  init-mydb:
[...]
    State:         Waiting
      Reason:      PodInitializing
    Ready:         False
[...]
Containers:
  myapp-container:
[...]
    State:         Waiting
      Reason:      PodInitializing
    Ready:         False
[...]

위의 초기화 컨테이너를 running상태이지만, 나머지 init container는 waiting 상태이다. 초기화 컨테이너가 다 running이 되어야 container가 running상태가 된다.

4) 서비스 생성하기

---
apiVersion: v1
kind: Service
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
---
apiVersion: v1
kind: Service
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377
kubectl apply -f services.yaml

mydb 와 myservice 서비스를 생성한다.

mydb,myservice 생성
mydb,myservice 생성

5) pod 상태 확인하기

kubectl get -f pod-init.yaml
Name:          myapp-pod
Namespace:     default
[...]
Labels:        app.kubernetes.io/name=MyApp
Status:        Pending
[...]
Init Containers:
  init-myservice:
[...]
    State:         Terminated
      Reason:      Completed
[...]
  init-mydb:
[...]
    State:         Terminated
      Reason:      Completed
[...]
Containers:
  myapp-container:
[...]
    State:         Running
[...]

위와 같이 상태가 변한 것을 확인할 수 있다.

👇🏻 참고 사이트

https://kubernetes.io/ko/docs/concepts/workloads/pods/init-containers/

https://dobby-isfree.tistory.com/180

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)
  1. pod란?
  2. container란?
  3. init container란?
  4. 일반적인 컨테이너와의 차이점
  5. init container 실습하기
  6. 👇🏻 참고 사이트
'docker & Kubernetes' 카테고리의 다른 글
  • [Kubernetes] Namespace, ResourceQuota, LimitRange 개념 적립하기
  • [Kubernetes] kubernetes affinity 자세히 파기
  • [Kubernetes] 쿠버네티스 API 헬스(health) 엔드포인트 알아보기
  • [Kubernetes] taint & toleration 개념 알아보기
Uheeking
Uheeking
안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking의 it로그안녕하세요. react, flutter, node.js에 관련해서 글을 쓰는 블로그입니다.
Uheeking
Uheeking의 it로그
Uheeking
전체
오늘
어제

공지사항

  • 분류 전체보기 (254)
    • React (48)
    • Node.js (32)
    • Next.js (22)
    • Vue.js (15)
    • javascript (3)
    • Django (19)
    • etc (23)
    • Flutter (30)
    • Error (16)
    • AWS (11)
    • docker & Kubernetes (32)
    • git (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
250x250

인기 글

태그

  • Props
  • docker
  • 리액트
  • flutter
  • Kubernetes
  • node.js
  • useEffect
  • next.js
  • 도커
  • Express
  • SSR
  • MySQL
  • AWS
  • 티스토리챌린지
  • React
  • supabase
  • 쿠버네티스
  • 넥스트
  • mosquitto
  • Django
  • 노드
  • Create
  • Vue.js
  • firebase
  • 오블완
  • NEXT
  • 플러터
  • sequelize
  • error
  • 장고

최근 댓글

최근 글

250x250
hELLO· Designed By정상우.v4.5.2
Uheeking
[Kubernetes] Kubernetes Init Containers 개념쌓기

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.