Instalando o complemento de cluster IBM Cloud Object Storage

Você pode ativar o complemento “ IBM Cloud Object Storage ” pelo console do IBM Cloud ou pela CLI.

Pré-requisitos:

  • O complemento IBM Cloud Object Storage requer pelo menos 0.3 vCPU e 360 MB de memória.
  • O complemento está disponível para os nós de trabalho Red Hat CoreOS (RHCOS) e Ubuntu. Se o seu cluster tiver nós RHEL e RHCOS, o complemento será implantado somente nos nós RHCOS.
  • Configure uma instância do IBM Cloud Object Storage.
  • Opcional Se você planeja usar o controle de versão do bucket, suas credenciais de serviço devem ter permissões de Manager ou Writer para ativar ou desativar o controle de versão do bucket no bucket. Para obter mais informações, consulte Introdução ao controle de versões.

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 especificar um nome de bucket, será criado um bucket seguindo a convenção de nomenclatura s3fs-<timestamp>-xxx ou rclone-<timestamp>-xxx, dependendo do tipo de montador.
  • 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.

Ativando o complemento “ IBM Cloud Object Storage ” no console

  1. No painel do cluster do Red Hat OpenShift on IBM Cloud, selecione o cluster no qual você deseja ativar o complemento.
  2. Na seção “Complementos”, localize o Cloud Object Storage complemento e clique em “Instalar ”.
  3. No painel “Instalar complemento: Cloud Object Storage ”, selecione uma versão no menu suspenso “Versão ”.
  4. Opcional: Configure os seguintes parâmetros.
maxVolumesPerNode
Defina o número máximo de volumes do IBM Cloud Object Storage que podem ser montados em um único nó. O valor padrão é 0``, o que significa que nenhum limite é aplicado.
restrictNodeServerScheduling
Defina como true para restringir a execução dos pods do nodeserver apenas aos nós rotulados como cos.csi.ibm.io/csi-node=true. O valor padrão é ` `false, o que significa que os pods do nodeserver são agendados em todos os nós.
  1. Clique em Instalar. O complemento pode levar alguns minutos para ser implementado e ficar pronto para uso
  2. Verifique a instalação. Na seção “Complementos ”, verifique se o Cloud Object Storage complemento apresenta um estado de integridade “Normal ”.

Ativação do complemento IBM Cloud Object Storage na CLI

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

  1. Atualize o plug-in “ container-service ” para a versão mais recente.
    ibmcloud update && ibmcloud plugin update container-service
    
  2. Liste os complementos e encontre a versão que você deseja instalar.
    ibmcloud oc cluster addon versions
    
  3. Revise as opções do complemento.
    ibmcloud oc cluster addon options --addon ibm-object-csi-driver [--version VERSION]
    
  4. Instale o complemento.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
    
  5. Verifique a instalação.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    
    OK
    Name                    Version   Health State   Health Status
    ibm-object-csi-driver   1.0       normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
    
  6. Liste as classes de armazenamento disponíveis. O driver oferece suporte a classes de armazenamento regionais e inter-regionais para os montadores s3fs e rclone.
    oc get sc | grep object
    
    ibm-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
    

Restrição do agendamento de pods do nodeserver

Por padrão, os pods do servidor de nós do driver COS CSI são agendados em todos os nós do cluster. Você pode usar o parâmetro restrictNodeServerScheduling para restringir o agendamento de pods do nodeserver apenas aos nós rotulados com cos.csi.ibm.io/csi-node=true``.

Você pode configurar o restrictNodeServerScheduling ao ativar o complemento ou atualizá-lo posteriormente aplicando o patch no ConfigMap.

  • Para definir restrictNodeServerScheduling ao ativar o complemento, inclua o sinalizador --param no comando de ativação.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "restrictNodeServerScheduling=true"
    
  • Para atualizar o “ restrictNodeServerScheduling ” depois que o complemento já estiver ativado, siga estas etapas.
  1. Liste os nós do seu cluster e determine onde você deseja que os pods do driver COS sejam executados.
    oc get nodes
    
    Exemplo de saída
    NAME            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
    
  2. Verifique se os pods do nodeserver estão em execução em todos os nós.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    Exemplo de saída
    NAME                        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>
    
  3. Identifique os nós nos quais você deseja que os pods do nodeserver sejam agendados.
    oc label nodes NODE-NAME-1 NODE-NAME-2 cos.csi.ibm.io/csi-node=true
    
    Exemplo de saída
    node/10.241.0.11 labeled
    node/10.241.0.12 labeled
    
  4. Ative a restrição atualizando o arquivo ConfigMap.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system \
      --type merge -p '{"data":{"restrictNodeServerScheduling":"true"}}'
    
    Exemplo de saída
    configmap/managed-addon-ibm-object-csi-driver patched
    
  5. Verifique se os pods do nodeserver são agendados apenas em nós rotulados.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    Exemplo de saída
    NAME                        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 opções
