'기본 오브젝트'에 해당되는 글 1건

  1. 2023.09.07 (K8S 기본 오브젝트) Pod, Volume, Service, Namespace, Label, Controller
반응형

(K8S 기본 오브젝트) Pod
 - 쿠버네티스는 하나의 컨테이너를 개별적으로 배포하는 것이 아닌 Pod 단위로 배포
 - K8S에서 가장 기본적인 배포 단위로 하나 이상의 컨테이너를 포함하는 단위
 - 일반적으로 1 Pod 1 Container
 - Pod 내의 컨테이너들은 IP, Port 공유
 - Pod 재시작하면 ip가 변경되며 Pod 내의 컨테이너들의 로컬디스크의 내용이 사라진다.
 - Pod 내에 배포된 컨테이너 간에는 디스크 볼륨을 공유 가능

(K8S 기본 오브젝트) Volume
 - Pod가 기동될 때 Default로 컨테이너마다 로컬 디스크를 생성해서 기동되는데, 로컬 디스크의 경우에는 영구적이지 못함.
 - DB와 같이 영구적으로 파일을 저장해야 하는 경우에는 컨테이너 재시작과 상관 없이 파일을 영속적으로 저장해야 하는데, 이러한 형태의 스토리지를 Volume 이라 함
 - Pod와 Lifecycle이 같음
 - Volume은 컨테이너의 외장 디스크와 유사하며 Pod가 기동될 때 컨테이너에 mount하여 사용
 - K8S은 다양한 외장 디스크를 제공. iSCSI나 NFS와 같은 온프라미스 기반의 외장 스토리지 이외에 클라우드 외장 스토리지인 AWS EBS, Google PD 그리고 github 등의 오픈소스 기반 외장 스토리지 서비스 지원

(K8S 기본 오브젝트) Service
 - Label Selector로 Pod를 선택하여 하나의 Endpoint로 노출
 - Free버전을 사용하게 되면 Worker Node의 Node Port로 밖에 접근할 방법이 없다.
 - 종류: ClusterIP, Node Port, Load Balancer, External Name
 - Pod와 Volume을 이용하여 컨테이너들을 정의한 후에 Pod를 서비스로써 제공할 때 일반적으로 하나의 Pod로 서비스하는 경우는 드믈고 여러개의 Pod를 서비스하며 이를 로드밸런서를 이용해 하나의 IP와 포트로 묶어서 서비스를 제공
 - 서비스를 정의할 때 어떤 Pod들을 Service로 묶을 것인지를 정의하는데 이를 Label Selector
 - 각 Pod를 생성할 때 Object Spec의 meta data 부분에 Pod에서 사용할 Label 정의
 - 서비스는 Label Selector에서 특정 라벨을 가진 Pod만을 선택하여 Service에 연결

(K8S 기본 오브젝트) Namespace
 - K8S 클러스터 내의 논리적인 분리단위
 - Pod, Service 등은 네임스페이스 별로 생성이나 괸리가 될 수 있고, 사용자의 권한 역시 이 네임스페이스 별로 나눠서 부여 가능
 - 네임스페이스로 할 수 있는 것은 
1. 사용자별로 네임스페이스 별 접근 권한을 다르게 운영 가능
2. 네임스페이스별로 리소스의 Quota(할당량)을 지정 가능하고
  3. 네임스페이스별로 리소스를 나눠서 관리 할 수 있다. (Pod, Service 등)
 - 네임스페이스는 논리적인 분리 단위이지 물리적이나 기타 장치를 통해서 환경을 분리(Isolation)한 것이 아니며, 다른 네임스페이스 간의 Pod 라도 통신 가능하다.

(K8S 기본 오브젝트) Label
 - 라벨은 K8S의 리소스를 선택하는데 사용
 - 각 리소스는 라벨을 가질 수 있고, 라벨 검색 조건에 따라서 특정 라벨을 가지고 있는 리소스만을 선택 가능
 - 특정 리소스만 배포하거나 업데이트할 수 있고 또는 라벨로 선택된 리소스만 Service에 연결하거나 특정 라벨로 선택된 리소스에만 네트워크 접근 권한을 부여하는 등의 행위 가능하다.
 - 라벨은 metadata 부분에 Key/Value 쌍으로 정의 가능하다.

(K8S 기본 오브젝트) Controller
 - 기본 오브젝트를 생성하고 관리
 - Controller는 Replication Controller, Replication Set, DaemonSet, Job, StatefulSet, Deployment 등 존재
 - Replication Controller : Pod를 관리해주는 역할을 수행 / 지정된 숫자로 Pod를 기동 및 관리 / 크게 3가지 파트로 구성: Replicas의 수, Pod Selector, Pod Template 등 3가지로 구성
 - ReplicaSet : Replication Controller의 신규 버전 / Replication Controller는 Equality 기반 Selector를 이용하지만, Replica Set은 Set 기반의 Selector를 이용
 - Deployment : Replication Controller와 Replica Set의 상위 추상화 개념 / 실제 운영에서는 Replicaset 혹은 Replication controller 보다는 더 추상화된 Deployment 사용
 - DaemonSet : Pod가 각각의 노드에서 하나씩만 돌게 하는 형태로 Pod를 관리하는 컨트롤러 / DS에 의해 관리되는 Pod는 모든 노드에 균등하게 하나씩만 배포 / 특정 노드에만 Pod를 배포할 수 있도록, Pod의 'Node Selector'를 이용해서 라벨을 이용하여 특정 노드만을 선택할 수 있게 지원
 - Job : Workload 모델 중에서 배치나 한 번 실행되고 끝나는 형태의 Workload 모델을 지원하는 Controller / Job에 의해서 관리되는 Pod는 Job이 종료되면, Pod를 같이 종료 / Job을 정의할 때 Container 스펙 부분에 image 뿐만 아니라, 컨테이너에서 Job을 수행하기 위한 Command 를 같이 입력 가능
 - StatefulSet : DB 등과 같이 상태를 가지는 Pod를 지원하기 위해서 StatefulSet 이라는 것이 새로 소개됨 / K8S의 Disk Volume에 대한 이해 필요함


*** 클러스터 전체를 관리하는 Contoller로써 마스트와 컨테이너가 배포되는 머신(가상머신이나 물리적인 서버머신)인 노드로 구성됨
*** K8S에서 영속성을 가지는 객체로 상태를 관리하기 위한 대상을 오브젝트로 정의
*** K8S Controller는 기본 오브젝트들을 생성 및 관리하는 역할 수행

반응형