6.20. CIFS/SMB CSI 드라이버 운영자


OpenShift Container Platform은 CIFS(Common Internet File System) 방언/SMB(Server Message Block) 프로토콜에 대한 CSI(Container Storage Interface) 드라이버를 사용하여 영구 볼륨(PV)을 프로비저닝할 수 있습니다.

CSI 운영자와 드라이버를 사용할 때는 영구 저장소CSI 볼륨 구성 에 익숙해야 합니다.

CIFS/SMB CSI Driver Operator를 설치한 후, OpenShift Container Platform은 기본적으로 openshift-cluster-csi-drivers 네임스페이스에 Operator와 드라이버에 해당하는 Pod를 설치합니다. 이를 통해 CIFS/SMB CSI 드라이버는 CIFS/SMB 공유에 마운트되는 CSI 프로비저닝 영구 볼륨(PV)을 생성할 수 있습니다.

  • CIFS/SMB CSI 드라이버 운영자는 설치된 후 기본적으로 영구 볼륨 클레임(PVC)을 생성하는 데 사용할 스토리지 클래스를 생성하지 않습니다. 하지만 동적 프로비저닝을 위해 CIFS/SMB StorageClass를 수동으로 생성할 수 있습니다 . CIFS/SMB CSI 드라이버 운영자는 스토리지 볼륨을 필요에 따라 생성할 수 있도록 하여 동적 볼륨 프로비저닝을 지원합니다. 이렇게 하면 클러스터 관리자가 스토리지를 미리 프로비저닝할 필요가 없습니다.
  • CIFS/SMB CSI 드라이버를 사용하면 CIFS/SMB PV를 만들고 마운트할 수 있습니다.

6.20.1. CSI 정보

스토리지 벤더는 일반적으로 Kubernetes의 일부로 스토리지 드라이버를 제공합니다. 컨테이너 스토리지 인터페이스(CSI)를 구현하면 타사 공급업체는 Kubernetes의 핵심 코드를 변경하지 않고도 표준 인터페이스를 사용하여 스토리지 플러그인을 제공할 수 있습니다.

CSI 운영자는 OpenShift Container Platform 사용자에게 트리 내 볼륨 플러그인으로는 불가능한 볼륨 스냅샷과 같은 저장 옵션을 제공합니다.

6.20.2. 제한

다음 제한 사항은 CIFS(Common Internet File System)/SMB(Server Message Block) CSI(Container Storage Interface) 드라이버 운영자에게 적용됩니다.

  • FIPS 모드는 지원되지 않습니다.

    FIPS(연방 정보 처리 표준) 모드가 활성화되면 md4 및 md5 사용이 비활성화되어 사용자가 ntlm, ntlmv2 또는 ntlmssp 인증을 사용할 수 없습니다. 또한 md5를 사용하기 때문에 서명을 사용할 수 없습니다. FIPS 모드가 활성화되어 있으면 이러한 방법을 사용하는 모든 CIFS 마운트가 실패합니다.

  • CSI 드라이버는 클러스터 외부 SMB 서버에 연결하기 위해 HTTP 프록시 구성을 지원하지 않습니다.

    CIFS/SMB는 LAN 프로토콜이기 때문에 서브넷으로 라우팅할 수는 있지만 WAN을 통해 확장하도록 설계되지 않았으며 HTTP 프록시 설정을 지원하지 않습니다.

  • CIFS/SMB CSI 드라이버 운영자는 Windows 분산 파일 시스템(DFS)을 지원 하지 않습니다 .
  • Kerberos 인증은 지원되지 않습니다.
  • SMB CSI는 Samba v4.21.2와 Windows Server 2019, Windows Server 2022에서 테스트되었습니다.

6.20.3. CIFS/SMB CSI 드라이버 운영자 설치

CIFS/SMB CSI Driver Operator(Red Hat Operator)는 기본적으로 OpenShift Container Platform에 설치되지 않습니다. 다음 절차에 따라 클러스터에 CIFS/SMB CSI 드라이버 운영자를 설치하고 구성하세요.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 액세스합니다.

프로세스