Configuração Comportamento
restrictNodeServerScheduling: "false" (padrão) Os pods do Nodeserver são agendados em todos os nós.
restrictNodeServerScheduling: "true" Os pods do Nodeserver são agendados apenas em nós rotulados como “ cos.csi.ibm.io/csi-node=true ”.

Definição dos volumes máximos por nó

Por padrão, o driver COS CSI não limita o número de volumes que podem ser montados em um único nó. Você pode usar o parâmetro maxVolumesPerNode para definir um número máximo de volumes por nó.

Você pode configurar o maxVolumesPerNode ao ativar o complemento ou atualizá-lo posteriormente aplicando o patch no ConfigMap.

  • Para definir maxVolumesPerNode ao ativar o complemento, inclua o sinalizador --param no comando de ativação.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "maxVolumesPerNode=VALUE"
    
  • Para atualizar o maxVolumesPerNode depois que o complemento já estiver habilitado, aplique a correção ao complemento gerenciado ConfigMap.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system --type merge -p '{"data":{"maxVolumesPerNode":"VALUE"}}'
    
    Exemplo de saída
    configmap/managed-addon-ibm-object-csi-driver patched
    
maxVolumesPerNode opções
Configuração Comportamento
maxVolumesPerNode: "0" (padrão) Não há limite para o número de volumes que podem ser montados por nó.
maxVolumesPerNode: "VALUE" Limita o número de volumes que podem ser montados em um único nó ao valor especificado.

Implantar um aplicativo que utiliza IBM Cloud Object Storage

