5.4.3. openshift-storage 네임스페이스에서 레거시 애플리케이션 데이터에 액세스
MCG(Multicloud Object Gateway)를 사용하는 경우 데이터가 openshift-storage 네임스페이스에 있는 PVC(영구 볼륨 클레임) 기능을 사용해야 합니다. 거의 모든 경우에 액세스해야 하는 데이터는 openshift-storage 네임스페이스에 없지만 레거시 애플리케이션에서 사용하는 네임스페이스에 있습니다.
다른 네임스페이스에 저장된 데이터에 액세스하려면 openshift-storage 네임스페이스에서 레거시 애플리케이션이 사용하는 동일한 CephFS 볼륨을 가리키는 PVC를 생성해야 합니다.
절차
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
애플리케이션 네임스페이스로 이동합니다.
$ oc project <application_namespace>예 5.3. 예제
$ oc project testnamespaceMCG 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 11sPod 내에서 영구 볼륨(PV)의 마운트 지점을 확인합니다.
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입니다.
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}]
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
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 ..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
openshift-storage네임스페이스에서 PVC에 액세스하여 하나 이상의 noobaa-endpoint Pod가 PVC에 액세스할 수 있도록 합니다.volumeAttributes에서subvolumePath및volumeHandle의 값을 찾습니다. 레거시 애플리케이션 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이전 단계에서 식별한
subvolumePath및volumeHandle값을 사용하여 기존 애플리케이션 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: 10Gi1 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-clone2 persistentVolumeReclaimPolicy: Retain volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cephfs-pvc-legacy namespace: openshift-storage spec: storageClassName: "" accessModes: - ReadWriteMany resources: requests: storage: 10Gi3 volumeMode: Filesystem # volumeName should be same as PV name volumeName: cephfs-pv-legacy-openshift-storage EOF이전 단계에서 지정한 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
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 14sopenshift-storage프로젝트로 이동합니다.$ oc project openshift-storage예 5.22. 출력 예
Now using project "openshift-storage" on server "https://api.cluster-5f6ng.5f6ng.sandbox65.opentlc.com:6443".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'
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
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. 예제
중요레거시 애플리케이션의 것과 동일한
UID및GID를 사용합니다. 이전 출력에서 찾을 수 있습니다.$ 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'
MCG 버킷을 만듭니다.
레거시 애플리케이션 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/nsfsnsfs/경로를 사용하여 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/" }] } }'
레거시 애플리케이션 및
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 레이블이 동일하지 않아 권한 거부 또는 액세스 문제가 발생하는 것을 확인할 수 있습니다.
레거시 애플리케이션 및
openshift-storage포드에서 파일에서 동일한 SELinux 레이블을 사용하는지 확인합니다.다음 두 가지 방법 중 하나를 수행할 수 있습니다.
NSFS 네임스페이스 저장소를 삭제합니다.
MCG 버킷을 삭제합니다.
$ noobaa bucket delete <bucket_name>예 5.33. 예제
$ noobaa bucket delete legacy-bucketMCG 사용자 계정을 삭제합니다.
$ noobaa account delete <user_account>예 5.34. 예제
$ noobaa account delete leguserNSFS 네임스페이스 저장소를 삭제합니다.
$ noobaa namespacestore delete <nsfs_namespacestore>예 5.35. 예제
$ noobaa namespacestore delete legacy-namespace
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
5.4.3.1. openshift-storage 프로젝트의 기본 SELinux 레이블과 일치하도록 레거시 애플리케이션 프로젝트의 기본 SELinux 레이블 변경 링크 복사링크가 클립보드에 복사되었습니다!
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레거시 애플리케이션 네임스페이스를 편집하고
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-
레거시 애플리케이션 포드를 다시 시작합니다. 모든 파일의 레이블을 다시 지정하고 이제 SELinux 레이블이
openshift-storage배포와 일치합니다.