[CKA] Container Storage Interface
Container Storage Interface의 핵심 개념과 구성 방법, 실습 풀이를 정리합니다.
Container Runtime Interface
- 초기 단계
- 도커(Docker)만을 유일한 컨테이너 런타임으로 사용
- 도커 관련 코드가 쿠버네티스 코드에 직접 내장됨
- 변화의 필요성
- Rocket, CRI-O 등 새로운 컨테이너 런타임의 등장
- 다양한 런타임을 지원해야 할 필요성 대두
- 해결책으로서의 CRI
- 쿠버네티스 코드와 독립적인 표준 인터페이스 개발
- 다양한 컨테이너 런타임을 유연하게 지원할 수 있는 확장성 확보
Container Network Interface
마찬가지로 네트워킹 강의에서 다양한 네트워킹 솔루션에 대한 지원을 확장하기 위해 본 것처럼 컨테이너 네트워킹 인터페이스가 도입되었습니다.
새로운 네트워킹 공급업체 또한 마찬가지로 CNI 표준을 기반으로 플러그인을 개발하고 솔루션이 Kubernetes와 함께 작동하도록 만들 수 있습니다.
Container Storage Interface
Container Storage Interface(CSI)는 쿠버네티스와 같은 컨테이너 오케스트레이션 도구가 다양한 스토리지 시스템과 표준화된 방식으로 통신할 수 있게 해주는 범용 인터페이스로, Amazon EBS나 Azure Disk 등 여러 스토리지 공급업체들이 자체 드라이버를 개발하여 제공할 수 있게 하며, 쿠버네티스뿐만 아니라 Cloud Foundry, Mesos 등 다양한 오케스트레이션 플랫폼에서도 동일한 표준으로 활용될 수 있습니다.
쉽게 말해 CSI는 일종의 “만능 어댑터” 역할을 하며 스토리지 제공자들은 자기들만의 드라이버만 만들더라도, 사용자는 어떤 스토리지를 쓰더라도 같은 방식으로 사용 가능하고 이러한 방식으로 쿠버네티스뿐만 아니라 다른 컨테이너 플랫폼에서도 동일하게 사용 가능하도록 만들었습니다.
CSI의 작동 방식은 다음과 같습니다.
- RPC(원격 프로시저 호출) 기반 통신
- 쿠버네티스가 스토리지 드라이버에게 특정 작업을 요청할 때 사용
- 표준화된 방식으로 통신하기 위한 약속된 호출 방식
- 주요 작동 예시
- 볼륨 생성 시:
- 쿠버네티스가 볼륨 생성 RPC 호출
- 볼륨 이름 등 필요한 정보 전달
- 스토리지 드라이버가 실제 저장소에 볼륨 생성
- 결과를 쿠버네티스에 반환
- 볼륨 삭제 시:
- 쿠버네티스가 볼륨 삭제 RPC 호출
- 스토리지 드라이버가 실제 저장소에서 볼륨 제거
- 명확한 규격 정의
- 주고받아야 할 파라미터
- 예상되는 오류 코드
- 모든 세부 사항이 GitHub의 CSI 사양에 문서화되어 있습니다.