Crie um segredo de “ Kubernetes ” que contenha suas credenciais do COS.

  1. Acesse o seu Red Hat OpenShift cluster.

  2. Salve a configuração a seguir em um arquivo chamado secret.yaml. Forneça as credenciais do IAM ou as credenciais HMAC, mas não ambas.

    • Para as credenciais do IAM, utilize apiKey e serviceId da sua instância do serviço IBM Cloud Object Storage.
    • Para as credenciais HMAC, use accessKey e secretKey da sua instância do serviço IBM Cloud 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:
        # --- 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=true
    
    apiKey
    Necessário para a autenticação do IAM. Insira a chave da API do IAM do base64-encoded IBM Cloud para sua instância do serviço IBM Cloud Object Storage. Você pode encontrar a chave da API nas credenciais do seu serviço, em apikey. Forneça uma das seguintes opções: apiKey + serviceId ou accessKey + secretKey, mas não as duas.
    serviceId
    Necessário para a autenticação do IAM. Insira o ID da instância do recurso base64-encoded correspondente à sua instância do serviço IBM Cloud Object Storage. Você pode encontrar esse valor nas credenciais do seu serviço, na página resource_instance_id.
    accessKey
    Necessário para a autenticação HMAC. Insira o ID da chave de acesso HMAC do base64-encoded. Você pode encontrar esse valor nas credenciais do seu serviço, na página cos_hmac_keys.access_key_id. Forneça uma das seguintes opções: accessKey + secretKey ou apiKey + serviceId, mas não as duas.
    secretKey
    Necessário para a autenticação HMAC. Insira a chave secreta de acesso HMAC do base64-encoded. Você pode encontrar esse valor nas credenciais do seu serviço, na página cos_hmac_keys.secret_access_key.
    kpRootKeyCRN
    Opcional. Insira o CRN da chave raiz “ base64-encoded ” da sua instância do Key Protect. Para recuperar o CRN, acesse sua instância do KMS no console do IBM Cloud, abra “Chaves”, clique na chave raiz e copie o CRN dos detalhes da chave. Isso se aplica apenas a novos buckets; não é possível adicionar criptografia a um bucket já existente.
    iamEndpoint
    Opcional. Insira o endpoint do token IAM do IBM Cloud, URL, em texto simples. Por padrão, o driver utiliza https://private.iam.cloud.ibm.com para clusters VPC e https://iam.cloud.ibm.com para clusters clássicos. Altere esse valor somente se precisar usar um endpoint do IAM diferente.
    cosEndpoint
    Opcional. Digite o endpoint do IBM Cloud Object Storage URL como texto simples, por exemplo, https://s3.us.cloud-object-storage.appdomain.cloud. Quando fornecido, esse valor substitui o parâmetro “ cosEndpoint ” definido na classe de armazenamento. Utilize este campo se o seu bucket estiver em uma região diferente ou utilizar um endpoint direto ou privado. Para obter uma lista dos endpoints disponíveis, consulte IBM Cloud Object Storage endpoints.
    locationConstraint
    Opcional. Digite a sequência de caracteres da restrição de localização como texto simples, por exemplo, us-standard ou us-geo-smart. Quando fornecido, esse valor substitui o parâmetro “ locationConstraint ” definido na classe de armazenamento. A restrição de localização determina a classe do bucket e a região onde ele está armazenado.
    objectPath
    Opcional. Insira o caminho para um subdiretório dentro do bucket a ser montado como texto simples; por exemplo, data. Use essa opção para conceder a um aplicativo acesso apenas a uma pasta específica dentro de um bucket compartilhado, em vez de à raiz do bucket inteiro.
    resourceConfigApiKey
    Obrigatório quando a opção “ quotaLimit ” está definida como “ "true" ”. Insira o mesmo valor “ base64-encoded ” ( apikey ) das suas credenciais do serviço IBM Cloud Object Storage que você utilizou para o campo “ apiKey ” acima.
    bucketName
    Opcional. Digite o nome de um bucket existente que deseja usar ou o nome de um novo bucket a ser criado. Se o nome do bucket que você fornecer não existir, o driver o criará. Se você deixar este campo em branco, um bucket será criado automaticamente com a convenção de nomenclatura s3fs-<timestamp>-xxx ou rclone-<timestamp>-xxx, dependendo do tipo de mounter. O nome do bucket deve ser globalmente único em IBM Cloud Object Storage.
    bucketVersioning
    Opcional. Controla o gerenciamento de versões do bucket. Defina como "true" para ativar o controle de versões ou como "false" para desativá-lo em um bucket no qual o controle de versões já esteja ativado. Deve ser um valor de string. Quando o controle de versões está ativado, o serviço “ IBM Cloud Object Storage ” mantém várias versões de cada objeto no bucket, oferecendo proteção contra exclusões acidentais e sobrescritas. Observe que as credenciais do serviço devem ter permissões de “Gerente” ou “Escritor” para ativar ou desativar o controle de versões do bucket. Para obter mais informações, consulte Introdução ao controle de versões.
    quotaLimit
    Opcional. Defina como “ "true" ” para aplicar uma cota rígida de armazenamento ao bucket. Quando ativada, a cota do bucket é definida como igual ao tamanho de storage solicitado no PVC. Se a cota for atingida, as operações de gravação no bucket falharão até que os dados sejam excluídos. É necessário definir o parâmetro resourceConfigApiKey . O valor padrão é "false". Deve ser um valor de string.
    mountOptions
    Você pode personalizar as opções de montagem para s3fs ou rclone editando o mountOptions em seu segredo. Para executar como um usuário não-root, remova o comentário e defina uid= de forma que corresponda ao campo runAsUser no securityContext da especificação do seu pod. Alinhe as opções que você especificar com a classe de armazenamento que seu PVC usa. Para verificar os valores padrão de uma classe de armazenamento, execute oc describe storageclass <storageclass_name> ou oc describe storageclass <storageclass_name>. Para obter mais informações, consulte as opções de montagem em s3fs e as opções de montagem em 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 todos os parâmetros de dados secretos para base64.

    echo -n "<value>" | base64
    
  4. Atualize o site secret.yaml 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>"

Certifique-se de que seu segredo, o PVC e os 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>"
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

