본문 바로가기
IT/kubernates

Kubernetes Resource

by 봉즙 2024. 6. 2.

Pod

  • Kubernetes에서의 Pod는 Kubernetes 애플리케이션의 기본 실행 단위입니다. Pod는 공유 네임스페이스와 공유 파일 시스템 볼륨을 가진 일련의 컨테이너와 유사합니다. 이를 애플리케이션이 실행되는 고유한 환경으로 생각할 수 있으며, 하나 이상의 애플리케이션 컨테이너와 공유 스토리지/네트워크 리소스를 캡슐화합니다. Pod는 코드가 실행되는 장소입니다.

ReplicaSet

  • Kubernetes의 오브젝트 중 하나로, 특정 수의 Pod를 항상 실행하도록 보장하는 역할을 합니다. ReplicaSet은 지정된 수의 Pod가 항상 실행되고 있는지를 모니터링하고, 파드가 종료되거나 장애가 발생하면 새로운 파드를 생성하여 지정된 수를 유지합니다. 이를 통해 애플리케이션의 가용성을 높이고, 자동으로 복구하는 기능을 제공합니다.

Deployment

  • Pod와 ReplicaSet의 선언적 업데이트를 제공하는 역할을 합니다. Deployment를 통해 사용자는 애플리케이션의 원하는 상태(desired state)를 기술할 수 있으며, Kubernetes는 실제 상태(actual state)를 이 원하는 상태로 변경해줍니다.

Deployment의 주요 기능

  1. 선언적 업데이트: 사용자는 Deployment를 통해 애플리케이션의 새로운 버전을 배포하거나, 기존 애플리케이션의 상태를 변경할 수 있습니다.

  2. 자동 롤아웃 및 롤백: 새로운 버전을 배포할 때, 점진적으로 새로운 Pod를 생성하고 오래된 Pod를 제거하여 서비스의 가용성을 유지합니다. 또한, 문제가 발생할 경우 쉽게 이전 버전으로 롤백할 수 있습니다.

  3. 스케일링: 애플리케이션의 Pod 수를 쉽게 확장하거나 축소할 수 있습니다.

  4. 자가 치유(Self-healing): 장애가 발생한 Pod를 자동으로 교체하여 원하는 Pod 수를 유지합니다.

Labels & Selectors

Label

  • Kubernetes 오브젝트(예: Pod, 서비스, 노드 등)에 붙일 수 있는 키-값 쌍으로, 이러한 오브젝트를 분류하고 그룹화하는 데 사용됩니다. Label은 사용자가 자유롭게 정의할 수 있으며, 각 오브젝트는 여러 개의 Label을 가질 수 있습니다.

Selector

  • 특정 Label을 가진 Kubernetes 오브젝트를 선택하기 위해 사용되는 표현식입니다. Selector는 주로 서비스, ReplicaSet, Deployment 등의 오브젝트가 어떤 Pod를 관리할지 결정하는 데 사용됩니다.

유형

equal Selector: 특정 키-값 쌍과 일치하는 오브젝트를 선택합니다. 예를 들어, env=production이라는 Label을 가진 모든 Pod를 선택할 수 있습니다.

description Selector: 논리 연산을 사용하여 더 복잡한 쿼리를 할 수 있습니다. 예를 들어, env in (production, staging)이라는 Selector는 두 환경 모두에 해당하는 오브젝트를 선택합니다.

Service

  • Kubernetes 클러스터 내에서 네트워크 서비스를 정의하는 추상화된 방법입니다. Service는 하나 이상의 Pod에 네트워크 접근을 제공하며, 동적인 Pod IP 주소를 관리하고 안정적인 네트워크 접근을 보장합니다.

주요 기능

고정된 네트워크 엔드포인트 제공: Pod의 IP 주소는 변경될 수 있지만, Service는 고정된 IP 주소와 DNS 이름을 제공합니다. 이를 통해 클라이언트는 서비스의 네트워크 엔드포인트를 안정적으로 접근할 수 있습니다.

로드 밸런싱: Service는 여러 Pod에 트래픽을 분산시켜 로드 밸런싱 기능을 제공합니다. 이를 통해 애플리케이션의 가용성과 성능을 향상시킬 수 있습니다.

서비스 검색: 클러스터 내의 다른 Pod가 서비스와 통신할 수 있도록 DNS 이름 또는 환경 변수를 통해 서비스를 검색할 수 있습니다.

Selector 사용: Service는 Label Selector를 사용하여 특정 Label을 가진 Pod를 선택하고, 이 Pod들에 트래픽을 라우팅합니다.

Service 유형

  1. ClusterIP: 기본 서비스 유형으로, 클러스터 내부에서만 접근할 수 있는 가상 IP 주소를 제공합니다.

  2. NodePort: 각 노드에서 동일한 포트를 열어 외부 트래픽을 서비스로 라우팅할 수 있게 합니다.

  3. LoadBalancer: 외부 로드 밸런서를 프로비저닝하여 외부 트래픽을 서비스로 라우팅합니다. 주로 클라우드 환경에서 사용됩니다.

