공부/Kubernetes

operator-sdk로 k8s 기본 리소스 컨트롤러 추가하기

토고미 2021. 6. 8. 11:05

operator-sdk는 CRD뿐만 아니라 k8s의 기본 리소스 또한 다룰 수 있다.

CRD의 컨트롤러나 웹훅을 만들때와 마찬가지로 group,version,kind만 잘 지정해주면 된다.

 

아래 예시는 k8s의 기본 리소스 중 하나인 RoleBinding의 컨트롤러를 생성하는 과정이다.

 

 

1. API 그룹 확인하기

$ kubectl api-resources | grep rolebinding

API 그룹 확인

왼쪽에 리소스 이름, 중간에는 API 그룹이 나온다.

rolebinding의 그룹은 rbac.authorization.k8s.io임을 확인 할 수있다.

 

2. API 버전 확인하기

$ kubectl api-versions | grep rbac.authorization.k8s.io

API 버전 확인

1번에서 확인했던 그룹이름으로 grep을 이용하면, 지금 k8s 클러스터에서 해당 그룹에 무슨 버전이 있는지 나온다.

알맞은 버전을 사용하면 된다.

 

3. 컨트롤러 생성

1,2번에서 확인했던 group, version 정보를 이용해 생성만 하면 끝이다!

$ operator-sdk create api --group rbac.authorization.k8s.io --version v1 --kind RoleBinding --controller

컨트롤러 생성

 

 

 

완성!

controller 폴더 밑에 정상적으로 생긴 것을 볼 수 있다!

혹시 파일의 위치를 옮기고싶다면, main.go에서 import의 주소와 controller를 등록하는 함수도 변경해야함을 잊지말자!

 

비고

혹시 3번에서 컨트롤러 생성이 되지 않고 오류가 난다면 operator-sdk 명령어만 쳐보자.

해당 프로젝트를 만들 당시의 operator-sdk 버전과 현재 환경에 설치된 operator-sdk 버전이 다르다면 안될 수 있다.

operator-sdk 명령어만 치면 아래와 같은 명령어가 나온다.

자세한 사항을 알고 싶다면 링크를 확인하면 된다.

https://sdk.operatorframework.io/docs/cli/operator-sdk_alpha_config-3alpha-to-3/

$ operator-sdk alpha config-3alpha-to-3

버전이 맞지 않는 경우

해당 명령어를 입력하면, 새로운 operator-sdk 버전에 맞게 프로젝트가 조정이된다.

그 후, 다시 컨트롤러 생성을 시도해보면 된다.

 

 

웹훅을 생성하고 싶은 경우에도 컨트롤러와 같다.

group, version만 잘 넣어주면 된다.

$ operator-sdk create webhook --group core --version v1 --kind ResourceQuota --programmatic-validation

참고로 뒤에 옵션에따라 conversion 웹훅이나 validation 웹훅을 만들 수 있다.

자세한 사항은 링크를 확인하면 된다.

https://sdk.operatorframework.io/docs/cli/operator-sdk_create_webhook/