사용자정의컨트롤러 개발을 지원하는 도구:Kubebuilder, operator-sdk, metacontroller
CustomResourceDefinition
사용자 정의자원 정의
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# name must match the spec fields below, and be in the form: <plural>.<group>
name: crontabs.stable.example.com # plural name + group 의 조합
spec:
# group name to use for REST API: /apis/<group>/<version>
group: stable.example.com # Rest API 용 그룹이름
# list of versions supported by this CustomResourceDefinition
versions:
- name: v1
# Each version can be enabled/disabled by Served flag.
served: true # 해당 버전이 사용가능한지
# One and only one version must be marked as the storage version.
storage: true # 스토리지버전은 하나만 가능.
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties: # 지정할 수 있는 속성들
cronSpec:
type: string
image:
type: string
pattern: '^[a-zA-Z0-9_.-]*$' # 정규식패턴으로 유효성 검사가능
replicas:
type: integer
validation:
openAPIV3Scheme:
properties:
spec:
properties:
image:
type: string
pattern: # 정규식으로 패턴 검증가능
additionalPrinterColumns: # kubectl get Crontab 으로 추가 조회할 정보
- name: Age
type: date
priority: 0 # 0이면 kubectl get 명령으로 확인 가능, 0보다 크면 -o wide 옵션으로 조회가능
JSONPath: .metadata.creationTimestamp # 출력할 필드 위치
# either Namespaced or Cluster
scope: Namespaced
names:
# plural name to be used in the URL: /apis/<group>/<version>/<plural>
plural: crontabs # API에서 사용
# singular name to be used as an alias on the CLI and for display
singular: crontab # CLI에서 사용
# kind is normally the CamelCased singular type. Your resource manifests use this.
kind: CronTab # CronTab 이라는 사용자 정의 자원 정의, 실제로 만들 때 .kind 필드에 설정
# shortNames allow shorter string to match your resource on the CLI
shortNames:
- ct # CLI 단축명령어
커스텀리소스
CustomResource 를 이용해서 원하는 동작을 하려면 CustomResource Controller 로 API 를 제공해야함.
CustomResource 로 "선언"하면 CustomResource Controller가 해당 상태를 맞추는데 필요한 처리를 함. (https://kubernetes.io/ko/docs/concepts/extend-kubernetes/operator/)
사용자정의 자원을 사용할 때 인지해야할 점
--> 추가 저장 공간 필요, 사용자 정의 컨트롤러에 버그가 있을 수있음
사용자정의컨트롤러 개발을 지원하는 도구:
Kubebuilder, operator-sdk, metacontroller
CustomResourceDefinition
사용자 정의자원 정의
실제로 사용
CLI 예시
*Go언어를 이용한 애그리게이트 API 도 있음
https://kubernetes.io/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/