본문 바로가기

컨테이너/Kubernetes

[Kubernetes] (9) Pod

Pod에 대해서 이해하기 전에, 우리는 어플리케이션이 이미 개발이 되어있고, 그리고 도커 이미지와 이를 활용할수 있는 도커 repository가 준비가 되있다고 가정하겠다.

그래서 kubernetes 클러스터가 도커 이미지 파일을 땡겨갈수 있어야 한다.

 

Pod란 무엇일까? 

쿠버네티스 object중 가장 최소 단위이다. 이 Pod를 쿠버네티스 클러스터 안에 생성할수 있다.

 

하나의 Pod안에는 여러개의 컨테이너가 만들어질수도, 한개의 컨테이너가 만들어 질수도 있다.

그러나 kubernetes.io 공식 홈페이지에 따르면, 멀티-pod 컨테이너는 드문 케이스이다.

즉 한개의 pod안에는 한개의 container을 생성하는것이 적당하다.

 

이제 pod가 배포되는 과정에 대해서 살펴보자.

kubectl = 즉 쿠바컨트롤러는 run / apply 명령어를 통해 컨테이너, pod 를 배포한다.

 

 

아주 간단한 다음 명령어를 보자.

nginx는 pod에 이름이 될것이다. 그렇다면 image는 어디서 가져올까? 

 

그렇다. --image라는 옵션을 사용하여 이미지 파일을 dockerhub에서 가져올수 있다.

각각의 워커노드에 만들어져있는 Dockerruntime에서 이미지파일을 가져온다.

 

 

[한가지 문제를 풀어보겠다.]

 

busybox.yml을 만들어 보겠다.

3600 unixtime sleep을 하는 컨테이너를 만들어보자.

pod,label,container name, image는 모두 busybox로 한다.

 

apiVersion: v1
kind: Pod
metadata:
  name: busybox
  labels:
    app: busybox
spec:
  containers:
  - name: busybox
    image: busybox
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']

sleep하고 있는 busybox라는 이름의 컨테이너를 만든다.

 

  • apiversion
  • kind
  • metadata / 생성할 pod의 이름은 busybox이며 label은 
    1. name: name은 namespace상에서 중복되면 안된다
    2. label : 그룹 짓는 역할을 해줌 (kubectl get pods --show-labels)
  • spec : spec안에는 리소스를 생성하기 위한 자세한 정보를 입력한다. (컨테이너 정보, 컨테이너 이미지, 포트 등등)

생성할 pod의 이름은 busybox이며 그 안의 컨테이너 이름도 busybox고 이미지 파일 이름도 busybox임

 

 

sleep은 지정된 시간 동안 프로그램 실행을 유예시키는 유닉스 명령 줄 프로그램이다. 

이 sleep 명령은 적어도 지정된 초 (기본값), 분, 시간, 날 동안 호출 중인 프로세스를 유예한다.