IBM Cloud Docs
Instalando o complemento de cluster IBM Cloud Object Storage

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

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.

Ativação do complemento IBM Cloud Object Storage

Antes de começar: acesse o seu cluster do Red Hat OpenShift.

  1. Liste os complementos e encontre a versão que você deseja instalar.
    ibmcloud oc cluster addon versions
    
    Exemplo de saída
    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                    -                                    -
    
  2. Instale o complemento.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
    
  3. 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)
    
  4. 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.

  1. Acesse o seu Red Hat OpenShift cluster.

  2. Salve a configuração a seguir em um arquivo chamado secret.yaml.

    • Para credenciais de IAM, use uma combinação de apiKey e serviceId de Object Storage.
    • Para credenciais HMAC, use accessKey e secretKey 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 ou rclone editando o mountOptions 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.

  3. Codifique as credenciais que você recuperou na seção anterior para base64. Repita esse comando para cada parâmetro.

    echo -n "<value>" | base64
    
  4. Atualize o arquivo de configuração com os valores codificados em base64.

  5. 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.
  1. 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.

  2. Crie o PVC.

    oc apply -f pvc.yaml
    

Criar uma implementação

  1. 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.
    
  2. Crie a implementação.

    oc apply -f dep.yaml
    

Desativando o complemento IBM Cloud Object Storage

  1. Execute o seguinte comando para desativar o complemento.
     ibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTER
    
    Exemplo de saída
    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
    
  2. Verifique se o complemento foi removido.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    

Migração do plug-in Helm para o complemento de cluster

  1. Acesse o seu Red Hat OpenShift cluster.

  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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 classes smart.
    • Se você usou uma classe standard, escolha uma das novas classes standard.
    • As classes cold e vault não estão mais disponíveis com o add-on; em vez disso, escolha uma classe smart ou standard.
  7. 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>
    
  8. 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.
    
  9. Verifique se o PVC é Bound.

    oc get pvc
    
  10. Obtenha os detalhes de seu aplicativo.

    oc get pods
    
  11. Reduza seu aplicativo a zero.

    kubectl scale deployment --replicas=0 my-app
    
  12. Crie uma implantação de substituição que faça referência ao PVC que você criou na etapa anterior.

  13. Depois que a nova implantação estiver em execução, você poderá excluir a implantação antiga.

  14. Repita essas etapas para cada PVC que você deseja migrar.

IBM Cloud Object Storage classes de armazenamento complementares do cluster

Classes de armazenamento complementares do cluster COS.
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