Kubernetes 기초 (3) - Pod
Pod 개념과 특징
Pod은 무엇일까?
Pod은 여러 컨테이너를 감싸고 있는 콩껍질
과 같다
- 노드에서 컨테이너를 실행하기 위한
가장 기본적인 배포 단위
- 여러 노드에
1개 이상의 Pod을 분산 배포/실행 가능
(Pod Replicas)
Pod 내부
- 쿠버네티스는
Pod을 생성
할 때 노드에서유일한 IP를 할당
(서버 분리 효과) Pod 내부 컨테이너 간에 localhost로 통신
가능,포트 충돌 주의!
- Pod 안에서 네트워크와 볼륨 등 자원 공유
Pod IP
클러스터 내부에서만 접근 가능
- 클러스터 외부 트래픽을 받기 위해서는 Service 혹은 Ingress 오브젝트가 필요
Pod 단위 배포와 스케일 아웃
단 하나의 명령어로 원하는 수만큼 Pod 생성
kubectl scale deployment app --replicas=3
Pod과 컨테이너 설계시 고려할 점
Pod : Container = 1:1 or 1:N 결정
- 컨테이너들의 라이프사이클이 같은가?
- Pod 라이프사이클 = 컨테이너들의 라이프사이클
- 컨테이너 A가 종료되었을 때 컨테이너 B 실행이 의미가 있는지
- 스케일링 요구사항이 같은가?
- 웹 서버 vs 데이터베이스, 트래픽이 많은 vs 적은
- 인프라 활용도가 더 높아지는 방향으로
- 쿠버네티스가 노드 리소스 등 여러 상태를 고려하여 Pod을 스케쥴링
노드에 배포되는 과정
- 사용자로부터 Pod 배포 요청을 수락
- 요청 받은 수 만큼 Pod Relicas를 생성 (Pod desired state == current state)
- Pod을 배포할 적절한 노드를 선택 (nodeSelector)
- 이미지 다운로드를 명령, Pod 실행 준비, Pod 상태 업데이트
- 이미지를 다운로드하고 컨테이너를 실행
Pod 오브젝트 표현 방법
기본 속성
apiVersion:v1
Kubernetes API 버전
kind:Pod
오브젝트 타입
metadata:
name: kube-basic # 이름
labels: # 오브젝트 집합을 구할 때 사용할 이름표
app:kube-basic
project:simon
오브젝트를 유일하게 식별하기 위한 정보 및 이름, 이름표
spec:
nodeSelector: # Pod을 배포할 노드
containers: # Pod 안에서 실행할 컨테이너 목록
- name: kube-basic
image: kube-basic:1.0
imagePullPolicy: "Always:
ports:
- containerPort: 80 # 통신에 사용할 포트
env: # 환경변수 목록
- name: PROFILE # 환경변수 이름
value: simon # 환경변수 값
- name: LOG_DIRECTORY
value: /logs/${PROFILE}
volumneMounts: # 컨테이너에서 사용할 Pod 볼륨 목록
- name: html # Pod 볼륨 이름
mountPath: /var/html # 마운트할 컨테이너 경로
volumes: # 컨테이너가 사용할 수 있는 볼륨 목록
사용자가 원하는 오브젝트의 상태
- Pod 볼륨 라이프 사이클 = Pod 라이프 사이클
- Container에서 볼륨 마운트 => volumeMounts 속성 사용
- 목적에 맞는 볼륨 사용 (hostPath, gitRepo, ConfigMap, Secret, ...)
Pod의 한계
-
Pod이 나도 모르는 사이에 종료가 되면?
-> 자가 치유 능력이 없음, Pod이나 노드 이상으로 종료되면 끝
->사용자가 선언한수 만큼 Pod을 유지
해주는ReplicaSet
오브젝트 도입 -
Pod IP는 외부에서 접근할 수 없다, 그리고 생성할 때 마다 IP가 변경
-> 클러스터 외부에서 접근 가능한고정적인 단일 엔드포인트 필요
->Pod집합을 클러스터 외부로 노출
하기 위한Service 오브젝트
도입
Author And Source
이 문제에 관하여(Kubernetes 기초 (3) - Pod), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ghdud0503/Kubernetes-기초-4-Pod저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)