1컨테이너 1프로세스를 권장한다.
쿠버네티스는 관련된 컨테이너의 집합을 포드라 부른다.
- 포드에는 하나이상의 컨테이너가 있다.
- 포드 안의 컨테이너는 반드시 동일한 노드에 배치된다.
- 애플리케이션을 스케일 아웃 할때는 포드 단위로 한다.
- 포드 안의 컨테이너는 네트워크와 스토리지를 공유한다.
포드 안의 컨테이너는 클러스터 안의 동일한 물리,가상 머신상에 배치되어 실행 된다.
리플리카 - 애플리케이션을 늘리는 경우 동일한 구성으로 된 포드를 여러 개 작성하는 것
네트워크
각 포드에는 고유한 IP주소가 할당이 된다.
동일한 포드의 컨테이너는 IP 주소와 네트워크 포트를 포함한 네트워크 공간을 공유한다.
그래서 포드안의 컨테이너끼리는 localhost를 사용하여 통신 할수 있다.
스토리지
포드안의 컨테이너가 공유 볼륨에 액세스할 수 있기 때문에 컨테이너 사이에 데이터를 주고 받을 수 있다.
매니페스트파일
포드 스펙
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/
포드의 작성, 변경, 삭제
포드의 작성
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/
'K8S' 카테고리의 다른 글
관리 ID (0) | 2021.07.28 |
---|---|
포드의 스케줄링 구조 (0) | 2021.07.22 |
매니페스트 파일 (0) | 2021.07.22 |
쿠버네티스의 리소스 (0) | 2021.07.22 |
쿠버네티스 특징과 구조 (0) | 2021.07.21 |
댓글