최신판 |
당신의 편집 |
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] 저장소를 로컬로 클론 |
| # 로컬로 배포하려는 제공자도 클론 | | # 로컬로 배포하려는 제공자도 클론 |
|
| |
|
30번째 줄: |
30번째 줄: |
|
| |
|
| === tilt-settings 파일 생성 === | | === tilt-settings 파일 생성 === |
| 다음으로, <code>tilt-settings.yaml</code> 파일을 생성하고 이를 <code>cluster-api</code>의 로컬 복사본에 붙입니다. 다음은 CAPI 리포지토리의 컴포넌트를 사용하는 예시입니다.
| |
|
| |
| <syntaxhighlight lang='yaml'>
| |
| default_registry: gcr.io/your-project-name-here
| |
| enable_providers:
| |
| - docker
| |
| - kubeadm-bootstrap
| |
| - kubeadm-control-plane
| |
| </syntaxhighlight>
| |
|
| |
| tilt를 사용하여 자체 리포지토리가 있는 제공자를 시작하려면, 여기서는 Cluster API Provider AWS를 사용하며, <code>tilt-settings.yaml</code>는 다음과 같은 형식이어야 합니다.
| |
|
| |
| <syntaxhighlight lang='yaml'>
| |
| default_registry: gcr.io/your-project-name-here
| |
| provider_repos:
| |
| - ../cluster-api-provider-aws
| |
| enable_providers:
| |
| - aws
| |
| - kubeadm-bootstrap
| |
| - kubeadm-control-plane
| |
| </syntaxhighlight>
| |
|
| |
| JSON을 선호한다면, 대신 <code>tilt-settings.json</code> 파일을 생성할 수 있습니다. 두 파일이 다 있는 경우 YAML이 선호됩니다.
| |
|
| |
| ==== 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번째 줄: |
57번째 줄: |
| ;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번째 줄: |
103번째 줄: |
| 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 테스트에서 사용하는 런타임 확장기능 |
|
| |
|
| 다음 문단에 설명된 절차에 따라 제공자를 추가할 수 있습니다. | | 다음 문단에 설명된 절차에 따라 제공자를 추가할 수 있습니다. |
308번째 줄: |
171번째 줄: |
| 이러한 파일은 제공자 맵이 정의된 후와 모든 헬퍼 함수 정의 뒤에 포함됩니다. 이는 "실제 작업"이 일어나기 직전입니다. | | 이러한 파일은 제공자 맵이 정의된 후와 모든 헬퍼 함수 정의 뒤에 포함됩니다. 이는 "실제 작업"이 일어나기 직전입니다. |
|
| |
|
| == 수면 아래에서, “실제 작업” == | | == Under the covers, a.k.a “the real work” == |
| 높은 수준에서 Tiltfile은 다음 작업을 수행합니다.
| |
| | |
| # <code>tilt-settings.yaml</code> 읽기
| |
| # 허용되는 Kubernetes 컨텍스트 설정
| |
| # 기본 레지스트리 설정
| |
| # <code>provideres</code> 맵 정의
| |
| # 사용자 정의 Tilt 파일 인클루드
| |
| # cert-manager 배포
| |
| # 제공자 활성화(<code>core</code> + <code>tilt-settings.yaml</code>에 나열된 것)
| |
| ## 로컬에서 <code>local_resource</code>로 매니저 바이너리 빌드
| |
| ## 제공자에 대해 <code>docker_build</code> 호출
| |
| ## 제공자의 <code>config/</code> 디렉토리에 대해 <code>kustomize</code> 호출
| |
| | |
| ===라이브 업데이트=== | |
| 제공자 맵의 각 제공자에는 <code>live_reload_deps</code> 목록이 있습니다. 이는 Tilt가 변경사항을 모니터링해야 하는 파일 및/또는 디렉토리를 정의합니다. 의존성이 수정되면, Tilt는 '''로컬 머신에서''' 제공자 매니저 바이너리를 재빌드하고, 바이너리를 구동 중인 컨테이너에 복사한 다음, 재시작 스크립트를 실행합니다. 이는 각 변경사항에 대해 컨테이너 이미지를 다시 빌드하는 것보다 훨씬 빠릅니다. 또한 각 개발 이미지의 크기를 가능한 한 작게 유지하는 데 도움이 됩니다(컨테이너 이미지에는 전체 Go 도구 체인, 소스 코드, 모듈 의존성 등이 필요하지 않음).
| |
| | |
| == Tiltfile IDE 지원== | | == Tiltfile IDE 지원== |
| IntelliJ의 경우, Tiltfile의 구문 강조 표시를 TextMate 번들로 설정할 수 있습니다. 지침은 [https://github.com/tilt-dev/tiltfile.tmbundle Tiltfile TextMate Bundle]을 참조하세요.
| |
|
| |
| VSCode의 경우, [https://marketplace.visualstudio.com/items?itemName=BazelBuild.vscode-bazel Bazel 플러그인]을 사용할 수 있으며, 구문 강조 및 자동 포맷팅을 제공합니다. Tiltfile에 대해 이를 활성화하려면 사용자 세팅을 통해 파일 연계를 설정해야 합니다:
| |
|
| |
| <syntaxhighlight lang='json'>
| |
| "files.associations": {
| |
| "Tiltfile": "starlark",
| |
| },
| |
| </syntaxhighlight>
| |
|
| |
| == Podman 사용 == | | == Podman 사용 == |
| 다음 작업을 수행하면 Docker 대신 Podman을 사용할 수 있습니다:
| |
|
| |
| # podman 유닉스 소켓을 활성화합니다:
| |
| #* 리눅스/systemd에서: <code>systemctl --user enable --now podman.socket</code>
| |
| #* 맥OS에서: <code>podman machine init</code>으로 podman 머신 생성
| |
| # <code>tilt-settings.yaml</code>에서 <code>build_engine</code>를 podman으로 지정 (선택사항, Docker와 podman이 모두 설치된 경우에만)
| |
| # 환경변수 DOCKER_HOST를 올바른 소켓으로 정의합니다.
| |
| #* 리눅스/systemd에서: <code>export DOCKER_HOST=unix:///run/user/$(id -u)/podman/podman.sock</code>
| |
| #* 맥OS에서: <code>export DOCKER_HOST=$(podman machine inspect <machine> | jq -r '.[0].ConnectionInfo.PodmanSocket.Path')</code> 여기서 <code><machine></code>은 podman 머신 이름
| |
| # <code>tilt up</code> 실행
| |
|
| |
| 참고: <code>DOCKER_HOST</code>에 의해 정의된 소켓은 <code>hack/tools/internal/tilt-prepare</code> 명령어에만 사용되며, 이미지 빌드는 <code>podman build</code> / <code>podman push</code> 명령어를 실행합니다.
| |
|
| |
| == Tilt 트러블슈팅 == | | == Tilt 트러블슈팅 == |
| === Tilt 스턱 === | | === Tilt is stuck === |
| 연결을 기다리는 동안 tilt가 멈춘 것처럼 보일 때가 있습니다.
| | === Errors running tilt-prepare === |
| | |
| docker/podman이 구동 중이고 kubernetes 클러스터에 연결할 수 있는지 확인하세요.
| |
| | |
| === tilt-prepare 구동 오류 === | |
| ==== failed to get current context from the KubeConfig file ==== | | ==== failed to get current context from the KubeConfig file ==== |
| * <code>kubectl cluster-info</code>를 실행하여 기본 컨텍스트의 클러스터에 연결할 수 있는지 확인하세요.
| | ==== Docker 데몬에 연결할 수 없음 ==== |
| * <code>kubectl config use-context</code>를 사용하여 올바른 컨텍스트로 전환하세요.
| |
| * 컨텍스트가 허용되는지 확인하세요. [[#tilt-settings 필드|'''allowed_contexts''' 필드]]를 참조하세요.
| |
| | |
| ==== Cannot connect to the Docker daemon ==== | |
| * docker 데몬이 실행 중인지 확인하세요 ;) 또는 podman의 경우 [[#Podman 사용|Podman 사용]]을 참조하세요. | | * docker 데몬이 실행 중인지 확인하세요 ;) 또는 podman의 경우 [[#Podman 사용|Podman 사용]]을 참조하세요. |
| * DOCKER_HOST가 지정된 경우: | | * DOCKER_HOST가 지정된 경우: |
387번째 줄: |
203번째 줄: |
| 주의: macOS에서는 이 설정을, <code>podman machine ssh <machine></code>를 실행하여, '''podman 머신 내에서''' 수행해야 합니다. | | 주의: macOS에서는 이 설정을, <code>podman machine ssh <machine></code>를 실행하여, '''podman 머신 내에서''' 수행해야 합니다. |
|
| |
|
| === kind 이미지 로딩 오류 === | | === Errors loading images in kind === |
| 다음을 실행하여 kind에 이미지를 수동으로 로드할 수 있습니다. | | 다음을 실행하여 kind에 이미지를 수동으로 로드할 수 있습니다. |
|
| |
|