본문 바로가기
K8S

포드를 사용한 컨테이너 애플리케이션의 관리

by Rainbound-IT 2021. 7. 22.
반응형

1컨테이너 1프로세스를 권장한다.

쿠버네티스는 관련된 컨테이너의 집합을 포드라 부른다.

 

  • 포드에는 하나이상의 컨테이너가 있다.
  • 포드 안의 컨테이너는 반드시 동일한 노드에 배치된다.
  • 애플리케이션을 스케일 아웃 할때는 포드 단위로 한다.
  • 포드 안의 컨테이너는 네트워크와 스토리지를 공유한다.

포드 안의 컨테이너는 클러스터 안의 동일한 물리,가상 머신상에 배치되어 실행 된다.

리플리카 - 애플리케이션을 늘리는 경우 동일한 구성으로 된 포드를 여러 개 작성하는 것

 

 

네트워크

각 포드에는 고유한 IP주소가 할당이 된다.

동일한 포드의 컨테이너는 IP 주소와 네트워크 포트를 포함한 네트워크 공간을 공유한다.

그래서 포드안의 컨테이너끼리는 localhost를 사용하여 통신 할수 있다. 

 

https://superuser.openstack.org/articles/review-of-pod-to-pod-communications-in-kubernetes/

 

스토리지

포드안의 컨테이너가 공유 볼륨에 액세스할 수 있기 때문에 컨테이너 사이에 데이터를 주고 받을 수 있다.

매니페스트파일

포드 스펙

container (container 배열) : 포드에 속하는 컨테이너 목록. 

image(LocalObjectReference배열): 컨테이너 이미지를 취득하기 위해 사용되는 인증정보

initContainers(container배열): 초기화 처리하는 컨테이너. 이 컨테이너에 장애가 발생하는 경우 그 포드는 실패한것으로 간주하여, restartPolicy에 의해 재시작 된다.

nodeName(문자열): 특정 노드에 포드를 배치할때 지정

nodeSelector(object): 지정한 라벨을 갖고 있는 노드에 포드를 스케줄링하고 싶을 때 지정

priority(정수): 포드의 우선순위, 클수록 우선순위가 높다.

restartPolicy(문자열): 포드안의 컨테이너의 재시작 정책.(Always, OnFailure, Never 중 하나를 지정한다. 기본값은 Always)

volumes(Volume 배열): 포드 안의 컨테이너가 마운트할 수 있는 볼륨의 목록

 

 컨테이너 사양

args(문자배열): 컨테이너에 송신할 인수

env(envVar 배열): 컨테이너에 설정할 환경변수

image(문자열): 컨테이너 이미지와 그 저장 위치

imagePullPolicy(문자열): 컨테이너 이미지를 pull할때 규칙. Always(이미지 강제 갱신), Never, IfNotPresent(이미지가 있으면 새로 X)

livenessProbe(Probe): 컨테이너의 감시

name(문자열): 컨테이너의 이름. 클러스터 내부에서 DNS_LABEL로서 사용된다.

ports(ContainerPort 배열): 컨테이너가 공개할 포트 번호의 목록

readinessProbe(Probe): 컨테이너의 감시

resource(ResourceRequirements): 컨테이너에 필요한 CPU나 메모리와 같은 컴퓨팅 리소스

volumeMounts(VolumeMount 배열): 컨테이너의 파일 시스템에 마운트할 볼륨

 workingDir(문자열): 컨테이너의 작업 디렉토리

 

 

https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.19/

 

 

포드의 작성, 변경, 삭제

 

포드의 작성

 

 

pod 설정 매니페스트 파일(이미지명은 ACR에 맞게 작성하자)

kubectl apply -f [yaml파일명]

을 실행하여 포드 생성

 

kubectl get pods --show-labels

으로 포드 목록과 라벨을 확인해보자

 

여기에 스테이터스 스샷

 

포드의 STATUS

pending : 포드의 작성을 기다리고 있는 상태. 컨테이너 이미지와 다운로드 등에 시간이 걸리는 경우가 있다.

running : 포드가 가동 중인 상태

Succeeded : 포드 안의 모든 컨테이너가 정상적으로 종료된 상태

Failed : 포드 안의 컨테이너 중 적어도 하나의 컨테이너가 실패하여 종료 된 상태

Unknown : 어떤 이유로 포드와 통신할 수 없는 상태

 

오류가 발생한 경우는 포드의 상세 정보를 확인한다. 
kubectl describe pods [pod 이름]

로그는 [Event]필드를 확인하면 된다.

 

포드의 변경

containers:

- image: [ACR이름].azurecr.io/photo-view:v2.0

매니페스트파일에서 뒤에 v2.0을 아무렇게나 변경한후

kubectl apply -f [YAML파일]

하면 적용이 되는것을 위 describe 명령어로 확인할 수 있다.

 

포드의 삭제

kubectl delete -f [YAML파일]하면 삭제가 된다.kubectl get pod라는 포드 목록 확인을 통해 포드가 삭제 된것을 알 수 있다.

 

포드의 조작은 매니페스트 파일 작성 --- kubectl 명령으로 적용 하는것으로 이뤄진다.

 

포드의 디자인 패턴

포드의 작성은 일반적으로 다음 두가지 요건을 고려한다

  • 반드시 동일한 노드에서 실행할 필요가 있는지 없는지
  • 동일한 타이밍으로 스케줄링할필요가 있는지 없는지

ex) 프록시 역할을 하는 컨테이너, 인증처리를 하는 컨테이너

 

그리고 디자인은 스케일을 어떻게 해야할지에 따라 달라지기도 한다.

ex)프론트엔드와 백엔드 서버의 증가량은 서로 다르기때문에 포드에 다 넣지 말고 따로 두어 스케일을 용이 하게 할수 있다.

 

 

분산 시스템에 관심이 더 있다면 아래 무료 ebook으로 보는것이 좋다!

https://azure.microsoft.com/ko-kr/resources/designing-distributed-systems/

 

분산 시스템 eBook 설계 | Microsoft Azure

이 eBook을 다운로드하여 분산 시스템을 효율적으로 구축하는 방법을 알아보세요. 수록된 패턴 구성 요소를 사용하면 안정적인 확장형 서비스를 개발할 수 있습니다. 무료로 다운로드하세요.

azure.microsoft.com

 

반응형

'K8S' 카테고리의 다른 글

관리 ID  (0) 2021.07.28
포드의 스케줄링 구조  (0) 2021.07.22
매니페스트 파일  (0) 2021.07.22
쿠버네티스의 리소스  (0) 2021.07.22
쿠버네티스 특징과 구조  (0) 2021.07.21

댓글