Os segredos, PVCs e implantações existentes não são excluídos pela desativação do complemento ou por atualizações de patches. Não há interrupções nas cargas de trabalho existentes dos clientes.

  1. Execute o comando a seguir 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:
        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
    
  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.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
    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. Veja os detalhes do 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

O complemento de cluster IBM Cloud Object Storage fornece classes de armazenamento para os montadores s3fs e rclone. Escolha uma classe de armazenamento que se ajuste aos seus requisitos de acesso a dados. A classe de armazenamento determina a classe do bucket, a política de recuperação e o comportamento de montagem padrão para o bucket criado para sua carga de trabalho.

Standard
Utilize para dados de uso frequente que são acessados com frequência. Casos de uso comuns são apps da web ou móveis.
Vault
Utilize para cargas de trabalho ou dados pouco utilizados, acessados com pouca frequência, como uma vez por mês ou menos. Os casos de uso comum são archives, retenção de dados de curto prazo, preservação de ativo digital, substituição de fita e recuperação de desastre.
Frio
Utilize para dados pouco acessados (a cada 90 dias ou menos) ou dados inativos. Os casos de uso comum são archives, backups de longo prazo, dados históricos que você mantém para conformidade ou cargas de trabalho e apps que são raramente acessados.
Inteligente
Use para cargas de trabalho e dados que não seguem um padrão de uso específico ou quando for difícil prever o padrão de uso.

Decida sobre o nível de resiliência para os dados que estão armazenados em seu bucket. Para obter mais informações, consulte Regiões e terminais.

região cruzada
Seus dados são armazenados em três regiões dentro de uma mesma área geográfica, garantindo a máxima disponibilidade. Se você tiver cargas de trabalho que estão distribuídas entre regiões, as solicitações serão roteadas para o terminal regional mais próximo. O endpoint IBM Cloud Object Storage para a geolocalização é definido automaticamente com base na localização do seu cluster. Por exemplo, se o seu cluster estiver em US South, suas classes de armazenamento estarão configuradas para usar o endpoint US GEO para seus buckets. Escolha uma classe de armazenamento cujo nome inclua “ cross-region ”.
Regional
Seus dados são replicados em várias zonas dentro de uma mesma região. Se tiver cargas de trabalho que estão localizadas na mesma região, você verá latência inferior e melhor desempenho do que em uma configuração entre regiões. O endpoint regional é definido automaticamente com base na localização do seu cluster. Por exemplo, se o seu cluster estiver em US South, suas classes de armazenamento estarão configuradas para usar US South como o endpoint regional dos seus buckets. Escolha uma classe de armazenamento cujo nome não inclua “ cross-region ”.
Classes de armazenamento complementares do cluster COS
Nome Classe de depósito Resiliência Montador Política de recuperação Modo de Ligação
ibm-armazenamento-de-objetos-smart-entre-regiões-rclone Inteligente Inter-regional rclone Excluir Imediato
ibm-armazenamento-de-objetos-smart-entre-regiões-rclone-retain Inteligente Inter-regional rclone Reter Imediato
ibm-object-storage-smart-cross-region-s3fs Inteligente Inter-regional s3fs Excluir Imediato
ibm-object-storage-smart-cross-region-s3fs-retain Inteligente Inter-regional s3fs Reter Imediato
ibm-object-storage-smart-rclone Inteligente Regional rclone Excluir Imediato
ibm-armazenamento-de-objetos-smart-rclone-retain Inteligente Regional rclone Reter Imediato
ibm-object-storage-smart-s3fs Inteligente Regional s3fs Excluir Imediato
ibm-object-storage-smart-s3fs-retain Inteligente Regional s3fs Reter Imediato
ibm-object-storage-standard-entre-regiões-rclone Standard Inter-regional rclone Excluir Imediato
ibm-object-storage-standard-entre-regiões-rclone-retain Standard Inter-regional rclone Reter Imediato
ibm-object-storage-standard-cross-region-s3fs Standard Inter-regional s3fs Excluir Imediato
ibm-object-storage-standard-cross-region-s3fs-retain Standard Inter-regional s3fs Reter Imediato
ibm-object-storage-standard-rclone Standard Regional rclone Excluir Imediato
ibm-object-storage-standard-rclone-retain Standard Regional rclone Reter Imediato
ibm-object-storage-standard-s3fs Standard Regional s3fs Excluir Imediato
ibm-object-storage-standard-s3fs-retain Standard Regional s3fs Reter Imediato

