CNPA — Cloud Native Platform Engineering Associate
Watch the API Server Actually Reject
한국어 원문으로 표시합니다.
이 실습은 진짜 API 서버에서 돕니다
CRD 는 "API 서버가 이미 가진 능력을 내 타입에 빌려 준다" 는 물건입니다. 그 능력이란 스키마 검증 · 기본값 · RBAC · 감사 · watch 입니다.
그런데 가짜 클러스터에는 그 능력이 없습니다. 무엇을 넣어도 받아 주므로 잘못된 값이 거절되는 것도, 기본값이 채워지는 것도 볼 수 없었습니다. 거절당해 봐야 계약이 무엇인지 압니다.
처음 뜨는 데 2분쯤 걸립니다.
목표
개발자에게 줄 플랫폼 API 를 하나 설계하고, 그것이 실제로 담장 노릇을 하는지 확인합니다.
단계
- CRD 를 만들고 API 서버가 그것을 받아들이는 것을
/root/cnpa/crd.txt에 담으세요. - 스키마가 잘못된 값을 거절하는 것을
/root/cnpa/validate.txt에 담으세요. - 기본값이 채워지는 것을
/root/cnpa/defaults.txt에 담으세요. kubectl get이 쓸 만하게 보이도록 출력 열을 붙여/root/cnpa/columns.txt에 담으세요.- RBAC 으로 개발자가 할 수 있는 일을 정하고
/root/cnpa/rbac.txt에 담으세요. - 쿼터로 자원의 담장을 세우고
/root/cnpa/quota.txt에 담으세요. - 배포 원장에서 DORA 지표를 계산해
/root/cnpa/dora.txt에 담으세요. /root/cnpa/report.md에crd_kind=,rejected=yes,deploy_freq=세 줄과 설명을 쓰세요.
참고
kubectl explain이 CRD 의 스키마를 읽어 줍니다. 문서를 따로 쓰지 않아도 되는 이유입니다.- 거절 메시지를 그대로 남기세요. 그것이 계약의 증거입니다.
- 흔한 실수:
x-kubernetes-preserve-unknown-fields: true를 넣는 것. 잘라내기도 검증도 통째로 꺼 버립니다. - 흔한 실수:
additionalProperties: false를 쓰는 것.properties와 함께 쓸 수 없고, 쓸 필요도 없습니다. - 흔한 실수: 기본값을 컨트롤러에서 채우는 것. API 서버가 채우면
kubectl get -o yaml에 바로 보입니다.
내 타입을 API 에 등록한다
CRD 를 만들고 API 서버가 그것을 받아들이는 것을 /root/cnpa/crd.txt 에 담으세요.
group·names·versions 셋이 필요합니다. served 와 storage 도 봐 두세요.
거절당해 봐야 계약을 안다
스키마가 잘못된 값을 거절하는 것을 /root/cnpa/validate.txt 에 담으세요.
필수 필드를 빼 보고, 타입을 틀려 보고, 없는 필드를 넣어 보세요.
빠뜨린 값을 API 서버가 채운다
기본값이 채워지는 것을 /root/cnpa/defaults.txt 에 담으세요.
default: 를 스키마에 두면 저장 시점에 채워집니다. kubectl get -o yaml 로 확인하세요.
kubectl get 이 쓸 만해야 쓰인다
kubectl get 이 쓸 만하게 보이도록 출력 열을 붙여 /root/cnpa/columns.txt 에 담으세요.
additionalPrinterColumns 를 versions 아래에 둡니다.
개발자가 할 수 있는 일을 정한다
RBAC 으로 개발자가 할 수 있는 일을 정하고 /root/cnpa/rbac.txt 에 담으세요.
CRD 도 다른 자원과 똑같이 RBAC 이 걸립니다. kubectl auth can-i --as 로 확인하세요.
자원의 담장
쿼터로 자원의 담장을 세우고 /root/cnpa/quota.txt 에 담으세요.
ResourceQuota 는 네임스페이스 전체의 합을 막고, LimitRange 는 개별 파드의 기본값과 상한을 정합니다.
지표는 계산에서 갈린다
배포 원장에서 DORA 지표를 계산해 /root/cnpa/dora.txt 에 담으세요.
배포 원장에서 네 지표를 직접 계산하세요. 정의가 아니라 무엇을 세느냐가 답을 바꿉니다.
무엇을 배웠나
/root/cnpa/report.md 에 crd_kind=, rejected=yes, deploy_freq= 세 줄과 설명을 쓰세요.
crd_kind=, rejected=yes, deploy_freq= 세 줄과 설명을 쓰세요.