Ingress

  • HTTP 및 HTTPS 트래픽을 클러스터 외부에서 내부 서비스로 라우팅하는 규칙을 정의하는 Kubernetes 오브젝트입니다. 이를 통해 외부 트래픽이 클러스터 내부의 다양한 서비스로 효율적으로 분배될 수 있습니다.

주요 기능

HTTP 및 HTTPS 라우팅: 도메인 기반 라우팅, 경로 기반 라우팅 등을 통해 HTTP 및 HTTPS 트래픽을 관리합니다.

로드 밸런싱: 여러 서비스로 트래픽을 분산시켜 로드 밸런싱을 제공합니다.

TLS/SSL 종료: TLS/SSL 인증서를 사용하여 HTTPS 트래픽을 종료하고 보안을 강화합니다.

가상 호스팅: 여러 도메인을 하나의 IP 주소에서 호스팅할 수 있습니다.

Ingress Controller

  • Ingress 리소스를 모니터링하고, 정의된 규칙에 따라 HTTP 및 HTTPS 트래픽을 라우팅하는 역할을 합니다. Ingress Controller는 클러스터 내에 배포되며, 트래픽을 처리하기 위한 실제 구현체입니다.
  • NGINX Ingress Controller 를 주로 사용하여 NGINX 를 기반으로 처리합니다.

주요 기능

Ingress 리소스 처리: Ingress 리소스를 모니터링하고, 규칙에 따라 트래픽을 라우팅합니다.

로드 밸런싱: 다양한 로드 밸런싱 알고리즘을 사용하여 트래픽을 서비스로 분산합니다.

TLS/SSL 종료: Ingress에 정의된 TLS/SSL 인증서를 사용하여 보안 통신을 처리합니다.

StatefulSet

  • Kubernetes 오브젝트 중 하나로, 상태 정보를 가지고 있는 애플리케이션을 배포하고 관리하기 위해 사용됩니다. StatefulSet은 각 Pod가 고유한 정체성을 가지며, 정해진 순서로 생성되고 삭제되는 특징이 있습니다. 이는 데이터베이스와 같은 상태를 유지해야 하는 애플리케이션에 유용합니다.

DaemonSet

  • Kubernetes에서 각 노드에 단일 Pod를 배포하고 실행하는 데 사용되는 오브젝트입니다. 클러스터의 모든 노드 또는 특정 노드 그룹에서 데몬(daemon) 파드를 실행하기 위해 사용됩니다. DaemonSet은 클러스터에 새로운 노드가 추가될 때 해당 노드에도 자동으로 Pod를 배포합니다.

주요 기능

  1. 모든 노드에 Pod 배포: 클러스터의 모든 노드에 동일한 Pod를 하나씩 배포합니다.

  2. 자동 업데이트: 노드가 추가되거나 삭제될 때 DaemonSet은 자동으로 해당 노드에 Pod를 추가하거나 제거합니다.

  3. 특정 노드 선택: 레이블 셀렉터를 사용하여 특정 레이블이 있는 노드에만 Pod를 배포할 수 있습니다.

  4. 롤링 업데이트: DaemonSet은 롤링 업데이트를 지원하여 Pod를 순차적으로 업데이트할 수 있습니다.

StorageClass

  • Kubernetes에서 동적 스토리지 프로비저닝을 위해 사용되는 오브젝트입니다. StorageClass는 클러스터 관리자가 정의하며, 애플리케이션 개발자는 이를 사용하여 PersistentVolume(PV)을 동적으로 생성할 수 있습니다. 각 StorageClass는 다양한 스토리지 제공자(예: AWS EBS, GCE PD, Azure Disk) 및 스토리지 유형(예: SSD, HDD)을 지원할 수 있습니다.

주요 기능:

  1. 동적 스토리지 프로비저닝: PersistentVolumeClaim(PVC)이 생성될 때 자동으로 PV를 프로비저닝합니다.

  2. 스토리지 제공자 설정: 다양한 스토리지 백엔드를 지원하도록 설정할 수 있습니다.

  3. 매개변수 설정: 스토리지 유형, 크기, 성능 등 다양한 매개변수를 정의할 수 있습니다.

  4. Reclaim 정책: 스토리지의 Reclaim 정책(예: Retain, Delete)을 정의할 수 있습니다.

Persistent Volume (PV)

  • Kubernetes 클러스터에서 독립된 스토리지 리소스를 정의하고 관리하기 위한 오브젝트입니다. PV는 클러스터 관리자에 의해 프로비저닝되거나 동적으로 프로비저닝될 수 있으며, Persistent Volume Claim(PVC)에 의해 요청된 스토리지를 제공하는 역할을 합니다. PV는 네트워크 스토리지 시스템(NFS, iSCSI, 클라우드 제공자 스토리지 등)을 추상화하여 제공합니다.

