kok202
쿠버네티스 입문 - 13 - 사용자 정의 자원

2020. 4. 9. 00:08[정리] 기능별 개념 정리/Kubernetes

사용자 정의 자원

사용자 정의 자원 : 쿠버네티스에서 제공하는 내장 자원(Pod, Service) 이외에 사용자가 필요한 자원을 정의 할 수 있다.

사용자 정의 컨트롤러 : 사용자 정의 자원 자체는 구조화된 데이터이고 이를 이용해서 원하는 동작을 하려면 사용자 정의 컨트롤러 API 가 필요하다.

 

 

 

선언적 API

예시

파드를 2개 더 생성하라. (x)

파드가 2개 실행되어야 한다. (o)

트랜잭션을 엄수해야하는 정확한 상태를 명령하는 식이면 안된다. 

오브젝트들이 어떤 상태인지를 바라는 지만 나타내야한다.

 

 

 

사용자 정의 자원을 정의 하는 방법

  • CRD
    템플릿을 만든다. 
    CRD를 관리하는 추가 서비스는 없어도된다. 
    사용자 정의 자원은 kube-apiserver 가 관리한다.
  • Aggregated API
    Go 언어로 바이너리와 이미지를 만든다. 
    추가 서비스를 만들고 쿠버네티스 소스중 upstream 내용을 가져와 변경 사항을 반영해야한다.  
    Upstream 에는 새로운 API 서버 바이너리 를 만드는 작업도 해야한다.

 

 

 

CRD 를 이용한 사용자 정의 자원 MyPod 정의하기

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: mypods.crd.example.com
spec:
  group: crd.example.com
  version: v1
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: mypods
    singular: mypod
    kind: MyPod
    shortNames:
    - mpod
  additionalPrinterColumns:
  - name: Age
    type: date
    priority: 0
    JSONPath: .metadata.creationTimestamp
  - name: Image
    type: string
    description: my-awesome-cron-image:latest
    priority: 1
    JSONPath: .spec.image

 

.spec.versions[].served : 해당 버전을 사용가능한지 

.spec.versions[].storage : 스토리지 버전으로 지정되어야하는 버전일 경우 true 로 설정한다.

.spec.additionalPrinterColumns[].JSONPath : 사용자 정의 자원을 만들 때 해당 필드가 템플릿의 어떤 경로에 있어야하는가를 지정.

 

 

 

CRD 로 만든 사용자 정의 자원 MyPod 사용하기

apiVersion: "crd.example.com/v1"
kind: MyPod
metadata:
  name: my-new-pod-object
spec:
  image: my-awesome-cron-image:latest
  ports:
  - containerPort: 8080

 

 

 

사용자 정의 자원을 사용할 때 조건

새 자원을 만들거나 업데이트할 때 쿠버네티스 클라이언트 라이브러리와 CLI 를 사용해야한다.

kubectl 을 이용해서 자원을 사용해야한다.

쿠버네티스 API 에서 제공하는 .spec, .status, .metadata 등의 필드를 사용해야한다.

관리하는 자원이나 다른 자원 모음을 추상화한 오브젝트를 사용해야한다.