파드 초기화 구성하기

파드 초기화 구성하기 (Configure Pod Initialization)

이 페이지에서는 Init Container를 사용해 애플리케이션 Container가 실행되기 전에 Pod를 초기화하는 방법을 보여드려요.

출처: 문서

본문

시작하기 전에 (Before you begin)

쿠버네티스 클러스터가 필요하고, kubectl 명령줄 도구가 클러스터와 통신하도록 구성돼 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 두 개 이상 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube로 만들거나 다음 쿠버네티스 플레이그라운드 중 하나를 사용할 수 있어요.

  • iximiuz Labs
  • Killercoda
  • KodeKloud

버전을 확인하려면 kubectl version을 입력하세요.

Init Container가 있는 Pod 만들기 (Create a Pod that has an Init Container)

이 실습에서는 애플리케이션 Container 하나와 Init Container 하나를 가진 Pod를 만들어요. init 컨테이너는 애플리케이션 컨테이너가 시작하기 전에 완료될 때까지 실행돼요.

다음은 이 Pod의 구성 파일이에요.

apiVersion: v1
kind: Pod
metadata:
  name: init-demo
spec:
  containers:
  - name: nginx
    image: nginx
    ports:
    - containerPort: 80
    volumeMounts:
    - name: workdir
      mountPath: /usr/share/nginx/html
  # 이 컨테이너들은 파드 초기화 중에 실행됨
  initContainers:
  - name: install
    image: busybox:1.28
    command:
    - wget
    - "-O"
    - "/work-dir/index.html"
    - http://info.cern.ch
    volumeMounts:
    - name: workdir
      mountPath: "/work-dir"
  dnsPolicy: Default
  volumes:
  - name: workdir
    emptyDir: {}

pods/init-containers.yaml — 구성 파일에서 init 컨테이너와 애플리케이션 컨테이너가 공유하는 Volume을 Pod가 가지고 있음을 볼 수 있어요.

init 컨테이너는 공유 Volume을 /work-dir에 마운트하고, 애플리케이션 컨테이너는 공유 Volume을 /usr/share/nginx/html에 마운트해요. init 컨테이너는 다음 명령을 실행한 뒤 종료돼요.

wget -O /work-dir/index.html http://info.cern.ch

init 컨테이너가 nginx 서버의 루트 디렉터리에 index.html 파일을 쓴다는 점을 주목하세요.

Pod를 생성해요.

kubectl apply -f https://k8s.io/examples/pods/init-containers.yaml

nginx 컨테이너가 실행 중인지 확인해요.

kubectl get pod init-demo

출력은 nginx 컨테이너가 실행 중임을 보여줘요.

NAME        READY     STATUS    RESTARTS   AGE
init-demo   1/1       Running   0          1m

init-demo Pod에서 실행 중인 nginx 컨테이너에 셸을 띄워 보세요.

kubectl exec -it init-demo -- /bin/bash

셸에서 nginx 서버에 GET 요청을 보내 보죠.

root@nginx:~# apt-get update
root@nginx:~# apt-get install curl
root@nginx:~# curl localhost

출력은 nginx가 init 컨테이너가 쓴 웹 페이지를 서빙하고 있음을 보여줘요.

<html><head></head><body><header>
<title>http://info.cern.ch</title>
</header>

<h1>http://info.cern.ch - home of the first website</h1>
  ...
  <li><a href="http://info.cern.ch/hypertext/WWW/TheProject.html">Browse the first website</a></li>
  ...

다음 단계 (What's next)

  • 같은 Pod에서 실행되는 컨테이너 간 통신에 대해 더 배우기
  • Init Container에 대해 더 배우기
  • Volume에 대해 더 배우기
  • Init Container 디버깅에 대해 더 배우기

더 알아보기 (Learn more)