IBM Cloud Object Storage 클러스터 애드온 설치하기
IBM Cloud 콘솔이나 CLI에서 ‘ IBM Cloud Object Storage ’ 애드온을 활성화할 수 있습니다.
전제조건:
- IBM Cloud Object Storage 애드온에는 최소 0.3 vCPU 및 360MB의 메모리가 필요합니다.
- 이 애드온은 Red Hat CoreOS (RHCOS) 및 Ubuntu 작업자 노드에서 사용할 수 있습니다. 클러스터에 RHEL 및 RHCOS 노드가 모두 있는 경우 애드온은 RHCOS 노드에만 배포됩니다.
- IBM Cloud Object Storage 인스턴스를 설정합니다.
- 선택 사항 버킷 버전 관리를 사용하려는 경우 버킷에서 버킷 버전 관리를 사용하거나 사용하지 않으려면 서비스 자격 증명에 관리자 또는 작성자 권한이 있어야 합니다. 자세한 내용은 ‘버전 관리 시작하기’를 참조하십시오.
버킷 생성 및 제거에 대한 이해
- PVC에 버킷 이름을 지정하여 기존 버킷을 사용할 수 있습니다.
- 버킷 이름을 입력했는데 해당 버킷이 존재하지 않으면 해당 이름의 버킷이 만들어집니다.
- 버킷 이름을 지정하지 않으면, 마운터 유형에 따라
s3fs-<timestamp>-xxx또는rclone-<timestamp>-xxx형식의 버킷이 생성됩니다. - 버킷은 스토리지 클래스에 정의된 회수 정책에 따라 삭제됩니다.
reclaimPolicy: Delete설정하면 PVC가 삭제될 때 버킷이 삭제됩니다.reclaimPolicy: Retain설정하면 PVC가 삭제된 후에도 버킷이 유지됩니다.
콘솔에서 ‘ IBM Cloud Object Storage ’ 애드온 활성화하기
- Red Hat OpenShift on IBM Cloud 클러스터 대시보드 에서 애드온을 활성화할 클러스터를 선택합니다.
- ‘추가 기능 ’ 섹션에서 Cloud Object Storage 애드온을 찾아 ‘설치’를 클릭하십시오.
- “애드온 설치: Cloud Object Storage ” 패널에서 “버전” 드롭다운 메뉴에서 버전을 선택하십시오.
- 선택 사항: 다음 매개변수를 구성하십시오.
maxVolumesPerNode- 단일 노드에 마운트할 수 있는 IBM Cloud Object Storage 볼륨의 최대 개수를 설정합니다. 기본값은
0``이며, 이는 제한이 적용되지 않음을 의미합니다. restrictNodeServerSchedulingtrue로 설정하면, 노드 서버 포드가cos.csi.ibm.io/csi-node=true레이블이 지정된 노드에서만 실행되도록 제한할 수 있습니다. 기본값은false``이며, 이는 노드 서버 파드가 모든 노드에 스케줄링된다는 것을 의미합니다.
- 설치를 클릭하십시오. 추가 기능을 배치하여 사용할 준비가 될 때까지 몇 분 정도 소요될 수 있습니다.
- 설치를 확인하십시오. ‘추가 기능 ’ 섹션에서 Cloud Object Storage 애드온의 건강 상태가 ‘정상’으로 표시되는지 확인하십시오.
CLI에서 IBM Cloud Object Storage 애드온 활성화하기
시작하기 전에: Red Hat OpenShift 클러스터에 액세스하십시오.
container-service플러그인을 최신 버전으로 업데이트하십시오.ibmcloud update && ibmcloud plugin update container-service- 애드온을 나열하고 설치할 버전을 찾습니다.
ibmcloud oc cluster addon versions - 추가 기능 옵션을 검토하십시오.
ibmcloud oc cluster addon options --addon ibm-object-csi-driver [--version VERSION] - 애드온을 설치합니다.
ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION] - 설치를 확인하십시오.
ibmcloud oc cluster addon ls --cluster CLUSTEROK Name Version Health State Health Status ibm-object-csi-driver 1.0 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500) - 사용 가능한 스토리지 클래스를 나열하십시오. 이 드라이버는
s3fs및rclone마운터에 대해 지역 내 및 지역 간 스토리지 클래스를 모두 지원합니다.oc get sc | grep objectibm-object-storage-smart-cross-region-rclone cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-smart-cross-region-rclone-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-smart-cross-region-s3fs cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-smart-cross-region-s3fs-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-smart-rclone cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-smart-rclone-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-smart-s3fs cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-smart-s3fs-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-standard-cross-region-rclone cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-standard-cross-region-rclone-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-standard-cross-region-s3fs cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-standard-cross-region-s3fs-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-standard-rclone cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-standard-rclone-retain cos.s3.csi.ibm.io Retain Immediate false 17h ibm-object-storage-standard-s3fs cos.s3.csi.ibm.io Delete Immediate false 17h ibm-object-storage-standard-s3fs-retain cos.s3.csi.ibm.io Retain Immediate false 17h
노드 서버 포드 스케줄링 제한
기본적으로 COS CSI 드라이버 노드 서버 파드는 클러스터 내의 모든 노드에 스케줄링됩니다. restrictNodeServerScheduling 매개변수를 사용하면 노드 서버 포드의 스케줄링을 cos.csi.ibm.io/csi-node=true 레이블이 지정된 노드로만 제한할 수 있습니다.
restrictNodeServerScheduling 는 애드온을 활성화할 때 구성할 수 있으며, 나중에 ConfigMap 파일을 수정하여 업데이트할 수도 있습니다.
- 애드온을 활성화할 때
restrictNodeServerScheduling를 설정하려면, 활성화 명령어에--param플래그를 포함시키십시오.ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "restrictNodeServerScheduling=true" - 애드온이 이미 활성화된 상태에서
restrictNodeServerScheduling을 업데이트하려면 다음 단계를 따르세요.
- 클러스터에 있는 노드를 나열하고, COS 드라이버 포드를 실행할 위치를 결정하십시오.
출력 예oc get nodesNAME STATUS ROLES AGE VERSION 10.241.0.11 Ready <none> 5d2h v1.35.5+IKS 10.241.0.12 Ready <none> 5d2h v1.35.5+IKS 10.241.0.13 Ready <none> 5d2h v1.35.5+IKS 10.241.128.10 Ready <none> 5d2h v1.35.5+IKS 10.241.128.11 Ready <none> 5d2h v1.35.5+IKS 10.241.128.9 Ready <none> 5d2h v1.35.5+IKS 10.241.65.12 Ready <none> 5d2h v1.35.5+IKS 10.241.65.13 Ready <none> 5d2h v1.35.5+IKS 10.241.65.14 Ready <none> 5d2h v1.35.5+IKS - 모든 노드에서 노드 서버 포드가 현재 실행 중인지 확인하십시오.
출력 예oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ibm-object-csi-node-2pj2j 3/3 Running 0 145m 172.17.14.10 10.241.0.12 <none> <none> ibm-object-csi-node-7bhwh 3/3 Running 0 145m 172.17.1.72 10.241.65.12 <none> <none> ibm-object-csi-node-7l9hc 3/3 Running 0 145m 172.17.17.6 10.241.128.9 <none> <none> ibm-object-csi-node-cxzt7 3/3 Running 0 145m 172.17.39.72 10.241.0.11 <none> <none> ibm-object-csi-node-dw6qs 3/3 Running 0 145m 172.17.46.77 10.241.128.10 <none> <none> ibm-object-csi-node-rpcvr 3/3 Running 0 145m 172.17.32.198 10.241.65.13 <none> <none> ibm-object-csi-node-swqtg 3/3 Running 0 145m 172.17.16.69 10.241.0.13 <none> <none> ibm-object-csi-node-sxbbs 3/3 Running 0 145m 172.17.26.7 10.241.65.14 <none> <none> ibm-object-csi-node-xm8bt 3/3 Running 0 145m 172.17.20.200 10.241.128.11 <none> <none> - 노드서버 파드가 스케줄링되기를 원하는 노드에 레이블을 지정하세요.
출력 예oc label nodes NODE-NAME-1 NODE-NAME-2 cos.csi.ibm.io/csi-node=truenode/10.241.0.11 labeled node/10.241.0.12 labeled - ConfigMap 를 업데이트하여 제한 기능을 활성화하십시오.
출력 예oc patch cm managed-addon-ibm-object-csi-driver -n kube-system \ --type merge -p '{"data":{"restrictNodeServerScheduling":"true"}}'configmap/managed-addon-ibm-object-csi-driver patched - 노드 서버 파드가 라벨이 지정된 노드에만 스케줄링되는지 확인하십시오.
출력 예oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES ibm-object-csi-node-cxzt7 3/3 Running 0 145m 172.17.39.72 10.241.0.11 <none> <none> ibm-object-csi-node-7bhwh 3/3 Running 0 145m 172.17.1.72 10.241.65.12 <none> <none>
| 설정 | 동작 |
|---|---|
restrictNodeServerScheduling: "false"(기본값) |
Nodeserver 파드는 모든 노드에 스케줄링됩니다. |
restrictNodeServerScheduling: "true" |
Nodeserver 파드는 ‘ cos.csi.ibm.io/csi-node=true ’ 레이블이 지정된 노드에만 스케줄링됩니다. |
노드별 최대 볼륨 수 설정
기본적으로 COS CSI 드라이버는 단일 노드에 마운트할 수 있는 볼륨의 수를 제한하지 않습니다. maxVolumesPerNode 매개변수를 사용하여 노드당 볼륨의 최대 개수를 설정할 수 있습니다.
maxVolumesPerNode 는 애드온을 활성화할 때 구성할 수 있으며, 나중에 ConfigMap 파일을 수정하여 업데이트할 수도 있습니다.
- 애드온을 활성화할 때
maxVolumesPerNode를 설정하려면, 활성화 명령어에--param플래그를 포함시키십시오.ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "maxVolumesPerNode=VALUE" - 애드온이 이미 활성화된 상태에서
maxVolumesPerNode을 업데이트하려면, 관리형 애드온 ConfigMap 에 패치를 적용하십시오.출력 예oc patch cm managed-addon-ibm-object-csi-driver -n kube-system --type merge -p '{"data":{"maxVolumesPerNode":"VALUE"}}'configmap/managed-addon-ibm-object-csi-driver patched
| 설정 | 동작 |
|---|---|
maxVolumesPerNode: "0"(기본값) |
노드당 마운트할 수 있는 볼륨 수에는 제한이 없습니다. |
maxVolumesPerNode: "VALUE" |
단일 노드에 마운트할 수 있는 볼륨 수를 지정된 값으로 제한합니다. |
다음 기능을 사용하는 앱을 배포하려면 IBM Cloud Object Storage
COS 자격 증명이 포함된 ‘ Kubernetes ’ 시크릿을 생성합니다.
-
다음 구성을
secret.yaml파일로 저장합니다. IAM 자격 증명 또는 HMAC 자격 증명 중 하나만 제공하십시오. 둘 다 제공해서는 안 됩니다.- IAM 자격 증명에 대해서는 IBM Cloud Object Storage 서비스 인스턴스의
apiKey및serviceId을 사용하십시오. - HMAC 자격 증명의 경우, IBM Cloud Object Storage 서비스 인스턴스에서
accessKey및secretKey을 사용하십시오.
apiVersion: v1 kind: Secret type: cos-s3-csi-driver metadata: name: cos-secret-1 # Name your secret. This same name is used for the PVC in the following steps. namespace: <namespace> # Specify the namespace where you want to create the secret. data: # --- IAM credentials (provide apiKey + serviceId) --- apiKey: <base64-encoded-COS-Service-Instance-apikey> serviceId: <base64-encoded-COS-resource_instance_id> # --- HMAC credentials --- accessKey: <base64-encoded-HMAC-access_key_id> secretKey: <base64-encoded-HMAC-secret_access_key> # --- Optional credential fields (base64-encoded) --- kpRootKeyCRN: <base64-encoded-Key-Protect-root-key-CRN> resourceConfigApiKey: <base64-encoded-apikey> # Required only when quotaLimit is "true". stringData: # --- Optional config fields (plain text) --- cosEndpoint: "https://<cos_s3_service_endpoint>" # Overrides the cosEndpoint from the storage class. locationConstraint: "<region>-standard" # Overrides the locationConstraint from the storage class. iamEndpoint: "<iam-endpoint-url>" # Overrides the default iam endpoint set in COS CSI Driver objectPath: "<subdirectory>" # Optional. Subdirectory within the bucket to mount, for example "data". bucketName: <bucket-name> # Optional. If you don't provide a bucket name, a bucket with the naming convention s3fs-<timestamp>-xxx or rclone-<timestamp>-xxx is created. bucketVersioning: "false" # Set to "true" to enable bucket versioning. Set to "false" to disable versioning. Must be a string value. quotaLimit: "false" # Set to "true" to enforce a hard quota on the bucket equal to the PVC storage size. Requires resourceConfigApiKey. mountOptions: | # uid=3000 # Optional: Run as non-root user. Must match runAsUser in SecurityContext of pod spec. # Review or update the following default s3fs mount options #multipart_size=52 #multireq_max=20 #max_dirty_data=5120 #parallel_count=20 #max_stat_cache_size=100000 #retries=5 #kernel_cache #max_background=1000 # Review or update the following default rclone mount options #acl=private #bucket_acl=private #upload_cutoff=100Mi #chunk_size=16Mi #max_upload_parts=1000 #upload_concurrency=8 #multi_thread_streams=8 #disable_checksum=trueapiKey- IAM 인증에 필요합니다. IBM Cloud Object Storage 서비스 인스턴스에 대한 base64-encoded IBM Cloud IAM API 키를 입력하세요. API 키는
apikey페이지의 서비스 자격 증명에서 확인할 수 있습니다.apiKey+serviceId또는accessKey+secretKey중 하나만 입력하고, 둘 다 입력하지 마십시오. serviceId- IAM 인증에 필요합니다. IBM Cloud Object Storage 서비스 인스턴스에 해당하는 ‘ base64-encoded ’ 리소스 인스턴스 ID를 입력하십시오. 이 값은
resource_instance_id경로의 서비스 자격 증명에서 확인할 수 있습니다. accessKey- HMAC 인증에 필요합니다. base64-encoded 의 HMAC 액세스 키 ID를 입력하십시오. 이 값은
cos_hmac_keys.access_key_id경로의 서비스 자격 증명에서 확인할 수 있습니다.accessKey+secretKey또는apiKey+serviceId중 하나만 입력하고, 둘 다 입력하지 마십시오. secretKey- HMAC 인증에 필요합니다. base64-encoded 의 HMAC 비밀 액세스 키를 입력하세요. 이 값은
cos_hmac_keys.secret_access_key경로의 서비스 자격 증명에서 확인할 수 있습니다. kpRootKeyCRN- 선택사항입니다. Key Protect 인스턴스의 ‘ base64-encoded ’ 루트 키 CRN을 입력하십시오. CRN을 확인하려면 IBM Cloud 콘솔에서 해당 KMS 인스턴스로 이동한 다음, [ Keys]를 열고 루트 키를 클릭한 후 키 세부 정보에서 CRN을 복사하십시오. 이 기능은 새 버킷에만 적용되며, 기존 버킷에는 암호화 기능을 추가할 수 없습니다.
iamEndpoint- 선택사항입니다. IBM Cloud 의 IAM 토큰 엔드포인트 URL 를 일반 텍스트로 입력하세요. 기본적으로 이 드라이버는 VPC 클러스터의 경우
https://private.iam.cloud.ibm.com을, 클래식 클러스터의 경우https://iam.cloud.ibm.com을 사용합니다. 다른 IAM 엔드포인트를 사용해야 하는 경우에만 이 값을 재정의하십시오. cosEndpoint- 선택사항입니다. IBM Cloud Object Storage 엔드포인트 URL 를 일반 텍스트로 입력하십시오(예:
https://s3.us.cloud-object-storage.appdomain.cloud). 이 값이 지정되면, 스토리지 클래스에서 설정된cosEndpoint값보다 우선 적용됩니다. 버킷이 다른 리전에 있거나 직접 엔드포인트 또는 비공개 엔드포인트를 사용하는 경우 이 필드를 사용하십시오. 사용 가능한 엔드포인트 목록은 IBM Cloud Object Storage endpoints를 참조하십시오. locationConstraint- 선택사항입니다. 위치 제약 조건 문자열을 일반 텍스트로 입력하십시오(예:
us-standard또는us-geo-smart). 이 값이 지정되면, 스토리지 클래스에서 설정된locationConstraint값보다 이 값이 우선 적용됩니다. 위치 제약 조건에 따라 버킷 클래스와 버킷이 저장될 리전이 결정됩니다. objectPath- 선택사항입니다. 마운트할 버킷 내 하위 디렉터리의 경로를 일반 텍스트로 입력하십시오(예:
data). 이 옵션을 사용하면 앱이 공유 버킷의 전체 루트 디렉터리가 아닌, 특정 폴더에만 접근할 수 있도록 할 수 있습니다. resourceConfigApiKeyquotaLimit가 ‘"true"’로 설정된 경우 필수입니다. 위의 ‘apiKey’ 필드에 사용했던 IBM Cloud Object Storage 서비스 자격 증명에서 ‘ base64-encoded ’과 ‘apikey’ 값을 동일하게 입력하십시오.bucketName- 선택사항입니다. 사용할 기존 버킷의 이름을 입력하거나, 새로 만들 버킷의 이름을 입력하세요. 지정한 버킷 이름이 존재하지 않으면 드라이버가 해당 버킷을 생성합니다. 이 필드를 비워두면, 마운터 유형에 따라
s3fs-<timestamp>-xxx또는rclone-<timestamp>-xxx형식의 버킷이 자동으로 생성됩니다. 버킷 이름은 IBM Cloud Object Storage 내에서 전역적으로 고유해야 합니다. bucketVersioning- 선택사항입니다. 버킷 버전 관리를 제어합니다. 버전 관리를 활성화하려면
"true"로 설정하고, 이미 버전 관리가 활성화된 버킷에서 버전 관리를 비활성화하려면"false"로 설정하세요. 반드시 문자열 값이어야 합니다. 버전 관리 기능이 활성화되면, IBM Cloud Object Storage 는 버킷 내 모든 객체의 여러 버전을 보관하여 실수로 인한 삭제나 덮어쓰기를 방지합니다. 버킷 버전 관리를 활성화하거나 비활성화하려면 서비스 자격 증명에 ‘관리자(Manager )’ 또는 ‘작성자(Writer) ’ 권한이 있어야 합니다. 자세한 내용은 ‘버전 관리 시작하기’를 참조하십시오. quotaLimit- 선택사항입니다. 버킷에 엄격한 저장 용량 할당량을 적용하려면
"true"로 설정하십시오. 이 기능이 활성화되면 버킷 할당량은 PVC에서 요청된 ‘storage’ 크기와 동일하게 설정됩니다. 할당량이 초과되면, 데이터가 삭제될 때까지 버킷에 대한 쓰기 작업이 실패합니다.resourceConfigApiKey가 설정되어 있어야 합니다. 기본값은"false"입니다. 반드시 문자열 값이어야 합니다. mountOptions- 비밀 번호에서
mountOptions을 편집하여s3fs또는rclone에 대한 마운트 옵션을 사용자 지정할 수 있습니다. 루트 사용자가 아닌 계정으로 실행하려면, 주석 처리를 해제하고uid=을 포드 사양(pod spec)의securityContext필드에 있는runAsUser값과 일치하도록 설정하십시오. 지정하는 옵션을 PVC에서 사용하는 스토리지 클래스에 맞게 조정합니다. 스토리지 클래스의 기본값을 확인하려면oc describe storageclass <storageclass_name>또는oc describe storageclass <storageclass_name>``을 실행하십시오. 자세한 내용은[s3fs마운트 옵션과](https://github.com/IBM/ibm-object-csi-driver/blob/main/cos-csi-mounter/server/s3fs.go){: external}[rclone마운트 옵션을](https://github.com/IBM/ibm-object-csi-driver/blob/main/cos-csi-mounter/server/rclone.go){: external} 참조하십시오.
현재 이 애드온은 각 마운트 옵션에 대한 적절한 유효성 검사를 통해 고정된 마운트 옵션 집합을 지원하도록 설정되어 있습니다. 유효성 검사 목록에 없는 다른 마운트 옵션을 사용하려면 지원팀에 문의하여 해당 옵션을 사용하도록 설정하세요.
- IAM 자격 증명에 대해서는 IBM Cloud Object Storage 서비스 인스턴스의
-
모든 비밀 데이터 매개변수를 base64 으로 인코딩합니다.
echo -n "<value>" | base64 -
base64 인코딩된 값으로
secret.yaml을 업데이트합니다. -
시크릿을 작성하십시오.
oc apply -f secret.yaml
PVC 만들기
여러 PVC에 걸쳐 하나의 비밀번호를 사용하거나 PVC당 하나의 비밀번호를 사용할 수 있습니다.
PVC yaml에서 다음 어노테이션을 사용하여 이 동작을 관리할 수 있습니다. 이러한 주석은 드라이버가 PVC를 올바른 비밀 번호에 매핑하는 데 도움이 됩니다.
cos.csi.driver/secret: "<custom-secret>"
secret, PVC 및 pod가 모두 동일한 네임스페이스에 있는지 확인하십시오.
예: 1-to-1 비밀을 PVC에 매핑하기 위해 앞서 만든 비밀과 같은 이름을 PVC에 지정하여 PVC를 비밀에 매핑합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cos-secret-1 # Give your PVC the same name as the secret you created in the previous step.
namespace: <namespace> # The namespace where you want to create the PVC.
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
storageClassName: <storage_class_name> # The storage class you want to use.
어노테이션을 사용하여 시크릿을 지정하여 많은 PVC에 하나의 시크릿을 사용하는 PVC 예시입니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: cos-csi-pvc1
namespace: <namespace> # The namespace where you want to create the PVC.
annotations:
cos.csi.driver/secret: "<custom-secret>"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi
storageClassName: <storage_class_name> # The storage class you want to use.
-
앞의 예시 중 하나를 선택하여 사용 사례에 맞게 사용자 지정하세요. 스토리지 클래스 목록은 스토리지 클래스 참조를 참조하세요.
-
PVC를 작성하십시오.
oc apply -f pvc.yaml
배치를 작성합니다.
-
다음 구성을 ‘
dep.yaml’라는 파일로 저장하십시오.apiVersion: apps/v1 kind: Deployment metadata: name: <name> labels: app: <name> spec: replicas: 1 selector: matchLabels: app: <name> template: metadata: labels: app: <name> spec: containers: - name: app-frontend image: <image> # Enter your app image. imagePullPolicy: IfNotPresent volumeMounts: - mountPath: <path_you_want_to_mount_the_volume_on> # For example `/dev` name: cos-csi-volume volumes: - name: cos-csi-volume persistentVolumeClaim: claimName: <pvc_name> # Enter the name of the PVC you created earlier. -
배치를 작성하십시오.
oc apply -f dep.yaml
IBM Cloud Object Storage 애드온 비활성화하기
기존 비밀, PVC 및 배포는 애드온을 비활성화하거나 패치를 업데이트해도 삭제되지 않습니다. 기존 고객 워크로드에는 중단이 없습니다.
- 다음 명령을 실행하여 애드온을 비활성화하십시오.
출력 예ibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTERData and resources that you created for the add-on might be deleted when the add-on is disabled. Continue? [y/N]> y Disabling add-on ibm-object-csi-driver for cluster XXX... OK - 애드온이 제거되었는지 확인하십시오.
ibmcloud oc cluster addon ls --cluster CLUSTER
Helm 플러그인에서 클러스터 애드온으로 마이그레이션하기
-
PVC의 세부 정보를 확인하고 마이그레이션할 PVC를 선택합니다.
oc get pvc --all-namespaces -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name' | tail -n +2 | while read namespace pvc; do kubectl describe pvc "$pvc" -n "$namespace" | grep 'volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs' > /dev/null ; if [ $? -eq 0 ]; then echo "PVC: $pvc in Namespace: $namespace uses ibm.io/ibmc-s3fs storage provisioner"; fi; done출력 예
PVC: pvc-test in Namespace: default uses ibm.io/ibmc-s3fs storage provisioner -
PVC를 설명하고 버킷 이름을 가져옵니다.
oc describe pvc <pvc_name> | grep ibm.io/bucket:출력 예
ibm.io/bucket: test-s3 -
버킷 이름을 포함하여 비밀을 다시 생성하세요.
apiVersion: v1 kind: Secret type: cos-s3-csi-driver metadata: name: cos-secret-1 # Name your secret. namespace: <namespace> # Specify the namespace where you want to create the secret. data: accessKey: <base64-encoded-HMAC-access-key> secretKey: <base64-encoded-HMAC-secret-key> stringData: bucketName: <bucket-name> mountOptions: | # uid=3000 # Optional: Run as non-root user. Must match runAsUser in SecurityContext of pod spec. key1=value1 key2=value2 -
PVC에 사용된 스토리지 클래스를 찾습니다.
oc describe pvc <pvc_name> | grep StorageClass:test-s3PVC에 대한 명령 예제입니다.oc describe pvc test-s3 | grep StorageClass:출력 예
StorageClass: ibmc-s3fs-smart-perf-regional -
추가 기능에서 사용할 수 있는 새로운 스토리지 클래스를 검토하고 대체 클래스를 선택합니다.
flex클래스를 사용했다면 새로운smart클래스 중 하나를 선택하세요.standard클래스를 사용했다면 새로운standard클래스 중 하나를 선택하세요.- 추가 기능에서는
cold및vault클래스를 더 이상 사용할 수 없으므로 대신smart또는standard클래스를 선택하세요.
-
PVC의 세부 정보를 검토합니다.
oc describe pvc test-s3출력 예
Name: pvc-test Namespace: default StorageClass: ibmc-s3fs-smart-perf-regional Status: Bound Volume: pvc-c625474d-31f0-4929-bc3e-feace1fb42fb Labels: <none> Annotations: ibm.io/auto-create-bucket: true ibm.io/auto-delete-bucket: true ibm.io/bucket: bha-test-s23 ibm.io/secret-name: satstoragesecret pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs Finalizers: [kubernetes.io/pvc-protection] Capacity: 3Gi Access Modes: RWO VolumeMode: Filesystem Used By: test-pod Events: <none> -
새 스토리지 클래스를 사용하고 이전에 만든 비밀을 참조하는 대체 PVC를 만듭니다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: cos-csi-pvc1 namespace: <namespace> # The namespace where you want to create the PVC. annotations: cos.csi.driver/secret: "cos-secret-1" # Secret created in step 4 spec: accessModes: - ReadWriteOnce resources: requests: storage: 256Mi storageClassName: <storage_class_name> # The storage class you picked based on old storage class mapping. -
PVC가
Bound확인합니다.oc get pvc -
앱에 대한 자세한 정보를 확인하세요.
oc get pods -
앱 규모를 0으로 축소합니다.
kubectl scale deployment --replicas=0 my-app -
이전 단계에서 만든 PVC를 참조하는 대체 배포를 만듭니다.
-
새 배포가 실행되고 나면 이전 배포를 삭제할 수 있습니다.
-
마이그레이션하려는 각 PVC에 대해 이 단계를 반복하십시오.
IBM Cloud Object Storage 클러스터 애드온 스토리지 클래스
IBM Cloud Object Storage 클러스터 애드온은 s3fs 및 rclone 마운터를 위한 스토리지 클래스를 제공합니다. 데이터 액세스 요구사항에 맞는 스토리지 클래스를 선택하십시오. 스토리지 클래스는 워크로드에 대해 생성된 버킷의 버킷 클래스, 회수 정책 및 기본 마운트 동작을 결정합니다.
- Standard
- 자주 액세스되는 핫 데이터에 사용하십시오. 공통 유스 케이스는 웹 또는 모바일 앱입니다.
- Vault
- 한 달에 한 번 이하로 접근하는 등, 사용 빈도가 낮은 워크로드나 중요도가 낮은 데이터에 사용하십시오. 공통 유스 케이스는 아카이브, 단기 데이터 보관, 디지털 자산 보존, 테이프 교체 및 재해 복구입니다.
- Cold
- 접근 빈도가 매우 낮은(90일에 한 번 이하) 콜드 데이터나 비활성 데이터에 사용하십시오. 공통 유스 케이스는 아카이브, 장기 백업, 준수용으로 보관되는 히스토리 데이터 또는 거의 액세스되지 않는 워크로드와 앱입니다.
- 스마트
- 특정 사용 패턴을 따르지 않거나 사용 패턴을 예측하기 어려운 워크로드 및 데이터에 사용합니다.
버킷에 저장된 데이터의 복원성 레벨을 결정하십시오. 자세한 정보는 지역 및 엔드포인트를 참조하십시오.
- 교차 지역
- 최고의 가용성을 보장하기 위해 귀하의 데이터는 특정 지리적 위치 내 세 개의 리전에 걸쳐 저장됩니다. 지역 간에 분산된 워크로드가 있으면 최인접 지역 엔드포인트로 요청이 라우트됩니다. 지리적 위치에 대한 IBM Cloud Object Storage 엔드포인트는 클러스터가 위치한 곳을 기준으로 자동으로 설정됩니다. 예를 들어, 클러스터가
US South에 있는 경우, 스토리지 클래스는 버킷에 대해US GEO엔드포인트를 사용하도록 구성됩니다. 이름에 ‘cross-region’가 포함된 스토리지 클래스를 선택하십시오. - 지역
- 귀하의 데이터는 하나의 리전 내 여러 존에 걸쳐 복제됩니다. 동일한 지역에 있는 워크로드가 있는 경우에는 교차 지역 설정보다 낮은 대기 시간과 더 높은 성능이 나타납니다. 지역별 종단점은 클러스터가 위치한 위치를 기준으로 자동으로 설정됩니다. 예를 들어, 클러스터가
US South에 있는 경우, 스토리지 클래스는 버킷의 지역 엔드포인트로US South을 사용하도록 구성됩니다. 이름에 ‘cross-region’가 포함되지 않은 스토리지 클래스를 선택하십시오.
| 이름 | 버킷 클래스 | 복원성 | 마운트 | 재확보 정책 | 바인딩 모드 |
|---|---|---|---|---|---|
| ibm-객체-스토리지-스마트-크로스-리전-rclone | 스마트 | 지역 간 | rclone |
삭제 | 즉시 |
| ibm-객체-스토리지-스마트-크로스-리전-rclone-리테인 | 스마트 | 지역 간 | rclone |
유지 | 즉시 |
| ibm-object-storage-smart-cross-region-s3fs | 스마트 | 지역 간 | s3fs |
삭제 | 즉시 |
| ibm-object-storage-smart-cross-region-s3fs-retain | 스마트 | 지역 간 | s3fs |
유지 | 즉시 |
| iBM-객체-스토리지-스마트-r클론 | 스마트 | 지역 | rclone |
삭제 | 즉시 |
| iBM-객체-스토리지-스마트-r클론-유지 | 스마트 | 지역 | rclone |
유지 | 즉시 |
| ibm-object-storage-smart-s3fs | 스마트 | 지역 | s3fs |
삭제 | 즉시 |
| ibm-object-storage-smart-s3fs-retain | 스마트 | 지역 | s3fs |
유지 | 즉시 |
| ibm-객체-스토리지-표준-크로스-리전-rclone | Standard | 지역 간 | rclone |
삭제 | 즉시 |
| ibm-객체-스토리지-표준-크로스-리전-rclone-retain | Standard | 지역 간 | rclone |
유지 | 즉시 |
| ibm-object-storage-standard-cross-region-s3fs | Standard | 지역 간 | s3fs |
삭제 | 즉시 |
| ibm-object-storage-standard-cross-region-s3fs-retain | Standard | 지역 간 | s3fs |
유지 | 즉시 |
| iBM-객체-스토리지-표준-클론 | Standard | 지역 | rclone |
삭제 | 즉시 |
| iBM-객체-스토리지-표준-클론-유지 | Standard | 지역 | rclone |
유지 | 즉시 |
| ibm-object-storage-standard-s3fs | Standard | 지역 | s3fs |
삭제 | 즉시 |
| ibm-object-storage-standard-s3fs-retain | Standard | 지역 | s3fs |
유지 | 즉시 |
스토리지 클래스에 대한 자세한 버킷 구성을 검토하려면 oc describe storageclass <storageclass_name> 또는 oc describe storageclass <storageclass_name> 을 실행하세요.
스토리지 클래스 매개변수
모든 클러스터 애드온 스토리지 클래스에는 다음과 같은 핵심 매개변수가 포함되어 있습니다.
| 매개변수 | 설명 |
|---|---|
client |
드라이버가 사용하는 클라이언트 유형을 식별합니다. 애드온 스토리지 클래스는 awss3 를 사용합니다. |
cosEndpoint |
버킷 영역에 대한 IBM Cloud Object Storage 엔드포인트를 정의합니다. |
csi.storage.k8s.io/node-publish-secret-name |
IBM Cloud Object Storage 자격 증명이 포함된 비밀의 이름을 참조합니다. |
csi.storage.k8s.io/node-publish-secret-namespace |
IBM Cloud Object Storage 자격 증명이 포함된 비밀의 네임스페이스를 참조합니다. |
locationConstraint |
au-syd-smart 또는 au-syd-standard 과 같은 버킷 클래스 및 지역을 정의합니다. |
mounter |
스토리지 클래스가 s3fs 또는 rclone 마운터를 사용할지 여부를 지정합니다. |
기본 s3fs 스토리지 클래스 마운트 옵션
s3fs 스토리지 클래스는 다음과 같은 기본 마운트 옵션을 사용합니다.
| 마운트 옵션 | 설명 |
|---|---|
multipart_size=52 |
각 멀티파트 요청에 대한 파트 크기를 MB 단위로 설정합니다. |
multireq_max=20 |
리스팅 객체에 대한 최대 병렬 요청 수를 설정합니다. |
max_dirty_data=5120 |
지정된 수의 MB가 쓰여진 후 더티 데이터를 S3 로 플러시합니다. 지원되는 최소 값은 50 입니다. -1 값은 이 동작을 비활성화합니다. |
parallel_count=20 |
대용량 오브젝트를 업로드하기 위한 병렬 요청 수를 설정합니다. s3fs 멀티파트 요청을 사용하여 대용량 오브젝트를 업로드하고 요청을 병렬로 보냅니다. |
max_stat_cache_size=100000 |
통계 캐시 및 심볼릭 링크 캐시의 최대 항목 수를 설정합니다. |
retries=5 |
실패한 S3 트랜잭션을 다시 시도할 횟수를 설정합니다. |
kernel_cache |
볼륨 마운트 지점에 대해 커널 버퍼 캐시를 활성화합니다. IBM Cloud Object Storage 에서 읽은 데이터는 더 빠른 읽기 액세스를 제공하기 위해 커널 캐시에 저장됩니다. 커널 캐시는 표준 및 스마트 s3fs 스토리지 클래스에 대해 활성화됩니다. |
max_background=1000 |
커널이 새로운 요청을 차단하기 전에 대기열에 넣을 수 있는 백그라운드 FUSE 요청의 최대 개수를 설정합니다. 이 값을 늘리면 동시 실행 빈도가 높은 워크로드의 처리량이 향상됩니다. |
기본 rclone 스토리지 클래스 마운트 옵션
rclone 스토리지 클래스는 다음과 같은 기본 마운트 옵션을 사용합니다.
| 마운트 옵션 | 설명 |
|---|---|
acl=private |
업로드된 개체가 공개적으로 액세스되지 않도록 합니다. |
bucket_acl=private |
rclone 이 만드는 버킷의 기본 ACL을 private 으로 설정합니다. |
upload_cutoff=100Mi |
멀티파트 업로드를 사용하여 100 MiB 보다 큰 파일을 업로드합니다. 작은 파일은 한 번의 요청으로 업로드됩니다. |
chunk_size=16Mi |
멀티파트 업로드에서 각 파트의 크기를 설정합니다. |
max_upload_parts=1000 |
멀티파트 업로드당 최대 파트 수를 설정하고 구성된 chunk_size 으로 지원되는 최대 파일 크기를 간접적으로 제한합니다. chunk_size=16Mi 의 경우 최대 파일 크기는 16 GiB 입니다. |
upload_concurrency=8 |
멀티파트 업로드 중에 병렬로 업로드되는 파트의 수를 설정합니다. |
multi_thread_streams=8 |
멀티 스레드 다운로드 방식을 사용할 때, 단일 객체를 다운로드하는 데 사용되는 스레드 수를 설정합니다. |
disable_checksum=true |
업로드 시 ‘ MD5 ’ 체크섬 계산을 비활성화합니다. 체크섬 계산으로 인해 상당한 오버헤드가 발생하는 대용량 파일의 성능을 향상시킵니다. |