LabHub
배우기 러닝패스 코스

Helm 차트 제작과 배포 · --set 의 문법과 타입 · 실습

같은 값을 어떻게 적느냐가 타입을 바꾼다

LabHub 에서 이어서 보기

목표

--set 계열 옵션의 문법을 값 덤프로 하나씩 확인하고, 같은 값을 values 파일로 줄 때와 --set 으로 줄 때 결과가 어떻게 달라지는지 JSON 타입까지 비교한다.

왜 중요한가

--set 은 급할 때 쓰는 편의 옵션처럼 보이지만 실제로는 작은 언어다. 점은 깊이를 파고, 쉼표는 값을 나누고, 중괄호는 리스트를 만들고, 대괄호는 원소를 집고, 역슬래시는 그 규칙을 잠시 끈다. 문법을 몰라서 생기는 사고보다 타입을 몰라서 생기는 사고가 더 잦다. --set image.tag=8 은 숫자 8 을 넣고, values 파일의 tag: "8" 은 문자열을 넣는다. 차트가 | quote 를 걸어 두었다면 둘 다 같아 보이지만, 걸지 않은 차트에서는 매니페스트가 조용히 달라진다. 값을 null 로 지우는 것과 빈 문자열로 두는 것도 다르고, 파일 본문을 값으로 넣는 일에는 전용 옵션이 필요하다. 이 실습은 그 차이를 전부 눈에 보이게 만들어 두고 하나씩 확인한다.

단계

1. /root/hc-set/dumper 차트(이름 dumper, 버전 0.1.0)를 만드세요. values.yamlimage(repository registry.local/api, tag "1.10"), replicas: 2, nodeSelector: {}, args: [], config: {} 를 담습니다. templates/dump.yaml<릴리스이름>-dump ConfigMap 이고 datadump.json 키 하나만 두는데, 그 값은 .Values 전체를 JSON 으로 바꿔 따옴표로 감싼 것입니다. 렌더한 뒤 그 JSON 만 뽑아 /root/hc-set/out/base.json 에 저장하세요.
2. 기본값을 고치지 말고 --set 만으로 image.repositoryregistry.local/web 로, replicas5 로, argsalpha·beta·gamma 세 원소의 리스트로 바꿔 렌더하고 그 JSON 을 /root/hc-set/out/basics.json 에 저장하세요.
3. --set 으로 nodeSelectorkubernetes.io/os: linux 를, configfeature.flag: beta 를 넣어 렌더하고 JSON 을 /root/hc-set/out/escape.json 에 저장하세요. 두 키 모두 이름 안에 점이 들어 있습니다.
4. 같은 태그를 세 가지로 넣어 렌더하고 각각 저장하세요 — --set image.tag=8/root/hc-set/out/num-set.json, --set-string image.tag=8/root/hc-set/out/num-setstring.json, --set image.tag=1.10/root/hc-set/out/num-float.json 입니다. 세 파일에서 image.tagJSON 타입이 어떻게 갈리는지 확인하세요.
5. --set-json 으로 config{"retries": 3, "mode": "strict"} 로, args["--a", "--b"] 로 넣어 렌더하고 JSON 을 /root/hc-set/out/setjson.json 에 저장하세요. retries 는 숫자여야 합니다.
6. /root/hc-set/ca.pem 에 인증서 모양의 세 줄짜리 파일을 만드세요(-----BEGIN CERTIFICATE-----, MIIBkTCB+wIJAKt, -----END CERTIFICATE-----). 이 파일의 내용config.ca 값으로 넣어 렌더하고 JSON 을 /root/hc-set/out/setfile.json 에 저장하세요. 경로가 아니라 내용이 들어가야 합니다.
7. --set 으로 image.tag지워서(키 자체가 없어져야 합니다) 렌더한 JSON 을 /root/hc-set/out/null.json 에, args 의 0번 원소에 name: firstvalue: 1 을 넣어 렌더한 JSON 을 /root/hc-set/out/index.json 에 저장하세요. value 는 숫자여야 합니다.
8. /root/hc-set/override.yamlimage.tag: "8"replicas: 5 를 적고 그 파일로 렌더한 JSON 을 /root/hc-set/out/via-file.json 에 저장하세요. 같은 두 값을 --set image.tag=8 --set replicas=5 로 준 결과를 /root/hc-set/out/via-set.json 에, --set-string image.tag=8 --set replicas=5 로 준 결과를 /root/hc-set/out/via-setstring.json 에 저장합니다. 파일 판과 set 판의 차이를 diff 로 떠서 /root/hc-set/out/compare.txt 에 남기세요(차이가 있으므로 diff 는 0 이 아닌 코드로 끝납니다).

참고

단계 8개

  1. 넘어온 값을 있는 그대로 내보내는 차트
  2. 점·쉼표·중괄호 — set 의 문법
  3. 키 안에 점이 들어 있을 때
  4. 숫자로 읽히는 값과 그렇지 않은 값
  5. 리스트와 객체를 통째로 넣는다
  6. 파일 내용을 값으로 넣는다
  7. 값을 지우고, 리스트 원소를 집어서 고친다
  8. 같은 값을 파일로 줄 때와 set 으로 줄 때