본문 바로가기
kubernetes

Kubernetes Pod

by aws-evan 2023. 6. 28.
728x90

 

Pod란

  • 컨테이너를 묶어서 관리하는 개념
  • 단일,다중 컨테이너 구성
  • 쿠버네티스는 컨테이너 단위로 관리하는게 아니라 파드별로 관리
  • 다중 컨테이너 경우 내부 컨테이너별로 동일한IP를 접근하기에 컨테이너별로 포트 설정 변경 필요

 

  • Pod 생성하기
##pod.yaml##
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80

 

  • Pod 라이프 사이클
    • Pending : 쿠버네티스가 Pod를 생성하는 상태(이미지 다운로드 후 컨테이너를 실행하는 중)
    • Running : Pod내 컨테이너가 실행중인 상태
    • Successed : Pod내에 모든 컨테이저 정상 종료(재시작되지 않음)
    • Failed : Pod내에 컨테이너 중 정상적으로 종료되지 않은 컨테아가 있는 상태
    • Unknown : Pod 상태를 확인 할 수 없는 상태(Pod가 있는 Node랑 통신 불가능)

  • Pod Type
    • Type 상태 : True(상태 활성화), False(상태 비활성화) , Unknown(상태 알 수 없음)
    • Initialized : 모든 초기화 컨테이너가 성공적으로 시작 완료
    • Ready : Pod가 요청들을 실행할 수 있는 상태
    • ContainersReady : Pod내 모든 컨테이너가 준비 상태
    • PodScheduled : Pod가 하나의 노드로 스케줄을 완료 했다는 의미
    • UnScheduled : 스케줄러가 자원 부족, 제약등을 통해 당장 Pod를 스케줄 할 수 없는 상태

  • Kubelet 통한 컨테이너 진단
    • kubernetes는 kubelet을 통해 컨테이너를 주기적으로 진단
    • Kubernetes에는 다양한 Probe를 지원
      • livenessProbe : 컨테이너가 실행중인지 확인 , 실행이 실패시 → Kubelet은 컨테이너를 종료
        • 재시작 정책이 존재할 경우 재시작, livenessProbe명시되지 않을 경우 기본 상태값 : Success
      • readlinessProbe : 컨테이너가 실행 후 서비스 요청에 응답이 가능한지 진단
        • 진단이 실패 할 경우 엔드포인트 컨트롤러는 해당 Pod에 연결된 모든 서비스 대상으로 엔드포인트를 제거
    • Kubernetes 핸들러
      • 진단 결과 : Sucess(성공), Failure(실패), Unknown(진단 실패 → 상태 확인 불가)
      • ExecAction : 컨테이너 안 지정된 명령을 실행 → 종료 코드 0일 경우 Success 진단
      • TCPSockerAction : 컨테이너 안 지정된 IP,Port로 TCP상태를 확인하고 포트가 열려 있으면, Success 진단
      • HTTPGetAction : 컨테이너 안에 IP,Port,Path → HTTP,GET 요청(응답코드 200~400사이 일 경우 Success)
  • 초기화 컨테이너
    • Pod의 앱들이 실행하기 전에 실행되는 컨테이너를 의미
    • 컨테이너가 실행이 완료되는 목표
    • 초기화 컨테이너가 성공해야만 앱컨테이너가 실행된다
    • 초기화 컨테이너가 실패시에 Kubelet은 초기화 컨테이가 성공할떄까지 반복적으로 재시작

 

  • 초기화 컨테이너 Yaml
      • 초기화 Pod 생성
        apiVersion: v1
        kind: Pod
        metadata:
          name: myapp-pod
          labels:
            app: myapp
        spec:
          containers:
          - name: myapp-container
            image: busybox:1.28
            command: ['sh', '-c', 'echo  running! && sleep 3600']
          initContainers:
          - name: init-myservice
            image: busybox:1.28
            command: ['sh', '-c', 'sleep 2; echo init-myservice;']
          - name: init-mydb
            image: busybox:1.28
            command: ['sh', '-c', 'sleep 2l echo init-mydb;']
        
    • 초기화 컨테이너 생성

 

        • 초기화 Pod 생성 절차 로그 확인
      • init-myservice → init-mydb → myap-container

  • Pause 컨테이너
    • 다른 컨테이너의 부모 컨테이너 역할
    • 네트워크,볼륨등을 공유해서 사용
    • Pause 컨테이너가 재시작 되면 Pod안에 잇는 모든 컨테이너가 재시작

 

  • Static Pod
    • 기본 Pod를 생성시에는 kube-apserver를 통해서 생성되나, Static-Pod 경우 apiserver를 통하지 않고 직접 실행하는 Pod
    • Static Pod 경우 Kubelet이 직접 관리 → 이상시에는 재시작
      • 단, kubelet이 실행중인 Node에서만 실행
    • kubernetes etc,api, CrontabPod
    • Path : /etc/kubernetes/manifests

 

 

 

  • Static Pod exmaple
##pod.yaml##
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.14.2
    ports:
    - containerPort: 80
  • Static Pod 생성 하기

728x90

'kubernetes' 카테고리의 다른 글

Kubernetes LoadBalancer(MetalLB)  (0) 2024.04.23
CNI Flannel 설치 가이드  (0) 2024.04.22
kubespray 구축  (0) 2024.04.18
손쉬운 Kubernetes 설치 가이드  (0) 2024.04.16
Pod 배포시 단일파드?, 여러개 파드? 선택  (0) 2024.04.16

댓글