Tilt를 사용한 클러스터 API 개발 편집하기

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

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

최신판 당신의 편집
12번째 줄: 12번째 줄:
# [[envsubst]]: <code>make envsubst</code>를 통해 제공
# [[envsubst]]: <code>make envsubst</code>를 통해 제공
# [[helm]]: v3.7.1 이상
# [[helm]]: v3.7.1 이상
# [https://github.com/kubernetes-sigs/cluster-api Cluster API] 리포지토리를 로컬로 클론
# [https://github.com/kubernetes-sigs/cluster-api Cluster API] 저장소를 로컬로 클론
# 로컬로 배포하려는 제공자도 클론
# 로컬로 배포하려는 제공자도 클론


40번째 줄: 40번째 줄:
</syntaxhighlight>
</syntaxhighlight>


To use tilt to launch a provider with its own repo, using Cluster API Provider AWS here, tilt-settings.yaml should look like:
tilt를 사용하여 자체 리포지토리가 있는 제공자를 시작하려면, 여기서는 Cluster API Provider AWS를 사용하며, <code>tilt-settings.yaml</code>는 다음과 같은 형식이어야 합니다.
tilt를 사용하여 자체 리포지토리가 있는 제공자를 시작하려면, 여기서는 Cluster API Provider AWS를 사용하며, <code>tilt-settings.yaml</code>는 다음과 같은 형식이어야 합니다.


55번째 줄: 56번째 줄:


==== tilt-settings 필드 ====
==== tilt-settings 필드 ====
'''allowed_contexts''' (Array, default=[]): Tilt가 사용할 수 있는 kubeconfig 컨텍스트 목록. 자세한 내용은 [https://docs.tilt.dev/api.html#api.allow_k8s_contexts allow_k8s_contexts]에 있는 Tilt 문서를 참조하세요.
'''default_registry''' (String, default=[]): 이미지를 push해야 하는 경우 사용할 이미지 레지스트리. 자세한 내용은 [https://docs.tilt.dev/api.html#api.default_registry Tilt 문서]를 참조하세요. 로컬 레지스트리를 사용하지 않는 경우, 이 값이 필요합니다. 또한 Cluster API Tiltfile은 실수로 <code>gcr.io/k8s-staging-cluster-api</code>에 push되는 것을 방지합니다.
'''build_engine''' (String, default=”docker”): 이미지를 빌드하는 데 사용되는 엔진. <code>docker</code> 또는 <code>podman</code>일 수 있습니다. 참고: 기본값은 동적이며 <code>docker version</code>(명령어가 실패한 경우 <code>podman version</code>)에 문자열 "Podman Engine"이 있는 경우  "podman"이 됩니다.
'''kind_cluster_name''' (String, default=”capi-test”): 이미지를 미리 로드할 때 사용할 kind 클러스터의 이름
'''provider_repos''' (Array[]String, default=[]): 사용하려는 모든 제공자에 대한 경로 목록. 각 제공자에는 제공자 빌드 방법을 설명하는 <code>tilt-provider.yaml</code> 또는 <code>tilt-provider.json</code> 파일이 있어야 합니다.
'''enable_providers''' (Array[]String, default=[‘docker’]): 활성화할 제공자 목록. 자세한 내용은 [[#사용가능 제공자|사용가능 제공자]]를 참조하세요 .
'''template_dirs''' (Map{String: Array[]String}, default={”docker”: [ “./test/infrastructure/docker/templates”]}): 클러스터 템플릿이 포함된 디렉토리에 대한 제공자 맵. 아래에 필드의 예시가 있습니다. 어떻게 사용되는지는 [[#워크로드 클러스터 배포|워크로드 클러스터 배포]]를 참조하세요 .
<syntaxhighlight lang='yaml'>
template_dirs:
  docker:
  - ./test/infrastructure/docker/templates
  - <other-template-dir>
  azure:
  - <azure-template-dir>
  aws:
  - <aws-template-dir>
  gcp:
  - <gcp-template-dir>
</syntaxhighlight>
'''kustomize_substitutions''' (Map{String: String}, default={}): 제공자 yaml에 있는 ${}-스타일 자리표시자에 대한 선택적 대체 맵. 이러한 대체항목은 클러스터 템플릿을 배포할 때도 사용됩니다. [[#워크로드 클러스터 배포|워크로드 클러스터 배포]]를 참조하세요 .
참고 : Tilt로 관리되는 기존 클러스터를 사용하여 로컬로 E2E 테스트를 실행할 때, 성공적인 테스트를 위해서는 다음 대체항목이 필요합니다.
<syntaxhighlight lang='yaml'>
kustomize_substitutions:
  CLUSTER_TOPOLOGY: "true"
  EXP_KUBEADM_BOOTSTRAP_FORMAT_IGNITION: "true"
  EXP_RUNTIME_SDK: "true"
  EXP_MACHINE_SET_PREFLIGHT_CHECKS: "true"
</syntaxhighlight>
AWS
예를 들어 yaml에 <code>${AWS_B64ENCODED_CREDENTIALS}</code>가 포함된 경우, 다음을 수행할 수 있습니다.
<syntaxhighlight lang='yaml'>
kustomize_substitutions:
  AWS_B64ENCODED_CREDENTIALS: "your credentials here"
</syntaxhighlight>
'''deploy_observability''' ([string], default=[]): 세팅된 경우, 관찰가능성 도구 중 하나를 개발 클러스터에 설치합니다. 중요! 이 기능을 사용하려면 사용자 경로에서 helm 명령어를 사용할 수 있어야 합니다.
지원되는 값은 다음과 같습니다:
* <code>grafana</code>*: 대시보드를 만들고 <code>loki</code>, <code>prometheus</code>, <code>tempo</code> 쿼리하기 위한 것
* <code>kube-state-metrics</code>: Kubernetes와 CAPI 리소스에 대한 메트릭을 <code>prometheus</code>에 노출하기 위한 것
* <code>loki</code>: 로그를 수신하고 저장하기 위한 것
* <code>metrics-server</code>: <code>kubectl top node/pod</code> 활성화하기 위한 것
* <code>prometheus</code>*: Kubernetes에서 메트릭을 수집하기 위한 것
* <code>promtail</code>: 파드 로그를 <code>loki</code>에 제공하기 위한 것
* <code>parca</code>*: 프로파일링 데이터를 시각화하기 위한 것
* <code>tempo</code>: 트레이스를 저장하기 위한 것
* <code>visualizer</code>*: 각 클러스터의 Cluster API 리소스를 시각화하고, 모든 리소스의 사양 및 상태에 대한 빠른 액세스를 제공하기 위한 것
<nowiki>*:</nowiki> 참고: UI는 tilt 콘솔의 링크를 통해 액세스할 수 있습니다.
'''additional_kustomizations''' (map[string]string, default={}): 세팅된 경우 kustomize를 사용하여 빌드된 추가 리소스를 클러스터에 설치합니다. 예시:
<syntaxhighlight lang='yaml'>
additional_kustomizations:
  capv-metrics: ../cluster-api-provider-vsphere/config/metrics
</syntaxhighlight>
'''debug''' (Map{string: Map} default{}): 제공자의 지명 설정 맵. key는 제공자 이름입니다.
지원하는 세팅:
* '''port''' (int, default=0 (disabled)): 0이 아닌 값으로 세팅되면, Tilt는 delve를 사용하여 제공자를 실행하고 localhost의 지정된 디버그 포트로 delve 서버를 포트 전달합니다. 그런 다음 Visual Studio Code, Goland, IntelliJ와 같은 IDE와 함께 사용할 수 있습니다.
* '''continue''' (bool, default=true): 기본적으로, Tilt는 <code>--continue</code>를 사용하여 delve를 실행하므로, 특별히 중단점을 입력하지 않는 한 디버깅이 켜져 있는 모든 제공자는 정상적으로 실행됩니다. 기본적으로 컨트롤러가 시작되지 않도록 하려면 false로 변경하세요.
* '''profiler_port''' (int, default=0 (disabled)): 0이 아닌 값으로 세팅되면, Tilt는 <code>--profiler-address</code>를 가지고 프로파일러를 활성화하고 포트 포워드를 셋업합니다. 컨트롤러의 Tilt 웹 UI에 "프로파일러(profiler)" 링크가 표시됩니다.
* '''metrics_port''' (int, default=0 (disabled)): 0이 아닌 값으로 세팅되면, Tilt는 기본 메트릭 포트로 포트 포워드합니다. 컨트롤러의 Tilt 웹 UI에 "메트릭(metrics)" 링크가 표시됩니다.
* '''race_detector''' (bool, default=false) (Linux amd64 only): 활성화되면, Tilt는 지정된 컨트롤러를 cgo로 컴파일하고 시스템 glibc에서 정적으로 컴파일하며 레이스 감지기를 활성화합니다. 현재, 이것은 Linux amd64 시스템에서 빌드할 때만 지원됩니다. 이것이 작동하려면 glibc-static을 설치하거나 libc.a를 사용할 수 있어야 합니다.
예시: 아래 설정 사용:
<syntaxhighlight lang='yaml'>
  debug:
    core:
      continue: false
      port: 30000
      profiler_port: 40000
      metrics_port: 40001
</syntaxhighlight>
;디버거 연결
;디버거 연결
;Visual Studio
;Visual Studio
175번째 줄: 82번째 줄:
;Goland / IntelliJ
;Goland / IntelliJ
위의 예시를 활용하면 포트 30000을 가리키는 [https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#step-3-create-the-remote-run-debug-configuration-on-the-client-computer Go Remote 실행/디버그 설정]을 설정할 수 있습니다.
위의 예시를 활용하면 포트 30000을 가리키는 [https://www.jetbrains.com/help/go/attach-to-running-go-processes-with-debugger.html#step-3-create-the-remote-run-debug-configuration-on-the-client-computer Go Remote 실행/디버그 설정]을 설정할 수 있습니다.
'''deploy_cert_manager''' (Boolean, default=<code>true</code>): 웹훅 등록에 사용하기 위해 cert-manager를 클러스터에 배포합니다.
'''trigger_mode''' (String, default=<code>auto</code>): 변경에 따라 tilt를 자동으로 재빌드할지 여부를 설정하는 옵션 세팅. 자동 재빌드를 비활성화하고 사용자가 UI를 통해 변경된 개별 컴포넌트의 재빌드를 트리거하도록 하려면 수동으로 설정합니다.
'''extra_args''' (Object, default=<code>{}</code>): 이 제공자에 대해 설정된 메인 바이너리에 전달할 추가 인수에 대한 제공자 매핑. 배열의 각 항목은 지정된 제공자의 매니저에 전달됩니다.
예시:
<syntaxhighlight lang='yaml'>
extra_args:
  kubeadm-bootstrap:
  - --logging-format=json
</syntaxhighlight>
이 설정을 사용하면, 각 매니저가 다음과 같이 호출됩니다.
<syntaxhighlight lang='bash'>
manager --logging-format=json
</syntaxhighlight>


=== kind 클러스터 생성하고 Tilt 실행! ===
=== kind 클러스터 생성하고 Tilt 실행! ===
240번째 줄: 128번째 줄:
tilt로 워커 클러스터를 생성한 경우, <code>clusterctl</code>을 관리 작업에 사용해서는 안됩니다. 이는 tilt는 clusterctl init처럼 관리 클러스터에서 제공자를 초기화하지 않기 때문에, clusterctl config와 같은 일부 clusterctl 명령어가 작동하지 않기 때문입니다.
tilt로 워커 클러스터를 생성한 경우, <code>clusterctl</code>을 관리 작업에 사용해서는 안됩니다. 이는 tilt는 clusterctl init처럼 관리 클러스터에서 제공자를 초기화하지 않기 때문에, clusterctl config와 같은 일부 clusterctl 명령어가 작동하지 않기 때문입니다.


이러한 한계점은 컨트롤러 로직에 대한 빠른 개발-테스트 반복을 실행하는 동안 수용가능한 절충안입니다. 대신 clusterctl 테스트 워크플로우에 관심이 있다면, [[개발자를 위한 clusterctl|clusterctl 개발자 지침]]을 참조해야 합니다.
이러한 한계점은 컨트롤러 로직에 대한 빠른 개발-테스트 반복을 실행하는 동안 수용가능한 절충안입니다. 대신 clusterctl 테스트 워크플로우에 관심이 있다면, [[cluster-api/개발자를 위한 clusterctl|clusterctl 개발자 지침]]을 참조해야 합니다.


== 사용가능 제공자 ==
== 사용가능 제공자 ==
현재 Tiltfile에 정의된 제공자는 다음과 같습니다:
현재 Tiltfile에 정의된 제공자는 다음과 같습니다:


* '''core''': cluster-api 자체
* core: cluster-api 자체
* '''kubeadm-bootstrap''': kubeadm 부트스트랩 제공자
* kubeadm-bootstrap: kubeadm 부트스트랩 제공자
* '''kubeadm-control-plane''': kubeadm 컨트롤플레인 제공자
* kubeadm-control-plane: kubeadm 컨트롤플레인 제공자
* '''docker''': Docker 인프라스트럭처 제공자
* docker: Docker 인프라스트럭처 제공자
* '''in-memory''': In-memory 인프라스트럭처 제공자
* in-memory: In-memory 인프라스트럭처 제공자
* '''test-extension''': CAPI E2E 테스트에서 사용하는 런타임 확장기능
* test-extension: CAPI E2E 테스트에서 사용하는 런타임 확장기능


다음 문단에 설명된 절차에 따라 제공자를 추가할 수 있습니다.
다음 문단에 설명된 절차에 따라 제공자를 추가할 수 있습니다.

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

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