Link Search Menu Expand Document

쿠버네티스 노드 구성 및 관리

파드 레이블(label)

쿠버네티스 파드 구성 및 관리 - 01 레이블

  • 노드의 레이블과 동일한 목적으로 사용
  • k label pod podName key=value: 파드 레이블 부여
  • k label pod podName key-: 파드 레이블 부여
  • k get pod -l key=value: 특정 레이블을 가진 파드 조회

정적(Static) 파드

정적(Static) 파드로 구성하는 마스터 노드

쿠버네티스 파드 구성 및 관리 - 02 정적 파드

  • kubeletapi, etcd, c-m, sched를 자동으로 배포

쿠버네티스 파드 구성 및 관리 - 03 정적 파드

  • 노드의 /etc/kubernetes/manifests/에 설정 파일을 위치시킬경우 자동으로 배포
  • scp file node:/etc/kubernetes/manifests/ 명령어로 복사도 가능
  • 이러한 파드는 쿠버네티스 스케줄러가 관리하지 않으므로 권장되지 않음

컨테이너 상태에 따른 동작(restartPolicy)

쿠버네티스 파드 구성 및 관리 - 05 컨테이너 상태에 따른 동작

  • 컨테이너의 종료/실패 여부에 따라 적절한 재시작 여부 설정 가능
  • 애플리케이션/오브젝트 설정에 맞는 정책 설정 필요

애플리케이션 상태 탐사(startupProbe, livenessProbe, readinessProbe)

  • watch "kubectl describe po liveness-exec | tail"과 같은 명령어로 탐사

탐사 방법 및 체크 방식 정리

쿠버네티스 파드 구성 및 관리 - 06 애플리케이션 상태 탐사

livenessProbe-exec-periodSeconds10(->30).yaml

쿠버네티스 파드 구성 및 관리 - 07 애플리케이션 상태 탐사

  • cat /tmp/healthy-on이 실행되면 성공
  • initialDelaySeconds 후 실행 / periodSeconds 주기로 체크

livenessProbe-httpGet.yaml

쿠버네티스 파드 구성 및 관리 - 08 애플리케이션 상태 탐사

  • /healthz로 요청을 보내서 health-check라는 값을 받아오면 성공

livenessProbe-tcpSocket.yaml

쿠버네티스 파드 구성 및 관리 - 09 애플리케이션 상태 탐사

  • 80번 포트가 열려있으면 성공

readinessProbe-exec-periodSeconds5-w-lb.yaml

쿠버네티스 파드 구성 및 관리 - 10 애플리케이션 상태 탐사

  • cat /tmp/health-on이 실행되면 성공
  • 실행되지 않을 경우 컨테이너가 종료되는 대신 엔드포인트를 제거

startupProbe-w-others.yaml

쿠버네티스 파드 구성 및 관리 - 11 애플리케이션 상태 탐사

  • startupProbe -> livenessProbe -> readinessProbe 순서로 동작

초기화(Init) 컨테이너

쿠버네티스 파드 구성 및 관리 - 12 초기화 컨테이너

  • initContainers를 사용하여 초기화 작업을 하는 애플리케이션을 별도의 컨테이너로 분리할 수 있음

멀티 컨테이너 패턴

  • 메인 컨테이너는 비즈니스 로직에 집중하고 다른 역할을 하는 서비스는 컨테이너로 분리
  • 실무에서는 3가지 패턴을 구분하여 사용하지는 않으나 이론적인 배경은 숙지할 것

사이드카(Sidecar)

쿠버네티스 파드 구성 및 관리 - 13 멀티 컨테이너 패턴

  • 메인 컨테이너를 확장하고 향상시키며 개선
  • 사용 예시

쿠버네티스 파드 구성 및 관리 - 16 멀티 컨테이너 패턴

앰버서더(Ambassador)

쿠버네티스 파드 구성 및 관리 - 14 멀티 컨테이너 패턴

  • 네트워크 연결을 전담하는 프록시 컨테이너를 둠

어댑터(Adapter)

쿠버네티스 파드 구성 및 관리 - 15 멀티 컨테이너 패턴

  • 메인 컨테이너의 출력을 표준화
  • 사용 예시

쿠버네티스 파드 구성 및 관리 - 17 멀티 컨테이너 패턴

파드 어피니티(affinity) 그리고 안티 어피니티

쿠버네티스 파드 구성 및 관리 - 18 파드 어피니티

  • 기준 파드의 레이블을 보고 파드를 배포
  • 파드를 그룹 단위로 움직일 수 있음

쿠버네티스 파드 구성 및 관리 - 18 파드 어피니티

  • affinity.podAffinity로 파드 어피니티 지정

쿠버네티스 파드 구성 및 관리 - 19 파드 어피니티

  • operatorNotIn으로 설정하여 안티 어피니티 설정 가능

토폴로지 분배 제약 조건(topologySpreadConstraints)

쿠버네티스 파드 구성 및 관리 - 20 토폴로지 분배 제약 조건

  • 전체 파드의 수를 보고 각 레이블 단위로 나눌 경우 사용
  • 위와 같이 3번 노드에 부하가 심할 경우 토폴로지 분배 제약 조건을 이용하여 4개의 파드를 각각의 Zone에 2개씩 배포할 수 있음

Cloud AZ(Availability Zones / 가용 영역)

쿠버네티스 파드 구성 및 관리 - 21 토폴로지 분배 제약 조건

  • 클라우드는 AZ 별로 같은 부하를 분배해야 할 필요성이 있음
  • 토폴로지 분배 제약 조건을 이용하여 파드를 균등하게 분배

쿠버네티스 파드 구성 및 관리 - 22 토폴로지 분배 제약 조건

  • maxSkew: 허용하는 파드 개수 차이
  • whenUnsatisfiable: 조건을 만족하지 않을 경우 취할 행동