Block Storage for Classic 설정
IBM Cloud Block Storage for Classic는 Kubernetes 지속적 볼륨(PV)을 사용하여 앱에 추가할 수 있는 지속적, 고성능 iSCSI 스토리지입니다. 워크로드의 요구사항을 충족하는 GB 크기와 IOPS를 사용하여 사전정의된 스토리지 계층 중에서 선택할 수 있습니다. IBM Cloud Block Storage for Classic 이 적합한 스토리지 옵션인지 확인하려면 스토리지 솔루션 선택하기를 참조하세요.
IBM Cloud Block Storage for Classic 플러그인을 사용할 때는 다음 고려사항에 유의하십시오.
IBM Cloud Block Storage for Classic 플러그인은 클래식 인프라에서 프로비저닝된 표준 IBM Cloud Kubernetes Service 클러스터에만 사용될 수 있습니다. VPC 클러스터가 있는 경우 Block Storage for Classic설정 을 참조하십시오.
클러스터가 공용 네트워크(예: 방화벽 뒤의 사설 클러스터 또는 프라이빗 클라우드 서비스 엔드포인트만 사용 가능한 클러스터)에 액세스할 수 없는 경우, 사설 네트워크를 통해 Block Storage for Classic 인스턴스에 연결하려면 IBM Cloud Block Storage for Classic 플러그인 버전 1.3.0 이상을 설치했는지 확인하십시오.
Block Storage for Classic 인스턴스는 단일 캠퍼스 멀티존 지역에만 해당됩니다. 다중 구역 클러스터가 있는 경우에는 다중 구역 지속적 스토리지 옵션을 고려하십시오.
클래식 인프라
이 페이지의 단계는 클래식 클러스터에만 적용됩니다. VPC 클러스터에서는 ‘ Block Storage for VPC ’ 클러스터 애드온이 기본적으로 설치됩니다. 자세한 내용은 설정 설정 Block Storage for VPC 을 참조하세요.
IBM Cloud Block Storage for Classic 의 빠른 시작
이 빠른 시작 가이드에서는 볼륨을 동적으로 프로비저닝하기 위해 PVC를 생성하여 클러스터 내에 ‘ 24Gi ’ 실버 등급의 Block Storage for Classic 볼륨을 생성합니다. 그런 다음 PVC를 마운트하는 앱 배치를 작성합니다.
클러스터에서 Block Storage for Classic를 처음 사용하시는 것입니까? Block Storage for Classic 플러그인을 설치한 후 여기로 돌아오십시오.
-
다음 지속적 볼륨 청구(PVC) 구성을
pvc.yaml파일에 저장하십시오.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-east zone: wdc07 spec: accessModes: - ReadWriteOnce resources: requests: storage: 45Gi storageClassName: ibmc-block-silver -
구성을 클러스터에 적용하여 PVC를 작성하십시오.
kubectl apply -f pvc.yaml -
PVC가
Bound상태가 될 때까지 기다리십시오. 다음 명령을 실행하여 상태를 확인할 수 있습니다.kubectl get pvc -
PVC가
Bound상태가 된 후 PVC를 사용하는 앱 배치를 작성하십시오. 다음 배치 구성을deployment.yaml파일에 저장하십시오.apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - image: nginx # Use the nginx image, or your own containerized app image. name: my-container command: ["/bin/sh"] args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] # This app prints the timestamp, then sleeps. workingDir: /home imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: my-volume mountPath: /mount-path volumes: - name: my-volume persistentVolumeClaim: claimName: block-storage-pvc -
클러스터에 배치를 작성하십시오.
kubectl apply -f deployment.yaml -
배치가
Ready상태가 될 때까지 기다리십시오. 다음 명령을 실행하여 배치 상태를 확인하십시오.kubectl get deployments출력 예
NAME READY UP-TO-DATE AVAILABLE AGE my-deployment 1/1 1 1 3m19s -
팟(Pod)을 나열하고
my-deployment팟(Pod)이 실행 중인지 확인하십시오.kubectl get pods출력 예
NAME READY STATUS RESTARTS AGE my-deployment-ccdf87dfb-vzn95 1/1 Running 0 5m27s -
팟(Pod) 로그를 가져와 시간소인이 기록되었는지 확인하십시오.
kubectl logs출력 예
2022-01-21 14:18:59
Block Storage for Classic를 사용하는 배치를 작성했습니다. 자세한 정보는 다음 링크를 참조하십시오.
클러스터에 IBM Cloud Block Storage for Classic 플러그인 설치
Helm 차트로 IBM Cloud Block Storage for Classic 플러그인을 설치하여 Block Storage for Classic에 대한 사전 정의된 스토리지 클래스를 설정하십시오. 이러한 스토리지 클래스를 사용하여 앱의 Block Storage for Classic를 프로비저닝하기 위한 PVC를 작성할 수 있습니다.
IBM Cloud Kubernetes Service 버전 1.24 이상을 실행하는 클래식 클러스터는 IBM Cloud Block Storage for Classic 플러그인을 설치할 필요가 없습니다. 드라이버 및 플러그인은 기본적으로 이 클러스터에 설치됩니다.
시작하기 전에: 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
작업자 노드가 최신 보안 설정으로 작업자 노드를 실행하도록 부 버전에 대한 최신 패치를 적용하는지 확인하십시오. 또한 패치 버전은 작업자 노드의 루트 비밀번호가 갱신되었는지도 확인합니다.
최근 90일 이내에 업데이터를 적용하거나 작업자 노드를 다시 로드하지 않은 경우 작업자 노드의 루트 비밀번호가 만료되고 스토리지 플러그인 설치에 실패할 수 있습니다.
- 작업자 노드의 현재 패치 버전을 나열하십시오.
ibmcloud ks worker ls --cluster CLUSTER_NAME_OR_ID ``` 출력 예 ```sh {: screen} OK ID Public IP Private IP Machine Type State Status Zone Version kube-dal10-crb1a23b456789ac1b20b2nc1e12b345ab-w26 169.xx.xxx.xxx 10.xxx.xx.xxx b3c.4x16.encrypted normal Ready dal10 1.35_1523* ``` 작업자 노드가 최신 패치 버전을 적용하지 않는 경우에는 CLI 출력의 `*`Version** 열에 별표(**)가 표시됩니다. 2. [Kubernetes 버전 정보](/docs/containers?topic=containers-cs_versions) 를 검토하여 최신 변경사항을 찾으십시오. 3. 작업자 노드를 다시 로드하여 최신 패치 버전을 적용하십시오. 워커 노드를 재로드하기 전에, [`ibmcloud ks worker reload` 명령어의](/docs/containers?topic=containers-kubernetes-service-cli#worker-reload-cli) 지침에 따라 워커 노드에서 실행 중인 모든 포드를 안전하게 재스케줄링하십시오. 다시 로드하는 중에 작업자 노드 머신은 최신 이미지로 업데이트되며 [작업자 노드의 외부에 저장](/docs/containers?topic=containers-storage-plan)되지 않은 경우 데이터가 삭제됨을 유념하십시오. -
지시사항에 따라 로컬 머신에 Helm 버전 3 클라이언트를 설치하십시오.
-
IBM Cloud 플러그인을 사용할 클러스터에 IBM Cloud Block Storage for Classic Helm 차트 저장소를 추가하십시오.
IBM Cloud 계정에서 VRF 및 서비스 엔드포인트를 활성화한 경우, 비공개 IBM Cloud Helm 저장소를 사용하여 이미지 가져오기 트래픽을 비공개 네트워크 내에서 처리할 수 있습니다. 계정에서 VRF 또는 서비스 엔드포인트를 사용으로 설정할 수 없으면 공용 레지스트리 도메인
helm repo add iks-charts https://icr.io/helm/iks-charts를 사용하십시오.helm repo add iks-charts https://icr.io/helm/iks-charts -
Helm 저장소를 업데이트하여 이 저장소에 있는 모든 Helm 차트의 최신 버전을 검색하십시오.
helm repo update -
IBM Cloud Block Storage for Classic 플러그인을 설치하고 설치에 이름을 지정하십시오(예:
block-storage-plugin). 플러그인을 설치하면 사전 정의된 블록 스토리지 클래스가 클러스터에 추가됩니다.helm install <name> iks-charts/ibmcloud-block-storage-plugin -n <namespace>출력 예
NAME: <name> LAST DEPLOYED: Wed Apr 18 10:02:55 2018 NAMESPACE: default STATUS: DEPLOYED RESOURCES: ==> v1beta1/DaemonSet NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE ibmcloud-block-storage-driver 0 0 0 0 0 <none> 0s ==> v1beta1/Deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ibmcloud-block-storage-plugin 1 0 0 0 0s ==> v1/StorageClass NAME PROVISIONER AGE ibmc-block-bronze ibm.io/ibmc-block 0s ibmc-block-custom ibm.io/ibmc-block 0s ibmc-block-gold ibm.io/ibmc-block 0s ibmc-block-retain-bronze ibm.io/ibmc-block 0s ibmc-block-retain-custom ibm.io/ibmc-block 0s ibmc-block-retain-gold ibm.io/ibmc-block 0s ibmc-block-retain-silver ibm.io/ibmc-block 0s ibmc-block-silver ibm.io/ibmc-block 0s ==> v1/ServiceAccount NAME SECRETS AGE ibmcloud-block-storage-plugin 1 0s ==> v1beta1/ClusterRole NAME AGE ibmcloud-block-storage-plugin 0s ==> v1beta1/ClusterRoleBinding NAME AGE ibmcloud-block-storage-plugin 0s NOTES: Thank you for installing: ibmcloud-block-storage-plugin. Your release is named: <name> -
설치를 확인하십시오.
kubectl get pod -n <namespace> | grep block출력 예
ibmcloud-block-storage-driver-kh4mt 1/1 Running 0 27d 10.118.98.19 10.118.98.19 ibmcloud-block-storage-plugin-58c5f9dc86-pbl4t 1/1 Running 0 14d 172.21.0.204 10.118.98.19하나의
ibmcloud-block-storage-plugin팟(Pod)과 하나 이상의ibmcloud-block-storage-driver팟(Pod)이 표시되면 설치에 성공한 것입니다.ibmcloud-block-storage-driver팟(Pod)의 수는 클러스터에 있는 작업자 노드의 수와 동일합니다. 모든 팟(Pod)이 실행 중(Running) 상태여야 합니다. -
Block Storage for Classic에 대한 스토리지 클래스가 클러스터에 추가되었는지 확인하십시오.
kubectl get sc | grep block출력 예
ibmc-block-bronze ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-custom ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-gold ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-retain-bronze ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-custom ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-gold ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-silver ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-silver ibm.io/ibmc-block Delete Immediate true 148m -
블록 스토리지를 프로비저닝할 모든 클러스터에 대해 이러한 단계를 반복하십시오.
이제 앱을 위한 블록 스토리지를 프로비저닝하는 데 필요한 PVC의 작성을 진행할 수 있습니다.
IBM Cloud Block Storage 플러그인 업데이트
기존 IBM Cloud Block Storage 플러그인을 최신 버전으로 업그레이드할 수 있습니다.
시작하기 전에: 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
Helm 저장소를 업데이트하여 이 저장소에 있는 모든 Helm 차트의 최신 버전을 검색하십시오.
helm repo update -
선택사항: 최신 Helm 차트를 로컬 머신에 다운로드하십시오. 그런 다음, 패키지의 압축을 풀고
release.md파일을 검토하여 최신 릴리스 정보를 찾으십시오.helm pull iks-charts/ibmcloud-block-storage-plugin --untar -
클러스터에 설치한 블록 스토리지 Helm 차트의 릴리스 이름 네임스페이스를 찾으십시오.
helm ls -A출력 예
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION block-plugin default 1 2022-01-21 09:02:46.11622 -0500 EST deployed bmcloud-block-storage-plugin-v2.1.5 -
IBM Cloud Block Storage 플러그인을 최신 버전으로 업그레이드하십시오. 이전에 검색한 릴리스 이름 및 네임스페이스를 포함하십시오.
helm upgrade RELEASE-NAME iks-charts/ibmcloud-block-storage-plugin -n NAMESPACE -
선택사항: 플러그인을 업데이트하면
default스토리지 클래스가 설정 해제됩니다. 기본 스토리지 클래스를 자체 선정한 스토리지 클래스로 설정하려면 다음 명령을 실행하십시오.kubectl patch storageclass STORAGECLASS -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
IBM Cloud Block Storage 플러그인 제거
클러스터에서 IBM Cloud Block Storage를 프로비저닝하고 사용하지 않으려면 Helm 차트를 설치 제거할 수 있습니다.
이 플러그인을 제거해도 기존 PVC, PV 또는 데이터는 제거되지 않습니다. 플러그인을 제거할 때는 모든 관련 팟(Pod) 및 디먼 세트만 클러스터에서 제거됩니다. 플러그인을 제거한 후에는 클러스터의 새 블록 스토리지를 프로비저닝하거나 기존 블록 스토리지 PVC 및 PV를 사용할 수 없습니다.
시작하기 전에:
- 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
- 블록 스토리지를 사용하는 클러스터에 PVC 또는 PV가 없는지 확인하십시오.
플러그인을 제거하려면 다음을 수행하십시오.
-
클러스터에 설치한 블록 스토리지 Helm 차트의 릴리스 이름 및 네임스페이스를 찾으십시오.
helm ls -A출력 예
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION block-plugin default 1 2022-01-21 09:02:46.11622 -0500 EST deployed ibmcloud-block-storage-plugin-v2.1.5 -
IBM Cloud Block Storage 플러그인을 삭제하십시오.
helm uninstall NAME -n kube-system -
블록 스토리지 팟(Pod)이 제거되었는지 확인하십시오.
kubectl get pods -n kube-system | grep blockCLI 출력에 팟(Pod)이 표시되지 않으면 팟(Pod) 제거가 성공한 것입니다.
-
블록 스토리지 클래스가 제거되었는지 확인하십시오. CLI 출력에 스토리지 클래스가 표시되지 않으면 스토리지 클래스 제거가 성공한 것입니다.
kubectl get sc | grep block
블록 스토리지 구성 결정
IBM Cloud Kubernetes Service는 특정 구성으로 블록 스토리지를 프로비저닝하는 데 사용할 수 있는 블록 스토리지의 사전 정의된 스토리지 클래스를 제공합니다.
모든 스토리지 클래스는 사용 가능한 크기, IOPS, 파일 시스템 및 보유 정책을 포함하여 사용자가 프로비저닝하는 블록 스토리지의 유형을 지정합니다.
데이터를 저장할 만한 충분한 용량을 보유하도록 반드시 스토리지 구성을 신중하게 선택하십시오. 스토리지 클래스를 사용하여 특정 유형의 스토리지를 프로비저닝한 후에는 스토리지 디바이스에 대한 유형 또는 보유 정책을 변경할 수 없습니다. 그러나 스토리지 용량과 성능을 늘리려는 경우에는 크기 및 IOPS를 변경할 수 있습니다. 스토리지의 유형 및 보존 정책을 변경하려면 새 스토리지 인스턴스를 생성하고, 기존 스토리지 인스턴스의 데이터를 새 인스턴스로 복사해야 합니다.
-
IBM Cloud® Kubernetes Service에서 사용 가능한 스토리지 클래스를 나열하십시오.
kubectl get sc | grep block출력 예
ibmc-block-bronze ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-custom ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-gold ibm.io/ibmc-block Delete Immediate true 148m ibmc-block-retain-bronze ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-custom ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-gold ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-retain-silver ibm.io/ibmc-block Retain Immediate true 148m ibmc-block-silver ibm.io/ibmc-block Delete Immediate true 148m -
스토리지 클래스의 구성을 검토하십시오.
kubectl describe storageclass STORAGECLASS각 스토리지 클래스에 대한 자세한 정보는 스토리지 클래스 참조를 참조하십시오. 원하는 항목을 찾지 못한 경우에는 사용자 정의된 자체 스토리지 클래스의 작성을 고려하십시오. 시작하려면 사용자 정의된 스토리지 클래스 샘플을 체크아웃하십시오.
-
프로비저닝하고자 하는 블록 스토리지의 유형을 선택하십시오.
- 브론즈, 실버 및 골드 스토리지 클래스: 이러한 스토리지 클래스는 Endurance 스토리지를 프로비저닝합니다. Endurance 스토리지를 사용하면 사전 정의된 IOPS 티어에서 스토리지의 크기(GB 단위)를 선택할 수 있습니다.
- 사용자 정의 스토리지 클래스: 이 스토리지 클래스는 성능 스토리지를 프로비저닝합니다. 성능 스토리지를 사용하면 IOPS 및 스토리지의 크기에 대한 추가적인 제어가 가능합니다.
-
블록 스토리지의 크기와 IOPS를 선택하십시오. IOPS의 크기와 수는 스토리지의 속도에 대한 지표의 역할을 하는 IOPS(Input/output Operations Per Second) 수의 총계를 정의합니다. 스토리지에 총 IOPS가 많을 수록 읽기/쓰기 오퍼레이션의 처리 속도가 빨라집니다.
- 브론즈, 실버 및 골드 스토리지 클래스: 이 스토리지 클래스는 기가바이트당 고정된 수의 IOPS가 제공되며 SSD 하드 디스크에 프로비저닝됩니다. IOPS 수의 총계는 선택하는 스토리지의 크기에 따라 다릅니다. 허용된 크기 범위 내에서 GB 단위의 정수를 선택할 수 있습니다(예: 20Gi, 256Gi 또는 11854Gi). IOPS 수의 총계를 판별하려면 IOPS를 선택된 크기와 곱해야 합니다. 예를 들어, GB당 4 IOPS가 제공되는 실버 스토리지 클래스에서 1000Gi 블록 스토리지 크기를 선택하는 경우에는 스토리지에 총 4000 IOPS가 있습니다.
스토리지 클래스 크기 범위 및 GB당 IOPS의 표 스토리지 클래스 GB당 IOPS 크기 범위(GB) 브론즈 2IOPS/GB 20 - 12000Gi 실버 4IOPS/GB 20 - 12000Gi 골드 10 IOPS/GB 20 - 4000Gi - 사용자 정의 스토리지 클래스: 이 스토리지 클래스를 선택하면 원하는 IOPS와 크기에 대해 추가적인 제어가 가능합니다. 크기의 경우 허용되는 크기 범위 내에서 기가바이트 정수를 선택할 수 있습니다. 사용자가 선택하는 크기에 따라 사용 가능한 IOPS 범위가 결정됩니다. 지정된 범위 내에서 100의 배수인 IOPS를 선택할 수 있습니다. 선택하는 IOPS는 정적이며 스토리지의 크기에 따라 스케일링되지 않습니다. 예를 들어, 100 IOPS와 함께 40Gi를 선택하면 총 IOPS는 100을 유지합니다. IOPS 대 기가바이트 비율은 사용자를 위해 프로비저닝되는 하드 디스크의 유형도 결정합니다. 예를 들어, 100 IOPS의 500Gi를 사용 중이면 IOPS 대 기가바이트 비율은 0.2입니다. 비율이 0.3 이하인 스토리지는 SATA 하드 디스크에서 프로비저닝됩니다. 비율이 0.3을 초과하는 스토리지는 SSD 하드 디스크에서 프로비저닝됩니다.
Table class size ranges and IOPS 크기 범위(GB) 100의 배수로 된 IOPS 범위 20 - 39Gi 100 - 1000IOPS 40 - 79Gi 100 - 2000IOPS 80 - 99Gi 100 - 4000IOPS 100 - 499Gi 100 - 6000IOPS 500 - 999Gi 100 - 10000IOPS 1000 - 1999Gi 100 - 20000IOPS 2000 - 2999Gi 200 - 40000IOPS 3000 - 3999Gi 200 - 48000IOPS 4000 - 7999Gi 300 - 48000IOPS 8000 - 9999Gi 500 - 48000IOPS 10000 - 12000Gi 1000 - 48000IOPS -
클러스터 또는 지속적 볼륨 청구(PVC)가 삭제된 후에 데이터를 보존하고자 하는지를 선택하십시오.
- 데이터를 보존하려면
retain스토리지 클래스를 선택하십시오. PVC를 삭제하면 PVC만 삭제됩니다. PV, IBM Cloud 인프라 계정의 실제 스토리지 디바이스 및 데이터는 여전히 존재합니다. 스토리지를 재확보하고 이를 클러스터에서 다시 사용하려면 PV를 제거하고 기존 블록 스토리지 사용의 단계를 따라야 합니다. - PVC를 삭제할 때 PV, 데이터 및 실제 블록 스토리지 디바이스가 삭제되도록 하려면
retain없이 스토리지 클래스를 선택하십시오.
- 데이터를 보존하려면
-
시간별 또는 월별로 청구되기를 원하는지 선택하십시오. 기본 설정은 시간별 청구입니다.
Block Storage for Classic의 암호화 설정
Block Storage for Classic를 사용하여 IBM Key Protect에 대한 암호화를 설정할 수 있습니다.
다음 예에서는 Key Protect 및 클러스터에 필요한 액세스 역할로 서비스 ID를 작성하는 방법에 대해 설명합니다. 이 서비스 ID의 인증 정보는 Block Storage for Classic 볼륨에 대한 암호화를 사용으로 설정하는 데 사용됩니다.
클러스터에 대한 뷰어 플랫폼 액세스 역할 및 작성자 서비스 액세스 역할을 비롯하여 Key Protect 인스턴스에 대한 독자 서비스 역할이 있으면 개인용 API 키를 사용하는 Kubernetes 시크릿을 작성하여 암호화를 사용으로 설정할 수 있습니다.
계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
Key Protect 인스턴스를 암호화하기 위해 사용하는 자체 루트 키를 사용할 수 있도록 Block Storage for Classic에 대한 편집자 플랫폼 액세스 역할과 작성자 서비스 액세스 역할이 지정되었는지 확인하십시오. IAM 콘솔 에서 IAM 액세스 역할을 확인할 수 있습니다. IAM 역할에 대한 자세한 정보는 IAM 액세스를 참조하십시오.
-
Key Protect 인스턴스가 없는 경우 이를 프로비저닝하십시오.
-
루트 키를 작성하십시오. 기본적으로 루트 키는 만료 날짜 없이 작성됩니다.
-
IAM 서비스 ID를 작성하십시오.
<service_ID_name>을 서비스 ID에 지정할 이름으로 대체하십시오. 이 서비스 ID는 Key Protect 볼륨에서 Block Storage for Classic 인스턴스에 액세스하는 데 사용됩니다.ibmcloud iam service-id-create <service_ID_name>출력 예
OK Service ID test-id is created successfully ID ServiceId-a1a11111-bb11-1111-a11b-1111111a11ba Name test-id Description CRN crn:v1:bluemix:public:iam-identity::a/1a1111aa2b11111aaa1a1111aa2aa111::serviceid:ServiceId-a1a11111-bb11-1111-a11b-1111111a11bb Version 1-bb11aa11a0aa1a11a011a1aaaa11a1bb Locked false -
서비스 ID에 대한 API 키를 작성하십시오.
<api-key-name>을 API 키의 이름으로 대체하고<service_ID_name>을 작성한 서비스 ID의 이름으로 대체하십시오. 나중에 검색할 수 없으므로 API 키를 저장해야 합니다. 이 API는 이후 단계에서 클러스터의 Kubernetes 시크릿에 저장됩니다.ibmcloud iam service-api-key-create <api_key_name> <service_ID_name> -
계정에서 IAM 사용 서비스의 목록을 검색하고 작성한 Key Protect 인스턴스의 이름을 기록해 두십시오.
ibmcloud resource service-instances -
Key Protect 인스턴스의 GUID를 검색하십시오. ID는 서비스 ID에 대한 IAM 서비스 정책을 작성하는 데 사용됩니다.
ibmcloud resource service-instance "<instance_name>" | grep GUID -
IAM 서비스 정책을 작성하여 Key Protect 인스턴스에 서비스 ID 액세스 권한을 부여하십시오. 다음 명령은 Key Protect 인스턴스에
Reader액세스 권한을 부여합니다. 독자 액세스 역할은 서비스 ID가 Key Protect 키를 검색해야 하는 최소 서비스 액세스 역할입니다. 자세한 정보는 Key Protect에 대한 사용자 액세스 관리를 참조하십시오.ibmcloud iam service-policy-create <service_ID_name> --roles Reader --service-name kms --service-instance <service_instance_GUID> -
다른 IAM 서비스 액세스 정책을 작성하여 서비스 ID 액세스 권한을 클러스터에 제공하십시오. 다음 명령은 클러스터에 대한 서비스 ID에 뷰어 플랫폼 액세스 역할 및 작성자 서비스 액세스 역할을 부여합니다.
ibmcloud ks cluster get <cluster_name>을 실행하여 클러스터 ID를 검색할 수 있습니다.ibmcloud iam service-policy-create <service_ID_name> --roles Writer,Viewer --service-name containers-kubernetes --service-instance <cluster_ID> -
이미
ibmcloud-block-storage-pluginHelm 차트를 설치한 경우 Helm 차트를 제거한 후 새 버전을 설치해야 합니다.Helm을 사용하지 않고 플러그인을 설치한 경우 새 버전을 설치하기 전에 블록 스토리지 플러그인 배치 및 연관된 모든 리소스를 수동으로 제거해야 합니다.
helm uninstall <name> <namespace> -
ibmcloud-block-storage-pluginHelm 차트를 설치하십시오.helm install <name> iks-charts/ibmcloud-block-storage-plugin -
ibm-block-secrets네임스페이스를 작성하십시오.kubectl create ns ibm-block-secrets -
블록 스토리지 플러그인의
ibm-block-secrets네임스페이스에서 역할 바인딩을 작성하십시오.kubectl create rolebinding ibmcloud-block-storage-plugin-byok --clusterrole=ibmcloud-block-storage-plugin-byok --serviceaccount=kube-system:ibmcloud-block-storage-plugin --group system:nodes --namespace=ibm-block-secrets -
Key Protect 서비스 인스턴스에서 루트 키에 액세스하기 위한 인증 정보가 포함된
secret.yaml이라는 Kubernetes 시크릿을 작성하십시오.- 시크릿에 대한 구성 파일을 작성하십시오.
apiVersion: v1 kind: Secret metadata: labels: kmsConfig: kpc-secretLabel name: <secret_name> # Enter a name for your secret. Example: my_secret namespace: <namespace> # Enter the name of the namespace where you want to create the secret. The secret must be in same namespace where your app is deployed. Example: default stringData: config: |- { "api_key":"<service_id_api_key>", # Enter the API key for the service ID that you created. Example: "AA1aAAaA1a21AAaA1aAAaAa-AA-1AAaaA1aA1aAaaaAA" "iam_endpoint":"https://iam.cloud.ibm.com", "key_protect_endpoint":"https://<region>.kms.cloud.ibm.com", # Example: "https://us-east.kms.cloud.ibm.com" "root_key_crn":"<rook_key_crn>", # Example: "crn:v1:bluemix:public:kms:<region>:a/1ab011ab2b11111aaa1a1111aa1aa111:11aa111a-1111-11a1-a111-a11a111aa111:key:11a11111-1a1a-111a-111a-11111a1a1aa1", "version":"" } type: ibm.io/kms-config ``` `stringData.config.key_protect_endpoint` : Key Protect 인스턴스의 지역적 엔드포인트를 입력하십시오. Key Protect 엔드포인트의 목록은 [지역 및 엔드포인트](/docs/key-protect?topic=key-protect-regions)를 참조하십시오. `stringData.config.root_key_crn` : 작성한 루트 키의 CRN을 입력하십시오. 루트 키 CRN을 검색하려면 다음 단계를 완료하십시오. 1. [IBM Cloud 콘솔](https://cloud.ibm.com/resources){: external}에서 리소스 목록으로 이동하십시오. 2. **서비스**를 클릭한 후 Key Protect 인스턴스를 클릭하십시오. 3. **조치 메뉴**에서 루트 키를 찾은 다음 **CRN 보기**를 클릭하십시오. 4. CRN을 복사하려면 **복사** 단추를 클릭하십시오. 1. 클러스터의 시크릿을 작성하십시오. ```sh {: pre} kubectl apply -f secret.yaml ``` 1. 시크릿이 작성되었는지 확인하십시오. ```sh {: pre} kubectl get secrets ``` -
다음 옵션 중 하나를 선택하여 루트 키로 데이터를 암호화하는
Block Storage for Classic인스턴스를 생성하십시오.- Key Protect 시크릿 을 참조하는 자체 스토리지 클래스를 작성하십시오.
- PVC에서 시크릿을 정의하고 제공된 스토리지 클래스 중 하나를 사용하십시오.
사용자 정의 스토리지 클래스를 사용하여 볼륨 데이터 암호화하기
먼저 자체 스토리지 클래스를 생성한 다음, 암호화된 볼륨을 사용하는 앱을 배포할 수 있습니다.
다음 단계에서는 구성이 동일한 여러 개의 암호화된 블록 스토리지 인스턴스를 작성하기 위해 사용할 수 있는 암호화된 사용자 정의 스토리지 클래스를 작성하는 방법에 대해 설명합니다. IBM 제공 스토리지 클래스 중 하나를 사용하여 암호화된 PVC를 작성하려면 PVC에서 직접 Key Protect 인증 정보를 참조하여 이를 수행할 수 있습니다.
-
스토리지 구성을 결정하십시오.
-
IBM 에서 제공하는 스토리지 클래스 중 하나를 기반으로, 암호화된 블록 스토리지 인스턴스를 프로비저닝하는 자체 스토리지 클래스를 생성하십시오.
kubectl get sc <storageclass_name> -o yaml을 실행하여 스토리지 클래스의 세부사항을 검색할 수 있습니다. 다음 예는ibmc-block-retain-bronze스토리지 클래스를 기반으로 합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: <name> # Enter the name of the storage class. Example: my_custom_storageclass parameters: billingType: hourly classVersion: "2" fsType: ext4 iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance encrypted: "true" # Enter "true" to enable encryption. encryptionKeySecret: <secret_name> # # #nter the name of the secret that you created earlier.Example: my_secret encryptionKeyNamespace: <namespace> # # #nter the namespace where you created your secret. Example: default provisioner: ibm.io/ibmc-block reclaimPolicy: Delete volumeBindingMode: Immediate -
클러스터에 스토리지 클래스를 작성하십시오.
kubectl apply -f storageclass.yaml -
자체 스토리지 클래스를 사용하여 PVC를 생성함으로써 앱에 ‘ Block Storage for Classic ’를 추가하세요.
Block Storage for Classic 시크릿을 참조하는 PVC 작성
Block Storage for Classic 인증 정보를 보유한 Kubernetes 시크릿을 지정하는 PVC를 작성하여 암호화된 Key Protect를 프로비저닝할 수 있습니다.
다음 단계에서는 암호화된 Key Protect 인스턴스를 작성하기 위해 PVC에서 Block Storage for Classic 인증 정보를 참조할 수 있는 방법을 보여줍니다. 각 PVC에서 Key Protect 인증 정보를 지정하지 않고 여러 개의 암호화된 볼륨을 작성하기 위해 암호화된 사용자 정의 스토리지 클래스를 작성할 수 있습니다.
-
제공된Block Storage for Classic 스토리지 클래스를 검토하여 앱 요구사항을 가장 잘 충족하는 스토리지 클래스를 판별하십시오. 제공된 스토리지 클래스가 앱 요구사항을 충족시키지 못하는 경우에는 고유한 사용자 정의된 스토리지 클래스를 작성할 수 있습니다.
-
Key Protect 서비스 인증 정보를 저장한 Kubernetes 시크릿을 참조하는 PVC 구성 파일을
pvc.yaml이라는 이름으로 작성하십시오. 이 시크릿을 작성하려면 Block Storage for Classic의 암호화 설정을 참조하십시오.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc_name> # Enter a name for your PVC. annotations: volume.beta.kubernetes.io/storage-class: "<storage_class>" # Enter a storage class. To see a list of storageclasses run `kubectl get storageclasses`. labels: encrypted: "true" encryptionKeyNamespace: <namespace> # Enter the namespace where your secret was created. encryptionKeySecret: <secret_name> # Enter the name of the secret you created. spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi -
클러스터에 PVC를 작성하십시오.
kubectl apply -f pvc.yaml -
PVC의 상태를 확인하십시오.
kubectl get pvc -
PVC가 바인드할 때까지 기다린 후 PVC를 사용하는 배치를 작성하십시오.
Block Storage for Classic 볼륨의 암호화 확인
볼륨 마운트 경로를 확인하여 볼륨의 암호화를 확인할 수 있습니다.
-
앱 팟(Pod)에 로그인하십시오.
<pod_name>을 암호화된 Block Storage for Classic 볼륨을 마운트하는 팟(Pod)의 이름으로 대체하십시오.kubectl exec <pod_name> -it bash -
팟(Pod)의 파일 시스템을 나열하십시오.
df -h -
암호화된 Block Storage for Classic 볼륨에 대한 파일 시스템 경로를 검토하십시오.
- 암호화된 볼륨의 경로 구조는
/dev/mapper/<pvc-ID_encrypted>입니다. 이 예에서 암호화된 볼륨은 팟(Pod)의/test파일 경로에 마운트됩니다.
Filesystem Size Used Avail Use% Mounted on overlay 98G 8.2G 85G 9% / tmpfs 64M 0 64M 0% /dev tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/mapper/pvc-a011a111-1111-1111-111a-aaa1a1111a11_encrypted 20G 45M 20G 1% /test ``` * 암호화되지 않은 볼륨의 경로 구조는 `dev/mapper/<random_string>`입니다. ```sh {: screen} Filesystem Size Used Avail Use% Mounted on overlay 98G 16G 78G 17% / tmpfs 64M 0 64M 0% /dev tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup /dev/mapper/3600a09803830476e733f4e477370716e 24G 45M 24G 1% /test ``` - 암호화된 볼륨의 경로 구조는
Kubernetes 시크릿을 삭제하더라도 볼륨 데이터에 대한 액세스 권한은 취소되지 않습니다. 팟(Pod) 전용 배치를 작성한 경우 팟(Pod)을 삭제해야 합니다. 배치를 작성한 경우 배치를 삭제해야 합니다.
앱에 블록 스토리지 추가
클러스터에 블록 스토리지를 동적으로 프로비저닝하기 위해 영구 볼륨 클레임(PVC)을 생성합니다. 동적 프로비저닝은 일치하는 지속적 볼륨(PV)을 자동으로 작성하고 IBM Cloud 인프라 계정에서 실제 스토리지 디바이스를 주문합니다.
블록 스토리지는 ReadWriteOnce 액세스 모드로 제공됩니다. 한 번에 클러스터에 있는 하나의 작업자 노드의 하나의 팟(Pod)에만 마운트할 수 있습니다.
시작하기 전에:
- 방화벽이 있는 경우에는 PVC를 작성할 수 있도록 클러스터가 있는 구역의 IBM Cloud 인프라 IP 범위에 대해 egress 액세스를 허용하십시오.
- IBM Cloud Block Storage 플러그인을 설치하십시오.
- 사전 정의된 스토리지 클래스를 결정하거나 사용자 정의된 스토리지 클래스를 작성하십시오.
블록 스토리지를 Stateful 세트에 배치하려고 하십니까? 자세한 정보는 Stateful 세트에서의 블록 스토리지 사용을 참조하십시오.
블록 스토리지를 추가하려면 다음을 수행하십시오.
-
지속적 볼륨 클레임(PVC)을 정의하는 구성 파일을 작성하고 이 구성을
.yaml파일로 저장하십시오.- 브론즈, 실버, 골드 스토리지 클래스 예: 다음
.yaml파일은"ibmc-block-silver"스토리지 클래스 이름이block-storage-pvc이고 시간별로 청구되며 GB 크기가24Gi인 청구를 작성합니다.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteOnce resources: requests: storage: 24Gi storageClassName: ibmc-block-silver ``` - **사용자 고유의 스토리지 클래스 사용 예**: 다음 `.yaml` 파일은 스토리지 클래스 `ibmc-block-retain-custom`의 이름이 `block-storage-pvc`이고 시간별로 청구되며 GB 크기가 `45Gi`이고 IOPS가 `"300"`인 청구를 작성합니다. ```yaml {: codeblock} apiVersion: v1 kind: PersistentVolumeClaim metadata: name: block-storage-pvc labels: billingType: "hourly" region: us-south zone: dal13 spec: accessModes: - ReadWriteOnce resources: requests: storage: 45Gi iops: "300" storageClassName: ibmc-block-retain-custom ``` `name` : PVC의 이름을 입력하십시오. `billingType` : metadata labels 섹션에서, 스토리지 요금이 계산되는 빈도를 "monthly" 또는 "hourly"로 지정하십시오. 기본값은 "시간별"입니다. `region` : metadata labels 섹션에서, 블록 스토리지를 프로비저닝할 지역을 지정하십시오. 지역을 지정하는 경우에는 구역도 지정해야 합니다. 지역을 지정하지 않거나 지정된 지역을 찾을 수 없는 경우, 스토리지는 클러스터와 동일한 지역에 작성됩니다. 이 옵션은 IBM Cloud Block Storage 플러그인 버전 1.0.1 이상에서만 지원됩니다. 이전 플러그인 버전의 경우, 다중 구역 클러스터를 보유 중이면 모든 구역 간에 볼륨 요청의 균등한 밸런스를 유지하기 위해 스토리지가 프로비저닝되는 구역이 라운드 로빈 기반으로 선택됩니다. 스토리지에 대한 구역을 지정하려면 우선 [사용자 정의된 스토리지 클래스](#block_multizone_yaml)를 작성할 수 있습니다. 그리고 사용자 정의된 스토리지 클래스로 PVC를 작성하십시오. `zone` : metadata labels 섹션에서, 블록 스토리지를 프로비저닝할 구역을 지정하십시오. 구역을 지정하는 경우에는 지역도 지정해야 합니다. 구역을 지정하지 않거나 지정된 구역을 다중 구역 클러스터에서 찾을 수 없으면 구역이 라운드 로빈 기반으로 선택됩니다. 이 옵션은 IBM Cloud Block Storage 플러그인 버전 1.0.1 이상에서만 지원됩니다. 이전 플러그인 버전의 경우, 다중 구역 클러스터를 보유 중이면 모든 구역 간에 볼륨 요청의 균등한 밸런스를 유지하기 위해 스토리지가 프로비저닝되는 구역이 라운드 로빈 기반으로 선택됩니다. 스토리지에 대한 구역을 지정하려면 우선 [사용자 정의된 스토리지 클래스](#block_multizone_yaml)를 작성할 수 있습니다. 그리고 사용자 정의된 스토리지 클래스로 PVC를 작성하십시오. `storage` : spec resources requests 섹션에서, 블록 스토리지의 크기를 기가바이트(Gi) 단위로 입력하십시오. 스토리지가 프로비저닝된 후에는 블록 스토리지의 크기를 변경할 수 없습니다. 저장할 데이터의 크기와 일치하도록 크기를 지정해야 합니다. `iops` : 이 옵션은 사용자 정의 스토리지 클래스(`ibmc-block-custom / ibmc-block-retain-custom`)에서만 사용할 수 있습니다. 사양 리소스 요청 섹션에서 허용 범위 내에서 100의 배수가 되도록 스토리지의 총 IOPS를 지정하십시오. 나열된 것과 이외의 IOPS를 선택하면 IOPS가 올림됩니다. `storageClassName` : spec 섹션에서, 블록 스토리지를 프로비저닝하는 데 사용할 스토리지 클래스의 이름을 입력하십시오. [IBM 제공 스토리지 클래스](#block_storageclass_reference) 중 하나를 사용하거나 [ 사용자 고유의 스토리지 클래스를 작성](#block_custom_storageclass)하도록 선택할 수 있습니다. 스토리지 클래스를 지정하지 않으면 기본 스토리지 클래스 `ibmc-file-bronze`를 사용하여 PV가 작성됩니다. 사용자 정의된 스토리지 클래스를 사용하려면 해당 스토리지 클래스 이름, 올바른 IOPS 및 크기를 사용하여 PVC를 작성하십시오. {: tip} - 브론즈, 실버, 골드 스토리지 클래스 예: 다음
-
PVC를 작성하십시오.
kubectl apply -f block-storage.yaml -
PVC가 작성되고 PV에 바인딩되는지 확인하십시오. 이 프로세스에는 몇 분 정도 소요될 수 있습니다.
kubectl get pvc출력 예
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE block-storage-pvc Bound pvc-1aa1aaaa-11a1-48d1-ab11-11b11111f3bc 45Gi RWO ibmc-block-silver 150m -
PV를 배치에 마운트하려면 구성
.yaml파일을 작성하고 PV를 바인드하는 PVC를 지정하십시오.apiVersion: apps/v1 kind: Deployment metadata: name: <deployment_name> labels: app: <deployment_label> spec: selector: matchLabels: app: <app_name> template: metadata: labels: app: <app_name> spec: containers: - image: <image_name> name: <container_name> volumeMounts: - name: <volume_name> mountPath: /<file_path> volumes: - name: <volume_name> persistentVolumeClaim: claimName: <pvc_name>app- metadata에서, 배치의 레이블을 입력하십시오.
matchLabels.app및labels.app- spec selector 및 template metadata에서, 앱의 레이블을 입력하십시오.
image- 사용할 컨테이너 이미지의 이름입니다. IBM Cloud Container Registry 계정에서 사용 가능한 이미지를 나열하려면
ibmcloud cr image-list를 실행하십시오. name- 클러스터에 배치하려는 컨테이너의 이름입니다.
mountPath- container volumeMounts 섹션에서, 컨테이너 내에서 볼륨이 마운트되는 디렉토리의 절대 경로를 입력하십시오. 마운트 경로에 기록된 데이터는 실제 블록 스토리지 인스턴스의 루트 디렉토리 아래에 저장됩니다. 서로 다른 앱 간에 볼륨을 공유하려면, 각 앱에 대해 볼륨 하위 경로를 지정할 수 있습니다.
name- container volumeMounts 섹션에서, 팟(Pod)에 마운트할 볼륨의 이름을 입력하십시오.
name- volumes 섹션에서, 팟(Pod)에 마운트할 볼륨의 이름을 입력하십시오. 일반적으로 이 이름은
volumeMounts/name과 동일합니다. claimName- 볼륨의 지속적 볼륨 청구 섹션에 사용할 PV를 바인드하는 PVC의 이름을 입력하십시오.
-
배치를 작성하십시오.
kubectl apply -f <local_yaml_path> -
PV가 성공적으로 마운트되었는지 확인하십시오.
kubectl describe deployment <deployment_name>마운트 지점은 Volume Mounts 필드에 있고 볼륨은 Volumes 필드에 있습니다.
Volume Mounts: /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro) /volumemount from myvol (rw) ... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: block-storage-pvc ReadOnly: false
클러스터의 기존 블록 스토리지 사용
클러스터에서 사용하고자 하는 기존 물리적 스토리지 장치가 있는 경우, PV와 PVC를 수동으로 생성하여 스토리지를 정적으로 프로비저닝할 수 있습니다.
기존 스토리지를 앱에 마운트하려면 우선 PV에 대한 모든 필수 정보를 검색해야 합니다.
기존 블록 스토리지의 정보 검색
-
IBM Cloud 인프라 계정의 API 키를 검색하거나 생성하십시오.
- IBM Cloud 인프라 포털 에 로그인하십시오.
- 계정을 선택한 후 사용자, 사용자 목록을 선택하십시오.
- 자신의 사용자 ID를 찾으십시오.
- API 키 열에서 생성을 클릭하여 API 키를 생성하거나 보기를 클릭하여 기존 API 키를 보십시오.
-
IBM Cloud 인프라 계정의 API 사용자 이름을 검색하십시오.
- 사용자 목록 메뉴에서 자신의 사용자 ID를 선택하십시오.
- API 액세스 정보 섹션에서 API 사용자 이름을 찾으십시오.
-
IBM Cloud 인프라 CLI 플러그인에 로그인하십시오.
ibmcloud sl init -
IBM Cloud 인프라 계정의 사용자 이름 및 API 키를 사용하여 인증하도록 선택하십시오.
-
이전 단계에서 검색한 사용자 이름 및 API 키를 입력하십시오.
-
사용 가능한 블록 스토리지 디바이스를 나열하십시오.
ibmcloud sl block volume-list출력 예
id username datacenter storage_type capacity_gb bytes_used lunId 11111111 IBM01AAA1111111-1 wdc07 endurance_block_storage 45 - 2 -
볼륨 세부사항을 검색하십시오.
<volume_ID>를 6단계에서 검색한 블록 스토리지 볼륨의 ID로 대체하십시오.ibmcloud sl block volume-detail <volume_ID>출력 예
ID 11111111 User name IBM01AAA1111111-1 Type endurance_block_storage Capacity (GB) 45 LUN Id 2 IOPs 100 Datacenter wdc07 Target IP 10.XXX.XX.XXX # of Active Transactions 0 Replicant Count 0 -
클러스터에 마운트할 블록 스토리지 디바이스의
ID,Capacity,LUN Id,Datacenter및Target IP를 기록해 두십시오. 참고: 클러스터에 기존 스토리지를 마운트하려면 스토리지와 동일한 구역에 작업자 노드가 있어야 합니다. 작업자 노드의 구역을 확인하려면ibmcloud ks worker ls --cluster <cluster_name_or_ID>를 실행하십시오.
지속적 볼륨(PV) 및 일치하는 지속적 볼륨 청구(PVC) 작성
-
선택사항:
retain스토리지 클래스로 프로비저닝한 스토리지가 있으면 PVC를 제거할 때 PV 및 실제 스토리지 디바이스가 제거되지 않습니다. 클러스터의 스토리지를 재사용하려면 우선 PV를 제거해야 합니다. 기존 PV를 나열하고 지속적 스토리지에 속하는 PV를 찾으십시오. PV는released상태입니다.kubectl get pv -
PV를 제거하십시오.
kubectl delete pv <pv_name> -
PV가 제거되었는지 확인하십시오.
kubectl get pv -
PV에 대한 구성 파일을 작성하십시오. 이전에 검색한 매개변수를 포함하십시오.
apiVersion: v1 kind: PersistentVolume metadata: name: "block-storage-pv" # Enter a name for your PV. For example, my-static-pv. labels: failure-domain.beta.kubernetes.io/region: "<region>" # Example us-east. failure-domain.beta.kubernetes.io/zone: "<zone>" # Example: wdc04. See /docs/containers?topic=containers-regions-and-zones#zones-sz spec: capacity: storage: "<storage>" accessModes: - ReadWriteOnce flexVolume: driver: "ibm/ibmc-block" fsType: "<fs_type>" # Enter ext or xfs options: "Lun": "<Lun_ID>" "TargetPortal": "<TargetPortal>" "VolumeID": "<VolumeID>" "volumeName": "block-storage-pv" # Enter the same value as your PV name from metadata.namename- PV에 이름을 지정하십시오. 예를 들어,
block-storage-pv입니다. 또한spec.FlexVolume.options에 이 값을volumeName으로 입력해야 합니다. labels- 이전에 검색한 지역 및 구역을 입력하십시오. 클러스터에서 스토리지를 마운트하려면 지속적 스토리지와 동일한 지역 및 구역에 작업자 노드가 최소한 하나 이상 있어야 합니다. 볼륨 세부사항을 검색하려면
ibmcloud sl block volume-list를 실행하여 볼륨 ID를 가져온 후ibmcloud sl block volume-detail <volume_ID>를 실행하여 볼륨의 세부사항을 가져오십시오. region- 블록 스토리지가 있는 지역을 입력하십시오. 클러스터와 블록 스토리지는 동일한 지역에 있어야 합니다. 클러스터 위치를 찾으려면
ibmcloud ks cluster ls를 실행하십시오. 사용 가능한 지역 및 구역에 대한 자세한 정보는 지역 및 구역을 참조하십시오. 예:us-east. zone- 스토리지 볼륨이 있는 구역을 입력하십시오. 볼륨 세부사항을 검색하려면
ibmcloud sl block volume-list를 실행하여 볼륨 ID를 가져온 후ibmcloud sl block volume-detail <volume_ID>를 실행하여 볼륨의 세부사항을 가져오십시오. 블록 스토리지를 클러스터에 연결하려면 연결하려는 볼륨과 동일한 구역에서 사용 가능한 작업자 노드가 있어야 합니다. 작업자 노드의 구역을 찾으려면ibmcloud ks worker ls -c <cluster>를 실행하십시오. 예:wdc04. storage- 클러스터에 연결 기존 블록 스토리지 볼륨의 스토리지 크기를 입력하십시오. 이 스토리지 크기는 기가바이트 단위로 기록해야 합니다(예: 20Gi(20GB) 또는 1000Gi(1TB)). 볼륨 세부사항을 검색하려면
ibmcloud sl block volume-list를 실행하여 볼륨 ID를 가져온 후ibmcloud sl block volume-detail <volume_ID>를 실행하여 볼륨의 세부사항을 가져오십시오. fsType- 기존 블록 스토리지에 대해 구성된 파일 시스템 유형을 입력하십시오.
ext4또는xfs중에서 선택하십시오. 이 옵션을 지정하지 않으면 기본적으로 PV가ext4로 설정됩니다. 잘못된fsType이 정의된 경우 PV 작성에 성공하지만 PV를 팟(Pod)에 마운트하는 데 실패합니다. 볼륨 세부사항을 검색하려면ibmcloud sl block volume-list를 실행하여 볼륨 ID를 가져온 후ibmcloud sl block volume-detail <volume_ID>를 실행하여 볼륨의 세부사항을 가져오십시오. Lun- 블록 스토리지 볼륨의 LUN ID를 입력하십시오. 볼륨 세부사항을 검색하려면
ibmcloud sl block volume-list를 실행하여 볼륨 ID를 가져온 후ibmcloud sl block volume-detail <volume_ID>를 실행하여 볼륨의 세부사항을 가져오십시오. TargetPortal- 블록 스토리지의 IP 주소를 입력하십시오.
TargetPortal매개변수를 검색하려면ibmcloud sl block volume-list를 실행하여 볼륨 ID를 가져온 후ibmcloud sl block volume-detail <volume_ID>를 실행하고 출력에서Target IP를 기록하십시오. VolumeId- 블록 스토리지의 ID를 입력하십시오. 볼륨 세부사항을 검색하려면
ibmcloud sl block volume-list를 실행하십시오. volumeName- PV 이름과 동일한 값을 입력하십시오. 예를 들어,
block-storage-pv입니다.
-
클러스터에 PV를 작성하십시오.
kubectl apply -f pv.yaml -
PV가 작성되었는지 확인하십시오.
kubectl get pv -
다른 구성 파일을 작성하여 PVC를 작성하십시오. PVC가 이전에 작성한 PV와 일치하려면
storage및accessMode에 대해 동일한 값을 선택해야 합니다.storage-class필드는 빈 문자열이어야 합니다. 이러한 필드 중에 PV와 일치하지 않는 것이 있는 경우에는 대신 새 PV가 자동으로 작성됩니다.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: block-storage-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: "20Gi" storageClassName: "" -
PVC를 작성하십시오.
kubectl apply -f static-pvc.yaml -
PVC가 작성되어 이전에 작성한 PV에 바인딩되었는지 확인하십시오. 이 프로세스에는 몇 분 정도 소요될 수 있습니다.
kubectl describe pvc static-pvc출력 예
Name: static-pvc Namespace: default StorageClass: Status: Bound -
선택사항 다음 예제 팟(Pod) 구성 파일을
pod.yaml파일로 저장하십시오.apiVersion: v1 kind: Pod metadata: name: block-storage labels: app: block-storage spec: containers: - name: block-storage image: nginx command: ["/bin/sh"] args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] workingDir: /home imagePullPolicy: Always ports: - containerPort: 80 volumeMounts: - name: block-storage-pv mountPath: /home volumes: - name: block-storage-pv persistentVolumeClaim: claimName: block-storage-pvc -
클러스터에서 팟(Pod)을 작성하십시오.
kubectl create -f pod.yaml -
팟(Pod)이
Running상태가 된 후 로그를 가져오십시오.kubectl logs출력 예
2022-01-21 16:11:00
PV를 작성하여 PVC에 바인딩했습니다. 그런 다음 블록 스토리지를 사용하는 앱을 배치했습니다. 이제 클러스터 사용자가 해당 배치에 PVC를 마운트하고 지속적 볼륨에서 읽기 및 쓰기를 시작할 수 있습니다.
Stateful 세트에서의 블록 스토리지 사용
데이터베이스와 같은 Stateful 앱이 있는 경우에는 앱의 데이터를 저장하기 위해 블록 스토리지를 사용하는 Stateful 세트를 작성할 수 있습니다. 또는, IBM Cloud DBaaS(Database-as-a-Service)를 사용하여 데이터를 클라우드에 저장할 수 있습니다.
- 스테이트풀 세트에 블록 스토리지를 추가할 때 주의해야 할 점은 무엇인가요?
- Stateful 세트에 스토리지를 추가하려는 경우에는 Stateful 세트 YAML의
volumeClaimTemplates섹션에 스토리지 구성을 지정합니다.volumeClaimTemplates는 PVC의 기반이며 프로비저닝할 블록 스토리지의 스토리지 클래스와 크기 또는 IOPS를 포함할 수 있습니다. 그러나volumeClaimTemplates에 레이블을 포함하려는 경우 Kubernetes는 PVC를 작성할 때 이러한 레이블을 포함하지 않습니다. 대신 사용자가 직접 Stateful 세트에 해당 레이블을 추가해야 합니다.
동시에 두 개의 Stateful 세트를 배치할 수는 없습니다. 한 Stateful 세트가 완전히 배치되기 전에 다른 세트를 작성하려 시도하면 Stateful 세트 배치 작업에서 예기치 않은 결과가 발생할 수 있습니다.
- 특정 존에서 스테이트풀 세트를 생성하려면 어떻게 해야 하나요?
- 다중 구역 클러스터에서는 Stateful 세트 YAML의
spec.selector.matchLabels및spec.template.metadata.labels섹션에서 Stateful 세트를 작성할 구역 및 지역을 지정해야 합니다. 또는, 이러한 레이블을 사용자 정의된 스토리지 클래스에 추가하고 이 스토리지 클래스를 Stateful 세트의volumeClaimTemplates섹션에서 사용할 수 있습니다. - 포드가 준비될 때까지 PV를 상태 유지형 포드에 바인딩하는 것을 미룰 수 있나요?
- 예,
volumeBindingMode: WaitForFirstConsumer필드를 포함하는 PVC에 대한 사용자 고유의 스토리지 클래스를 작성 할 수 있습니다. - 스테이트풀 세트에 블록 스토리지를 추가하려면 어떤 방법이 있나요?
- Stateful 세트를 작성할 때 자동으로 PVC를 작성하려는 경우에는 동적 프로비저닝을 사용하십시오. Stateful 세트에 대해 PVC를 사전 프로비저닝하거나 기존 PVC를 사용하도록 선택할 수도 있습니다.
Stateful 세트를 작성할 때 동적 프로비저닝을 사용하여 PVC 작성
Stateful 세트를 작성할 때 PVC를 자동으로 작성하려면 이 선택사항을 사용하십시오.
시작하기 전에: 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
다음 단계를 완료하여 클러스터의 모든 기존 Stateful 세트가 완전히 배치되었는지 확인하십시오. 특정 Stateful 세트가 여전히 배치 중인 경우에는 Stateful 세트 작성을 시작할 수 없습니다. 예기치 않은 결과를 방지하려면 클러스터 내의 모든 Stateful 세트가 완전히 배치될 때까지 기다려야 합니다.
-
클러스터에 있는 기존 Stateful 세트를 나열하십시오.
kubectl get statefulset --all-namespaces출력 예
NAME DESIRED CURRENT AGE mystatefulset 3 3 6s -
각 Stateful 세트의 Pods Status를 보고 해당 Stateful 세트의 배치가 완료되었는지 확인하십시오.
kubectl describe statefulset <statefulset_name>출력 예
Name: nginx Namespace: default CreationTimestamp: Fri, 05 Oct 2022 13:22:41 -0400 Selector: app=nginx,billingType=hourly,region=us-south,zone=dal10 Labels: app=nginx billingType=hourly region=us-south zone=dal10 Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"podManagementPolicy":"Par..." Replicas: 3 desired | 3 total Pods Status: 0 Running / 3 Waiting / 0 Succeeded / 0 Failed Pod Template: Labels: app=nginx billingType=hourly region=us-south zone=dal10 ...CLI 출력의 Replicas 섹션이 Pods Status 섹션의 Running 팟(Pod) 수와 동일하면 Stateful 세트가 완전히 배치된 것입니다. Stateful 세트가 아직 완전히 배치되지 않은 경우에는 진행하기 전에 배치가 완료되기를 기다리십시오.
-
Stateful 세트에 대한 구성 파일과 이 Stateful 세트를 노출하는 데 사용하는 서비스를 작성하십시오. 다음 예는 NGINX를 세 개의 복제본을 포함하는 Stateful 세트로 배치하는 방법을 보여줍니다. 각 복제본에 대해,
ibmc-block-retain-bronze스토리지 클래스에 정의된 스펙에 따라 20기가바이트의 블록 스토리지 디바이스가 프로비저닝됩니다. 모든 스토리지는dal10구역에서 프로비저닝됩니다. 다른 구역에서는 블록 스토리지에 액세스할 수 없으므로 Stateful 세트의 모든 복제본 또한dal10에 있는 작업자 노드에 배치됩니다.apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx spec: serviceName: "nginx" replicas: 3 podManagementPolicy: Parallel selector: matchLabels: app: nginx billingType: "hourly" region: "us-south" # Enter the region where your cluster is located. zone: "dal10" template: metadata: labels: app: nginx billingType: "hourly" region: "us-south" zone: "dal10" spec: containers: - name: nginx image: nginx ports: - containerPort: 80 name: web volumeMounts: - name: myvol mountPath: /usr/share/nginx/html volumeClaimTemplates: - metadata: name: myvol spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi iops: "300" #required only for performance storage storageClassName: ibmc-block-retain-bronze다음 예는 NGINX를 세 개의 복제본을 포함하는 Stateful 세트로 배치하는 방법을 보여줍니다. Stateful 세트는 블록 스토리지가 작성된 지역 및 구역을 영역을 지정하지 않습니다. 대신, Stateful 세트는 반친화성 규칙을 사용하여 팟(Pod)이 작업자 노드와 구역에 걸쳐 분산되도록 합니다.
topologykey: failure-domain.beta.kubernetes.io/zone을 정의하면 작업자 노드가app: nginx레이블이 있는 팟(Pod)과 동일한 구역에 있는 경우 Kubernetes 스케줄러가 작업자 노드에 팟(Pod)을 스케줄할 수 없습니다. 각 Stateful 세트 팟(Pod)에 대해 두 개의 PVC가volumeClaimTemplates섹션에 정의된 대로 작성되지만 블록 스토리지 인스턴스의 작성은 스토리지를 사용하는 Stateful 세트 팟(Pod)이 스케줄될 때까지 지연됩니다. 이러한 구성을 ‘토폴로지 인식 볼륨 스케줄링’이라고 합니다.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-block-bronze-delayed parameters: billingType: hourly classVersion: "2" fsType: ext4 iopsPerGB: "2" sizeRange: '[20-12000]Gi' type: Endurance provisioner: ibm.io/ibmc-block reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer --- apiVersion: v1 kind: Service metadata: name: nginx labels: app: nginx spec: ports: - port: 80 name: web clusterIP: None selector: app: nginx --- apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: serviceName: "nginx" replicas: 3 podManagementPolicy: "Parallel" selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - nginx topologyKey: failure-domain.beta.kubernetes.io/zone containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 ports: - containerPort: 80 name: web volumeMounts: - name: myvol1 mountPath: /usr/share/nginx/html - name: myvol2 mountPath: /tmp1 volumeClaimTemplates: - metadata: name: myvol1 spec: accessModes: - ReadWriteOnce # access mode resources: requests: storage: 20Gi storageClassName: ibmc-block-bronze-delayed - metadata: name: myvol2 spec: accessModes: - ReadWriteOnce # access mode resources: requests: storage: 20Gi storageClassName: ibmc-block-bronze-delayedname- Stateful 세트의 이름을 입력하십시오. 입력하는 이름은
<volume_name>-<statefulset_name>-<replica_number>형식으로 PVC의 이름을 작성하는 데 사용됩니다. serviceName- Stateful 세트를 노출하는 데 사용할 서비스의 이름을 입력하십시오.
replicas- Stateful 세트의 복제본 수를 입력하십시오.
podManagementPolicy- Stateful 세트에 대해 사용할 팟(Pod) 관리 정책을 입력하십시오.
- OrderedReady: 이 선택사항을 사용하면 Stateful 세트 복제본이 순서대로 배치됩니다. 예를 들어, 세 개의 복제본을 지정한 경우, Kubernetes는 첫 번째 복제본의 PVC를 작성하고, 이 PVC가 바인드될 때까지 기다리고, Stateful 세트 복제본을 배치하고, PVC를 복제본에 마운트합니다. 이 배치가 완료되고 나면 두 번째 복제본이 배치됩니다. 이 옵션에
대한 자세한 내용은
OrderedReady의 ‘Pod 관리’를 참조하십시오 - Parallel: 이 옵션을 사용하면 모든 상태 저장 세트 복제본의 배치가 동시에 시작됩니다. 앱에서 복제본의 병렬 배치를 지원하는 경우에는 PVC 및 Stateful 세트 복제본의 배치 시간을 절약하기 위해 이 선택사항을 사용하십시오.
- OrderedReady: 이 선택사항을 사용하면 Stateful 세트 복제본이 순서대로 배치됩니다. 예를 들어, 세 개의 복제본을 지정한 경우, Kubernetes는 첫 번째 복제본의 PVC를 작성하고, 이 PVC가 바인드될 때까지 기다리고, Stateful 세트 복제본을 배치하고, PVC를 복제본에 마운트합니다. 이 배치가 완료되고 나면 두 번째 복제본이 배치됩니다. 이 옵션에
대한 자세한 내용은
matchLabels- spec selector 섹션에서, Stateful 세트 및 PVC에 포함시킬 모든 레이블을 입력하십시오. Stateful 세트의
volumeClaimTemplates에 포함하는 레이블은 Kubernetes가 인식하지 않습니다. 포함시킬 수 있는 레이블의 샘플로는 다음과 같은 항목이 있습니다.- region 및 zone: 모든 Stateful 세트 복제본 및 PVC를 하나의 특정 구역에서 작성하려는 경우에는 두 레이블을 모두 추가하십시오. 사용하는 스토리지 클래스에 구역 및 지역을 지정할 수도 있습니다. 다중 구역 클러스터를 보유한 상태에서 구역 및 지역을 지정하지 않으면 모든 구역 간에 볼륨 요청의 균등한 밸런스를 유지하기 위해 스토리지가 프로비저닝되는 구역이 라운드 로빈 기반으로 선택됩니다.
billingType: PVC에 적용할 청구 유형을 입력하십시오.hourly또는monthly중에서 선택하십시오. 이 레이블을 지정하지 않으면 모든 PVC가 시간별 비용 청구 유형으로 작성됩니다.
labels- spec template metadata 섹션에서
spec.selector.matchLabels섹션에 추가한 것과 동일한 레이블을 입력하십시오. affinity- spec template spec 섹션에서, Stateful 세트 팟(Pod)이 작업자 노드 및 구역 전체에 분산되도록 하기 위한 반친화성 규칙을 지정하십시오. 이 예는 Stateful 세트 팟(Pod)이
app: nginx레이블이 있는 팟(Pod)이 실행되는 작업자 노드에서 스케줄되지 않는 것을 선호하는 반친화성 규칙을 보여줍니다.topologykey: failure-domain.beta.kubernetes.io/zone은 이 반친화성 규칙을 더 제한하며 작업자 노드가app: nginx레이블이 있는 팟(Pod)과 동일한 구역에 있는 경우 팟(Pod)이 작업자 노드에서 스케줄되지 않도록 합니다. 이 반친화성 규칙을 사용하면 작업자 노드 및 구역에 대해 반친화성을 구현할 수 있습니다. name- spec volumeClaimTemplates metadata 섹션에서, 볼륨의 이름을 입력하십시오.
spec.containers.volumeMount.name섹션에 정의한 것과 동일한 이름을 사용하십시오. 여기에 입력하는 이름은<volume_name>-<statefulset_name>-<replica_number>형식으로 PVC의 이름을 작성하는 데 사용됩니다. storage- spec volumeClaimTemplates spec resources requests 섹션에서, 블록 스토리지의 크기를 기가바이트(Gi) 단위로 입력하십시오.
iops- spec volumeClaimTemplates spec resources requests 섹션에서, Performance 스토리지를 프로비저닝하려는 경우에는 IOPS 수를 입력하십시오. Endurance 스토리지 클래스를 사용하면서 IOPS 수를 지정하면 IOPS 수가 무시됩니다. 대신 스토리지 클래스에 지정된 IOPS가 사용됩니다.
storageClassName- spec volumeClaimTemplates spec 섹션에서, 사용할 스토리지 클래스를 입력하십시오. 기존 스토리지 클래스를 나열하려면
kubectl get sc | grep block``을 실행하십시오. 스토리지 클래스를 지정하지 않으면 클러스터에 설정된 기본 스토리지 클래스를 사용하여 PVC가 작성됩니다. Stateful 세트가 블록 스토리지를 사용하여 프로비저닝되도록 기본 스토리지 클래스가ibm.io/ibmc-block프로비저너를 사용하는지 확인하십시오.
-
Stateful 세트를 작성하십시오.
kubectl apply -f statefulset.yaml -
Stateful 세트가 배치될 때까지 기다리십시오.
kubectl describe statefulset <statefulset_name>PVC의 현재 상태를 보려면
kubectl get pvc를 실행하십시오. PVC의 이름은<volume_name>-<statefulset_name>-<replica_number>로 형식화됩니다.
스테이트풀 세트와 기존 PVC를 활용한 정적 프로비저닝
Stateful 세트를 작성하기 전에 PVC를 사전 프로비저닝하거나 기존 PVC를 Stateful 세트와 함께 사용할 수 있습니다.
Stateful 세트를 작성할 때 동적으로 PVC를 프로비저닝하는 경우, PVC의 이름은 Stateful 세트 YAML 파일에 사용한 값에 따라 지정됩니다. Stateful 세트가 기존 PVC를 사용하기 위해서는 PVC의 이름이 동적 프로비저닝을 사용할 때 자동으로 작성되는 이름과 일치해야 합니다.
시작하기 전에: 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
- Stateful 세트를 작성하기 전에 PVC를 사전 프로비저닝하려는 경우, 앱에 블록 스토리지 추가의 1 - 3단계에 따라 각 Stateful 세트 복제본에 대한 PVC를 작성하십시오.
<volume_name>-<statefulset_name>-<replica_number>형식을 따르는 이름을 사용하여 PVC를 작성해야 합니다.
volume_name-
Stateful 세트의
spec.volumeClaimTemplates.metadata.name섹션에 지정할 이름을 사용하십시오(예:nginxvol). statefulset_name-
Stateful 세트의
metadata.name섹션에 지정할 이름을 사용하십시오(예:nginx_statefulset). replica_number-
0부터 시작하는 복제본의 수를 입력하십시오.
예를 들어, 세 개의 Stateful 세트 복제본을 작성해야 하는 경우에는
nginxvol-nginx_statefulset-0,nginxvol-nginx_statefulset-1및nginxvol-nginx_statefulset-2와 같은 이름을 가진 세 개의 PVC를 작성하십시오.기존 스토리지 디바이스에 대한 PVC 및 PV를 작성하시겠습니까? 정적 프로비저닝을 사용하여 PVC 및 PV를 작성하십시오.
- 동적 프로비저닝: Stateful 세트를 작성할 때 PVC 작성의 단계에 따라 Stateful 세트를 작성하십시오. PVC의 이름은
<volume_name>-<statefulset_name>-<replica_number>형식을 따릅니다. Stateful 세트 스펙에는 자신이 사용하는 PVC 이름의 다음 값을 사용해야 합니다.spec.volumeClaimTemplates.metadata.name: PVC 이름의<volume_name>을 입력하십시오.
metadata.name-
PVC 이름의
<statefulset_name>을 입력하십시오. spec.replicas-
Stateful 세트에 대해 작성할 복제본의 수를 입력하십시오. 복제본의 수는 이전에 작성한 PVC의 수와 동일해야 합니다.
PVC가 다른 구역에 있는 경우, Stateful 세트에 지역 또는 구역 레이블을 포함하지 마십시오.
-
클러스터의 팟 (Pod) 을 나열하여 Stateful 세트 복제본 팟 (Pod) 에서 PVC가 사용되는지 확인하십시오. 자신의 Stateful 세트에 속한 팟(Pod)을 식별하십시오.
kubectl get pods -
기존 PVC가 Stateful 세트 복제본에 마운트되었는지 확인하십시오. CLI 출력의
ClaimName섹션에 있는 **Volumes**을 검토하십시오.kubectl describe pod <pod_name>출력 예
Name: nginx-0 Namespace: default Node: 10.xxx.xx.xxx/10.xxx.xx.xxx Start Time: Fri, 05 Oct 2022 13:24:59 -0400 ... Volumes: myvol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: myvol-nginx-0 ...
기존 스토리지 디바이스의 크기 및 IOPS 변경
스토리지 용량 또는 성능을 높이기 위해 기존 볼륨을 수정할 수 있습니다.
비용 청구에 대한 질문이 있거나 IBM Cloud 콘솔을 사용한 스토리지 수정 방법에 대한 단계를 찾으려면 블록 스토리지 용량 확장 및 IOPS 조정을 참조하십시오.
콘솔에서 작성한 업데이트는 지속적 볼륨(PV) 에 반영되지 않습니다. 이 정보를 PV에 추가하려면 kubectl patch pv <pv_name>를 실행하고 PV의 레이블 및 어노테이션 섹션에서 크기와 IOPS를 수동으로 업데이트하십시오.
-
클러스터의 PVC를 나열하고 VOLUME 열에서 연관된 PV의 이름을 기록해 두십시오.
kubectl get pvc출력 예
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myvol Bound pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3 20Gi RWO ibmc-block-bronze 147d -
블록 스토리지의 IOPS 및 크기를 변경할 경우 먼저 PV의
metadata.labels.IOPS섹션에서 IOPS를 편집하십시오. IOPS값을 늘리거나 줄일 수 있습니다. 해당 스토리지 유형에 대해 지원되는 IOPS를 입력해야 합니다. 예를 들어, 네 개의 IOPS가 포함된 Endurance 블록 스토리지가 있는 경우 IOPS를 2 또는 10으로 변경할 수 있습니다. 지원되는 IOPS 값에 대한 자세한 정보는 블록 스토리지 구성 결정을 참조하십시오.kubectl edit pv <pv_name>CLI에서 IOPS를 변경하려면 블록 스토리지의 크기도 변경해야 합니다. 크기를 제외하고 IOPS만 변경할 경우 콘솔에서 IOPS 변경 요청을 참조하십시오.
-
PVC를 편집하고 PVC의
spec.resources.requests.storage섹션에서 새 크기를 추가하십시오. 스토리지 클래스로 설정된 최대 용량까지만 크기를 늘리도록 변경할 수 있습니다. 기존 스토리지의 크기를 줄일 수 없습니다. 스토리지 클래스의 사용 가능한 크기를 보려면 블록 스토리지 구성 결정을 참조하십시오.kubectl edit pvc <pvc_name> -
볼륨 확장이 요청되었는지 확인하십시오. CLI 출력의
FileSystemResizePending조건** 섹션에서 ** 메시지가 표시되면 볼륨 확장이 요청된 것입니다.kubectl describe pvc <pvc_name>출력 예
... Conditions: Type Status LastProbeTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- FileSystemResizePending True Mon, 01 Jan 0001 00:00:00 +0000 Thu, 25 Apr 2022 15:52:49 -0400 Waiting for user to (re-)start a pod to finish file system resize of volume on node. -
PVC를 마운트하는 모든 팟(Pod)을 나열하십시오. 팟(Pod)으로 PVC가 마운트되면 볼륨 확장이 자동으로 처리됩니다. 팟(Pod)으로 PVC가 마운트되지 않으면 볼륨 확장을 처리할 수 있도록 PVC를 마운트해야 합니다.
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"마운트된 팟(Pod)은
<pod_name>: <pvc_name>형식으로 리턴됩니다. -
팟(Pod)으로 PVC가 마운트되지 않으면 팟(Pod) 또는 배치를 작성하고 PVC를 마운트하십시오. 팟(Pod)으로 PVC가 마운트되는 경우 다음 단계로 진행하십시오.
-
크기 및 IOPS가 CLI 출력의 레이블 섹션에서 변경되었는지 확인하십시오. 이 프로세스는 완료하는 데 몇 분 정도 소요될 수 있습니다.
kubectl describe pv <pv_name>출력 예
... Labels: CapacityGb=50 Datacenter=dal10 IOPS=500 -
PVC가 마운트된 포드에 로그인하십시오.
kubectl exec <pod-name> -it -- bash -
다음 명령을 실행하여 호스트 2진을 사용하십시오.
chroot /host -
파일 시스템의 크기를 조정하십시오.
sudo resize2fs <filesystem-path>명령 예
sudo resize2fs /dev/vdg -
파일 시스템의 크기가 조정되었는지 확인하십시오.
df -h
데이터 백업 및 복원
블록 스토리지는 클러스터의 작업자 노드와 동일한 위치로 프로비저닝됩니다. 이 스토리지는 서버의 작동이 중지되는 경우에 가용성을 제공하기 위해 IBM에 의해 클러스터된 서버에서 호스팅됩니다. 그러나 블록 스토리지는 자동으로 백업되지 않으며 전체 위치에서 장애가 발생하면 액세스가 불가능할 수 있습니다. 데이터가 유실되거나 손상되지 않도록 하기 위해, 필요한 경우 데이터를 복원하는 데 사용할 수 있는 주기적 백업을 설정할 수 있습니다.
백업 스토리지에 대한 다음의 백업 및 복원 옵션을 검토하십시오.
정기적 스냅샷 설정
특정 시점에 인스턴스 상태를 캡처하는 읽기 전용 이미지인 블록 스토리지에 대한 주기적 스냅샷을 설정할 수 있습니다.
스냅샷을 저장하려면 블록 스토리지의 스냅샷 영역을 요청해야 합니다. 스냅샷은 동일한 구역 내의 기본 스토리지 인스턴스에 저장됩니다. 사용자가 실수로 볼륨에서 중요한 데이터를 제거한 경우 스냅샷에서 데이터를 복원할 수 있습니다. \n \n **볼륨에 대한 스냅샷을 작성하려면 다음 단계를 완료하십시오.
-
계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
-
ibmcloud slCLI에 로그인하십시오.ibmcloud sl init -
클러스터에 있는 기존 PV를 나열하십시오.
kubectl get pv -
스냅샷 영역을 작성할 PV에 대한 세부사항을 가져오고 볼륨 ID, 크기 및 IOPS를 기록해 두십시오. 크기 및 IOPS는 CLI 출력의 레이블 섹션에 표시됩니다.
kubectl describe pv <pv_name> -
볼륨 ID을 찾으려면 CLI 출력의
ibm.io/network-storage-id어노테이션을 검토하십시오. -
이전 단계에서 검색한 매개변수를 사용하여 기존 볼륨의 스냅샷 크기를 작성하십시오.
ibmcloud sl block snapshot-order <volume_ID> --size <size> --tier <iops> -
스냅샷 크기가 작성될 때까지 기다리십시오. CLI 출력의 **Snapshot Size (GB)**가 0에서 주문한 크기로 변경된 경우 스냅샷 크기가 성공적으로 프로비저닝된 것입니다.
ibmcloud sl block volume-detail <volume_ID> -
볼륨에 대한 스냅샷을 작성하고 작성된 스냅샷의 ID를 기록해 두십시오.
ibmcloud sl block snapshot-create <volume_ID> -
스냅샷이 작성되었는지 확인하십시오.
ibmcloud sl block snapshot-list <volume_ID> -
스냅샷 스케줄을 설정하십시오. 스냅샷 스케줄에 사용 가능한 옵션에 대한 자세한 정보는 CLI 문서 를 참조하십시오.
ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS> -
스냅샷의 데이터를 기존 볼륨에 복원하려면 다음 명령을 실행하십시오.
ibmcloud sl block snapshot-restore <volume_ID> <snapshot_ID>
다른 구역에 스냅샷 복제
구역 장애로부터 데이터를 보호하기 위해 다른 구역에서 설정된 블록 스토리지 인스턴스로 스냅샷을 복제할 수 있습니다.
데이터는 기본 스토리지에서 백업 스토리지로만 복제할 수 있습니다. 복제된 블록 스토리지 인스턴스를 클러스터에 마운트할 수는 없습니다. 기본 스토리지에서 장애가 발생하는 경우에는 복제된 백업 스토리지가 기본 스토리지가 되도록 수동으로 설정할 수 있습니다. 그런 다음 클러스터에 이를 추가할 수 있습니다. 기본 스토리지가 복원되고 나면 백업 스토리지로부터 데이터를 복원할 수 있습니다.
스토리지 복제
원본 스토리지 인스턴스와 동일한 구역에서 블록 스토리지 인스턴스를 복제할 수 있습니다.
복제본(duplicate)에는 복제본(duplicate)을 작성한 시점의 원본 스토리지 인스턴스와 동일한 데이터가 저장되어 있습니다. 복제본(replica)과 다르게 복제본(duplicate)은 원본과 별개인 스토리지 인스턴스로 사용하십시오. 복제(duplicate)하려면 먼저 볼륨의 스냅샷을 설정하십시오.
IBM Cloud® Object Storage에 데이터 백업
ibm-backup-restore Helm 차트를 사용하여 클러스터에서 백업 및 복원 팟(Pod)을 스핀 업할 수 있습니다.
이 팟(Pod)에는 클러스터의 지속적 볼륨 클레임(PVC)에 대한 일회성 또는 주기적 백업을 실행하는 스크립트가 포함되어 있습니다. 데이터는 구역에 설정된 IBM Cloud® Object Storage 인스턴스에 저장됩니다.
블록 스토리지는 RWO 액세스 모드로 마운트됩니다. This access allows only one pod to be mounted to the block storage at a time. 데이터를 백업하려면 스토리지에서 앱 팟(Pod)을 마운트 해제하고 이를 백업 팟(Pod)에 마운트한 후에 데이터를 백업하고 스토리지를 앱 팟(Pod)에 다시 마운트해야 합니다.
데이터의 고가용성을 개선하고 구역 장애로부터 앱을 보호하려면 두 번째 Object Storage 인스턴스를 설정하고 구역 간에 데이터를 복제하십시오. Object Storage 인스턴스에서 데이터를 복원해야 하는 경우 Helm과 함께 제공되는 복원 팟(Pod)을 사용하십시오.
팟(pod) 및 컨테이너에 대해 데이터 복사
kubectl cp 명령어를 사용하면 클러스터 내의 포드나 특정 컨테이너로, 또는 그곳에서 파일과 디렉터리를 복사할 수 있습니다.
계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
kubectl cp 명령을 실행할 때 -c를 사용하여 컨테이너를 지정하지 않으면 이 명령은 팟(Pod)에서 사용 가능한 첫 번째 컨테이너를 사용합니다.
로컬 시스템의 데이터를 클러스터의 팟(pod)에 복사하십시오.
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>
클러스터의 팟(pod)에 있는 데이터를 로컬 시스템에 복사하십시오.
kubectl cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>
로컬 시스템의 데이터를 클러스터의 팟(pod)에서 실행하는 특정 컨테이너에 복사하십시오.
kubectl cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER
스토리지 클래스 참조
브론즈
- 이름
ibmc-block-bronzeibmc-block-retain-bronze- 유형
- Endurance 스토리지
- 파일 시스템
ext4- GB당 IOPS
- 2
- 크기 범위(GB)
- 20 - 12000Gi
- 하드 디스크
- SSD
- 재확보 정책
ibmc-block-bronze: 삭제ibmc-block-retain-bronze: 유지
실버
- 이름
ibmc-block-silveribmc-block-retain-silver- 유형
- Endurance 스토리지
- 파일 시스템
ext4- GB당 IOPS
- 4
- 크기 범위(GB)
- 20 - 12000Gi
- 하드 디스크
- SSD
- 재확보 정책
ibmc-block-silver: 삭제ibmc-block-retain-silver: 유지
골드
- 이름
ibmc-block-goldibmc-block-retain-gold- 유형
- Endurance 스토리지
- 파일 시스템
ext4- GB당 IOPS
- 10
- 크기 범위(GB)
- 20 - 4000Gi
- 하드 디스크
- SSD
- 재확보 정책
ibmc-block-gold: 삭제ibmc-block-retain-gold: 유지
사용자 정의
- 이름
ibmc-block-customibmc-block-retain-custom- 유형
- 성능 파일 시스템
ext4- IOPS 및 크기
- 크기 범위(기가바이트) / IOPS 범위(100의 배수)
- 20-39Gi / 100-1000 IOPS
- 40-79Gi / 100-2000 IOPS
- 80-99Gi / 100-4000 IOPS
- 100-499Gi / 100-6000 IOPS
- 500-999Gi / 100-10000 IOPS
- 1000-1999Gi / 100-20000 IOPS
- 2000-2999Gi / 200-40000 IOPS
- 3000-3999Gi / 200-48000 IOPS
- 4000-7999Gi / 300-48000 IOPS
- 8000-9999Gi / 500-48000 IOPS
- 10000-12000Gi / 1000-48000 IOPS
- 하드 디스크
- IOPS 대 기가바이트 비율은 프로비저닝되는 하드 디스크의 유형을 결정합니다. IOPS 대 기가바이트 비율을 결정하려면 IOPS를 스토리지의 크기로 나누십시오.
- 예: 100 IOPS의 500Gi 스토리지를 선택했습니다. 비율은 0.2(100 IOPS/500Gi)입니다.
- 비율별 하드 디스크 유형의 개요:
- 0.3 이하: SATA
- 0.3 초과: SSD
- 재확보 정책
ibmc-block-custom: 삭제ibmc-block-retain-custom: 유지
사용자 정의된 샘플 스토리지 클래스
사용자 정의된 스토리지 클래스를 작성하고 PVC에서 해당 스토리지 클래스를 사용할 수 있습니다.
IBM Cloud Kubernetes Service는 특정 계층 및 구성으로 블록 스토리지를 프로비저닝하는 데 사용할 수 있는 사전 정의된 스토리지 클래스를 제공합니다. 일부 경우에는 사전 정의된 스토리지 클래스에 포함되지 않은 다른 구성으로 스토리지를 프로비저닝하려고 할 수도 있습니다. 이 주제의 예를 사용하여 사용자 정의된 스토리지 클래스의 샘플을 찾아볼 수 있습니다.
사용자 정의된 스토리지 클래스를 작성하려면 스토리지 클래스 사용자 정의를 참조하십시오. 그 후 PVC에서 사용자 정의된 스토리지 클래스를 사용하십시오.
토폴로지 인식 스토리지 작성
다중 구역 클러스터에서 블록 스토리지를 사용하려면 볼륨을 읽고 쓸 수 있도록 블록 스토리지 인스턴스와 동일한 구역에서 팟(Pod)이 스케줄되어야 합니다. Kubernetes가 토폴로지 인식 볼륨 스케줄링을 도입하기 전에 스토리지를 동적으로 프로비저닝하면 PVC가 작성될 때 블록 스토리지 인스턴스가 자동으로 작성되었습니다. 그런 다음, 팟(Pod)을 작성할 때 Kubernetes 스케줄러는 블록 스토리지 인스턴스와 동일한 데이터 센터에 팟(Pod)을 배치하려고 했습니다.
팟(Pod)의 제한조건을 모르고 블록 스토리지 인스턴스를 작성하면 원하지 않는 결과가 발생할 수 있습니다. 예를 들어, 작업자 노드에 리소스가 충분하지 않거나 작업자 노드가 오염되어 팟(Pod)이 스케줄될 수 없어 팟(Pod)이 스토리지와 동일한 작업자 노드에 스케줄되지 않을 수도 있습니다. 토폴로지 인식 볼륨 스케줄링을 사용하면 스토리지를 사용하는 첫 번째 팟(Pod)이 작성될 때까지 블록 스토리지 인스턴스가 지연됩니다.
토폴로지 인식 볼륨 스케줄링을 사용하려면 IBM Cloud Block Storage 플러그인 버전 1.2.0 이상을 설치했는지 확인하십시오.
다음 예제는 이 스토리지를 사용하는 첫 번째 팟(Pod)이 스케줄될 준비가 될 때까지 블록 스토리지 인스턴스 작성을 지연시키는 스토리지 클래스를 작성하는 방법을 보여줍니다. 작성을 지연하려면 volumeBindingMode: WaitForFirstConsumer 옵션을 포함해야 합니다. 이 옵션을 포함하지 않으면 volumeBindingMode가 Immediate로
자동 설정되며 PVC를 작성할 때 블록 스토리지 인스턴스가 작성됩니다.
내구성 블록 스토리지의 예.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-bronze-delayed
parameters:
billingType: hourly
classVersion: "2"
fsType: ext4
iopsPerGB: "2"
sizeRange: '[20-12000]Gi'
type: Endurance
provisioner: ibm.io/ibmc-block
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
성능 블록 스토리지의 예.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
billingType: "hourly"
classVersion: "2"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
type: "Performance"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
구역 및 지역 지정
특정 구역에 블록 스토리지를 작성하려는 경우 사용자 정의 스토리지 클래스에 구역과 지역을 지정할 수 있습니다.
IBM Cloud Block Storage 플러그인 버전 1.0.0을 사용하거나 특정 구역에서 정적으로 블록 스토리지를 프로비저닝하려는 경우에는 사용자 정의된 스토리지 클래스를 사용하십시오. 그 외의 모든 경우에는 PVC에 구역을 직접 지정하십시오.
다음의 .yaml 파일은 ibm-block-silver 비-보유(non-retaining) 스토리지 클래스를 기반으로 하는 스토리지 클래스를 사용자 정의합니다. 여기서 type은 "Endurance"이고, iopsPerGB는 4이며, sizeRange는
"[20-12000]Gi"이고, reclaimPolicy는 "Delete"로 설정됩니다. 구역은 dal12로서 지정됩니다. 다른 스토리지 클래스를 자신의 기반으로 사용하려면 스토리지 클래스 참조를 참조하십시오.
클러스터 및 작업자 노드와 동일한 지역 및 구역에 스토리지 클래스를 작성하십시오. 클러스터의 지역을 가져오려면 ibmcloud ks cluster get --cluster <cluster_name_or_ID>를 실행하여 마스터 URL에서 지역 접두부를 찾으십시오(예: https://c2.eu-de.containers.cloud.ibm.com:11111에서
eu-de). 작업자 노드의 구역을 가져오려면 ibmcloud ks worker ls --cluster <cluster_name_or_ID>를 실행하십시오.
내구성 블록 스토리지의 예.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-silver-mycustom-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
zone: "dal12"
region: "us-south"
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
reclaimPolicy: "Delete"
성능 블록 스토리지의 예.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-performance-storageclass
labels:
kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
zone: "dal12"
region: "us-south"
type: "Performance"
sizeIOPSRange: |-
"[20-39]Gi:[100-1000]"
"[40-79]Gi:[100-2000]"
"[80-99]Gi:[100-4000]"
"[100-499]Gi:[100-6000]"
"[500-999]Gi:[100-10000]"
"[1000-1999]Gi:[100-20000]"
"[2000-2999]Gi:[200-40000]"
"[3000-3999]Gi:[200-48000]"
"[4000-7999]Gi:[300-48000]"
"[8000-9999]Gi:[500-48000]"
"[10000-12000]Gi:[1000-48000]"
reclaimPolicy: "Delete"
XFS 파일 시스템에서 블록 스토리지 마운트
다음 예제에서는 XFS 파일 시스템에서 블록 스토리지를 프로비저닝하는 스토리지 클래스를 작성합니다.
내구성 블록 스토리지의 예.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-custom-xfs
labels:
addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
type: "Endurance"
iopsPerGB: "4"
sizeRange: "[20-12000]Gi"
fsType: "xfs"
reclaimPolicy: "Delete"
성능 블록 스토리지의 예.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ibmc-block-custom-xfs
labels:
addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
classVersion: "2"
type: "Performance"
sizeIOPSRange: |-
[20-39]Gi:[100-1000]
[40-79]Gi:[100-2000]
[80-99]Gi:[100-4000]
[100-499]Gi:[100-6000]
[500-999]Gi:[100-10000]
[1000-1999]Gi:[100-20000]
[2000-2999]Gi:[200-40000]
[3000-3999]Gi:[200-48000]
[4000-7999]Gi:[300-48000]
[8000-9999]Gi:[500-48000]
[10000-12000]Gi:[1000-48000]
fsType: "xfs"
reclaimPolicy: "Delete"
클러스터에서 지속적 스토리지 제거
클러스터에서 지속적 스토리지를 설정하는 경우에는 스토리지를 요청하는 Kubernetes 지속적 볼륨 클레임(PVC), 팟(Pod)에 마운트되고 PVC에서 설명되는 Kubernetes 지속적 볼륨(PV), 그리고 IBM Cloud 인프라 인스턴스(예: 클래식 파일 또는 블록 스토리지)의 세 개의 기본 컴포넌트가 있습니다. 스토리지를 작성한 방법에 따라 3개 컴포넌트 모두를 별도로 삭제해야 할 수 있습니다.
스토리지 제거 옵션 이해
IBM Cloud 계정에서 지속적 스토리지를 제거하는 것은 스토리지를 프로비저닝한 방식과 이미 제거한 컴포넌트에 따라 다릅니다.
- 클러스터를 삭제하면 내 영구 저장소도 삭제되나요?
- 클러스터 삭제 중에 지속적 스토리지를 제거하는 옵션이 있습니다. 그러나 스토리지가 프로비저닝된 방식에 따라 스토리지 제거에는 모든 스토리지 컴포넌트가 포함되지 않을 수 있습니다.
reclaimPolicy: Delete가 설정된 스토리지 클래스를 사용하여 스토리지를 동적으로 프로비저닝한 경우, 클러스터를 삭제하면 PVC, PV 및 스토리지 인스턴스가 자동으로 삭제됩니다. 정적으로 프로비저닝된 스토리지나reclaimPolicy: Retain``을 설정하는 스토리지 클래스를 사용하여 프로비저닝한 스토리지의 경우, 클러스터를 삭제하면 PVC와 PV는 제거되지만 스토리지 인스턴스와 데이터는 그대로 유지됩니다. 계속해서 스토리지 인스턴스에 대한 비용이 청구됩니다. 또한 비정상 상태에서 클러스터를 삭제한 경우, 제거를 선택했어도 스토리지가 아직 존재할 수 있습니다. - 클러스터는 그대로 두고 스토리지만 삭제하려면 어떻게 해야 하나요?
reclaimPolicy: Delete를 설정하는 스토리지 클래스로 스토리지를 동적으로 프로비저닝한 경우 PVC를 제거하여 지속적 스토리지의 삭제 프로세스를 시작할 수 있습니다. 사용자 PVC, PV 및 스토리지 인스턴스가 자동으로 제거됩니다. 정적으로 프로비저닝된 스토리지 또는reclaimPolicy: Retain``을 설정하는 스토리지 클래스를 사용하여 프로비저닝한 스토리지의 경우, 추가 요금이 부과되지 않도록 PVC, PV 및 스토리지 인스턴스를 수동으로 제거해야 합니다.- 저장 공간을 삭제하면 요금은 어떻게 중단되나요?
- 삭제하는 스토리지 컴포넌트 항목과 시점에 따라 비용 청구 주기가 즉시 중지되지 않을 수 있습니다. PVC 및 PV를 삭제하지만 IBM Cloud 계정의 스토리지 인스턴스는 삭제하지 않은 경우, 해당 인스턴스는 계속 존재하게 되며 이에 대한 비용을 지불하게 됩니다.
PVC, PV 및 스토리지 인스턴스를 삭제하는 경우 비용 청구 주기는 스토리지를 프로비저닝할 때 선택한 billingType과 스토리지를 삭제하도록 선택한 방식에 따라 달라집니다.
-
IBM Cloud 콘솔이나 CLI에서 영구 스토리지 인스턴스를 수동으로 취소하면 다음과 같이 과금이 중지됩니다
- 시간별 스토리지: 비용 청구가 즉시 중지됩니다. 스토리지가 취소된 후 최대 72시간 동안 스토리지 인스턴스가 콘솔에 표시될 수 있습니다.
- 월별 스토리지: 즉시 취소 또는 기념일에 취소 중에서 선택할 수 있습니다. 두 경우 모두 현재 비용 청구 주기가 끝날 때까지 계속해서 비용이 청구되며 다음 비용 청구 주기에 대한 비용 청구가 중지됩니다. 스토리지가 취소된 후 최대 72시간 동안 스토리지 인스턴스가 콘솔 또는 CLI에 표시될 수 있습니다.
- 즉시 취소: 스토리지를 즉시 제거할 경우 이 옵션을 선택합니다. 사용자가 스토리지를 더 이상 사용하지 않거나 데이터를 복구하지 않는 경우가 해당됩니다.
- 기념일: 다음 기념일에 스토리지를 취소할 경우 이 옵션을 선택합니다. 예를 들어, 데이터를 백업할 시간을 팀에 알려주기 위해 스토리지 인스턴스는 다음 기념일까지 활성 상태로 유지되며 이 날짜까지 계속해서 사용할 수 있습니다.
-
reclaimPolicy: Delete를 설정하는 스토리지 클래스로 스토리지를 동적으로 프로비저닝하고 PVC를 제거하도록 선택하는 경우 PV 및 스토리지 인스턴스가 즉시 제거됩니다. 매시간 비용 청구된 스토리지의 경우, 비용 청구가 즉시 중지됩니다. 매월 청구되는 스토리지의 경우 해당 월의 나머지에 대해 비용이 청구됩니다. 스토리지가 제거되고 비용 청구가 중지된 후 최대 72시간 동안 스토리지 인스턴스가 콘솔 또는 CLI에 표시될 수 있습니다.
- 영구 저장소를 삭제하기 전에 무엇을 주의해야 하나요?
- 지속적 스토리지를 정리하면 그 안에 저장된 모든 데이터가 삭제됩니다. 데이터 사본이 필요한 경우 백업을 만드세요.
- 저장소 인스턴스를 삭제했습니다. 왜 내 인스턴스가 여전히 표시되나요?
- 지속적 스토리지를 제거한 후 제거가 완전히 처리되고 IBM Cloud 콘솔 또는 CLI에서 스토리지가 표시되지 않으려면 최대 72 시간이 걸릴 수 있습니다.
지속적 스토리지 정리
지속적 스토리지에 대한 추가 비용이 부과되지 않도록 IBM Cloud 계정에서 PVC, PV 및 스토리지 인스턴스를 제거합니다.
시작하기 전에:
- 보존할 데이터를 백업했는지 확인하십시오.
- 계정에 로그인하십시오. If applicable, target the appropriate resource group. 클러스터에 대한 컨텍스트를 설정하십시오.
지속적 데이터를 정리하려면 다음을 수행하십시오.
-
클러스터의 PVC를 나열하고 PVC의
NAME,STORAGECLASS, 그리고 PVC에 바인드되고 **VOLUME**으로 표시되는 PV의 이름을 기록해 두십시오.kubectl get pvc출력 예
NAME STATUS VOLUME CAPACITY ACCESSMODES STORAGECLASS AGE claim1 Bound pvc-06886b77-102b-11e8-968a-f6612bb731fb 20Gi RWO class 78d claim2 Bound pvc-457a2b96-fafc-11e7-8ff9-b6c8f770356c 4Gi RWX class 105d claim3 Bound pvc-1efef0ba-0c48-11e8-968a-f6612bb731fb 24Gi RWX class 83d -
스토리지 클래스에 대한
ReclaimPolicy및 **billingType**을 검토하십시오.kubectl describe storageclass <storageclass_name>재확보 정책에서
Delete를 표시하는 경우에는 PVC를 제거할 때 PV 및 실제 스토리지가 제거됩니다. 재확보 정책에서Retain을 표시하거나 사용자가 스토리지 클래스 없이 스토리지를 프로비저닝한 경우에는 PVC를 제거할 때 PV 및 실제 스토리지가 제거되지 않습니다. 사용자가 PVC, PV 및 실제 스토리지를 개별적으로 제거해야 합니다.스토리지가 매월 비용 청구되는 경우에는 비용 청구 주기가 종료되기 전에 스토리지를 제거해도 여전히 해당 월 전체에 대해 비용이 청구됩니다.
-
PVC를 마운트하는 팟(Pod)을 제거하십시오. PVC를 마운트하는 팟(Pod)을 나열하십시오. 팟(Pod)이 CLI 출력에서 리턴되지 않으면 PVC를 사용하는 팟(Pod)이 없는 것입니다.
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"출력 예
depl-12345-prz7b: claim1 -
PVC를 사용하는 팟(Pod)을 제거하십시오. 팟(Pod)이 배치의 일부인 경우에는 배치를 제거하십시오.
kubectl delete pod <pod_name> -
팟(Pod)이 제거되었는지 확인하십시오.
kubectl get pods -
PVC를 제거하십시오.
kubectl delete pvc <pvc_name> -
PV의 상태를 검토하십시오. 이전에 검색한 PV의 이름을 **
VOLUME**으로 사용하십시오. PVC를 제거하면 PVC에 바인드된 PV가 릴리스됩니다. 스토리지를 프로비저닝하는 방법에 따라, PV는Deleting상태(PV가 자동 삭제되는 경우) 또는Released상태(PV를 수동 삭제해야 하는 경우)가 됩니다. 참고: 자동 삭제되는 PV의 경우에는 삭제되기 전에 상태가 잠시Released로 표시될 수 있습니다. 잠시 후에 명령을 다시 실행하면 PV가 제거되었는지 여부를 볼 수 있습니다.kubectl get pv <pv_name> -
PV가 삭제되지 않은 경우에는 PV를 수동으로 제거하십시오.
kubectl delete pv <pv_name> -
PV가 제거되었는지 확인하십시오.
kubectl get pv -
PV가 가리키는 실제 스토리지 인스턴스를 나열하고 실제 스토리지 인스턴스의 **
id**를 기록해 두십시오.ibmcloud sl block volume-list --columns id --columns notes | grep <pv_name>출력 예
12345678 {"plugin":"ibmcloud-block-storage-plugin-689df949d6-4n9qg","region":"us-south","cluster":"aa1a11a1a11b2b2bb22b22222c3c3333","type":"Endurance","ns":"default","pvc":"block-storage-pvc","pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7","storageclass":"ibmc-block-silver","reclaim":"Delete"}참고 필드 정보 이해:
"plugin":"ibm-file-plugin-5b55b7b77b-55bb7"- 클러스터가 사용하는 스토리지 플러그인입니다.
"region":"us-south"- 클러스터가 있는 지역입니다.
"cluster":"aa1a11a1a11b2b2bb22b22222c3c3333"- 스토리지 인스턴스와 연관된 클러스터 ID입니다.
"type":"Endurance"- 파일 또는 블록 스토리지의 유형(
Endurance또는Performance)입니다. "ns":"default"- 스토리지 인스턴스가 배치되는 네임스페이스입니다.
"pvc":"block-storage-pvc"- 스토리지 인스턴스와 연관된 PVC의 이름입니다.
"pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"- 스토리지 인스턴스와 연관된 PV입니다.
"storageclass":"ibmc-file-gold"- 스토리지 클래스의 유형(브론즈, 실버, 골드 또는 사용자 정의)입니다.
-
실제 스토리지 인스턴스를 제거하십시오.
ibmcloud sl block volume-cancel <classic_block_id> -
실제 스토리지 인스턴스가 제거되었는지 확인하십시오.
삭제 프로세스는 완료되는 데 최대 72시간이 걸릴 수 있습니다.
ibmcloud sl block volume-list
limited 연결 PV에 대한 모니터링 설정
Block Storage for Classic를 사용하는 팟 (Pod) 및 PVC를 작성할 때 스토리지가 마운트되는 기본 지속적 볼륨 (PV) 에 두 개의 대상 포트가 지정됩니다. 하나의 포트가 작동 중지되는 경우 여러 대상 포트에서 장애 복구를 허용합니다.
이전 버전의 Block Storage for Classic 드라이버에서는 롤아웃 중에 PV를 마운트할 때 2개의 대상 포트를 찾을 수 없어서 배치에 실패했습니다.
그러나 때때로 IaaS 유지보수 창에서와 같이 지속적 볼륨에서 사용 가능한 하나의 대상 포트만으로 팟 (Pod) 이 성공적으로 배치되도록 할 수 있습니다.
Block Storage for Classic 드라이버의 버전 2.4.12 부터 PV가 하나의 대상 포트만 지정할 수 있는 경우에도 팟 (Pod) 이 성공적으로 배치됩니다. 이 동작 변경 외에도 PV에는 이제 네트워크 가용성을 표시하는 새 레이블이 포함됩니다. 여기서 healthy 레이블은 두 개의 대상 포트가 지정되었음을 의미하고 limited 은 마운트 중에
하나의 대상 포트만 지정될 수 있음을 의미합니다.
Block Storage for Classic 에 대한 팟 (Pod) 연결이 제한되는 인스턴스를 모니터하기 위해 limited 레이블을 찾는 사용자 정의 경보를 설정할 수 있습니다. 그런 다음 경보 임계값을 >0 로 구성하십시오.
-
IBM Cloud Monitoring 대시보드에서 새 경보 > 지표를 선택하십시오.
-
Prom query 를 선택하고
kube_persistentvolume_labels{label_ibm_io_pv_connectivity_status='limited'}를 입력하십시오. -
임계값을
>0로 설정하고 이 경보에 사용할 심각도를 설정하십시오. -
알림 채널을 선택하고 경보를 저장하십시오.
차단 스토리지에 신뢰할 수 있는 프로필 할당하기
신뢰할 수 있는 프로필을 사용하여 스토리지 솔루션을 비롯한 계정의 리소스에 대한 액세스 권한을 다른 IBM Cloud ID에 부여할 수 있습니다. 신뢰할 수 있는 프로필은 액세스 제어를 중앙 집중화하고, 수명이 긴 API 키가 필요하지 않으며, 특정 작업에 필요한 최소한의 권한으로만 범위를 지정할 수 있습니다. 자세한 내용은 스토리지 구성 요소에 대한 신뢰할 수 있는 프로필 구성을 참조하세요.