Kubernetes
Kubernete CRD를 사용하여 새로운 K8S API가 추가되는 과정
DevOps Engineer
2025. 3. 2. 11:01
728x90
Kubernetes에서 Custom Resource Definition (CRD)를 사용하면 새로운 API 리소스를 생성할 수 있습니다. 이 과정을 통해 새로운 리소스 유형을 정의하고, Kubernetes API 서버는 이를 자동으로 관리하며 해당 리소스를 API로 제공하게 됩니다.
CRD를 사용하여 새로운 API 리소스를 생성하는 과정:
1️⃣ CRD 정의 및 적용
CRD는 Kubernetes의 apiextensions.k8s.io API 그룹에서 제공하는 리소스로, 새로운 커스텀 리소스 타입을 정의합니다. 이를 적용하면 Kubernetes API 서버가 해당 리소스를 자동으로 감지하고 API를 생성합니다.
CRD 예시
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: widgets.example.com
spec:
group: example.com
names:
kind: Widget # 리소스의 객체 이름
plural: widgets # 복수형 이름 (리소스 목록)
singular: widget # 단수형 이름 (리소스 개별)
shortNames:
- wd # 커스텀 리소스의 짧은 이름
scope: Namespaced # Namespaced 또는 Cluster-wide 리소스로 지정
versions:
- name: v1 # API 버전
served: true # 해당 버전에서 이 리소스를 제공
storage: true # 해당 버전에서 리소스를 저장
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
size:
type: string # 'size'라는 필드를 가진 리소스
위의 CRD 정의에서 중요한 요소는:
- group: API 그룹, 이 예제에서는 example.com.
- names: 이 리소스의 이름과 관련된 설정 (kind, plural, singular, shortNames).
- scope: 리소스의 범위 (Namespaced는 네임스페이스 내에서 리소스를 관리).
- versions: API 버전 정의 (v1 버전의 리소스 제공).
CRD 적용
위 YAML 파일을 kubectl을 통해 적용하여 CRD를 Kubernetes 클러스터에 등록합니다:
kubectl apply -f crd.yaml
2️⃣ CRD가 API 서버에 의해 등록되고 API가 제공됨
CRD를 적용하면 Kubernetes API 서버는 다음과 같은 과정을 통해 해당 CRD와 관련된 API를 자동으로 제공합니다.
- CRD의 정의가 Kubernetes API 서버에 등록됨
- kubectl apply -f 명령어로 CRD 리소스가 클러스터에 등록됩니다. 이때 API 서버는 새로운 리소스를 감지하고 이를 /apis/example.com/v1/widgets API 엔드포인트로 자동 등록합니다.
- API 엔드포인트 생성
- Kubernetes API 서버는 해당 CRD의 API 엔드포인트를 생성하여 REST API 형태로 사용할 수 있게 합니다.
- 예를 들어, 위에서 정의한 widgets.example.com CRD는 /apis/example.com/v1/widgets 경로에서 접근할 수 있는 API를 제공하게 됩니다.
- Custom Resources를 관리하는 REST API
- GET, POST, PUT, DELETE 요청을 통해 Kubernetes 클러스터 내에서 Widget 리소스를 관리할 수 있습니다.
- 예를 들어, kubectl 명령어를 사용하여 Widget 리소스를 관리하려면 다음과 같이 합니다:
kubectl get widgets.example.comkubectl create -f widget.yamlkubectl delete widget <widget-name>
- Kubernetes API 서버의 동적 API 등록
- kubectl api-resources 명령어를 실행하면 생성된 Widget 리소스가 목록에 나타납니다.
kubectl api-resourcesNAME SHORTNAMES APIGROUP NAMESPACED KIND
widgets wd example.com true Widget
3️⃣ Custom Resource 사용 예시
Widget 리소스를 실제로 생성하거나 조회할 수 있습니다.
Custom Resource 생성 예시
apiVersion: example.com/v1
kind: Widget
metadata:
name: my-widget
spec:
size: "large"
이 Widget 리소스를 생성하려면 다음 명령어를 사용합니다:
kubectl apply -f widget-example.yaml
Custom Resource 조회 예시
kubectl get widgets.example.com
Custom Resource 삭제 예시
kubectl delete widget my-widget
4️⃣ CRD와 관련된 API 정보 확인
- 활성화된 CRD 목록 확인:위 명령어로 현재 클러스터에 등록된 모든 CRD를 확인할 수 있습니다.
kubectl get crds
- Custom Resource 목록 확인:
kubectl get widgets.example.com
🔥 정리
- CRD 정의: 새로운 리소스를 정의하고, API 서버에 이 리소스를 등록합니다.
- API 서버에 API 등록: CRD가 등록되면 Kubernetes API 서버는 자동으로 해당 리소스를 관리할 수 있는 API를 생성합니다.
- Custom Resource 사용: 생성된 API를 통해 Custom Resource를 생성, 조회, 업데이트 및 삭제할 수 있습니다.
이 방식으로 Kubernetes는 외부 개발자나 관리자가 정의한 새로운 리소스를 클러스터에서 자동으로 API로 제공합니다.
728x90