1. cr이란
쿠버네티스에서 애플리케이션을 개발하다보면 추가적인 기능이 필요할 수 있습니다.
쿠버네티스에서는 오브젝트를 직접 정의해 사용할수 있으며 소스코드를 따로 수정하지 않고도 API를 확장해 사용할 수 있는 인터페이스를 제공하고 있습니다.
custom resource(cr)를 이용하여 쿠버네티스를 확장할 수 있습니다.
2. cr 사용예제
apiVersion: "extension.example.com/v1"
kind: Hello
metadata:
name: hello-sample
size: 3
위의 yaml파일을 이용해 kubernetes api server에 생성해달라고 요청해봅니다.
$ kubectl apply -f mycr.yaml
# error: unable to recognize "mycr.yaml": no matches for kind "Hello" in version "crd.example.com/v1"
Kind가 hello인 객체는 쿠버네티스가 모르는 객체이므로 생성할수 없습니다.
3. crd란?
커스텀 리소스를 쿠버네티스 etcd에 등록하기 위해서는 CRD(CustomResourceDefinitions)나 AA(API Aggregation) 이용해야합니다. AA는 Go를 통해 개발하며 바이너리와 이미지를 따로 만들어줘야하지만 CRD를 사용하여 큐버네티스에 cr을 받을수 있는 yaml파일을 등록해놓으면 custom resource를 등록할 수 있습니다.
아래와 같이 crd.yaml 파일을 작성합니다.
# mycrd.yaml
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
name: hellos.extension.example.com
spec:
group: extension.example.com
version: v1
scope: Namespaced
names:
plural: hellos
singular: hello
kind: Hello
4. crd 생성
해당 yaml파일을 이용해 crd를 생성합니다.
이제 hello라는 Kind의 리소스를 등록할수 있게 되었습니다.
# crd 적용
$ kubectl apply -f mycrd.yaml
customresourcedefinition.apiextensions.k8s.io/hellos.extension.example.com created
# crd 확인
$ kubectl get crd
NAME CREATED AT
hellos.extension.example.com 2021-07-19T12:40:23Z
# crd 상세 설명 확인
$ kubectl explain hello
KIND: Hello
VERSION: extension.example.com/v1
DESCRIPTION:
<empty>
5. crd 등록이후 cr생성
# cr 생성
$ kubectl apply -f mycr.yaml
hello.extension.example.com/hello-sample created
# 생성된 cr 확인
$ kubectl get hello
NAME AGE
hello-sample 2m54s
crd가 올라가있는 상태라면
아까 만들었던 hello라는 kind의 yaml파일을 etcd에 등록할 수 있습니다.
$ kubectl get hello
라는 명령어를 입력하니 마치 pod을 조회한 것처럼 내가 정의한 hello가 올라가있습니다.
hello는 etcd에 저장은 되지만, pod, deployment 등 기존의 쿠버네티스 resource와는 다르게
특별한 동작을 하지 않는 데이터입니다.
(pod, deployment등은 쿠버네티스 컨트롤러가 etcd를 감시하는 컴포넌트라 동작합니다)
해당 리소스가 등록되거나 변경됐을때 쿠버네티스 클러스터가 원하는대로 움직이게 하고싶다면
custom controller의 일종인 operator를 사용해야 합니다.
'kubernetes' 카테고리의 다른 글
[kubernetes] operator-sdk를 사용하여 쿠버네티스 오퍼레이터 구축하기 (operator sdk 예제) (0) | 2021.11.05 |
---|---|
[kubernetes] 쿠버네티스 오퍼레이터란(kubernetes operator) (0) | 2021.11.02 |
[kubernetes] 쿠버네티스 인증, 인가(rbac) (0) | 2021.07.14 |
[kubernetes] 쿠버네티스(kubernetes) cronjob 이란 (0) | 2021.07.14 |
[kubernetes] 쿠버네티스(kubernetes) service(NodePort)란 (0) | 2021.07.14 |
댓글