Kimuksung
Kimuksung 안녕하세요. 분산처리에 관심이 많은 생각하는 주니어 Data Enginner입니다.

Kubernetes Object

Kubernetes Object

Kubernetes에서 기본이 되는 Object에 대해 알아보려고 합니다.

Object


  • Kubernetes를 구성하는 단위
    • 기본적인 구성 단위(Base Object)
    • 기본 오브젝트 관리 및 추가적인 기능(Controller)


Base Object


Pod

  • 배포 할 수 있는 최소 단위
  • 1개 이상의 Container로 구성된 집합
  • Pod에는 Unique IP Address 할당
  • 같은 Pod 내의 Container는 IP와 Port를 공유 → Localhost를 사용하여 통신 가능
  • 같은 Pod 내의 container에는 disk volume 공유 가능

Service


  • Pod는 계속하여 임의의 IP를 할당받는데, 외부 사용자가 EndPoint를 계속하여 유지하기가 어렵다.
  • Cluster 내부에서 고정적인IP를 할당하여 계속하여 통신을 유지하게 만들어준다.
  • NodePort, LoadBalancer, ExternalName, ClusterIP
  • Pod간 Loadbalancing, multi port 지원

Label


  • pod, deployment, service .. 은 label을 가질 수 있다.
  • Kubernetes의 Resource를 선택하는데 활용
  • Service에서 특정 Pod만 연결하여 주거나 네트워크 접근 권한을 부여에 사용
  • Dictionary(Key:Value) 형태 혹은 하나의 Resource에 여러 Label을 부여 가능

Volume


  • Docker Volume과 같은 역할
  • 컨테이너가 삭제되어도 운영이 가능한 Stroage(FileSystem)

NameSpace


  • Resource들을 논리적으로 구분 할 수 있는 단위
  • Namespace로 나누어진 resource들끼리 구분되어 구성
  • 하나의 Cluster에서 논리적으로 구분해두었기 때문에 물리적으로 연결이 가능하다.
  • Network 정책을 통해 Namespace간의 통신을 막는 것은 가능하지만, 클러스터 분리시키는 것이 바람직하다.


Controller


  • Base Object들을 배포,운영을 편리하게 관리하기 위함

ReplicationController


  • Pod를 관리해주는 역할
  • 지정된 Replica 수보다 Pod가 많다면 줄이고 반대의 경우 Pod 추가하여 원하는(Spec)과 동일하게 한다.
  • Pod가 삭제되거나, 비정상 종료되는 경우 Pod를 자동으로 교체

  • Selector
    • Label을 기반으로, 지정된 Label의 모든 Pod 관리
    • ReplicationController는 eqaulity 기반의 Selector를 사용
    • ==, 만 비교
  • Replica
    • ReplicationController에 의해 관리되는 Pod 수

RelicaSet


  • Replication Controller의 상위 버전
  • Replicaset을 사용하는 것이 좋다.
  • Selector
    • Label을 기반으로, 지정된 Label의 모든 Pod 관리
    • ReplicationController와 달리in, notin, exists 연산자 지원
  • Rolling-Update
    • 사용 불가
    • Deployment를 통해 처리해야한다.

Deployement


  • Replicaset의 상위 개념
  • Pod, Replicaset 배포 관리
  • Rollback, 새로운 버전 배포에 특화
  • Deployment 단위의 Pod, Replicaset을 관리하여 운영
  • 배포 = Rolling Update, Blue/Green, Canary
  • Name = Prefix_Name+영문+숫자

StatefuleSet


  • Pod의 상태를 유지하여 관리
  • Deployment와 달리 Pod가 삭제하고 생성하게 되면, 새로운 가상환경(Container) → 기존 상태 그대로 유지
  • Name = Prefix_Name+일련번호
  • Pod가 삭제되는 경우 Deployment에 비해 빠르게 작업을 수행하는 것이 불가능
  • 상태를 유지하기 위해 다른 Pod에 분산하여 저장
  • E.g) 데이터가 유지되어야하는 상태값 저장 시
  • Delete, Rolling Update 배포만 지원

DaemonSet


  • Pod를 생성 관리
  • 전체 노드에서 항상 실행되어야 하는 경우(로그성)
  • 모든 노드에 균등하게 생성

Job


  • 백업, 배치 작업과 같이 주기적으로 실행되는 일회성 작업에서 사용

CronJob


  • Crontab, Airflow, Jenkins와 같이 Job을 주기적으로 실행되는 작업에서 사용