본문 바로가기
컴퓨터/Getting Started With Kubernetes

Pods

by 김짱쌤 2019. 12. 5.

쿠버네티스 셋업을 마쳤고 어플리케이션을 배포할 준비가 되었습니다. 쿠버네티스 환경의 컨테이너에 배포를 하기전에 pods에 대해 약간의 이해가 필요합니다.

이론편

도커 환경에서 우리가 다룰수 있는 가장 작은 단위는 컨테이너 입니다. 쿠버네티스의 세상에서 우리는 pod으로 작업을 할 것 입니다. 팟은 하나 이상의 컨테이너로 구성됩니다. 쿠버네티스에서 팟을 배포하지 하지않고서는 어떤 컨테이너도 배포할 수 없습니다. 팟은 팟을 통해 동작하는 컨테이너에게 몇가지 기능을 제공합니다.

 

  • 컨테이너 실행방식 정의
  • 네트워크 네임스페이스
  • 스토리지 자원

단일 컨테이너 Pods

쿠버네티스에서 컨테이너를 배포하는 가장 단순한 방법은 한 pod 에 하나의 컨테이너를 담는 방식입니다. 웹 컨테이너와 앱 컨테이너를 배포할때, 각각의 컨테이너는 각자의 팟을 가지고 있어도 됩니다. 컨테이너를 스케일 아웃하고 싶을때는 팟을 추가로 배포하면 됩니다.

Multi 컨테이너 Pods

 한 팟에 하나 이상의 컨테이너를 배포하고 싶을 수 있습니다.

 

  • 컨테이너들이 서로 타이트하게 커플링 되어있을때
  • 컨테이너들이 같은 스토리지를 공유할때
  • 애플리케이션 컨테이너와 함께 배치되어 연결되는 사이드 컨테이너(nginx 등)가 있는경우

 하나의 팟에서 동작하는 모든 컨테이너들은 네트워크 네임스페이스를 공유합니다. 모든 컨테이너가 하나의 IP 주소를 공유한다는 뜻이며, 따라서 접근가능한 별도의 포트들이 필요합니다. 같은 팟의 컨테이너들은 localhost 주소를 통해서 서로서로 접근이 가능합니다.

 

 하나의 팟이 동작할때는 포함한 모든 컨테이너가 잘 떠있거나, 아니면 모두 실패합니다. 팟은 모든 컨테이너가 healthy하지 않는다면 준비되지 않았다고 생각합니다. 그래서 하나의 팟안에 healty한 컨테이너와 unhealty한 컨테이너는 동시에 존재할 수 없습니다. 포함한 컨테이너중 하나라도 unhealty한 상태가 된다면 팟의 배포는 실패할 것 입니다.

실전편

 이거를 시작하기 전에 알아둬야하는 것이 있습니다. 이 섹션에서는 우리가 쿠버네티스 클러스터에서 첫번째 팟을 배포하기위한 기초를 배울겁니다. 근데 이 방식으로 만들어진 팟은 "naked pods" 이며 프로덕션 환경에서 이렇게 하시면 안됩니다. 이 섹션은 아주 쉽고 편안할 겁니다. 나중엔 더 팟을 유용하고 high available하게 만들어줄 ReplicaSet 또는 Deployment 기능들도 배울겁니다.

 

 쿠버네티스에 뭔가를 배포하는 것에는 두가지 방법이 있습니다. 첫번째는 커맨드라인을 통해 배포하는 것이고 두번째는 manifest 파일을 통해 배포하는 것 입니다. manifest 파일은 버젼컨트롤을 통해 배포 설정을 저장하고 싶을때 주로 사용되며, 커맨드라인은 트러블 슈팅목적으로 사용됩니다. 이 블로그 포스트는 manifest 파일을 사용하는 방법을 주로 다룰 겁니다.

 

Manifest로 Nginx 팟 배포하기

 

 nginx를 배포하려면 우선 YAML 포멧으로 manifest 파일을 만들어야 합니다. 아래의 코드는 쿠버네티스 클러스터에 naked nginx 컨테이너를 배포하게 합니다. 중요한 라인에 주석이 달려있으니 잘 보고 각각의 의미를 파악하시길 바랍니다.

 

apiVersion: v1 #사용하는 API의 버젼
kind: Pod #배포하려는 오브젝트의 종류
metadata: #배포하려는 오브젝트의 정보
  name: nginx-pod
spec: #오브젝트의 명세
  containers:
  - name: nginx-container #팟에 들어갈 컨테이너의 이름
    image: nginx #풀받을 컨테이너 이미지가 무엇인가
    ports:
    - containerPort: 80 #팟에 들어갈 컨테이너의 포트

 

파일을 저장하고 아래의 커맨드를 cli에다가 치면 배포를 시작할 겁니다.

 

kubectl apply -f [manifest file].yml

 

배포가 끝나면 요 아래 그림과 같은 (IP주소 제외) 팟 환경을 얻을 수 있습니다.

 

 

팟이 잘 돌아가는 지 확인해볼까용

 

kubectl get pods

 

 

배포한 팟에 대해 더 상세한 정보를 알고싶다면

 

kubectl describe pod [pod name]

 

 

 위 스샷은 이 페이지에 맞추기 위해 많은 데이터를 생략한 버젼입니다. 팟에서 일어난 이벤트들을 볼 수 있습니다. 직접 본인이 구성한 환경에서 실행해보시면 더 풍부한 정보를 얻을 수 있을겁니다.

 

정리

 

 이상 팟이었습니다. 당신은 아직 아마 컨테이너로 연결하지는 못할겁니다. 걱정하지마세요! 다 예상한 바입니다. 우리는 계속해서 이 주제를 다음번 포스트에서 다룰겁니다. Deployment, ReplicaSet, Service 같은 새로운 오브젝트들이 기다리고 있습니다. 실습을 마쳤으면 다음 커맨드로 당신의 팟을 클러스터에서 제거할 수 있습니다.

 

kubectl delete -f [mainfest file].yml

'컴퓨터 > Getting Started With Kubernetes' 카테고리의 다른 글

Endpoints  (0) 2019.12.25
Services and Labels  (0) 2019.12.19
Deployments  (3) 2019.12.18
Replica Sets  (0) 2019.12.11
Introduce  (0) 2019.12.04