본문 바로가기

Infra/Kubernetes

4. POD

1. 기본 개념

쿠버네티스는 파드라는 단위로 컨테이너를 묶어서 관리한다.

 

아래와 같이 각 컨테이너마다 역할을 부여하여 관리하는것도 가능하다.

  • 역할 부여의 예
    • 웹 서버
    • 로그 수집기
    • 볼륨 컨테이너

파드하나에 한개의 아이피를 공유하며 각 컨테이너와 통신할때는 포트를 이용하여 접근한다.

 

 

2. 파드 설정 파일로 POD 사용하기

pod-sample.yaml

apiVersion: v1
kind: Pod
metadata:
  name: kubernetes-simple-pod
  labels:
    app: kubernetes-simple-pod
spec:
  containers:
  - name: kubernetes-simple-pod
    image: arisu1000/simple-container-app:latest
    ports:
    - containerPort: 8080
  • .metadata.name: 파드명
  • .metadata.labels.app: 오브젝트를 식별하는 라벨
  • .spec.containers[].name: 컨테이너명
  • .spec.containers[].image: 컨테이너 이미지명 (https://hub.docker.com/r/arisu1000/simple-container-app)
  • .spec.containers[].ports[].containerPort: 컨테이너 포트

2.1. 설정 명령어

  • kubectl apply -f pod-sample.yaml
  • kubectl get pods

 

 

3. 파드 생명 주기

3.1. 파드 생명주기 확인 명령어

  • kubectl describe pods kubernetes-simple-pod

Status

  • pending: 파드 생성 중
  • running: 파드 내 모든 컨테이너가 실행 중
    • 1개 이상의 컨테이너가 실행 중이거나 시작 또는 재시작 상태일 수 있습니다.
  • Succeed: 파드 안 모든 컨테이너가 정상 실행 종료된 상태로 재시작되지 않습니다. 
  • Failed: 파드안 콘테이너 중 정상적으로 실행 종료되지 않음
  • Unknown: 상태확인 불가 (보통 파드가 있는 노드와 통신할 수 없을 때임)

Conditions

  • Initialized: 모든 초기화 컨테이너가 성공적으로 시작 완료됨
  • Ready: 파드의 요청실행 가능하며 연결된 모든 서비스의 로드밸런싱 풀에 추가되어야 함
  • ContainersReady:  파드안 모든 컨테이너가 준비상태임
  • PodScheduled: 파드가 하나의 노드로 스케줄을 완료함
  • Unschedulable: 자원부족이나 다른 제약으로 현재 스케줄 불가능

 

4. Kubelet으로 컨테이너 진단하기

컨테이너가 실행된 후에는 kubelet이 컨테이너를 주기적으로 진단한다.

이 때 사용되는 프로브가 2가지가 있다.

  • livenessProbe: 컨테이너가 실행됬는지 확인한다
    • 만약 진단실패 시 kubelet은 컨테이너를 종료시키고 재시작한다.
    • 따로 설정하지 않으면 기본 상태값은 Success이다.
  • readinessProbe: 컨테이너가 실행된 후 실제로 서비스 요청에 응답할 수 있는지 진단한다
    • 만약 진단실패 시 Endpoint Controller는 해당 파드에 연결된 모든 서비스를 대상으로 엔드포인트 정보를 제거한다.
    • 첫 번째 readinessProbe를 하기 전까지의 기본 상태 값은 Failure입니다.
      • ReadinessProbe를 지원하지 않는 컨테이너라면 기본상태 값은 Success이다.
    • 해당 Probe의 장점은 실제 트래픽을 받을 준비가 되었음을 확인하고 트래픽을 받는다.
      • 그러므로 자바 애플리케이션처럼 프로세스가 시작된 후 앱이 초기화될 때까지 시간이 걸리는 상황에 유용하다.

 

컨테이너 진단은 컨테이너가 구현한 Handler를 Kubelet이 호출해서 실행한다.

해당 Handler 종류는

  • ExecAction: 컨테이너 안에 지정된 명령을 실행하고 종료 코드가 0일때 Success
  • TCPSocketAction: 컨테이너 안에 지정된 IP와 포트로 TCP상태를 확인하고 포트가 열려있으면 Success
  • HTTPGetAction: 컨테이너 안에 지정된 IP, 포트, 경로로 HTTP GET요청을 보냄, 응답코드가 200~400 사이면 Success

진단 결과는

  • Success: 성공
  • Failure: 실패
  • Unknown: 알 수 없음

 

 

 

'Infra > Kubernetes' 카테고리의 다른 글

Docker 명령어 정리  (0) 2020.09.19
3. 쿠버네티스 개념  (0) 2020.06.05
2. 쿠버네티스로 컨테이너 실행하기  (0) 2020.06.04
1. 쿠버네티스 관련 설정 및 설치  (0) 2020.06.03
4. 파드와 노드  (0) 2020.05.24