주요 기능:

  1. 독립된 스토리지 리소스: PV는 Pod와 독립적으로 존재하며, Pod가 삭제되더라도 PV는 유지됩니다.

  2. 동적 및 정적 프로비저닝: PV는 클러스터 관리자가 미리 정의할 수 있으며, StorageClass를 통해 동적으로 생성될 수도 있습니다.

  3. 스토리지 유형 추상화: PV는 다양한 스토리지 백엔드(NFS, AWS EBS, GCE PD 등)를 지원하며, 이를 추상화하여 제공합니다.

  4. Reclaim 정책: PV가 사용 중지되었을 때 스토리지의 처리 방법을 정의할 수 있습니다 (Retain, Recycle, Delete).

Persistent Volume Claim

  • Kubernetes 클러스터에서 스토리지를 요청하는 데 사용되는 오브젝트입니다. PVC는 사용자가 필요로 하는 스토리지 용량, 접근 모드 등을 정의하며, Kubernetes는 이러한 요구 사항에 맞는 Persistent Volume(PV)을 할당합니다. PVC는 동적으로 또는 정적으로 프로비저닝된 PV와 바인딩되어 사용됩니다.

주요 기능:

  1. 스토리지 요청: 사용자는 PVC를 통해 필요한 스토리지의 크기와 접근 모드를 정의하여 클러스터에 요청합니다.

  2. 바인딩: Kubernetes는 PVC의 요구 사항을 충족하는 PV를 찾아 자동으로 바인딩합니다. 일단 바인딩이 이루어지면, PVC는 해당 PV의 스토리지를 사용합니다.

  3. 스토리지 클래스: PVC는 특정 StorageClass를 지정하여 해당 클래스에 정의된 매개변수에 따라 스토리지를 요청할 수 있습니다.

  4. 독립적 생명 주기: PVC는 Pod와 독립적으로 존재하며, Pod가 삭제되더라도 PVC는 유지됩니다.

ConfigMap

  • Kubernetes에서 애플리케이션의 설정 데이터를 관리하기 위해 사용되는 오브젝트입니다. ConfigMap은 환경 변수, 설정 파일, 명령줄 인수 등과 같은 설정 데이터를 키-값 쌍으로 저장하며, 이를 파드 내의 컨테이너에 주입할 수 있습니다. 이를 통해 애플리케이션 코드를 변경하지 않고도 설정을 변경할 수 있어 유연성을 제공합니다.

Secret

  • Secret은 Kubernetes에서 민감한 데이터를 저장하고 관리하기 위해 사용되는 오브젝트입니다. Secret은 비밀번호, 토큰, SSH 키와 같은 민감한 정보를 암호화된 형태로 저장하며, 이를 Pod 내의 컨테이너에 환경 변수 등으로 안전하게 주입할 수 있습니다. Secret은 기본적으로 base64로 인코딩되며, 추가적으로 Kubernetes의 키 관리 서비스(KMS)를 사용하여 암호화할 수 있습니다. Secret을 사용하면 이러한 민감한 정보를 코드나 컨테이너 이미지에 직접 포함시키지 않고도 안전하게 관리할 수 있습니다.

ServiceAccount

  • Kubernetes 클러스터 내에서 Pod가 API 서버와 상호 작용할 때 사용하는 사용자 계정입니다. ServiceAccount를 통해 Pod는 특정 권한을 가지고 Kubernetes 리소스에 접근할 수 있습니다. 기본적으로, 클러스터는 default라는 ServiceAccount를 제공하며, 사용자는 필요한 경우 특정 역할과 권한을 가진 커스텀 ServiceAccount를 생성할 수 있습니다. ServiceAccount는 API 서버와의 통신에 필요한 인증 토큰을 자동으로 관리합니다.

ClusterRole

  • Kubernetes에서 클러스터 전체의 리소스에 대한 권한을 정의하는 오브젝트입니다. ClusterRole은 네임스페이스(예: Pod, 서비스)에 국한되지 않고, 클러스터 전체의 리소스(예: 노드, Persistent Volume 등)에 대한 접근을 제어합니다. 이를 통해 관리자는 특정 사용자나 서비스 계정에 클러스터 수준에서의 권한을 부여할 수 있습니다.

ClusterRoleBinding

  • ClusterRole을 특정 사용자, 그룹 또는 서비스 계정에 바인딩하여 권한을 부여하는 Kubernetes 오브젝트입니다. ClusterRoleBinding은 클러스터 전체에 적용되며, 네임스페이스에 국한되지 않고 클러스터 전역의 리소스에 대한 권한을 할당할 수 있습니다. 이를 통해 관리자는 특정 엔터티(사용자, 그룹, 서비스 계정)에게 클러스터 수준의 권한을 부여할 수 있습니다.

| Ref. |

https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/
https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types
https://kubernetes.io/docs/concepts/services-networking/ingress/
https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/
https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
https://kubernetes.io/docs/concepts/configuration/configmap/
https://kubernetes.io/docs/concepts/configuration/secret/
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole

'IT > kubernates' 카테고리의 다른 글

Pod  (0) 2024.05.21
Node  (0) 2024.05.20
Control Plane  (0) 2024.05.17
Kubernetes Architecture  (0) 2024.05.16
Kubernetes  (0) 2024.05.16

댓글