Kubebuilder 퀵스타트 편집하기

경고: 로그인하지 않았습니다. 편집을 하면 IP 주소가 공개되게 됩니다. 로그인하거나 계정을 생성하면 편집자가 사용자 이름으로 기록되고, 다른 장점도 있습니다.

편집을 취소할 수 있습니다. 이 편집을 되돌리려면 아래의 바뀐 내용을 확인한 후 게시해주세요.

최신판 당신의 편집
48번째 줄: 48번째 줄:


==API 생성==
==API 생성==
다음 명령어를 실행하여 새 API(그룹/버전) <code>webapp/v1</code>와 이에 대한 새 Kind(CRD) <code>Guestbook</code>을 생성합니다.
<syntaxhighlight lang='bash'>
kubebuilder create api --group webapp --version v1 --kind Guestbook
</syntaxhighlight>
Press Options
y리소스 만들기 [y/n] 및 컨트롤러 만들기 [y/n]를 누르면 api/v1/guestbook_types.go internal/controllers/guestbook_controller.go이 종류(CRD)에 대해 조정 비즈니스 로직이 구현되는 파일이 생성됩니다.
Create Resource [y/n]과 Create Controller [y/n]에서 y를 누르면, 각각 API가 정의된 <code>api/v1/guestbook_types.go</code> 파일과, Kind(CRD)를 구현하는 reconciliation 비즈니스 로직이 있는 <code>internal/controllers/guestbook_controller.go</code> 파일이 생성됩니다.
선택사항: API 정의 및 reconciliation 비즈니스 로직을 편집합니다. 자세한 내용은 [https://book.kubebuilder.io/cronjob-tutorial/api-design API 설계] 및 [https://book.kubebuilder.io/cronjob-tutorial/controller-overview 컨트롤러란 무엇인가]를 참조하세요 .
API 정의를 편집하는 경우 다음을 사용하여 커스텀 리소스(CR) 또는 커스텀 리소스 정의(CRD)와 같은 매니페스트를 생성합니다.
<syntaxhighlight lang='bash'>
make manifests
</syntaxhighlight>
예시를 보려면 여기를 클릭하세요. (api/v1/guestbook_types.go)
<syntaxhighlight lang='go'>
// GuestbookSpec은 원하는 방명록 상태를 정의합니다
type GuestbookSpec struct {
    // 추가 사양 필드 삽입 - 원하는 클러스터 상태
    // 중요: 이 파일을 수정한 후 코드를 재생성하려면 "make"를 실행하세요
    // 인스턴스 수량
    // +kubebuilder:validation:Minimum=1
    // +kubebuilder:validation:Maximum=10
    Size int32 `json:"size"`
    // GuestbookSpec 설정을 위한 ConfigMap 이름
    // +kubebuilder:validation:MaxLength=15
    // +kubebuilder:validation:MinLength=1
    ConfigMapName string `json:"configMapName"`
    // +kubebuilder:validation:Enum=Phone;Address;Name
    Type string `json:"alias,omitempty"`
}
// GuestbookStatus는 관찰된 Guestbook 상태를 정의합니다
type GuestbookStatus struct {
    // 추가 상태 필드 삽입 - 클러스터의 관찰된 상태를 정의합니다
    // 중요: 이 파일을 수정한 후 코드를 다시 생성하려면 "make"를 실행하세요.
    // 액티브 Guestbook 노드의 PodName.
    Active string `json:"active"`
    // 스탠바이 Guestbook 노드의 PodName.
    Standby []string `json:"standby"`
}
// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:resource:scope=Cluster
// Guestbook은 guestbooks API의 스키마입니다
type Guestbook struct {
    metav1.TypeMeta  `json:",inline"`
    metav1.ObjectMeta `json:"metadata,omitempty"`
    Spec  GuestbookSpec  `json:"spec,omitempty"`
    Status GuestbookStatus `json:"status,omitempty"`
}
</syntaxhighlight>
==테스트==
==테스트==
실행하려면 Kubernetes 클러스터가 필요합니다. [[KIND]]를 사용하여 테스트용 로컬 클러스터를 가져오거나 원격 클러스터에 대해 실행할 수 있습니다.
사용되는 컨텍스트
컨트롤러는 kubeconfig 파일의 현재 컨텍스트(즉, <code>kubectl cluster-info</code>에 표시되는 모든 컨텍스트)를 자동으로 사용합니다.
클러스터에 CRD를 설치합니다.
<syntaxhighlight lang='bash'>
make install
</syntaxhighlight>
빠른 피드백과 코드 수준 디버깅을 위해, 컨트롤러를 실행하세요(이것은 포그라운드에서 실행되므로, running 상태를 유지하려면 새 터미널로 전환하세요).
<syntaxhighlight lang='bash'>
make run
</syntaxhighlight>
==커스텀 리소스 인스턴스 설치==
==커스텀 리소스 인스턴스 설치==
Create Resource [y/n]에서 <code>y</code>를 누르면, 샘플에 있는 CRD에 대한 CR이 생성됩니다(API 정의를 변경했다면 편집을 먼저 해야 합니다).
<syntaxhighlight lang='bash'>
kubectl apply -k config/samples/
</syntaxhighlight>
==클러스터에서 실행==
==클러스터에서 실행==
컨트롤러를 다른 클러스터에서 패키징되고 테스트될 준비가 되었다면,
<code>IMG</code>에 위치를 지정하여 이미지를 빌드하고 푸시합니다.
<syntaxhighlight lang='bash'>
make docker-build docker-push IMG=<some-registry>/<project-name>:tag
</syntaxhighlight>
<code>IMG</code>에 지정된 이미지를 사용하여 클러스터에 컨트롤러를 배포합니다.
<syntaxhighlight lang='bash'>
make deploy IMG=<some-registry>/<project-name>:tag
</syntaxhighlight>
레지스트리 퍼미션
이 이미지는 지정한 개인 레지스트리에 게시되어야 합니다. 그리고 작업 환경에서 이미지를 가져오려면 액세스 권한이 필요합니다. 위 명령어가 작동하지 않으면 레지스트리에 대한 적절한 권한이 있는지 확인하십시오.
RBAC 오류
RBAC 오류가 발생하면 자신에게 클러스터 관리자 권한을 부여하거나 관리자로 로그인해야 할 수도 있습니다. 본인의 케이스가 해당될 수 있으니, [https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control#iam-rolebinding-bootstrap GKE 클러스터 v1.11.x 이하에서 Kubernetes RBAC를 사용하기 위한 전제조건]을 참조하세요.
==CRD 언인스톨==
==CRD 언인스톨==
클러스터에서 CRD를 삭제하려면:
<syntaxhighlight lang='bash'>
make uninstall
</syntaxhighlight>
==컨트롤러 언디플로이==
==컨트롤러 언디플로이==
클러스터에서 컨트롤러를 언디플로이합니다.
<syntaxhighlight lang='bash'>
make undeploy
</syntaxhighlight>
==다음 단계==
==다음 단계==
이제 더 상세한 개요를 보려면 [[Kubebuilder 아키텍처|아키텍처 개념도]]를 참조하고 [[kubebuilder 튜토리얼: CronJob 구축|CronJob 튜토리얼]]을 따라 데모 예제 프로젝트를 개발하여 작동방식을 이해해 보세요.
이미지 배포 플러그인을 사용하여 API 및 컨트롤러 코드 생성
[[kubebuilder/plugins/deploy-image-plugin-v1-alpha|이미지 배포]] 플러그인을 확인하세요. 이 플러그인을 사용하면 API/컨트롤러를 스캐폴드하여 가이드와 모범사례에 따라 클러스터에 피연산자(이미지)를 배포하고 관리할 수 있습니다. 사용자가 생성된 코드를 커스터마이징할 수 있도록 하면서도 목표 달성의 복잡성을 간소화합니다.
==참고==
==참고==
* https://book.kubebuilder.io/quick-start
* https://book.kubebuilder.io/quick-start


[[분류: kubebuilder]]
[[분류: kubebuilder]]

제타위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 3.0 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 제타위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요.
또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요!

취소 편집 도움말 (새 창에서 열림)