Sangmun

kubernetes pod 본문

개발/kubernetes

kubernetes pod

상상2 2023. 2. 15. 21:26

쿠버네티스에서 Pod는 노드에서 컨테이너를 실행하기 위한 가장 기본적인 배포 단위이다.

여러개의 노드에서 1개이상의 pod를 배포하는것이 가능하다.

출처 : https://ooeunz.tistory.com/119

쿠버네티스 Pod의 특징

  • 쿠버네티스를 Pod를 생성할때 노드에서 유일한 IP를 할당
  • Pod 내부 컨테이너간에 localhost로 통신, 포트 충돌에 유의
  • Pod 내부에서는 네트워크와 볼륨 자원을 공유
  • 외부에서는 접근이 불가능하고 클러스터 내부에서끼리 통신이 가능하다 (외부 트래픽을 수신하려면 Service, Ingress 오브젝트가 필요)
  • 또한 자가 치유 능력이 없음으로, Pod나 노드에 이상이 발생하면 종료되고 재생성 되지 않는다. (ReplicaSet 오브젝트로 해당 부분 관리 가능)
  • Pod와 컨테이너를 1:1로 기본 설계하고 특별한 사유가 있는 경우 1:N 구조를 고민하는것이 필요

노드에 배포되는 과정

1. 사용자로부터 Pod 배포 요청 수신 및 수락

2. 요청 받은 수만큼 Pod Replica를 생성한다 (Pod desired state == current state)

3. Pod을 배포할 적절한 노드를 선택 (nodeSelector)

4. 5에게 이미지 다운로드를 명령하고 Pod 실행을 준비한다. Pod 상태를 업데이트한다.

5. 이미지를 다운로드하고 컨테이너를 실행

 

yaml 파일 예시

gpu 라벨이 true인 노드에만 배포

# apiVersion등 최상위 항목들 생략
spec:
  nodeSelector: # Pod 배포를 위한 노드를 선택
    gpu: “true”

 

쿠버네티스 기본 이미지를 다운로드 받아서 배포

# apiVersion등 최상위 항목들 생략
spec:
  containers:
  - name: kube-basic # 컨테이너 이름
    image: kube-basic:1.0 # 도커 이미지 주소
    imagePullPolicy: “Always” # 도커 이미지 다운로드 정책 (Always/IfNotPresent/Never)
    ports:
    - containerPort: 80 # 통신에 사용할 컨테이너 포트

 

이미지의 환경변수 설정 예시

spec:
  containers:
  - name: kube-basic
    image: kube-basic:1.0
    env: # 컨테이너에 설정할 환경변수 목록
    - name: PROFILE # 환경변수 이름
      value: production # 환경변수 값
    - name: LOG_DIRECTORY
      value: /logs
    - name: MESSAGE
      value: This application is running on $(PROFILE) # 다른 환경변수 참조

 

호스트의 볼륨을 마운트해서 pod에서 해당 볼륨을 마운트 할 수 있게함

spec:
  containers:
  volumes: # 컨테이너가 사용할 수 있는 볼륨 목록
  - name: host-volume # 볼륨 이름
    hostPath: # 볼륨 타입, 노드에 있는 파일이나 디렉토리를 마운트하고자 할 때
      path: /data/mysql

 

쿠버네티스가 지원하는 볼륨 타입 : Volumes | Kubernetes

 

Volumes

On-disk files in a container are ephemeral, which presents some problems for non-trivial applications when running in containers. One problem is the loss of files when a container crashes. The kubelet restarts the container but with a clean state. A second

kubernetes.io

 

출처 : 패스트캠퍼스

'개발 > kubernetes' 카테고리의 다른 글

kubernetes label and selector  (0) 2023.02.15
쿠버네티스 오브젝트  (0) 2023.02.15
Comments