마짱짱의 지식창고

[Kubernetes] WorkLoad - Pod 본문

Kubernetes

[Kubernetes] WorkLoad - Pod

마짱짱 2020. 7. 22. 11:04
반응형

워크로드 - 파드(Pod)

파드란?

  • 객체모델중에서 만드고 배포할 수 있는 가장작은 단위

  • 쿠버네티스 클러스터 내에서 어플리케이션을 배포하며 동작하는 프로세스

  • 파드는 어플리케이션 컨테이너이고, 하나 이상의 컨테이너로 구성될 수 있다.

  • 2가지 방법

    • 단일 컨테이너만 동작하는 파드

    • (함께 동장하는 작업이 필요한)다중 컨테이너가 동작하는 파드

파드 정의

* 참고
API 리소스의 지원되는 필드의 목록은 kubectl explain 명령으로 확인가능 

API버전 : v1
오브젝트 : POD
파드 오브젝트 이름 : mynapp-pod
컨테이너정의
컨테이너이미지 : msw951023/myweb
컨테이너이름 : mynapp
포트정의
응답대기 : 8080
프로토콜 : TCP

파드생성

$ kubectl create -f mynapp-pod.yml

실행중인 파드 정의 확인

$ kubectl get pods mynapp-pod -o yaml

파드 로그 확인

$ kubectl logs mynapp-pod

파드 포트 포워딩

$ kubectl port-forward mynapp-pod 8080:8080

레이블

  • 쿠버네티스 클러스터의 모든 오브젝트(파드포함)에 키/값 쌍으로로 리소스를 식별하고 속성을 지정하는데 사용
  • 오브젝트 개수가 많아진다면 식별하는데 매우 어려울 수 있으며,
    오브젝트의 적절한 레이블을 부여하여 성격을 정의하고 검색을 용이하게 할 수 있다.

파드생성

$ kubectl create -f mynapp-pod-label.yml

파드 레이블 확인

$ kubectl get pods --show-labels

파드 특정레이블 필드로 확인

$ kubectl get pods -L env,tier

describe로도 레이블 확인가능

$ kubectl describe pods mynapp-pod-label

레이블 없는 파드에 레이블 추가하기

$ kubectl label pods mynapp-pod env=dev

기존에 있는 레이블에 수정하기

$ kubectl label pods mynapp-pod env=deb
  - 하지만 오류가 뜰 것이다. 왜냐면 이미 dev 값이 있기 떄문 그래서
  - overwrite 를 사용해야한다
$ kubectl label pods mynapp-pod env=debug --overwirte

레이블 셀렉터

  • 오브젝트에 부여되어있는 레이블을 식별하고 검색할 수 있다.

  • 검색 방법 2가지

    • 특정 키가 있는/없는 레이블 포함
    • 특정 키와 값이 있는/없는 레이블 포함

      균등 기반 레이블 셀렉터

      tier 키가 포함되어있는 레이블
      $kubectl get pods --show-labels -l tier
      tier 키를 제외한 레이블
      $kubectl get pods --show-labels -l '!tier'
      env 키에 debug 값이 포함되어 있는 레이블
      $kubectl get pods --show-labels -l env=debug
      env 키를 가지지만 --show-labels -l 'env!=debug'
      $kubectl get pods --show-labels -l 'env!=debug'

    ㅿ 참고
    메타문자가 쉘에 의해 해석되지 않도록 따옴표로 묶어준다.

    집합성 기반 레이블 셀렉터

    dev 키에 debug 또는 dev 값이 포함되어 있는 레이블
    $kubectl get pods --show-labels -l 'env in (debug,dev)'
    tier 킬르 가지지만 frontend 값이 포함되어 있지 않은 레이블
    $kubectl get pods --show-labels -l 'tier notin (frontend)'

어노테이션(Annotation)

  • 주석 이라고도하며 오브젝트에 메타데이터를 할당할 수 있다.
  • 레이블과 비슷하게 키/값을 가지고 있지만, 레이블은 레이블 셀렉터를 이용하여 식별 및 검색할 수있지만,
    어노테이션은 가지고 있지 않다. 즉 메타데이터를 추가해 추가적인 정보를 제공하기 위함이다.

네임스페이스(namespace)

  • 모든 오브젝트에는 레이블을 부여할 수 있지만 레이블 셀렉터를 이용해서 식별 및 검색을 할 수 있을 뿐,
    논리적으로 분리되어 있지 않다.
  • 많은 오브젝트를 관리할 떄 논리적으로 오브젝트의 분리해주는 역할
    (Docker container의 핵심요소인 Linux Namespace와 관련 없다.)

네임스페이스 확인
$kubectl get namspaces

  • 네임스페이스아직 완성안됨

기타 정보들

Pod내의 컨테이너 여러개있을경우 같은 네트워크를 사용하므로 같은 포트를 사용할 수 없다.
8080,8081은 왜 안됑?

반응형