kok202
쿠버네티스 입문 정리 - 01 - Pod

2020. 4. 3. 23:19[정리] 기능별 개념 정리/Kubernetes

파드

쿠버네티스의 최소 배포 단위

하나의 파드에 여러 개의 컨테이너가 구성될 수 있다.

하나의 컨테이너에는 하나의 프로세스, 하나의 역할만 있는 것이 관리 효율적으로 좋다.

 

 

 

Pod sample

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox
    command: ['sh', '-c', 'echo 안녕하세요 쿠버네티스! && sleep 3600']

.metadata.name 파드의 이름 설정

.metadata.labels.app : 오브젝트를 식별하는 레이블

.spec.contaners[].name : 컨테이너 이름

.spec.contaners[].image : 컨테이너에 사용할 이미지

.spec.contaners[].ports[].containerPort : 컨테이너에 접속할 포트

.spec.containers[].readinessProbe : 컨테이너의 실행 여부 진단

.spec.containers[].livenessProbe : 컨테이너 안의 어플리케이션 실행 여부 진단

.spec.containers[].resources.request.cpu : 최소 cpu 자원

.spec.containers[].resources.request.memory : 최소 memory 자원

.spec.containers[].resources.limits.cpu : 최대 cpu 자원

.spec.containers[].resources.limits.memory : 최대 memory 자원

.spec.containers[].resources.request.cpu : cpu 자원 제한

.spec.containers[].resources.request.memory : cpu 자원 제한

.spec.containers[].env[].name : 환경 변수 키 설정

.spec.containers[].env[].value : 환경 변수 값을 지정하여 설정

.spec.containers[].env[].valueFrom : 환경 변수 값을 참조하여 설정

.spec.initContainers[] : 앱 컨테이너가 실행되기전 파드를 초기화 하는 용도

.spec.initContainers[].name : 초기화 컨테이너의 이름

.spec.initContainers[].image : 초기화 컨테이너의 이미지

.spec.initContainers[].command : 초기화 컨테이너 실행후 명령어 기술

.spec.nodeSelector : 특정 레이블을 가진 노드에 파드를 생성한다.

.spec.affinity.nodeAffinity : 파드를 노드의 레이블 기반으로 스케줄링한다.

.spec.affinity.podAffinity : 파드를 지정한 레이블을 가진 파드들이 있는 노드로 스케줄링한다.

 

 

파드의 생명주기

Pending : 파드가 생성중이다.

Running : 파드 안의 컨테이너가 실행중이다.

Succeeded: 파드 안의 컨테이너가 정상 실행 종료된 상태로 재시작 되지 않는다.

Failed : 파드 안의 컨테이너가 정상 종료되지 않았다.

Unknown : 파드의 상태를 알 수 없다. (ex. 노드와 통신할 수 없을 경우)

 

 

 

파드의 컨디션 타입

Initialized : 모든 초기화 컨테이너가 성공적으로 시작되었다.

Ready : 로드 밸런실 풀에 추가되어야한다.

ContainersReady : 파드 안의 모든 컨테이너가 준비 상태다.

PodScheduled : 파드가 하나의 노드로 스케줄 완료했다.

Unscheduled : 파드가 스케줄 될 수 없다. (ex. 자원 부족)

 

 

 

파드 안의 컨테이너 진단하기

livenessProbe : 컨테이너가 실행됬는지 확인한다. 실패하면 재시작한다.

readnessProbe : 컨테이너가 실행된 후 서비스 요청에 응답할 수 있는지 진단한다.

readnessProbe 를 사용하면 컨테이너가 실행 됬다고 바로 트래픽을 받지 않게 할 수 있고 준비가 완료됬을 때 받을 수 있게 할 수 있다. 애플리케이션의 초기화까지 시간이 걸릴 때 유용하다.

 

 

 

파드 안의 컨테이너 진단하기 핸들러

ExecAction : 명령의 수행 결과가 0일 때 성공

TCPSocketAction : IP / Port 가 TCP상태로 열려있으면 성공

HTTPGetAction : IP / Port / Url 에 Get 요청을 보냈을 때 응답이 2xx, 3xx 이면 성공

 

 

 

Pause 컨테이너

모든 파드에 들어있는 컨테이너

프로세스 식별자(PID)가 1이다. 따라서 pause 컨테이너가 제공하는 네트워크를 공유한다.

pause 컨테이너가 재시작 되면 파드안의 모든 컨테이너가 재시작 된다.

 

 

 

스태틱 파드

kube-apiserver 를 통하지 않고 kubelet이 직접 실행하는 파드

kube-apiserver 로 파드가 조회는 되지만 명령을 실행할 수는 없다.

kube-apiserver, etcd 와 같은 시스템 파드를 실행하는 용도이다.

지정한 디렉터리(/etc/kubernetes/manifest)에 파드를 넣어두면 kublet이 이를 감지하고 파드로 실행한다.

 

 

 

파드의 구성 패턴

  • 사이드카 패턴 : 컨테이너에 추가 기능이 필요하다면 (ex. log) 사이드카 컨테이너를 추가하여 사용한다.
  • 앰버서더 패턴 : 파드 안의 프록시 열할을 하는 컨테이너를 추가하는 패턴. (ex. 외부서버에 접근할 때 내부 프록시에 접근하도록 하고 프록시가 알아서 외부 연결을 처리하도록 한다.
  • 어댑터 패턴 : 파드 외부로 노출되는 정보는 표준화하는 어댑터 컨테이너를 사용한다.