웹 콘솔에서 CIFS/SMB CSI 드라이버 운영자를 설치하려면:

  1. 웹 콘솔에 로그인합니다.
  2. CIFS/SMB CSI Operator를 설치하세요.

    1. Operators OperatorHub를 클릭합니다.
    2. 필터 상자에 CIFS/SMB CSI를 입력하여 CIFS/SMB CSI 연산자를 찾습니다.
    3. CIFS/SMB CSI 드라이버 운영자 버튼을 클릭합니다.
    4. CIFS/SMB CSI 드라이버 운영자 페이지에서 설치를 클릭합니다.
    5. Operator 설치 페이지에서 다음을 확인합니다.

      • 클러스터의 모든 네임스페이스(기본값)가 선택됩니다.
      • 설치된 네임스페이스openshift-cluster-csi-drivers로 설정됩니다.
    6. 설치를 클릭합니다.

      설치가 완료되면 CIFS/SMB CSI Operator가 웹 콘솔의 설치된 운영자 섹션에 나열됩니다.

6.20.4. CIFS/SMB CSI 드라이버 설치

CIFS/SMB 컨테이너 스토리지 인터페이스(CSI) 드라이버 오퍼레이터를 설치한 후 CIFS/SMB CSI 드라이버를 설치합니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 액세스합니다.
  • CIFS/SMB CSI 드라이버 운영자가 설치되었습니다.

프로세스

  1. 관리 CustomResourceDefinitions ClusterCSIDriver를 클릭합니다.
  2. Instances 탭에서 Create ClusterCSIDriver를 클릭합니다.
  3. 다음 YAML 파일을 사용합니다.

    apiVersion: operator.openshift.io/v1
    kind: ClusterCSIDriver
    metadata:
        name: smb.csi.k8s.io
    spec:
      managementState: Managed
    Copy to Clipboard Toggle word wrap
  4. 생성을 클릭합니다.
  5. 다음 조건이 "참" 상태로 변경될 때까지 기다리세요.

    • SambaDriverControllerServiceControllerAvailable
    • SambaDriverNodeServiceControllerAvailable

6.20.5. 동적 프로비저닝

CIFS(Common Internet File System) 방언/SMB(Server Message Block) 프로토콜 볼륨의 동적 프로비저닝을 위한 스토리지 클래스를 생성할 수 있습니다. 볼륨을 프로비저닝하면 스토리지 클래스에 정의된 소스 아래에 영구 볼륨(PV) 이름이 있는 하위 디렉토리가 생성됩니다.

사전 요구 사항

  • CIFS/SMB CSI 드라이버 운영자와 드라이버가 설치되었습니다.
  • 실행 중인 OpenShift Container Platform 클러스터에 로그인했습니다.
  • SMB 서버를 설치했고 서버에 대한 다음 정보를 알고 있습니다.

    • 호스트 이름
    • 공유 이름
    • 사용자 이름과 비밀번호

프로세스

동적 프로비저닝을 설정하려면:

  1. 다음 명령과 예제 YAML 파일을 사용하여 Samba 서버에 액세스하기 위한 비밀을 만듭니다.

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

    비밀 예제 YAML 파일

    apiVersion: v1
    kind: Secret
    metadata:
      name: smbcreds 
    1
    
      namespace: samba-server 
    2
    
    stringData:
      username: <username> 
    3
    
      password: <password> 
    4
    Copy to Clipboard Toggle word wrap

    1
    Samba 서버의 비밀 이름입니다.
    2
    Samba 서버의 Secret에 대한 네임스페이스입니다.
    3
    Samba 서버의 비밀에 대한 사용자 이름입니다.
    4
    Samba 서버의 Secret에 대한 비밀번호입니다.
  2. 다음 예제 YAML 파일로 다음 명령을 실행하여 스토리지 클래스를 생성합니다.

    $ oc create -f <sc_file_name>.yaml 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    1
    저장 클래스의 이름입니다.
    2
    Samba 서버는 클러스터에서 접근할 수 있는 어딘가에 설치되어 있어야 하며, <`hostname>`은 Samba 서버의 호스트 이름이고 <shares>는 내보낸 공유 중에서 서버가 구성한 경로입니다.
    3 5
    이전 단계에서 설정한 Samba 서버의 비밀 이름입니다. csi.storage.k8s.io/provisioner-secret 이 제공되면 source 아래에 PV 이름으로 하위 디렉토리가 생성됩니다.
    4 6
    이전 단계에서 설정한 Samba 서버의 비밀을 위한 네임스페이스입니다.
  3. PVC 만들기:

    1. 다음 예제 YAML 파일을 사용하여 다음 명령을 실행하여 PVC를 만듭니다.

      $ oc create -f <pv_file_name>.yaml 
      1
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap

      1
      PVC의 이름.
      2
      저장 요청 수량.
      3
      이전 단계에서 만든 CIFS/SMB 스토리지 클래스의 이름입니다.
    2. 다음 명령을 실행하여 PVC가 생성되었고 "바인딩" 상태인지 확인하세요.

      $ oc describe pvc <pvc_name> 
      1
      Copy to Clipboard Toggle word wrap
      1
      이전 단계에서 만든 PVC의 이름입니다.

      출력 예

      Name:          pvc-test
      Namespace:     default
      StorageClass:  samba
      Status:        Bound 
      1
      
      ...
      Copy to Clipboard Toggle word wrap

      1
      PVC는 Bound 상태입니다.

