"Cluster API 빌드, 실행, 테스트"의 두 판 사이의 차이

49번째 줄: 49번째 줄:
</syntaxhighlight>
</syntaxhighlight>
<syntaxhighlight lang='text'>
<syntaxhighlight lang='text'>
Conditions:
  Type              Status
  Initialized      True
  Ready            True
  ContainersReady  True
  PodScheduled      True
</syntaxhighlight>
</syntaxhighlight>



2024년 4월 18일 (목) 11:49 판

1 개요

Building, Running, Testing
빌드, 실행, 테스트

2 도커 이미지 이름

config/manager/manager_image_patch.yaml에 있는 패치가 매니저 Pod에 적용됩니다. 거기에는 실제 이미지로 변경해야 하는 자리표시자 IMAGE_URL가 있습니다 .

2.1 개발 이미지

아마도 릴리스 개발을 위해 하나의 위치와 태그가 필요하고, 개발 중에는 또 다른 위치와 태그가 필요할 것입니다.

대부분의 Cluster API 프로젝트에서의 접근방식은 개발 중에 필요에 따라 이미지 URL을 대체하기 위해 sed를 사용하는 Makefile을 사용하는 것입니다.

3 Deployment

3.1 cert-manager

Cluster API는 cert-manager를 사용하여 웹훅에 필요한 인증서를 관리합니다. Cluster API의 yaml을 적용하기 전에 cert-manager를 설치해야 합니다.

kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/<version>/cert-manager.yaml

3.2 Cluster API

인프라 컨트롤러를 배포하려면, 먼저 클러스터 API 자체를 관리 클러스터에 배포해야 합니다.

릴리스 페이지에 있는 사전컴파일된 매니페스트를 사용하거나, clusterctl init을 실행하거나, cluster-api를 복제(clone)하고 kustomize를 사용하여 해당 매니페스트를 적용할 수 있습니다.

cd cluster-api
make envsubst
kustomize build config/default | ./hack/tools/bin/envsubst | kubectl apply -f -

3.3 프로바이더

이 가이드에서는 인프라 제공자를 빌드하고 있습니다. cluster-api와 그 개발자 도구에 어떤 제공자 유형인지를 알려야 합니다. config/default/kustomization.yaml을 편집하고 다음의 공통 레이블을 추가하십시오. 접두사 infrastructure-는 제공자 유형을 감지하는 데 사용됩니다.

commonLabels:
  cluster.x-k8s.io/provider: infrastructure-mailgun

이제 제공자도 적용할 수 있습니다.

cd cluster-api-provider-mailgun

# 현재 kubectl 컨텍스트에 CRD와 컨트롤러 설치
make install deploy

kubectl describe -n cluster-api-provider-mailgun-system pod | grep -A 5 Conditions
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True

3.4 Tiltfile

클러스터 API 개발에는 많은 반복이 필요하며 "빌드, 태그, 푸시, 업데이트 배포" 워크플로우는 매우 지루할 수 있습니다. Tilt는 업데이트를 감시하여 자동으로 빌드하고 배포함으로써 이 프로세스를 훨씬 간단하게 만듭니다.

클러스터 API와 제공자를 동시에 개발하는 방법에 대한 자세한 내용은 Tilt를 사용한 클러스터 API 개발을 참조하세요. 즉, 기본 Tilt 기반 개발 환경에 대해 다음 단계를 수행해야 합니다:

  • 제공자 디렉토리에 tilt-provider.yaml 파일을 만듭니다:
name: mailgun
config:
  image: controller:latest # 원하는 원격 이미지 이름으로 변경
  label: CAPM
  live_reload_deps: ["main.go", "go.mod", "go.sum", "api", "controllers", "pkg"]
  • cluster-api 디렉토리에 tilt-settings.yaml 파일을 만듭니다:
default_registry: "" # 원격 이미지 레지스트리 사용시 변경
provider_repos:
  # 이는 제공자 디렉터리를 참조하고 `tilt-provider.yaml`에서
  # 설정을 로드합니다        
.
  - ../cluster-api-provider-mailgun
enable_providers:
  - mailgun
  • kind 클러스터를 만듭니다. 기본적으로, Tiltfile은 kind 클러스터의 이름이 capi-test라고 가정합니다.
kind create cluster --name capi-test

# kind 클러스터 + 이미지 레지스트리 셋업을 더 정교하게 하려면, 이렇게 해보세요:
# ---
# cd cluster-api
# hack/kind-install-for-capd.sh
  • cluster-api 폴더에서 tilt up을 실행하세요.

그런 다음 Tilt를 사용하여 컨테이너 로그를 볼 수 있습니다.

나열된 위치(live_reload_deps 및 cluster-api repo 내부에서 감시(watch)되는 파일)에 변경된 파일이 있는 Tilt는 다시 빌드하고 배포합니다. 일반적인 파일 변경인 경우에는, 컨트롤러의 바이너리만 다시 빌드되어, 실행 중인 컨테이너에 복사되고, 프로세스가 다시 시작됩니다. 이는 Docker 이미지를 완전히 재빌드·재배포하고 Kubernetes Pod를 재시작하는 것보다 훨씬 빠릅니다.

k9s -A와 같은 명령어를 사용하여 Kubernetes 파드를 확인하거나 kubectl get pod -A를 확인하는 것이 가장 좋습니다. 특히 제공자 구현이 충돌하는 경우 Tilt는 무한정 충돌이 발생할 수 있으므로 코드 변경사항을 컨테이너에 배포할 기회가 없습니다. 이러한 경우 로그 출력에서 ​​알 수 있듯이 Tilt를 종료하고(Ctrl+C 누르기) 다시 시작하여 Docker 이미지를 처음부터 배포합니다.

4 첫번째 클러스터

클러스터를 시험해 보겠습니다. 간단한 YAML을 만듭니다.

apiVersion: cluster.x-k8s.io/v1beta1
kind: Cluster
metadata:
  name: hello-mailgun
spec:
  clusterNetwork:
    pods:
      cidrBlocks: ["192.168.0.0/16"]
  infrastructureRef:
    apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1
    kind: MailgunCluster
    name: hello-mailgun
---
apiVersion: infrastructure.cluster.x-k8s.io/v1alpha1
kind: MailgunCluster
metadata:
  name: hello-mailgun
spec:
  priority: "ExtremelyUrgent"
  request: "Please make me a cluster, with sugar on top?"
  requester: "cluster-admin@example.com"

kubectl apply -f <filename>.yaml로 적용합니다.

모든 것이 잘 진행되면, 관리 클러스터를 세팅할 때 설정한 주소로 이메일을 받게 됩니다.

5 결론

분명히, 이것은 첫 번째 단계일 뿐입니다. Machine 객체도 구현하고 이벤트를 기록하고 업데이트를 처리하는 등 다양한 작업을 수행해야 합니다.

이제 자신만의 제공자를 만들 수 있는 능력을 느끼기를 바랍니다. 세상은 Kubernetes 기반 기회의 땅입니다!

6 참고

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}