쿠버네티스 배포판 — 직접 세운다 · k0s 구성과 동적 구성 · 실습
k0s.yaml 을 고치고 재시작까지 했는데 아무 일도 없었다
이 실습은 진짜 k0s 에서 돕니다
VM 안에 k0s v1.36.4+k0s.0 한 대(컨트롤러 겸 워커)가 정적 구성으로 떠 있습니다. 설정 파일은 /etc/k0s/k0s.yaml, 작업 디렉터리는 /root/k0scfg 입니다. 처음 뜨는 데 3분 안팎이 걸립니다. 실습 중에 k0s 를 세 번 재시작합니다.
목표
k0s 설정이 어디서 오는지를 모드별로 확인합니다. 정적 구성에서는 파일 변경이 재시작해야 반영되고, 동적 구성에서는 파일 대신 ClusterConfig 오브젝트가 반영된다는 것을 워커 프로필 ConfigMap 으로 보여 줍니다. 헬름 확장을 선언하고 지워서 Chart 오브젝트와 릴리스가 어떻게 따라가는지 기록합니다.
왜 중요한가
k0s 는 파일 하나로 설정한다고 알려져 있어, 동적 구성을 켠 클러스터에서도 사람들이 파일을 고칩니다. 그러면 재시작까지 해도 아무것도 바뀌지 않고, 오류도 나지 않습니다. 반대로 정적 구성에서는 파일을 고친 노드가 재시작되는 날 갑자기 설정이 바뀝니다. 두 경우 모두 "명령이 성공했다" 가 아니라 실제로 무엇이 생겼는지를 봐야 알 수 있습니다.
단계
1. 기본값과 이 VM 의 설정을 비교해 /root/k0scfg/defaults.yaml 과 /root/k0scfg/defaults.json 에 저장하세요.
2. k0s sysinfo 결과를 /root/k0scfg/sysinfo.json 과 /root/k0scfg/sysinfo-summary.txt 로 남기세요.
3. 정적 구성에서 파일에 워커 프로필 edge-small 을 넣고, 재시작 없이 반영되지 않는 것을 /root/k0scfg/static-edit.json 에 기록하세요.
4. k0s 를 재시작해 프로필 ConfigMap 이 생기는 것을 /root/k0scfg/static-restart.json 에 기록하세요.
5. 동적 구성으로 바꾸고 ClusterConfig 오브젝트를 /root/k0scfg/dynamic.json 에 기록하세요.
6. 동적 구성에서 파일에 프로필 from-file 을 넣고 재시작한 결과를 /root/k0scfg/file-ignored.json 에 기록하세요.
7. ClusterConfig 에 프로필 from-api 를 더해 재시작 없이 반영되는 것을 /root/k0scfg/api-patch.json 에 기록하세요.
8. ClusterConfig 에 podinfo 차트를 선언하고 /root/k0scfg/helm.json 을 쓰세요.
9. 차트 선언을 지운 결과를 /root/k0scfg/removal.json 에, 정리를 /root/k0scfg/report.md 에 쓰세요.
참고
- 워커 프로필 ConfigMap 이름은
worker-config-<프로필>-1.<마이너>입니다(이 VM 은 1.36). 프로필 값은kubeletConfiguration데이터 안에 JSON 으로 들어갑니다. - 재시작은
k0s stop후k0s start입니다. 그 뒤 API 가 응답할 때까지 기다리세요. 서비스 이름은k0scontroller입니다. - 이미 설치된 서비스의 실행 인자를 바꾸려면
k0s install controller를 같은 인자에 새 플래그를 더해--force로 다시 칩니다.--enable-worker --no-taints -c /etc/k0s/k0s.yaml를 빠뜨리면 워커가 사라집니다. - 차트는
https://stefanprodan.github.io/podinfo저장소의podinfo6.14.1 입니다. 이미지는 ghcr.io 에 있어 받기 제한에 걸리지 않습니다. - 흔한 실수 1: 3단계에서 재시작부터 하는 것. 채점기는 기록이 ConfigMap 이 생기기 전에 쓰였는지 봅니다.
- 흔한 실수 2: 7단계에서 merge patch 로
workerProfiles를 통째로 덮어edge-small을 지우는 것. 목록 필드는 merge patch 가 교체합니다. 4단계 재채점이 떨어집니다.
단계 9개
- 적지 않은 값은 무엇이 되나
- 설치 전 점검을 읽는다
- 파일을 고쳤는데 아무 일도 없다
- 재시작하자 생겼다
- 진실의 원천을 API 로 옮긴다
- 이번에는 재시작해도 무시된다
- 오브젝트를 고치면 바로 반영된다
- 선언한 차트가 Chart 오브젝트가 된다
- 선언을 지우면 무엇이 남나