관리 메뉴

피터의 개발이야기

[kubernetes] 쿠버네티스 리소스 본문

Kubernetes/기초공부

[kubernetes] 쿠버네티스 리소스

기록하는 백앤드개발자 2024. 1. 13. 01:06
반응형

 

[kubernetes] 쿠버네티스 목차

ㅁ 들어가며

 지난 글, [kubernetes] 쿠버네티스 아키텍처에서 아키텍처 구조를 이야기 하였다.

 

클러스터라는 논리적 단위 안에 Master Node와 Work Node가 있고, 그 안에 추상화된 쿠버네티스의 최소 단위인 Pod와 Container의 계층적 구조를 살펴 보았고, Master Node와 Work Node에 속해 있는 모듈들의 역할에 대해서 알아보았다. 이번 글에서는 쿠버네티스의 관리 최소 단위인 Pod를 중심으로 이를 관리하기 위한 많은 리소스에 대해서 정리하였다.

 

ㅁ 리소스 개요

 리소스는 Kubernetes에서 정의한 인프라의 기능 명세서(Spec)로, 사용자가 등록한 선언적 요구사항(desired state)d에 맞도록  Kubernetes가 인프라를 관리하게 된다.

 

kubernetes가 관리하는 리소스 API 목록을 살펴보자.

$ kubectl api-resources

Kubernetes가 관리하는 리소스 목록을 볼 수 있다.

 

다소 복잡하지만 그룹화를 하여 살펴보면 그 의미를 쉽게 파악할 수 있다. 아래는 리소스를 그룹화 해서 도식화 한 것이다.

 

 

 

리소스는 크게 다음과 같이 그룹화 할 수 있다. 

 

Controller 

  ㄴ 다양한 목적에 맞게 App을 배포하고 관리한다.

  ㄴ 지속적 배포와 트래픽에 따른 오케스트레이션이 필요한 상황에서 파드를 관리할 때에 Replicaset, Deployment

  ㄴ 노드 단위로 로그정리(S3로 로그정리 배치작업) 및 시스템 로그를 통합(EFK) 등 DaemonSet

  ㄴ ElasticSearch 같이 data노드가 정해져 특정 Volume이 정해져 있는 StatefulSet

 ㄴ  1회성 작업 Job, 주기적인 배치 작업 Cronjob

 

Network

  ㄴ 여러 파드에게 IP를 제공하고 로드밸런서 역할을 하는 Service

  ㄴ 클러스터 외부에서 파드로 접근할 때 주로 L7 영역의 통신을 담당하는 Ingress

 

Storage

  ㄴ 데이터의 보존을 위한 컨테이너가 삭제되면 저장한 데이터는 모두 삭제된다. 
  ㄴ 데이터의 보존을 위한 Volume(비유: 하드디스크 자체)

  ㄴ Volume을 할당하여 정의하는 Persistent Volume(비유: 파티션 선언)

  ㄴ 할당된 Persistent Volume을 사용하여 Pod에 연결하는 Persistent Volume Claim(비유: Mac 또는 Boot Camp 마운트)

  ㄴ 할단된 PVC의 포멧 및 형태를 정의하는 Storage Classs(부차설명: 파티션 포맷 시 유형, APFS ExFAT)

 

Config

  ㄴ 컨테이너에 필요한 환경설정 내용 Config Map

  ㄴ 비밀번호, OAuth 토큰, SSH 키 같은 민감 정보 저장 Secret

 

리소스를 관리하기 위해서 이를 그룹화하여 독립성을 유지시키는 NameSpace 개념을 알아야 한다. 

 

ㅁ NameSpace

 NameSpace는 Kubernetes Cluster 하나를 논리적으로 여러 개로 나누어 사용할 수 있게 한다. 그래서 한정적인 인프라 리소스를 여러 팀이나 부서가 나뉘어 함께 공유하여 사용할 수 있다. AWS VPC처럼 논리적으로 격리된 가상 네트워크에 자체 데이터 센터에서 운영하는 것처럼 사용할 수 있지만 확장 가능한 인프라를 사용하게 된다.

리소스 중에서 NameSpace에 종속되는 여부를 api-resources에서 확인할 수 있다.

리소스가 아키텍처에 종속되는 경우 나뉘어진다. 예를 들어 PVCNameSpace에 종속되지만 PV, StorageClass, VolumeAttachment는 종속되지 않는다.

 

기본 NameSpace

 기본이 되는 default, kube-node-lease, kube-public, kube-system가 있다.

에로 부서별 team1, team2 구성하였다. 필요에 따라 부서를 정리할 경우 namespace를 삭제하면 부서별 정의되었던 리소스는 한번에 정리가 된다.

 

 ㅇ default

 기본이다. 초기에는 Pod가 없다.

 

kube-system

 쿠버네티스의 시스템를 담당한다. 관리용 파드가 속해 있다.

 kubens로 간편하게 namespace를 설정할 수 있다. 사용법 => [kubernetes] 네임스페이스 변경을 돕는 kubens

 

kube-public

 클러스터 안에서 타 부서와 공유할 수 있는 NameSpace이다. 클러스터 사용량, 공통된 정보를 관리하는 내용을 관리하며 클러스터 모두에게 오픈되어 있다.

 

kube-node-lease

 각 노드의 임대 Object를 관리한다. 분산 시스템에는 종종 공유 리소스를 잠그고 노드 간의 활동을 조정하는 메커니즘을 제공하는 "리스(Lease)"가 필요하다. 쿠버네티스에서 "리스" 개념은 coordination.k8s.io API 그룹에 있는 Lease 오브젝트로 표현되며, 노드 하트비트 및 컴포넌트 수준의 리더 선출과 같은 시스템 핵심 기능을 위해 사용된다.

 

ㅁ 마무리

 리소스의 개요를 알아보았다. 아키텍쳐 위에 리소스들이 존재하고 이들 리소스는 Controller, Network, Storage, Config로 그룹화 하여 목적에 맞에 관리한다. 해당 리소스에 대한 선언적 정의에 따라 쿠버네티스는 자동으로 관리하고, 한정적인 인프라 자원을 NameSpace로 구분하여 논리적으로 NameSpace를 정하여 인프라 자원을 공유하여 사용할 수 있게 되었다. 클러스터 안에서 NameSpace의 종류에 따란 공유성과 개별성 유지하며 능동적으로 인프라자원을 사용할 수 있어, 운영적 측면에서는 매우 유용한 도구임에는 틀림이 없다.  

 

ㅁ 함께 보면 좋은 사이트

쿠버네티스 개념 공식문서

[kubernetes] 쿠버네티스 개념 정리

[kubernetes] 쿠버네티스 아키텍처

   ㄴ [kubernetes] Pod 생성 과정으로 쿠버네티스 오브젝트 역할이해하기

반응형
Comments