23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요, 데보션영 3기 강대훈입니다.
벌써 쿠버네티스 스터디가 일곱번째를 맞이하였는데요..! 🫨
시간이 참 빠르면서 점점 알아가는게 많아지는게 느껴져 뿌듯한 것 같습니다 😊
금번 스터디 주제는 Kubebuilder였습니다.
쿠버네티스 스터디를 통해 쿠버네티스 생태계에 대해 열심히 공부하던 차에 Kubebuilder는 또 새로운 툴이었는데요,
Kubebulilder는 단순히 말하면 쿠버네티스 API와 컨트롤러를 개발할 수 있게 도와주는 SDK입니다.
지금까지 다루진 않았지만 쿠버네티스에는 Custom Resource Definition(이하 CRD)라는 개념이 존재합니다.
CRD는 사용자 정의 리소스(CR)를 통해 클러스터에 새로운 리소스 유형을 추가할 수 있습니다.
익히 알고 있는 Pod, Service와 같이 쿠버네티스에서 기본적으로 제공하는 리소스들처럼, 사용자가 리소스를 등록하여 사용이 가능하도록 하는 것입니다.
예를 들어 Argo CD같은 경우는 Application이라는 CRD를 통해 Git과 쿠버네티스 클러스터를 동기화합니다.
위 링크에서 kubebuilder를 설치하는 방법에 대해 확인할 수 있습니다.
먼저 다음 명령어로 쿠베빌더를 설치해 줍니다.
```curl -L -o kubebuilder "https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)"
chmod +x kubebuilder && sudo mv kubebuilder /usr/local/bin/설치가 완료되면 다음과 같이 버전을 확인할 수 있습니다.

다음 명령어로 단축어를 등록합니다.
kubebuilder completion zsh | source /dev/stdinKubebuilder를 사용해 CRD를 작성하는 실습입니다.
우선 아래 명령어로 프로젝트를 초기화합니다
kubebuilder init --domain my.domain --repo my.domain/guestbook이 명령어로 프로젝트가 생성되며, 생성된 디렉터리에는 guestbook_types.go 파일이 있습니다. 이 파일은 CRD 타입 정의를 포함합니다.
Kubernetes에서 파드의 상태(status)는 중요한 정보를 포함하고 있습니다.
그리고 파드 외에도 항상 내가 배포한 리소스들에는 status가 존재한다.
CRD는 이러한 status의 그 계층과 스펙도 전부 정의가 가능합니다.
nginx pod의 yaml 파일을 보면 스펙이 정의되어 있습니다.
다음 명령어로 배포된 파드의 status를 확인 가능합니다.
kubectl get pods nginx -o yaml
Kubebuilder로 CRD를 만들면 config/crd/bases 디렉터리에 CRD 파일이 생성됩니다.
CRD를 배포하면 API를 확장시킬 수 있고, 리소스가 배포되면 쿠버네티스 API가 CRD를 쿼리해서 리소스 타입을 검증합니다.
CRD를 처음 배포하거나, CRD에 변경이 생기면 다음 명령어로 쿠버네티스에 반영할 수 있습니다.
이 명령어는 CRD에 대한 매니페스트를 생성합니다.
make manifests그 후, make install 명령어를 사용해 .kube/config에 CRD를 등록하고 클러스터에 설치할 수 있습니다.
make installReconciliation은 desired state(원하는 상태)와 current state(현재 상태)를 비교해 리소스의 상태를 일치시키는 것입니다.
CR에 대한 로직을 작성할 때는 해당 리소스의 원하는 상태가 자동으로 유지되도록 Reconcile 메서드를 구현해야 합니다.
예를 들어, CR이 삭제될 때 그에 해당하는 다른 리소스도 자동으로 삭제되도록 로직을 작성하는 것이 중요합니다.
그리고 Reconcile 메서드에서 처리된 작업의 결과를 status 필드에 기록합니다. 이로써 리소스의 상태를 명확하게 모니터링할 수 있으며, Reconcile이 정상적으로 동작하는지 확인할 수 있습니다.
Kubebuilder와 CRD에 대한 내용은 재밌었지만, 아직까지 쿠버네티스를 사용하며 커스텀 리소스를 직접 만들어서 사용해봐야겠다는 생각을 해본 적이 없어,
개인이나 팀 단위에서 커스텀 리소스가 필요한 경우가 언제가 있는지에 대한 질문을 드렸습니다.
멘토님께서는 이에 대해 직접 사용했던 예시를 설명해주셨습니다.
여러 컨트롤러의 상태를 한 곳에서 알고 싶을 때, 각 컨트롤러의 상태를 가져와서 게더링 한 것을 status에서 모아두어 한 번에 확인 가능하도록 커스텀 리소스를 만드신 적이 있다고 하셨습니다.
이 때 외부 리소스를 쿼리하는 것을 예전에는 권장하지 않았지만, 요새는 그렇지 않은 추세인 것 같다고 덧붙이셨습니다. (cluster API같은 툴이 나오고 있는 추세)
아직까진 직접 CR을 만들어 사용할 실력은 안되는 것 같지만, 그래도 하나 더 유익한 지식을 얻어가는 듯해 좋았습니다 😃
이번 스터디는 다들 사정이 있어 네명이서 오손도손 진행되었는데, 다음 스터디 시간에는 다시 북적북적한 분위기가 되었으면 좋겠습니다 🥹
항상 유익한 스터디 감사합니다! 🙇🏻♂️
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.