5.21. CIFS/SMB CSI Driver Operator
OpenShift Container Platform은 CIFS(Common Internet File System)alect/SMB(Server Message Block) 프로토콜용 CSI(Container Storage Interface) 드라이버를 사용하여 PV(영구 볼륨)를 프로비저닝할 수 있습니다.
CIFS/SMB CSI Driver Operator는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
CSI Operator 및 드라이버를 사용할 때는 영구 스토리지 및 CSI 볼륨 구성에 대해 숙지하는 것이 좋습니다.
CIFS/SMB CSI Driver Operator를 설치한 후 OpenShift Container Platform은 기본적으로 openshift-cluster-csi-drivers
네임스페이스에 Operator 및 드라이버에 대한 해당 Pod를 설치합니다. 이를 통해 CIFS/SMB CSI 드라이버는 CIFS/SMB 공유에 마운트되는 CSI(영구 볼륨)를 생성할 수 있습니다.
-
CIFS/SMB CSI Driver Operator 는 설치 후 PVC(영구 볼륨 클레임)를 생성하는 데 사용할 스토리지 클래스를 생성하지 않습니다. 그러나 동적 프로비저닝을 위해 CIFS/SMB
StorageClass
를 수동으로 만들 수 있습니다. CIFS/SMB CSI Driver Operator는 필요에 따라 스토리지 볼륨을 생성할 수 있도록 하여 동적 볼륨 프로비저닝을 지원합니다. 이렇게 하면 클러스터 관리자가 스토리지를 사전 프로비저닝할 필요가 없습니다. - CIFS/SMB CSI 드라이버 를 사용하면 CIFS/SMB PV를 생성하고 마운트할 수 있습니다.
5.21.1. CSI 정보
스토리지 벤더는 일반적으로 Kubernetes의 일부로 스토리지 드라이버를 제공합니다. CSI(Container Storage Interface) 구현을 통해 타사 공급자는 코어 Kubernetes 코드를 변경하지 않고도 표준 인터페이스를 사용하여 스토리지 플러그인을 제공할 수 있습니다.
CSI Operator는 in-tree 볼륨 플러그인에서 사용할 수 없는 볼륨 스냅샷과 같은 OpenShift Container Platform 사용자 스토리지 옵션을 제공합니다.
5.21.2. 제한
다음 제한 사항은 CIFS(Common Internet File System)/SMB(Server Message Block) CSI(Container Storage Interface) Driver Operator에 적용됩니다.
FIPS 모드는 지원되지 않습니다.
연방 정보 처리 표준(FIPS) 모드가 활성화되면 md4 및 md5의 사용이 비활성화되어 사용자가 ntlm, ntlmv2 또는 ntlmssp 인증을 사용할 수 없습니다. 또한 서명은 md5를 사용하므로 사용할 수 없습니다. FIPS 모드가 활성화되면 이러한 방법을 사용하는 CIFS 마운트가 실패합니다.
HTTP 프록시 구성을 사용하여 클러스터 SMB 서버 외부에 연결하는 것은 CSI 드라이버에서 지원되지 않습니다.
CIFS/SMB는 LAN 프로토콜이며 서브넷으로 라우팅할 수 있지만 WAN을 통해 확장하도록 설계되지 않으며 HTTP 프록시 설정을 지원하지 않습니다.
5.21.3. CIFS/SMB CSI Driver Operator 설치
CIFS/SMB CSI Driver Operator(Red Hat Operator)는 기본적으로 OpenShift Container Platform에 설치되지 않습니다. 다음 절차에 따라 클러스터에서 CIFS/SMB CSI Driver Operator를 설치하고 구성합니다.
사전 요구 사항
- OpenShift Container Platform 웹 콘솔에 액세스합니다.
프로세스
웹 콘솔에서 CIFS/SMB CSI Driver Operator를 설치하려면 다음을 수행합니다.
- 웹 콘솔에 로그인합니다.
CIFS/SMB CSI Operator를 설치합니다.
-
Operators
OperatorHub를 클릭합니다. - 필터 상자에 CIFS/SMB CSI를 입력하여 CIFS/SMB CSI Operator를 찾습니다.
- CIFS/SMB CSI Driver Operator 버튼을 클릭합니다.
- CIFS/SMB CSI Driver Operator 페이지에서 설치를 클릭합니다.
Operator 설치 페이지에서 다음을 확인합니다.
- 클러스터의 모든 네임스페이스(기본값)가 선택됩니다.
- 설치된 네임스페이스는 openshift-cluster-csi-drivers로 설정됩니다.
설치를 클릭합니다.
설치가 완료되면 웹 콘솔의 Installed Operators 섹션에 CIFS/SMB CSI Operator가 나열됩니다.
-
Operators
5.21.4. CIFS/SMB CSI 드라이버 설치
CIFS/SMB CSI(Container Storage Interface) Driver Operator를 설치한 후 CIFS/SMB CSI 드라이버를 설치합니다.
사전 요구 사항
- OpenShift Container Platform 웹 콘솔에 액세스합니다.
- CIFS/SMB CSI Driver Operator가 설치되었습니다.
프로세스
-
Administration
CustomResourceDefinitions ClusterCSIDriver 를 클릭합니다. - Instances 탭에서 Create ClusterCSIDriver를 클릭합니다.
다음 YAML 파일을 사용합니다.
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: smb.csi.k8s.io spec: managementState: Managed
- 생성을 클릭합니다.
다음 조건이 "True" 상태로 변경될 때까지 기다립니다.
-
SambaDriverControllerServiceControllerAvailable
-
SambaDriverNodeServiceControllerAvailable
-
5.21.5. 동적 프로비저닝
CIFS(Common Internet File System) 모음/SMB(Server Message Block) 프로토콜 볼륨의 동적 프로비저닝을 위한 스토리지 클래스를 생성할 수 있습니다. 프로비저닝 볼륨은 스토리지 클래스에 정의된 소스에
PV(영구 볼륨) 이름이 있는 하위 디렉터리를 생성합니다.
사전 요구 사항
- CIFS/SMB CSI Driver Operator 및 드라이버 설치
- 실행 중인 OpenShift Container Platform 클러스터에 로그인되어 있습니다.
SMB 서버를 설치하고 서버에 대한 다음 정보를 알고 있습니다.
- 호스트 이름
- 공유 이름
- 사용자 이름 및 암호
프로세스
동적 프로비저닝을 설정하려면 다음을 수행합니다.
다음 예제 YAML 파일과 함께 다음 명령을 사용하여 Samba 서버에 액세스할 수 있는 보안을 생성합니다.
$ oc create -f <file_name>.yaml
시크릿 예제 YAML 파일
apiVersion: v1 kind: Secret metadata: name: smbcreds 1 namespace: samba-server 2 stringData: username: <username> 3 password: <password> 4
다음 예제 YAML 파일로 다음 명령을 실행하여 스토리지 클래스를 생성합니다.
$ oc create -f <sc_file_name>.yaml 1
- 1
- 스토리지 클래스 YAML 파일의 이름입니다.
스토리지 클래스 예제 YAML 파일
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <sc_name> 1 provisioner: smb.csi.k8s.io parameters: source: //<hostname>/<shares> 2 csi.storage.k8s.io/provisioner-secret-name: smbcreds 3 csi.storage.k8s.io/provisioner-secret-namespace: samba-server 4 csi.storage.k8s.io/node-stage-secret-name: smbcreds 5 csi.storage.k8s.io/node-stage-secret-namespace: samba-server 6 reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=1001 - gid=1001
PVC를 생성합니다.
다음 예제 YAML 파일로 다음 명령을 실행하여 PVC를 생성합니다.
$ oc create -f <pv_file_name>.yaml 1
- 1
- PVC YAML 파일의 이름입니다.
PVC YAML 파일의 예
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> 1 spec: accessModes: - ReadWriteMany resources: requests: storage: <storage_amount> 2 storageClassName: <sc_name> 3
다음 명령을 실행하여 PVC가 생성되었고 "Bound" 상태에 있는지 확인합니다.
$ oc describe pvc <pvc_name> 1
- 1
- 이전 단계에서 생성한 PVC의 이름입니다.
출력 예
Name: pvc-test Namespace: default StorageClass: samba Status: Bound 1 ...
- 1
- PVC는 Bound 상태입니다.
5.21.6. 정적 프로비저닝
정적 프로비저닝을 사용하여 기존 SMB(Server Message Block Protocol) 공유를 사용하기 위해 PV(영구 볼륨) 및 PVC(영구 볼륨 클레임)를 생성할 수 있습니다.
사전 요구 사항
- OpenShift Container Platform 웹 콘솔에 액세스합니다.
- CIFS/SMB CSI Driver Operator 및 드라이버 설치
SMB 서버를 설치하고 서버에 대한 다음 정보를 알고 있습니다.
- 호스트 이름
- 공유 이름
- 사용자 이름 및 암호
프로세스
정적 프로비저닝을 설정하려면 다음을 수행합니다.
다음 예제 YAML 파일과 함께 다음 명령을 사용하여 Samba 서버에 액세스할 수 있는 보안을 생성합니다.
$ oc create -f <file_name>.yaml
시크릿 예제 YAML 파일
apiVersion: v1 kind: Secret metadata: name: smbcreds 1 namespace: samba-server 2 stringData: username: <username> 3 password: <password> 4
다음 예제 YAML 파일로 다음 명령을 실행하여 PV를 생성합니다.
$ oc create -f <pv_file_name>.yaml 1
- 1
- PV YAML 파일의 이름입니다.
PV YAML 파일의 예
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: smb.csi.k8s.io name: <pv_name> 1 spec: capacity: storage: 100Gi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" mountOptions: - dir_mode=0777 - file_mode=0777 csi: driver: smb.csi.k8s.io volumeHandle: smb-server.default.svc.cluster.local/share/ 2 volumeAttributes: source: //<hostname>/<shares> 3 nodeStageSecretRef: name: <secret_name_shares> 4 namespace: <namespace> 5
PVC를 생성합니다.
다음 예제 YAML 파일로 다음 명령을 실행하여 PVC를 생성합니다.
$ oc create -f <pv_file_name>.yaml 1
- 1
- PVC YAML 파일의 이름입니다.
PVC YAML 파일의 예
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> 1 spec: accessModes: - ReadWriteMany resources: requests: storage: <storage_amount> 2 storageClassName: "" volumeName: <pv_name> 3
다음 명령을 실행하여 PVC가 생성되었고 "Bound" 상태에 있는지 확인합니다.
$ oc describe pvc <pvc_name> 1
- 1
- 이전 단계에서 생성한 PVC의 이름입니다.
출력 예
Name: pvc-test Namespace: default StorageClass: Status: Bound 1 ...
- 1
- PVC는 Bound 상태입니다.
다음 예제 YAML 파일로 다음 명령을 실행하여 Linux에 배포를 생성합니다.
참고다음 배포는 이전 단계에서 생성된 PV 및 PVC를 사용하는 데 필요하지 않습니다. 이는 사용할 수 있는 방법의 예입니다.
$ oc create -f <deployment_file_name>.yaml 1
- 1
- 배포 YAML 파일의 이름입니다.
배포 YAML 파일의 예
apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx name: <deployment_name> 1 spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx name: <deployment_name> 2 spec: nodeSelector: "kubernetes.io/os": linux containers: - name: <deployment_name> 3 image: quay.io/centos/centos:stream8 command: - "/bin/bash" - "-c" - set -euo pipefail; while true; do echo $(date) >> <mount_path>/outfile; sleep 1; done 4 volumeMounts: - name: <vol_mount_name> 5 mountPath: <mount_path> 6 readOnly: false volumes: - name: <vol_mount_name> 7 persistentVolumeClaim: claimName: <pvc_name> 8 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 type: RollingUpdate
컨테이너에서
df -h
명령을 실행하여 설정을 확인합니다.$ oc exec -it <pod_name> -- df -h 1
- 1
- Pod의 이름입니다.
출력 예
Filesystem Size Used Avail Use% Mounted on ... /dev/sda1 97G 21G 77G 22% /etc/hosts //20.43.191.64/share 97G 21G 77G 22% /mnt/smb ...
이 예제에는 CIFS(Common Internet File System) 파일 시스템으로 마운트된
/mnt/smb
디렉터리가 있습니다.