5장. CSI(Container Storage Interface) 사용
5.1. CSI 볼륨 구성
CSI(Container Storage Interface)를 사용하면 OpenShift Container Platform이 CSI 인터페이스를 영구 스토리지로 구현하는 스토리지 백엔드에서 스토리지를 사용할 수 있습니다.
OpenShift Container Platform 4.17은 CSI 사양 의 버전 1.6.0을 지원합니다.
5.1.1. CSI 아키텍처
CSI 드라이버는 일반적으로 컨테이너 이미지로 제공됩니다. 이러한 컨테이너는 OpenShift Container Platform이 실행되는 위치를 인식하지 못합니다. OpenShift Container Platform에서 CSI 호환 스토리지 백엔드를 사용하려면 클러스터 관리자가 OpenShift Container Platform과 스토리지 드라이버 간의 브리지 역할을 하는 여러 구성 요소를 배포해야 합니다.
다음 다이어그램에서는 OpenShift Container Platform 클러스터의 Pod에서 실행되는 구성 요소에 대한 상위 수준 개요를 설명합니다.
다른 스토리지 백엔드에 대해 여러 CSI 드라이버를 실행할 수 있습니다. 각 드라이버에는 드라이버 및 CSI 등록 기관과 함께 자체 외부 컨트롤러 배포 및 데몬 세트가 필요합니다.
5.1.1.1. 외부 CSI 컨트롤러
외부 CSI 컨트롤러는 5개의 컨테이너가 있는 하나 이상의 Pod를 배포하는 배포입니다.
-
snapshotter 컨테이너는
VolumeSnapshot
및VolumeSnapshotContent
오브젝트를 감시하고VolumeSnapshotContent
오브젝트를 생성 및 삭제해야 합니다. -
resizer 컨테이너는
PersistentVolumeClaim
업데이트를 감시하고PersistentVolumeClaim
오브젝트에 더 많은 스토리지를 요청하는 경우 CSI 끝점에 대해ControllerExpandVolume
작업을 트리거하는 사이드카 컨테이너입니다. -
외부 CSI 연결 컨테이너는 OpenShift Container Platform의
attach
및detach
호출을 CSI 드라이버에 대한 각ControllerPublish
및ControllerUnpublish
호출로 변환합니다. -
OpenShift Container Platform으로부터의
provision
및delete
호출을 CSI 드라이버의 해당CreateVolume
및DeleteVolume
호출로 변환하는 외부 CSI 프로비저너 컨테이너입니다. - CSI 드라이버 컨테이너입니다.
CSI 연결 및 CSI 프로비저너 컨테이너는 UNIX 도메인 소켓을 사용해 CSI 드라이버 컨테이너와 통신하여 CSI 통신이 Pod를 종료하지 않도록 합니다. Pod 외부에서 CSI 드라이버에 액세스할 수 없습니다.
attach
, detach
, provision
, delete
작업에는 일반적으로 스토리지 백엔드에 인증 정보를 사용하려면 CSI 드라이버가 필요합니다. 컴퓨팅 노드의 심각한 보안 위반 시 인증 정보가 사용자 프로세스에 유출되지 않도록 인프라 노드에서 CSI 컨트롤러 Pod를 실행합니다.
외부 연결에서는 타사 attach
또는 detach
작업을 지원하지 않는 CSI 드라이버에서도 실행해야 합니다. 외부 연결은 CSI 드라이버에 ControllerPublish
또는 ControllerUnpublish
작업을 발행하지 않습니다. 그러나 필요한 OpenShift Container Platform 연결 API를 구현하려면 실행해야 합니다.
5.1.1.2. CSI 드라이버 데몬 세트
CSI 드라이버 데몬 세트는 OpenShift Container Platform이 CSI 드라이버에서 제공한 스토리지를 노드에 마운트하고 사용자 워크로드(Pod)에서 PV(영구 볼륨)로 사용할 수 있는 모든 노드에서 Pod를 실행합니다. CSI 드라이버가 설치된 Pod에는 다음 컨테이너가 포함되어 있습니다.
-
CSI 드라이버 등록 기관. CSI 드라이버를 노드에서 실행 중인
openshift-node
서비스에 등록합니다. 노드에서 실행되는openshift-node
프로세스는 노드에서 사용 가능한 UNIX 도메인 소켓을 사용하여 CSI 드라이버와 직접 연결합니다. - CSI 드라이버.
노드에 배포된 CSI 드라이버는 스토리지 백엔드에 최대한 적은 수의 인증 정보가 있어야 합니다. 이러한 호출이 구현된 경우 OpenShift Container Platform은 NodePublish
/NodeUnpublish
및 NodeStage
/NodeUnstage
와 같은 CSI 호출의 노드 플러그인 세트만 사용합니다.
5.1.2. OpenShift Container Platform에서 지원되는 CSI 드라이버
OpenShift Container Platform은 기본적으로 특정 CSI 드라이버를 설치하여 in-tree 볼륨 플러그인에서 사용할 수 없는 사용자 스토리지 옵션을 제공합니다.
지원되는 스토리지 자산에 마운트된 CSI 프로비저닝 영구 볼륨을 생성하기 위해 OpenShift Container Platform은 기본적으로 필요한 CSI 드라이버 Operator, CSI 드라이버 및 필요한 스토리지 클래스를 설치합니다. Operator 및 드라이버의 기본 네임스페이스에 대한 자세한 내용은 특정 CSI Driver Operator 설명서를 참조하십시오.
AWS EFS 및 GCP Filestore CSI 드라이버는 기본적으로 설치되지 않으며 수동으로 설치해야 합니다. AWS EFS CSI 드라이버 설치에 대한 자세한 내용은 AWS Elastic File Service CSI Driver Operator 설정을 참조하십시오. GCP Filestore CSI 드라이버 설치에 대한 자세한 내용은 Google Compute Platform Filestore CSI Driver Operator 를 참조하십시오.
다음 표에서는 OpenShift Container Platform에서 지원하는 OpenShift Container Platform과 볼륨 스냅샷 및 크기 조정과 같은 CSI 기능을 사용하여 설치하는 CSI 드라이버를 설명합니다.
다음 표에 CSI 드라이버가 나열되지 않은 경우 지원되는 CSI 기능을 사용하려면 CSI 스토리지 벤더가 제공한 설치 지침을 따라야 합니다.
CSI 드라이버 | CSI 볼륨 스냅샷 | CSI 복제 | CSI 크기 조정 | 인라인 임시 볼륨 |
---|---|---|---|---|
AWS EBS |
✅ |
|
✅ |
|
AWS EFS |
|
|
|
|
GCP(Google Compute Platform) PD(영구 디스크) |
✅ |
✅ |
✅ |
|
GCP 파일 저장소 |
✅ |
|
✅ |
|
IBM Power® Virtual Server Block |
|
|
✅ |
|
IBM Cloud® Block |
✅[3] |
|
✅[3] |
|
LVM 스토리지 |
✅ |
✅ |
✅ |
|
Microsoft Azure Disk |
✅ |
✅ |
✅ |
|
Microsoft Azure Stack Hub |
✅ |
✅ |
✅ |
|
Microsoft Azure File |
✅[4] |
✅[4] |
✅ |
✅ |
OpenStack Cinder |
✅ |
✅ |
✅ |
|
OpenShift Data Foundation |
✅ |
✅ |
✅ |
|
OpenStack Manila |
✅ |
|
|
|
공유 리소스 |
|
|
|
✅ |
CIFS/SMB |
|
✅ |
|
|
VMware vSphere |
✅[1] |
|
✅[2] |
|
1.
- vCenter Server 및 ESXi 모두에 vSphere 버전 7.0 업데이트 3 이상이 필요합니다.
- fileshare 볼륨을 지원하지 않습니다.
2.
- 오프라인 볼륨 확장: vSphere의 최소 필수 버전은 6.7 업데이트 3 P06입니다.
- 온라인 볼륨 확장: vSphere 최소 필수 버전은 7.0 업데이트 2입니다.
3.
- 오프라인 스냅샷 또는 크기 조정을 지원하지 않습니다. 볼륨은 실행 중인 Pod에 연결해야 합니다.
4.
-
Azure 파일 복제는 NFS 프로토콜을 지원하지 않습니다. SMB 프로토콜을 사용하는
azurefile-csi
스토리지 클래스를 지원합니다. - Azure File 복제 및 스냅샷은 기술 프리뷰 기능입니다.
Azure File CSI 복제 및 스냅샷은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
5.1.3. 동적 프로비저닝
영구 스토리지의 동적 프로비저닝은 CSI 드라이버 및 기본 스토리지 백엔드의 기능에 따라 달라집니다. CSI 드라이버 공급자는 OpenShift Container Platform에서 스토리지 클래스와 구성에 사용 가능한 매개변수를 생성하는 방법을 설명해야 합니다.
동적 프로비저닝을 사용하도록 생성된 스토리지 클래스를 구성할 수 있습니다.
절차
설치된 CSI 드라이버에서 특수 스토리지 클래스가 필요하지 않은 모든 PVC를 프로비저닝하는 기본 스토리지 클래스를 생성합니다.
# oc create -f - << EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <storage-class> 1 annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: <provisioner-name> 2 parameters: EOF
5.1.4. CSI 드라이버 사용 예
다음 예시는 템플릿을 변경하지 않고 기본 MySQL 템플릿을 설치합니다.
사전 요구 사항
- CSI 드라이버가 배포되었습니다.
- 동적 프로비저닝을 위해 스토리지 클래스가 생성되었습니다.
절차
MySQL 템플릿을 생성합니다.
# oc new-app mysql-persistent
출력 예
--> Deploying template "openshift/mysql-persistent" to project default ...
# oc get pvc
출력 예
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mysql Bound kubernetes-dynamic-pv-3271ffcb4e1811e8 1Gi RWO cinder 3s
5.1.5. 볼륨 팝업기
볼륨 팝업은 PVC(영구 볼륨 클레임) 사양의 datasource
필드를 사용하여 미리 채워진 볼륨을 생성합니다.
볼륨 채우기는 현재 활성화되어 있으며 기술 프리뷰 기능으로 지원됩니다. 그러나 OpenShift Container Platform에는 볼륨 팝업기가 제공되지 않습니다.
볼륨 팝업은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
볼륨 팝업기에 대한 자세한 내용은 Kubernetes 볼륨 팝업기를 참조하십시오.