본문 바로가기

서버

Kubernetes : Pod & Manifest

커맨드 동작
kubectl cluster-info K8s 클러스터의 엔드포인트를 표시
kubectl get no K8s 클러스터를 구성하는 노드 목록 표시
kubectl run 파드 실행
kubectl get po 파드 목록 출력
kubectl delete po 파드 이름 지정 후, 삭제
kubectl get all 모든 오브젝트 출력
kubectl logs 컨테이너 프로세스가 STDOUT / STDERR로 출력하는 로그를 표시
- 파드를 지우면 로그를 출력할 수 없다
kubectl get deploy,po 디플로이먼트와 파드 목록 표시
kubectl get deploy 디플로이먼트 목록 표시
kubectl delete deploy 디플로이먼트 및 관련 파드 일괄 삭제
kubectl get jobs 잡의 실행 상태를 출력
kubectl create job 잡 컨트롤러 제어하에서 파드를 실행
kubectl create deployment 디플로이먼트 컨트롤러 제어하에서 파드를 실행
kubecetl scale ㅇ레플리카 수 변경
kubectl create -f 파일명 파일에 기술된 오브젝트 생성
kubectl delete -f 파일명 파일에 기술된 오브젝트 삭제
kubectl apply -f 파일명 파일에 기술된 오븍제트가 있으면 변경, 없다면 생성

- 파드를 관리하는 여러 컨트롤러가 있으며, 워크로드에 맞게 선택해야 한다.

  * 디플로이먼트 : 웹 서버/API 서버처럼 지속적 서비스 제공

  * 잡 컨트롤러 : 배치 처리와 같은 워크로드에 적합

 

- 커맨드 예시

kubectl run hello-wordld --image=hello-world -it --restart=Never
(1)     (2) (3)          (4)                 (5)  (6)

(1) k8s 커맨드

(2) 서브 커맨드

(3) K8s 오브젝트 이름 (파드 / 컨트롤러)

(4) 컨테이너의 이미지 

(5) -i : 키보드를 표준 입력에 연결 / -t: 유사 터미널과 연결하여 대화 모드 설정

(6) --restart : 파드의 기동 방법 변경

- Always : 기본값, 파드를 디플로이먼트의 제어 하에 실행. 백그라운드에서 실행

- Never : 파드만을 독립적으로 실행

- OnFailure : 잡에 의한 파드 실행. 비정상 종료 시 재시작 / 지정한 횟수만큼 실행

 

 


매니페스트?

K8s의 오브젝트를 생서하기 위한 메타 정보를 YAML / JSON으로 기술한 파일

 

YAML 예시 : JSON 보다 간결하고 가독성이 좋아서 더 많이 쓰인다.

apiVersion: v1
kind: Pod
metadata:
  name: webapl
spec:
  containers:
  - name: webapl
    image: maho/webapl:0.1    # (1)핸드러를 구현한 애플리케이션 
    livenessProbe:            # (2)애플리케이션이 살아있는지 확인
      httpGet:
        path: /healthz        # 확인 경로
        port: 3000
      initialDelaySeconds: 3  # 검사 개시 대기 시간
      periodSeconds: 5        # 검사 간격
    readinessProbe:           # (3) 애플리케이션이 준비되었는지 확인
      httpGet:
        path: /ready          # 확인 경로
        port: 3000
      initialDelaySeconds: 15
      periodSeconds: 6
 

쿠버네티스 API

쿠버네티스 API를 사용하면 쿠버네티스 오브젝트들의 상태를 쿼리하고 조작할 수 있다. 쿠버네티스 컨트롤 플레인의 핵심은 API 서버와 그것이 노출하는 HTTP API이다. 사용자와 클러스터의 다른

kubernetes.io

PodSpec

containers 컨테이너
initContainers 초기화 전용 컨테이너
nodeSelector 파드가 배포될 노드의 레이블 지정
volumes 파드 내 컨테이너 간 공유할 수 있는 볼륨 지정

Container config

image 이미지의 리포지터리명과 태그
name 컨테이너 여러개 기술할 경우 "필수" 항목
livenessProbe 컨테이너 어플리케이션이 정상 동작하는지 검사하는 프로브
검사에 실패하면 파드 상의 컨테이너를 강제 종료 후 재시작
readinessProbe 컨테이너 어플리케이션이 사용자의 요청을 받을 준비가 되었는지 검사하는 프로브
검사에 실패하면 서비스에 의한 요청 트래픽 전송을 중지
ports 외부로부터 요청을 전달받기 위한 포트 목록
resources CPU와 메모리 요구량과 상한치
volumeMounts 파드에 정의한 볼륨을 컨테이너의 파일 시스템에 마운트하는 설정. 복수 可
command 컨테이너 기동 시 실행할 커맨드. args가 인자로 적용
args command 의 실해 인자
env 컨테이너 내의 환경 변수 설정

헬스체크 : 프로브 대응 핸들러의 종류와 설명

exec 컨테이너 내 커맨드를 실행. Exit 코드 0, 종료 시 성공
tcpSocket 지정한 TCP 포트번호로 연결할 수 있다면 성공
httpGet HTTP GET 요청이 정기적으로 실행되며, HTTP 상태 코드가 200 이상 400 미만이면 성공

- 노드의 하드웨어 장애 시, kubelet도 정지되기에 노드의 장애 대책을 헬스 체크(프로브)가 아닌 컨트롤러를 사용해야 한다.

 

728x90

'서버' 카테고리의 다른 글

Kubernetes : Service  (0) 2022.08.22
Kubernetes : Deployment  (0) 2022.08.15