Para revisar a configuração detalhada do bucket para uma classe de armazenamento, execute oc describe storageclass <storageclass_name> ou oc describe storageclass <storageclass_name>.

Parâmetros de classe de armazenamento

Todas as classes de armazenamento complementar de cluster incluem os seguintes parâmetros principais.

Parâmetros principais para classes de armazenamento complementares de cluster COS
Parâmetro Descrição
client Identifica o tipo de cliente que o driver usa. As classes de armazenamento complementar usam awss3.
cosEndpoint Define o ponto de extremidade IBM Cloud Object Storage para a região do compartimento.
csi.storage.k8s.io/node-publish-secret-name Faz referência ao nome do segredo que contém suas credenciais IBM Cloud Object Storage.
csi.storage.k8s.io/node-publish-secret-namespace Faz referência ao namespace do segredo que contém suas credenciais IBM Cloud Object Storage.
locationConstraint Define a classe e a região do bucket, como au-syd-smart ou au-syd-standard.
mounter Especifica se a classe de armazenamento usa o montador s3fs ou rclone.

Opções de montagem padrão da classe de armazenamento s3fs

As classes de armazenamento s3fs usam as seguintes opções de montagem padrão.

Opções padrão de montagem para as classes de armazenamento do complemento COS “ s3fs ”
Opção de montagem Descrição
multipart_size=52 Define o tamanho da parte, em MB, para cada solicitação de várias partes.
multireq_max=20 Define o número máximo de solicitações paralelas para listar objetos.
max_dirty_data=5120 Descarrega os dados sujos em S3 depois que um número especificado de MB é gravado. O valor mínimo suportado é 50. Um valor de -1 desativa esse comportamento.
parallel_count=20 Define o número de solicitações paralelas para fazer upload de objetos grandes. O site s3fs faz upload de objetos grandes usando solicitações de várias partes e envia solicitações em paralelo.
max_stat_cache_size=100000 Define o número máximo de entradas no cache de estatísticas e no cache de links simbólicos.
retries=5 Define o número de vezes para tentar novamente uma transação S3 que falhou.
kernel_cache Ativa o cache de buffer do kernel para o ponto de montagem do volume. Os dados que são lidos em IBM Cloud Object Storage são armazenados no cache do kernel para ajudar a proporcionar um acesso de leitura mais rápido. O cache do kernel está ativado para as classes de armazenamento padrão e inteligente s3fs.
max_background=1000 Define o número máximo de solicitações FUSE em segundo plano que podem ser enfileiradas antes que o kernel bloqueie novas solicitações. Aumentar esse valor melhora a taxa de processamento para cargas de trabalho com alta simultaneidade.

Opções de montagem padrão da classe de armazenamento rclone

As classes de armazenamento rclone usam as seguintes opções de montagem padrão.

Opções padrão de montagem para as classes de armazenamento do complemento rclone do COS
Opção de montagem Descrição
acl=private Garante que os objetos carregados não sejam acessíveis publicamente.
bucket_acl=private Define a ACL padrão dos compartimentos que rclone cria para private.
upload_cutoff=100Mi Faz upload de arquivos maiores que 100 MiB usando upload de várias partes. Arquivos menores são carregados em uma única solicitação.
chunk_size=16Mi Define o tamanho de cada parte em um upload de várias partes.
max_upload_parts=1000 Define o número máximo de partes por upload de várias partes e, indiretamente, limita o tamanho máximo de arquivo suportado com o chunk_size configurado. Com chunk_size=16Mi, o tamanho máximo do arquivo é 16 GiB.
upload_concurrency=8 Define o número de partes que são carregadas em paralelo durante um upload de várias partes.
multi_thread_streams=8 Define o número de threads utilizadas para baixar um único objeto ao utilizar o download multithread.
disable_checksum=true Desativa o cálculo da soma de verificação do MD5 durante o envio. Melhora o desempenho em arquivos grandes, nos quais o cálculo da soma de verificação gera uma sobrecarga significativa.