본문 바로가기
DevOps/Kubernates

[k8s] API Groups 란?

by BenKangKang 2025. 3. 26.

Kubernetes API Groups: 체계적인 리소스 관리의 핵심

Kubernetes는 대규모 컨테이너화된 애플리케이션을 관리하기 위한 강력한 오케스트레이션 플랫폼입니다. 이러한 복잡한 시스템을 효율적으로 관리하기 위해서는 잘 구성된 API 구조가 필요합니다. Kubernetes의 핵심 개념 중 하나인 API Groups에 대해 자세히 알아보겠습니다.

API Groups란 무엇인가?

API Groups는 관련된 Kubernetes 리소스를 논리적으로 그룹화한 것입니다. 이것은 Kubernetes API를 구조화하고 확장성을 제공하는 중요한 메커니즘으로, 특히 RBAC(Role-Based Access Control)와 같은 권한 관리 시스템에서 핵심적인 역할을 합니다.

Kubernetes가 처음 설계되었을 때는 모든 API 리소스가 단일 경로 아래에 있었습니다. 하지만 생태계가 성장하고 리소스 유형이 늘어나면서, 더 체계적인 구조화가 필요해졌습니다. 이런 필요성에 따라 API Groups 개념이 도입되었습니다.

코어 API Group vs. 이름이 있는 API Groups

Kubernetes API Groups는 크게 두 가지로 나눌 수 있습니다:

  1. 코어 API Group (Core API Group): 빈 문자열("")로 표시됩니다. Pod, Service, ConfigMap, Secret과 같은 기본적인 리소스가 포함됩니다.
    • REST API 경로: /api/v1/...
  2. 이름이 있는 API Groups (Named API Groups): 명시적인 이름을 가진 그룹으로, 더 전문화된 리소스를 포함합니다.
    • REST API 경로: /apis/GROUP_NAME/VERSION/...

주요 API Groups 예시

Kubernetes에는 다양한 API Groups가 있으며, 각각 특정 기능 영역에 초점을 맞추고 있습니다:

  • apps: Deployment, StatefulSet, DaemonSet, ReplicaSet 등
  • batch: Job, CronJob 등
  • networking.k8s.io: Ingress, NetworkPolicy 등
  • rbac.authorization.k8s.io: Role, ClusterRole, RoleBinding, ClusterRoleBinding 등
  • storage.k8s.io: StorageClass, PersistentVolume 등
  • autoscaling: HorizontalPodAutoscaler, VerticalPodAutoscaler 등
  • policy: PodDisruptionBudget, PodSecurityPolicy 등
  • extensions: 레거시 리소스들 (많은 리소스가 이제 다른 그룹으로 이동됨)

API Groups의 중요성

API Groups는 여러 가지 이유로 Kubernetes 아키텍처에서 중요합니다:

1. 조직화 및 구조화

API Groups는 관련 리소스를 논리적으로 그룹화하여 API 표면을 더 잘 구조화하고 이해하기 쉽게 만듭니다. 이는 대규모 시스템에서 특히 중요합니다.

2. 버전 관리

각 API Group은 자체 버전 관리 체계를 가질 수 있어, 특정 기능 집합이 발전함에 따라 독립적으로 버전을 관리할 수 있습니다. 예를 들어, apps/v1, apps/v1beta1, apps/v1beta2와 같은 형태로 존재할 수 있습니다.

3. RBAC와의 통합

RBAC 시스템에서 권한은 종종 API Group 수준에서 정의됩니다. 특정 API Group에 대한 접근 권한을 부여하거나 제한함으로써 세밀한 권한 제어가 가능해집니다.

4. 확장성

API Groups 구조는 Kubernetes 생태계가 성장함에 따라 새로운 기능과 리소스 유형을 쉽게 추가할 수 있게 해줍니다. 중앙 집중식 API 대신 모듈화된 접근 방식을 제공합니다.

5. 커스텀 리소스 정의(CRD) 지원

커스텀 리소스 정의(CRD)를 사용할 때, 이러한 커스텀 리소스들은 지정된 API Group 내에 배치됩니다. 이를 통해 표준 Kubernetes 리소스와 일관된 방식으로 커스텀 리소스를 관리할 수 있습니다.

RBAC에서의 API Groups 활용

API Groups는 RBAC 시스템에서 특히 중요한 역할을 합니다. Role이나 ClusterRole을 정의할 때, 특정 API Groups에 있는 리소스에 대한 접근 권한을 지정할 수 있습니다.

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [""] # 코어 API Group
  resources: ["pods"]
  verbs: ["get", "watch", "list"]
- apiGroups: ["apps"] # apps API Group
  resources: ["deployments"]
  verbs: ["get", "list"]

위 예시에서는 두 가지 API Groups에 대한 규칙을 정의합니다:

  1. 코어 API Group("")에 있는 Pods에 대한 읽기 접근 권한
  2. apps API Group에 있는 Deployments에 대한 읽기 접근 권한

API Groups 관련 실용적인 팁

1. API Groups 탐색하기

현재 클러스터에서 사용 가능한 모든 API Groups를 탐색하려면 다음 명령을 사용할 수 있습니다:

kubectl api-resources

또는 더 상세한 정보를 보려면:

kubectl api-versions

2. 특정 리소스의 API Group 확인하기

특정 리소스가 어떤 API Group에 속하는지 확인하려면:

kubectl explain <resource>

예를 들어:

kubectl explain deployment

이 명령은 해당 리소스의 API 버전을 포함한 정보를 표시합니다.

3. Terraform에서의 API Groups 사용

Terraform과 같은 IaC(Infrastructure as Code) 도구를 사용할 때, API Groups는 중요한 개념입니다. 다음은 Terraform에서 Kubernetes Role을 정의하는 예입니다:

resource "kubernetes_role" "example" {
  metadata {
    name      = "example-role"
    namespace = "default"
  }

  rule {
    api_groups = [""]           # 코어 API Group
    resources  = ["configmaps"]
    verbs      = ["get", "list"]
  }

  rule {
    api_groups = ["apps"]       # apps API Group
    resources  = ["deployments"]
    verbs      = ["get", "list", "watch"]
  }
}

이 예시에서 각 rule 블록은 특정 API Group에 대한 접근 권한을 정의합니다.

결론

API Groups는 Kubernetes API를 체계적으로 구성하고 확장하는 중요한 메커니즘입니다. 이를 통해 Kubernetes는 수많은 리소스 유형을 관리하면서도 일관되고 이해하기 쉬운 API 구조를 유지할 수 있습니다.

Kubernetes를 효과적으로 관리하고 RBAC를 통한 권한 제어를 세밀하게 구현하려면 API Groups에 대한 이해가 필수적입니다. 이 지식은 특히 대규모 Kubernetes 환경에서 작업하거나, 커스텀 리소스를 정의하거나, 복잡한 권한 모델을 구현할 때 매우 유용할 것입니다.

댓글