Kubernetes/Udemy - CKAD with Tests

Custom Resource Deifinitions

비번변경 2022. 1. 18. 19:20

Resources

Kubernetes는 pod, deployment와 같은 리소스를 생성하고, 해당 정보는 ETCD에 저장한다. 즉, 리소스를 생성하고 삭제하는 작업은 ETCD에 리소스를 생성하고 삭제하는 것과 동일하다.

 

Controllers

실질적으로 Resource 생성 및 관리를 수행하는 주체로, Deployment 리소스를 관리하는 Controller는 Deployment Controller에 해당한다. 백그라운드로 실행되는 프로세스이며, 관리하는 리소스를 지속적으로 모니터링하며 설정 정의된 상태를 유지한다.

Controller는 GO로 개발되어, Kubernetes에 기본 내장되어 있어 별도로 생성할 필요가 없다.

 

 

Custom Resources

Kubernetes 기본 리소스 외의 사용자 정의 리소스를 뜻한다. Custom Resources는 리소스를 정의하기 위한 정보(API Version, Metadata, Spec 등)를 가진 Custom Resource Definition (CRD) 객체를 생성함으로써 클러스터 내에 추가된다.

 

Custom Resource Definition (CRD) 정의 yaml 파일은 아래와 같다.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: flighttickets.flights.com
spec:
  scope: Namespaced
  group: flights.com
  names:
    kind: FlightTicket
    singular: flightticket
    plural: flighttickets
    shortnames:
      - ft
  versions:
    - name: v1
      served: true
      storage: true
  schema:
    openAPIV3Schema:
      type: object
      properties:
        spec:
          type: object
          properties:
            from:
              type: string
            to:
              type: string
            number:
              type : integer
              minimum: 1
              maximum: 10
  • spec.scope : 사용자 정의 리소스의 범위. Namespaced | Node
  • spec.group : 사용자 정의 리소스의 API Group
  • spec.name : 사용자 정의 리소스의 이름
    • spec.name.kind : definition yaml 파일의 kind 정의
    • spec.name.singular : kubectl 실행 결과문에서의 resource type 정의
    • spec.name.plural : kubectl api-resources 실행 시 출력 부분 정의
    • spec.name.shortnames : 리소스의 약어 정의. 여러 가지 약어 정의가 가능하다.
  • spec.versions : API version 구성. 여러 버전을 구성하는 경우 preferred / Storage 버전 또한 설정해야 한다.
  • spec.schema : 개체 생성 시 spec 섹션 아래에 지정할 수 있는 모든 매개변수를 정의한다. 필드명과 데이터형을 정의해야 하며, 숫자형 데이터인 경우에는 유효성 검사 또한 설정할 수 있다.

yaml 파일을 작성한 후에는 다른 리소스와 마찬가지로 create 명령을 생성할 수 있다.

CRD를 생성했다면, 정의한 리소스를 생성, 삭제하여 ETCD에 저장 또는 삭제가 가능해진다. 다만 정의한 리소스를 관리하는 컨트롤러가 없기 때문에 실질적으로 할 수 있는 것은 없다.

728x90