Helm 배포와 롤백 시나리오 · 릴리스와 리비전 · 실습
릴리스를 열어 본다 — 저장 자리·보관 창·되살리기
목표
Helm 릴리스가 클러스터의 어디에 무엇으로 저장되는지를 직접 풀어 보고, 보관
창이 얼마나 좁은지, 지운 릴리스를 어떻게 되살리는지까지 한 바퀴 돕니다.
왜 중요한가
helm rollback 이 무엇을 되돌리고 무엇을 못 되돌리는지는 전부 저장 구조에서
나옵니다. 릴리스는 네임스페이스 안의 시크릿 한 장이고, 그 안에 렌더링된
매니페스트가 통째로 눌려 들어 있습니다. 그래서 매니페스트에 적혀 있던 것은
되돌아오고 바깥에서 벌어진 일은 되돌아오지 않습니다.
같은 구조에서 따라 나오는 것이 둘 더 있습니다. 릴리스 이름이 **네임스페이스
안에서만** 유일하다는 것, 그리고 보관되는 리비전 개수에 상한이 있다는 것입니다.
"반년 전으로 롤백" 이 대개 불가능한 이유가 여기 있습니다. 사고가 났을 때helm get values 로 "무슨 값으로 떴는가" 를 먼저 확인하는 습관도 이 구조를
알아야 몸에 붙습니다.
환경
이 파드는 kwok 으로 진짜 kube-apiserver 를 띄웁니다. 파드가 실제로 실행되지는
않지만 릴리스 시크릿과 리비전, 오브젝트 변경은 전부 진짜입니다. 그래서 채점도
파일이 아니라 helm 과 apiserver 에 다시 물어서 합니다. 작업 디렉터리는/root/hs-rel 이고 산출물은 /root/hs-rel/out 아래에 둡니다.
단계
1. /root/hs-rel 에서 차트를 만들고 rel-a 에 shop 으로 설치합니다.
2. 리비전 1의 릴리스 시크릿을 풀어 /root/hs-rel/out/release-v1.json 에 저장합니다.
3. 같은 이름 shop 을 rel-b 에도 설치합니다.
4. --history-max 3 으로 네 번 업그레이드해 옛 리비전이 사라지는 것을 봅니다.
5. helm get values 와 helm get manifest 결과를 /root/hs-rel/out 에 저장합니다.
6. rel-b 의 릴리스를 --keep-history 로 지우고 기록을 저장합니다.
7. 지운 릴리스를 롤백으로 되살립니다.
8. /root/hs-rel/out/report.txt 에 일곱 줄로 정리합니다.
참고
- 시크릿을 풀 때
base64 -d는 두 번 입니다. 쿠버네티스가 한 겹, helm list는 기본값이deployed만 보여 줍니다. 지워진 것이나 갇힌 것을- 흔한 실수 하나는 6단계에서
--keep-history를 빠뜨리는 것입니다. 그러면 - 또 하나는 5단계에서
--all을 붙여 받는 것입니다. 그러면 차트 기본값이
helm 이 또 한 겹 인코딩합니다.
보려면 -a 를 붙입니다.
7단계에서 되살릴 것이 없습니다.
섞여 들어와 "사람이 무엇을 넣었나" 를 알 수 없게 됩니다.
단계 8개
- 차트를 만들고 이름을 붙여 배포한다
- 릴리스가 저장된 시크릿을 풀어 본다
- 같은 이름의 릴리스를 다른 네임스페이스에 하나 더
- 보관 창을 줄여 옛 리비전이 사라지는 것을 본다
- 이 릴리스에 실제로 들어간 값과 매니페스트를 꺼낸다
- 기록을 남기고 지운다
- 지운 릴리스를 되살린다
- 일곱 단계를 숫자로 정리한다