Quiz: Storage Version Migration
한국어 원문으로 표시합니다.
한 CRD 에서 storage: true 인 버전이 정확히 하나여야 하는 이유는?
- kubectl 이 기본으로 조회할 버전을 하나로 정해야 하기 때문
- 오브젝트는 하나의 표현으로만 etcd 에 저장되기 때문
- 변환 웹훅이 한 번에 한 쌍의 버전만 처리할 수 있기 때문
- RBAC 규칙이 버전별로 나뉘어 있어 충돌을 막아야 하기 때문
spec.conversion.strategy 를 적지 않았을 때 v1alpha1 로 저장된 오브젝트를 v1beta1 로 읽으면?
- 새 버전 스키마의 기본값이 채워진 상태로 돌아온다
- 저장 버전과 다른 버전이라 요청이 거절된다
- apiVersion 딱지만 바뀌고 내용은 저장된 그대로다
- API 서버가 두 스키마를 비교해 없는 필드를 만들어 준다
status.storedVersions 는 무엇을 기록하나?
- 이 CRD 로 실제로 저장된 적이 있는 표현들의 목록
- 지금 클라이언트가 조회할 수 있는 버전들의 목록
- 변환 웹훅이 처리할 수 있다고 신고한 버전들의 목록
- 저장 버전이 바뀐 이력을 시간순으로 남긴 목록
저장 버전을 v1beta1 로 바꾸기만 하고 기존 오브젝트를 다시 쓰지 않았다면?
- 다음 조회 때 API 서버가 자동으로 새 표현으로 저장을 바꿔 준다
- 옛 표현으로 저장된 오브젝트가 그대로 남아 옛 스키마가 계속 필요하다
- 옛 오브젝트가 읽을 수 없는 상태가 되어 조회에서 사라진다
- CRD 의 storage 변경 자체가 오브젝트가 있는 동안에는 거부된다
storedVersions 에 v1alpha1 이 남아 있는 채로 spec.versions 에서 v1alpha1 을 빼면?
- 경고만 남기고 통과하며 이후 조회에서 옛 오브젝트가 빠진다
- 제거가 예약되고 다시 쓰기가 끝난 뒤 자동으로 반영된다
- 요청이 거절되고 그 필드를 지목하는 오류가 돌아온다
- API 서버가 남은 오브젝트를 새 표현으로 자동 이전한 뒤 허용한다
버전에 deprecated: true 와 deprecationWarning 을 붙이면 어떤 일이 생기나?
- 그 버전으로 오는 요청이 거절되고 새 버전을 쓰라는 안내가 나간다
- 그 버전으로 저장된 오브젝트가 읽기 전용으로 바뀐다
- 그 버전이 storedVersions 목록에서 자동으로 빠진다
- 요청은 그대로 처리되고 클라이언트가 경고 문장을 함께 받는다