Java-Bom / ReadingRecord

📚 책 읽고 정리하기 📚
https://javabom.tistory.com/category/Reading%20Record
473 stars 27 forks source link

[19] 사용자정의자원 #236

Closed csbsjy closed 3 years ago

csbsjy commented 3 years ago

커스텀리소스

CustomResource 를 이용해서 원하는 동작을 하려면 CustomResource Controller 로 API 를 제공해야함.

CustomResource 로 "선언"하면 CustomResource Controller가 해당 상태를 맞추는데 필요한 처리를 함. (https://kubernetes.io/ko/docs/concepts/extend-kubernetes/operator/)

image

사용자정의 자원을 사용할 때 인지해야할 점

--> 추가 저장 공간 필요, 사용자 정의 컨트롤러에 버그가 있을 수있음

사용자정의컨트롤러 개발을 지원하는 도구:Kubebuilder, operator-sdk, metacontroller

image

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 단축명령어 

실제로 사용

apiVersion: "stable.example.com/v1"
kind: CronTab
metadata:
  name: my-new-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-awesome-cron-image

CLI 예시

kubectl get crontab #singular 필드값 사용 
kubectl describe crontab

*Go언어를 이용한 애그리게이트 API 도 있음

https://kubernetes.io/ko/docs/concepts/extend-kubernetes/api-extension/custom-resources/