6.20.6. 정적 프로비저닝

정적 프로비저닝을 사용하면 기존 SMB(Server Message Block) 프로토콜 공유를 사용하기 위해 영구 볼륨(PV)과 영구 볼륨 클레임(PVC)을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 웹 콘솔에 액세스합니다.
  • CIFS/SMB CSI 드라이버 운영자와 드라이버가 설치되었습니다.
  • SMB 서버를 설치했고 서버에 대한 다음 정보를 알고 있습니다.

    • 호스트 이름
    • 공유 이름
    • 사용자 이름과 비밀번호

프로세스

정적 프로비저닝을 설정하려면:

  1. 다음 명령과 예제 YAML 파일을 사용하여 Samba 서버에 액세스하기 위한 비밀을 만듭니다.

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

    비밀 예제 YAML 파일

    apiVersion: v1
    kind: Secret
    metadata:
      name: smbcreds 
    1
    
      namespace: samba-server 
    2
    
    stringData:
      username: <username> 
    3
    
      password: <password> 
    4
    Copy to Clipboard Toggle word wrap

    1
    Samba 서버의 비밀 이름입니다.
    2
    Samba 서버의 Secret에 대한 네임스페이스입니다.
    3
    Samba 서버의 비밀에 대한 사용자 이름입니다.
    4
    Samba 서버의 Secret에 대한 비밀번호입니다.
  2. 다음 예제 YAML 파일을 사용하여 다음 명령을 실행하여 PV를 만듭니다.

    $ oc create -f <pv_file_name>.yaml 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    1
    PV의 이름입니다.
    2
    volumeHandle 형식: {smb-server-address}#{sub-dir-name}#{share-name}. 이 값이 클러스터의 모든 공유에 대해 고유한지 확인하세요.
    3
    Samba 서버는 클러스터에서 접근할 수 있는 어딘가에 설치되어 있어야 하며, <hostname>은 Samba 서버의 호스트 이름이고 <shares>는 내보낸 공유 중에서 서버가 구성한 경로입니다.
    4
    주식에 대한 비밀의 이름입니다.
    5
    적용 가능한 네임스페이스.
  3. PVC 만들기:

    1. 다음 예제 YAML 파일을 사용하여 다음 명령을 실행하여 PVC를 만듭니다.

      $ oc create -f <pv_file_name>.yaml 
      1
      Copy to Clipboard Toggle word wrap
      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
      Copy to Clipboard Toggle word wrap

      1
      PVC의 이름.
      2
      저장 요청 수량.
      3
      첫 번째 단계의 PV 이름입니다.
    2. 다음 명령을 실행하여 PVC가 생성되었고 "바인딩" 상태인지 확인하세요.

      $ oc describe pvc <pvc_name> 
      1
      Copy to Clipboard Toggle word wrap
      1
      이전 단계에서 만든 PVC의 이름입니다.

      출력 예

      Name:          pvc-test
      Namespace:     default
      StorageClass:
      Status:        Bound 
      1
      
      ...
      Copy to Clipboard Toggle word wrap

      1
      PVC는 Bound 상태입니다.
  4. 다음 예제 YAML 파일을 사용하여 다음 명령을 실행하여 Linux에 배포를 만듭니다.

    참고

    이전 단계에서 만든 PV와 PVC를 사용하는 경우 다음 배포는 필수가 아닙니다. 이는 사용할 수 있는 방법의 예입니다.

    $ oc create -f <deployment_file_name>.yaml 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    1 2 3
    배포의 이름입니다.
    4 6
    볼륨 마운트 경로.
    5 7
    볼륨 마운트의 이름입니다.
    8
    이전 단계에서 생성된 PVC의 이름입니다.
  5. 컨테이너에서 df -h 명령을 실행하여 설정을 확인하세요.

    $ oc exec -it <pod_name> -- df -h 
    1
    Copy to Clipboard Toggle word wrap
    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
    ...
    Copy to Clipboard Toggle word wrap

    이 예에서는 /mnt/smb 디렉토리가 CIFS(Common Internet File System) 파일 시스템으로 마운트되어 있습니다.

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat