[따배쿠] Pod

박병준·2022년 10월 16일
0

따배쿠

목록 보기
2/4

Pod 개념 및 사용

컨테이너란

호스트 OS상에 논리적인 구획(컨테이너)을 만들고, 어플리케이션을 작동시키기 위해 필요한 라이브러리나 어플리케이션 등을 하나로 모아, 마치 별도의 서버인 것처럼 사용할 수 있게 만든 것입니다. 호스트 OS의 리소스를 논리적으로 분리시키고, 여러 개의 컨테이너가 공유하여 사용합니다. 컨테이너는 오버헤드가 적기 때문에 가볍고 고속으로 작동하는 것이 특징입니다.

Pods란

Pod = 컨테이너를 표현하는 k8s API의 최소 단위

  • Pod에는 하나 또는 여러 개의 컨테이너가 포함될 수 있습니다.

Pod 생성하기

  • kubectl run 명령(CLI)으로 생성
    $ kubectl run webserver --image=nginx:1.14

  • pod yaml을 이용하여 생성
    $ kubectl create -f pod-nginx.yaml

동작 중인 Pod 확인

$ kubectl get pods
$ kubectl get pods -o wide
$ kubectl describe pod <%Pod 이름%>

multi-container pod

pod안에 container가 여러 개 들어갈 수 있습니다. (단, ip는 하나)

ex)

apiVersion: v1
kind: Pod
metadata: 
  name: multipod
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports: 
    - containerPort: 80
  - name: centos-container
    image: centos:7
    command: 
    - sleep
    - "10000"

livenessProbe를 사용한 self-healing Pod

Pod가 계속 실행할 수 있음을 보장합니다.

apiVersion: v1
kind: Pod
metadata: 
  name: nginx-pod
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    livenessProve:
      httpGet:
        path: /
        port: 80

livenessProbe 메커니즘

  • httpGet : 지정한 IP주소, port, path에 HTTP GET 요청을 보내 해당 container의 응답이 200값이 아니면, 컨테이너를 다시 시작합니다.

  • tcpSocket : 지정된 port에 TCP 연결을 시도
    연결되지 않으면, 컨테이너를 다시 시작합니다.

  • exec : exec 명령어를 전달
    종료코드가 0이 아니면, 컨테이너를 다시 시작합니다.

liveness Probe 매개변수

periodSeconds : health check 반복 실행 시간 (초)
default : 10

initialDelaySeconds : Pod 실행 후 delay 할 시간 (초)
default : 0

timeoutSeconds : health check 후 응답을 기다리는 시간 (초)
default : 1

successThreshold : 정상으로 간주하는 연속 “성공” 횟수
default : 1

failureThreshold : 비정상으로 간주하는 연속 “실패” 횟수
default : 3


init container

앱 컨테이너 실행 전에 미리 동작시킬 컨테이너입니다.

본 컨테이너가 실행되기 전에 사전작업이 필요할 경우 사용됩니다.

초기화 컨테이너가 모두 실행된 후에 앱 컨테이너가 실행됩니다.


infra container(pause)

pod의 환경을 만들어주는 컨테이너


쿠버네티스는 최소 단위 “pod”로 관리합니다.

특정 pod를 실행할 때, 그 안에는 pause라는 infra container도 함께 실행됩니다.


static pod

kubelet에서 API 서버의 요청과는 상관 없이 특정 디렉토리 안의 Pod YAML 정의서를 바라보고 직접 생성하는 Pod를 의미합니다.

kubeadm으로 쿠버네티스 클러스터 구축시, Static Pod의 default 디렉토리로 /etc/kubernetes/manifest를 바라봅니다.


pod에 resource 할당하기

Pod Resource 요청 및 제한

  • resource requests
    파드를 실행하기 위한 최소 리소스 양 요청

  • resource limits
    파드가 사용할 수 있는 최대 리소스 양 제한
    한도 초과 시, 해당 파드는 종료(OOM kill)되며, 다시 스케쥴링된다.

ex)

apiVersion: v1
kind: Pod
metadata: 
  name: nginx-pod-resource
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports: 
    - containerPort: 80
      protocol: TCP
    resources:
      request:
        cpu: 200m
        memory: 500Mi
      limits:
        cpu: 1
        memory: 250Mi

pod 환경변수 설정

pod 내의 컨테이너가 실행될 때 필요로 하는 변수
컨테이너 제작 시, 미리 정의

ex) NGINX Dockerfile의 예

  • ENV NGINX_VERSION 1.19.2
  • ENV NJS_VERSION 0.4.3

pod 실행 시 미리 정의된 컨테이너 환경변수를 변경할 수 있습니다.

ex)

apiVersion: v1
kind: Pod
metadata: 
  name: nginx-pod-env
spec:
  containers:
  - name: nginx-container
    image: nginx:1.14
    ports: 
    - containerPort: 80
      protocol: TCP
    env:
    - name: MYVAR
      value: "test-value"

pod 실행 패턴

pod를 구성하고 실행하는 패턴

  • Sidecar
    컨테이너 두가지가 함께 동작해야만 구현할 수 있는 패턴 Pod안의 메인 컨테이너를 확장하고 향상시키며 개선시키는 역할을 하는 컨테이너를 Sidecar 컨테이너라 하며 해당 패턴을 Sidecar 패턴 이라 합니다.

  • Adapter
    메인컨테이너의 출력을 표준화 시킵니다.

  • Ambassador
    메인컨테이너의 네트워크 연결을 전담하는 프록시 컨테이너를 두는 패턴입니다.
    이를 통해 메인 컨테이너는 기능 자체에 집중할 수 있고 네트워크 컨테이너에서는 네트워크 기능에 집중할 수 있게 됩니다.


출처
https://www.youtube.com/playlist?list=PLApuRlvrZKohaBHvXAOhUD-RxD0uQ3z0c

profile
뿌셔뿌셔

0개의 댓글