Instalando o complemento de cluster IBM Cloud Object Storage
O complemento de cluster IBM Cloud Object Storage está disponível na versão Beta somente para contas listadas na lista de permissões. Para ser adicionado à lista de permissões, entre em contato com o suporte. Para obter mais informações, consulte Solicitação de acesso a recursos listados para permissão.
Pré-requisitos
- O complemento IBM Cloud Object Storage requer pelo menos 0.2 vCPU e 128 MB de memória.
- Configure uma instância do IBM Cloud Object Storage.
Compreensão da criação e remoção de baldes
- Você pode usar um bucket existente especificando o nome do bucket em seu PVC.
- Se você fornecer um nome de bucket e esse bucket não existir, será criado um bucket com esse nome.
- Se você não fornecer um nome de bucket, será criado um bucket com a convenção de nomenclatura
temp-xxx
. - Os compartimentos são excluídos com base na política de recuperação definida em sua classe de armazenamento.
- Se
reclaimPolicy: Delete
for definido, o bucket será excluído quando o PVC for excluído. - Se
reclaimPolicy: Retain
for definido, o bucket será mantido mesmo depois que o PVC for excluído.
- Se
Ativação do complemento IBM Cloud Object Storage
Antes de começar: acesse o seu cluster do Red Hat OpenShift.
- Liste os complementos e encontre a versão que você deseja instalar.
Exemplo de saídaibmcloud oc cluster addon versions
OK Name Version Supported Kubernetes Range Supported OpenShift Range Kubernetes Default OpenShift Default ibm-object-csi-driver 0.1 (default) >=1.30.0 >=4.15.0 - -
- Instale o complemento.
ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
- Verifique a instalação.
ibmcloud oc cluster addon ls --cluster CLUSTER
OK Name Version Health State Health Status ibm-object-csi-driver 0.1 normal Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
- Listar as classes de armazenamento disponíveis.
oc get sc | grep object
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-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
Implantação de um aplicativo que usa IBM Cloud Object Storage
Crie um segredo Kubernetes que contenha suas credenciais COS.
-
Salve a configuração a seguir em um arquivo chamado
secret.yaml
.- Para credenciais de IAM, use uma combinação de
apiKey
eserviceId
de Object Storage. - Para credenciais HMAC, use
accessKey
esecretKey
de Object Storage.
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: bucketName: <base64-encoded-bucket-name> apiKey: <base64-encoded-COS-Service-Instance-API-key> serviceID: <base64-encoded-COS-service-ID> accessKey: <base64-encoded-HMAC-access-key> secretKey: <base64-encoded-HMAC-secret-key> stringData: # uid: "3000" # Optional: Provide a uid to run as non root user. This must match runAsUser in SecurityContext of pod spec. mountOptions: | # Review or update the following default s3fs mount options #max_stat_cache_size=100000 #mp_umask=002 #parallel_count=8 # value depends on the storage class used #sigv2 #use_path_request_style #default_acl=private #kernel_cache #multipart_size=62 #retries=5 #allow_other #max_dirty_data=51200 # Review or update the following default rclone mount options #--allow-other=true #--daemon=true #acl=private #upload_cutoff=256Mi #chunk_size=64Mi #upload_concurrency=20 #copy_cutoff=1Gi #memory_pool_flush_time=30s #disable_checksum=true #bucket_acl=private #max_upload_parts=64
- mountOptions
- Você pode personalizar as opções de montagem para
s3fs
ourclone
editando omountOptions
em seu segredo. Para obter mais informações, consulte as opções de montagem s3fs e as opções de montagem rclone.
Atualmente, o complemento está habilitado para suportar um conjunto fixo de opções de montagem com validação adequada para cada opção de montagem. Se quiser usar qualquer outra opção de montagem que não esteja na lista de validação, entre em contato com o suporte para ativar essas opções.
- Para credenciais de IAM, use uma combinação de
-
Codifique as credenciais que você recuperou na seção anterior para base64. Repita esse comando para cada parâmetro.
echo -n "<value>" | base64
-
Atualize o arquivo de configuração com os valores codificados em base64.
-
Crie o segredo.
oc apply -f secret.yaml
Criar um PVC
Você pode usar um único segredo em vários PVCs ou um segredo por PVC.
Você pode gerenciar esse comportamento usando as seguintes anotações no PVC yaml. Essas anotações ajudam o driver a mapear o PVC para o segredo correto.
cos.csi.driver/secret: "<custom-secret>"
cos.csi.driver/secret-namespace: "<namespace>"
Certifique-se de que seu segredo, PVC e pods estejam todos no mesmo namespace
Exemplo de PVC para um mapeamento de 1-to-1 segredo para PVC, dando ao seu PVC o mesmo nome do segredo que você criou anteriormente.
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.
Exemplo de PVC para usar 1 segredo para muitos PVCs usando anotações para especificar o segredo.
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>"
cos.csi.driver/secret-namespace: "<namespace>"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 256Mi
storageClassName: <storage_class_name> # The storage class you want to use.
-
Escolha um dos exemplos anteriores e personalize-o de acordo com seu caso de uso. Para obter uma lista das classes de armazenamento, consulte a referência da classe Storage.
-
Crie o PVC.
oc apply -f pvc.yaml
Criar uma implementação
-
Salve a configuração a seguir em um arquivo chamado
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.
-
Crie a implementação.
oc apply -f dep.yaml
Desativando o complemento IBM Cloud Object Storage
- Execute o seguinte comando para desativar o complemento.
Exemplo de saídaibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTER
Data 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
- Verifique se o complemento foi removido.
ibmcloud oc cluster addon ls --cluster CLUSTER
Migração do plug-in Helm para o complemento de cluster
-
Obtenha os detalhes de seus PVCs e selecione um para migrar.
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
Exemplo de saída
PVC: pvc-test in Namespace: default uses ibm.io/ibmc-s3fs storage provisioner
-
Descreva o PVC e obtenha o nome do balde.
oc describe pvc <pvc_name> | grep ibm.io/bucket:
Exemplo de saída
ibm.io/bucket: test-s3
-
Recrie seu segredo com o nome do balde incluído.
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: bucketName: <base64-encoded-bucket-name> accessKey: <base64-encoded-HMAC-access-key> secretKey: <base64-encoded-HMAC-secret-key> stringData: # uid: "3000" # Optional: Provide a uid to run as non root user. This must match runAsUser in SecurityContext of pod spec. mountOptions: | key1=value1 key2=value2
-
Encontre a classe de armazenamento que foi usada em seu PVC.
oc describe pvc <pvc_name> | grep StorageClass:
Exemplo de comando para um PVC chamado
test-s3
.oc describe pvc test-s3 | grep StorageClass:
Exemplo de saída
StorageClass: ibmc-s3fs-smart-perf-regional
-
Revise as novas classes de armazenamento disponíveis com o add-on e selecione uma classe de substituição.
- Se você usou uma classe
flex
, escolha uma das novas classessmart
. - Se você usou uma classe
standard
, escolha uma das novas classesstandard
. - As classes
cold
evault
não estão mais disponíveis com o add-on; em vez disso, escolha uma classesmart
oustandard
.
- Se você usou uma classe
-
Analise os detalhes de seu PVC.
oc describe pvc test-s3
Exemplo de saída
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.beta.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs 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>
-
Crie um PVC de substituição que use uma nova classe de armazenamento e faça referência ao segredo que você criou anteriormente.
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 cos.csi.driver/secret-namespace: "<secret_namespace>" spec: accessModes: - ReadWriteOnce resources: requests: storage: 256Mi storageClassName: <storage_class_name> # The storage class you picked based on old storage class mapping.
-
Verifique se o PVC é
Bound
.oc get pvc
-
Obtenha os detalhes de seu aplicativo.
oc get pods
-
Reduza seu aplicativo a zero.
kubectl scale deployment --replicas=0 my-app
-
Crie uma implantação de substituição que faça referência ao PVC que você criou na etapa anterior.
-
Depois que a nova implantação estiver em execução, você poderá excluir a implantação antiga.
-
Repita essas etapas para cada PVC que você deseja migrar.
IBM Cloud Object Storage classes de armazenamento complementares do cluster
Nome | Política de recuperação | Modo de Ligação |
---|---|---|
ibm-object-storage-smart-rclone | Excluir | Imediato |
ibm-object-storage-smart-rclone-retain | Reter | Imediato |
ibm-object-storage-smart-s3fs | Excluir | Imediato |
ibm-object-storage-smart-s3fs-retain | Reter | Imediato |
ibm-object-storage-standard-rclone | Excluir | Imediato |
ibm-object-storage-standard-rclone-retain | Reter | Imediato |
ibm-object-storage-standard-s3fs | Excluir | Imediato |
ibm-object-storage-standard-s3fs-retain | Reter | Imediato |