5.4.3. openshift-storage 네임스페이스에서 레거시 애플리케이션 데이터에 액세스


MCG(Multicloud Object Gateway)를 사용하는 경우 데이터가 openshift-storage 네임스페이스에 있는 PVC(영구 볼륨 클레임) 기능을 사용해야 합니다. 거의 모든 경우에 액세스해야 하는 데이터는 openshift-storage 네임스페이스에 없지만 레거시 애플리케이션에서 사용하는 네임스페이스에 있습니다.

다른 네임스페이스에 저장된 데이터에 액세스하려면 openshift-storage 네임스페이스에서 레거시 애플리케이션이 사용하는 동일한 CephFS 볼륨을 가리키는 PVC를 생성해야 합니다.

절차

  1. scc 로 애플리케이션 네임스페이스를 표시합니다.

    $ oc get ns <application_namespace> -o yaml | grep scc
    <application_namespace>

    애플리케이션 네임스페이스의 이름을 지정합니다.

    예 5.1. 예제

    $ oc get ns testnamespace -o yaml | grep scc

    예 5.2. 출력 예

    openshift.io/sa.scc.mcs: s0:c26,c5
    openshift.io/sa.scc.supplemental-groups: 1000660000/10000
    openshift.io/sa.scc.uid-range: 1000660000/10000
  2. 애플리케이션 네임스페이스로 이동합니다.

    $ oc project <application_namespace>

    예 5.3. 예제

    $ oc project testnamespace
  3. MCG NSFS 기능을 사용하여 noobaa S3 끝점에서 사용할 Pod에 ReadWriteMany(RWX) PVC가 마운트되었는지 확인합니다.

    $ oc get pvc

    예 5.4. 출력 예

    NAME                                               STATUS VOLUME
    CAPACITY ACCESS MODES STORAGECLASS              AGE
    cephfs-write-workload-generator-no-cache-pv-claim  Bound  pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a
    10Gi     RWX          ocs-storagecluster-cephfs 12s
    $ oc get pod

    예 5.5. 출력 예

    NAME                                                READY   STATUS              RESTARTS   AGE
    cephfs-write-workload-generator-no-cache-1-cv892    1/1     Running             0          11s
  4. Pod 내에서 영구 볼륨(PV)의 마운트 지점을 확인합니다.

    1. Pod에서 PV의 볼륨 이름을 가져옵니다.

      $ oc get pods <pod_name> -o jsonpath='{.spec.volumes[]}'
      <pod_name>

      Pod 이름을 지정합니다.

      예 5.6. 예제

      $ oc get pods cephfs-write-workload-generator-no-cache-1-cv892 -o jsonpath='{.spec.volumes[]}'

      예 5.7. 출력 예

      {"name":"app-persistent-storage","persistentVolumeClaim":{"claimName":"cephfs-write-workload-generator-no-cache-pv-claim"}}

      이 예에서 PVC의 볼륨 이름은 cephfs-write-workload-generator-no-cache-pv-claim 입니다.

    2. Pod의 모든 마운트를 나열하고 이전 단계에서 식별한 볼륨의 마운트 지점을 확인합니다.

      $ oc get pods <pod_name> -o jsonpath='{.spec.containers[].volumeMounts}'

      예 5.8. 예제

      $ oc get pods cephfs-write-workload-generator-no-cache-1-cv892 -o jsonpath='{.spec.containers[].volumeMounts}'

      예 5.9. 출력 예

      [{"mountPath":"/mnt/pv","name":"app-persistent-storage"},{"mountPath":"/var/run/secrets/kubernetes.io/serviceaccount","name":"kube-api-access-8tnc5","readOnly":true}]
  5. Pod에서 RWX PV의 마운트 지점을 확인합니다.

    $ oc exec -it <pod_name> -- df <mount_path>
    <mount_path>

    이전 단계에서 확인한 마운트 지점의 경로를 지정합니다.

    예 5.10. 예제

    $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- df /mnt/pv

    예 5.11. 출력 예

    main
    Filesystem
    1K-blocks Used Available  Use%  Mounted on
    172.30.202.87:6789,172.30.120.254:6789,172.30.77.247:6789:/volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c
    10485760  0    10485760   0%    /mnt/pv
  6. UID 및 SELinux 레이블이 레거시 네임스페이스가 사용하는 것과 같은지 확인합니다.

    $ oc exec -it <pod_name> -- ls -latrZ <mount_path>

    예 5.12. 예제

    $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- ls -latrZ /mnt/pv/

    예 5.13. 출력 예

    total 567
    drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5      2 May 25 06:35 .
    -rw-r--r--. 1 1000660000 root system_u:object_r:container_file_t:s0:c26,c5 580138 May 25 06:35 fs_write_cephfs-write-workload-generator-no-cache-1-cv892-data.log
    drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5     30 May 25 06:35 ..
  7. openshift-storage 네임스페이스에서 액세스할 수 있도록 하려면 레거시 애플리케이션 RWX PV의 정보를 가져옵니다.

    $ oc get pv | grep <pv_name>
    <pv_name>

    PV 이름을 지정합니다.

    예 5.14. 예제

    $ oc get pv | grep pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a

    예 5.15. 출력 예

    pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a   10Gi       RWX            Delete           Bound    testnamespace/cephfs-write-workload-generator-no-cache-pv-claim   ocs-storagecluster-cephfs              47s
  8. openshift-storage 네임스페이스에서 PVC에 액세스하여 하나 이상의 noobaa-endpoint Pod가 PVC에 액세스할 수 있도록 합니다.

    1. volumeAttributes 에서 subvolumePathvolumeHandle 의 값을 찾습니다. 레거시 애플리케이션 PV의 YAML 설명에서 이러한 값을 가져올 수 있습니다.

      $ oc get pv <pv_name> -o yaml

      예 5.16. 예제

      $ oc get pv pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a -o yaml

      예 5.17. 출력 예

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        annotations:
          pv.kubernetes.io/provisioned-by: openshift-storage.cephfs.csi.ceph.com
        creationTimestamp: "2022-05-25T06:27:49Z"
        finalizers:
        - kubernetes.io/pv-protection
        name: pvc-aa58fb91-c3d2-475b-bbee-68452a613e1a
        resourceVersion: "177458"
        uid: 683fa87b-5192-4ccf-af2f-68c6bcf8f500
      spec:
        accessModes:
        - ReadWriteMany
        capacity:
          storage: 10Gi
        claimRef:
          apiVersion: v1
          kind: PersistentVolumeClaim
          name: cephfs-write-workload-generator-no-cache-pv-claim
          namespace: testnamespace
          resourceVersion: "177453"
          uid: aa58fb91-c3d2-475b-bbee-68452a613e1a
        csi:
          controllerExpandSecretRef:
            name: rook-csi-cephfs-provisioner
            namespace: openshift-storage
          driver: openshift-storage.cephfs.csi.ceph.com
          nodeStageSecretRef:
            name: rook-csi-cephfs-node
            namespace: openshift-storage
          volumeAttributes:
            clusterID: openshift-storage
            fsName: ocs-storagecluster-cephfilesystem
            storage.kubernetes.io/csiProvisionerIdentity: 1653458225664-8081-openshift-storage.cephfs.csi.ceph.com
            subvolumeName: csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213
            subvolumePath: /volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c
          volumeHandle: 0001-0011-openshift-storage-0000000000000001-cc416d9e-dbf3-11ec-b286-0a580a810213
        persistentVolumeReclaimPolicy: Delete
        storageClassName: ocs-storagecluster-cephfs
        volumeMode: Filesystem
      status:
        phase: Bound
    2. 이전 단계에서 식별한 subvolumePathvolumeHandle 값을 사용하여 기존 애플리케이션 PV와 동일한 CephFS 볼륨을 가리키는 openshift-storage 네임스페이스에 새 PV 및 PVC 오브젝트를 생성합니다.

      예 5.18. YAML 파일 예

      $ cat << EOF >> pv-openshift-storage.yaml
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: cephfs-pv-legacy-openshift-storage
      spec:
        storageClassName: ""
        accessModes:
        - ReadWriteMany
        capacity:
          storage: 10Gi     
      1
      
        csi:
          driver: openshift-storage.cephfs.csi.ceph.com
          nodeStageSecretRef:
            name: rook-csi-cephfs-node
            namespace: openshift-storage
          volumeAttributes:
          # Volume Attributes can be copied from the Source testnamespace PV
            "clusterID": "openshift-storage"
            "fsName": "ocs-storagecluster-cephfilesystem"
            "staticVolume": "true"
          # rootpath is the subvolumePath: you copied from the Source testnamespace PV
            "rootPath": /volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c
          volumeHandle: 0001-0011-openshift-storage-0000000000000001-cc416d9e-dbf3-11ec-b286-0a580a810213-clone   
      2
      
        persistentVolumeReclaimPolicy: Retain
        volumeMode: Filesystem
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: cephfs-pvc-legacy
        namespace: openshift-storage
      spec:
        storageClassName: ""
        accessModes:
        - ReadWriteMany
        resources:
          requests:
            storage: 10Gi     
      3
      
        volumeMode: Filesystem
        # volumeName should be same as PV name
        volumeName: cephfs-pv-legacy-openshift-storage
      EOF
      1
      openshift-storage 네임스페이스에서 생성하는 PV의 스토리지 용량은 원래 PV와 동일해야 합니다.
      2
      openshift-storage 에서 생성하는 대상 PV의 볼륨 핸들에는 원래 애플리케이션 PV와 다른 핸들이 있어야 합니다(예: 볼륨 처리 끝에 -clone 추가).
      3
      openshift-storage 네임스페이스에서 생성하는 PVC의 스토리지 용량은 원래 PVC와 동일해야 합니다.
    3. 이전 단계에서 지정한 YAML 파일을 사용하여 openshift-storage 네임스페이스에 PV 및 PVC를 생성합니다.

      $ oc create -f <YAML_file>
      <YAML_file>

      YAML 파일의 이름을 지정합니다.

      예 5.19. 예제

      $ oc create -f pv-openshift-storage.yaml

      예 5.20. 출력 예

      persistentvolume/cephfs-pv-legacy-openshift-storage created
      persistentvolumeclaim/cephfs-pvc-legacy created
    4. openshift-storage 네임스페이스에서 PVC를 사용할 수 있는지 확인합니다.

      $ oc get pvc -n openshift-storage

      예 5.21. 출력 예

      NAME                                  STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
      cephfs-pvc-legacy                     Bound    cephfs-pv-legacy-openshift-storage         10Gi       RWX                                          14s
    5. openshift-storage 프로젝트로 이동합니다.

      $ oc project openshift-storage

      예 5.22. 출력 예

      Now using project "openshift-storage" on server "https://api.cluster-5f6ng.5f6ng.sandbox65.opentlc.com:6443".
    6. NSFS 네임스페이스 저장소를 생성합니다.

      $ noobaa namespacestore create nsfs <nsfs_namespacestore> --pvc-name='<cephfs_pvc_name>' --fs-backend='CEPH_FS'
      <nsfs_namespacestore>
      NSFS 네임스페이스 저장소의 이름을 지정합니다.
      <cephfs_pvc_name>

      openshift-storage 네임스페이스에서 CephFS PVC의 이름을 지정합니다.

      예 5.23. 예제

      $ noobaa namespacestore create nsfs legacy-namespace --pvc-name='cephfs-pvc-legacy' --fs-backend='CEPH_FS'
    7. noobaa-endpoint Pod가 다시 시작되고 NSFS 네임스페이스 저장소에서 PVC를 성공적으로 마운트하십시오(예: /nsfs/legacy-namespace 마운트 지점).

      $ oc exec -it <noobaa_endpoint_pod_name> -- df -h /nsfs/<nsfs_namespacestore>
      <noobaa_endpoint_pod_name>

      noobaa-endpoint Pod의 이름을 지정합니다.

      예 5.24. 예제

      $ oc exec -it noobaa-endpoint-5875f467f5-546c6 -- df -h /nsfs/legacy-namespace

      예 5.25. 출력 예

      Filesystem                                                                                                                                                Size  Used Avail Use% Mounted on
      172.30.202.87:6789,172.30.120.254:6789,172.30.77.247:6789:/volumes/csi/csi-vol-cc416d9e-dbf3-11ec-b286-0a580a810213/edcfe4d5-bdcb-4b8e-8824-8a03ad94d67c   10G     0   10G   0% /nsfs/legacy-namespace
    8. MCG 사용자 계정을 생성합니다.

      $ noobaa account create <user_account> --full_permission --allow_bucket_create=true --new_buckets_path='/' --nsfs_only=true --nsfs_account_config=true --gid <gid_number> --uid <uid_number> --default_resource='legacy-namespace'
      <user_account>
      MCG 사용자 계정의 이름을 지정합니다.
      <gid_number>
      GID 번호를 지정합니다.
      <uid_number>

      UID 번호를 지정합니다.

      예 5.26. 예제

      중요

      레거시 애플리케이션의 것과 동일한 UIDGID 를 사용합니다. 이전 출력에서 찾을 수 있습니다.

      $ noobaa account create leguser --full_permission --allow_bucket_create=true --new_buckets_path='/' --nsfs_only=true --nsfs_account_config=true --gid 0 --uid 1000660000 --default_resource='legacy-namespace'
    9. MCG 버킷을 만듭니다.

      1. 레거시 애플리케이션 Pod의 CephFS PV 및 PVC에서 NSFS 공유 내에 S3 전용 폴더를 생성합니다.

        $ oc exec -it <pod_name> -- mkdir <mount_path>/nsfs

        예 5.27. 예제

        $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- mkdir /mnt/pv/nsfs
      2. nsfs/ 경로를 사용하여 MCG 버킷을 생성합니다.

        $ noobaa api bucket_api create_bucket '{
          "name": "<bucket_name>",
          "namespace":{
            "write_resource": { "resource": "<nsfs_namespacestore>", "path": "nsfs/" },
            "read_resources": [ { "resource": "<nsfs_namespacestore>", "path": "nsfs/" }]
          }
        }'

        예 5.28. 예제

        $ noobaa api bucket_api create_bucket '{
          "name": "legacy-bucket",
          "namespace":{
            "write_resource": { "resource": "legacy-namespace", "path": "nsfs/" },
            "read_resources": [ { "resource": "legacy-namespace", "path": "nsfs/" }]
          }
        }'
    10. 레거시 애플리케이션 및 openshift-storage 네임스페이스의 PVC에 있는 폴더의 SELinux 레이블을 확인합니다.

      $ oc exec -it <noobaa_endpoint_pod_name> -n openshift-storage -- ls -ltraZ /nsfs/<nsfs_namespacstore>

      예 5.29. 예제

      $ oc exec -it noobaa-endpoint-5875f467f5-546c6 -n openshift-storage -- ls -ltraZ /nsfs/legacy-namespace

      예 5.30. 출력 예

      total 567
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c0,c26      2 May 25 06:35 .
      -rw-r--r--. 1 1000660000 root system_u:object_r:container_file_t:s0:c0,c26 580138 May 25 06:35 fs_write_cephfs-write-workload-generator-no-cache-1-cv892-data.log
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c0,c26     30 May 25 06:35 ..
      $ oc exec -it <pod_name> -- ls -latrZ <mount_path>

      예 5.31. 예제

      $ oc exec -it cephfs-write-workload-generator-no-cache-1-cv892 -- ls -latrZ /mnt/pv/

      예 5.32. 출력 예

      total 567
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5      2 May 25 06:35 .
      -rw-r--r--. 1 1000660000 root system_u:object_r:container_file_t:s0:c26,c5 580138 May 25 06:35 fs_write_cephfs-write-workload-generator-no-cache-1-cv892-data.log
      drwxrwxrwx. 3 root       root system_u:object_r:container_file_t:s0:c26,c5     30 May 25 06:35 ..

      이 예제에서는 SELinux 레이블이 동일하지 않아 권한 거부 또는 액세스 문제가 발생하는 것을 확인할 수 있습니다.

  9. 레거시 애플리케이션 및 openshift-storage 포드에서 파일에서 동일한 SELinux 레이블을 사용하는지 확인합니다.

    다음 두 가지 방법 중 하나를 수행할 수 있습니다.

  10. NSFS 네임스페이스 저장소를 삭제합니다.

    1. MCG 버킷을 삭제합니다.

      $ noobaa bucket delete <bucket_name>

      예 5.33. 예제

      $ noobaa bucket delete legacy-bucket
    2. MCG 사용자 계정을 삭제합니다.

      $ noobaa account delete <user_account>

      예 5.34. 예제

      $ noobaa account delete leguser
    3. NSFS 네임스페이스 저장소를 삭제합니다.

      $ noobaa namespacestore delete <nsfs_namespacestore>

      예 5.35. 예제

      $ noobaa namespacestore delete legacy-namespace
  11. PV 및 PVC를 삭제합니다.

    중요

    PV 및 PVC를 삭제하기 전에 PV에 정책이 구성되어 있는지 확인합니다.

    $ oc delete pv <cephfs_pv_name>
    $ oc delete pvc <cephfs_pvc_name>
    <cephfs_pv_name>
    레거시 애플리케이션의 CephFS PV 이름을 지정합니다.
    <cephfs_pvc_name>

    레거시 애플리케이션의 CephFS PVC 이름을 지정합니다.

    예 5.36. 예제

    $ oc delete pv cephfs-pv-legacy-openshift-storage
    $ oc delete pvc cephfs-pvc-legacy
  1. sa.scc.mcs 로 현재 openshift-storage 네임스페이스를 표시합니다.

    $ oc get ns openshift-storage -o yaml | grep sa.scc.mcs

    예 5.37. 출력 예

    openshift.io/sa.scc.mcs: s0:c26,c0
  2. 레거시 애플리케이션 네임스페이스를 편집하고 openshift-storage 네임스페이스의 sa.scc.mcs 값을 사용하여 sa.scc.mcs 를 수정합니다.

    $ oc edit ns <appplication_namespace>

    예 5.38. 예제

    $ oc edit ns testnamespace
    $ oc get ns <application_namespace> -o yaml | grep sa.scc.mcs

    예 5.39. 예제

    $ oc get ns testnamespace -o yaml | grep sa.scc.mcs

    예 5.40. 출력 예

    openshift.io/sa.scc.mcs: s0:c26,c0
  3. 레거시 애플리케이션 포드를 다시 시작합니다. 모든 파일의 레이블을 다시 지정하고 이제 SELinux 레이블이 openshift-storage 배포와 일치합니다.
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2026 Red Hat
맨 위로 이동