Migração de aplicativos e dados Cloud Object Storage (COS) entre contas IBM Cloud

[Infraestrutura clássica] {: tag-classic-inf} Nuvem privada virtual

Neste tutorial, você migrará um aplicativo COS e os dados de um cluster IBM Cloud Kubernetes Service em uma conta para um cluster Red Hat OpenShift on IBM Cloud em uma conta separada.

Pré-requisitos

Conta 1

Na Conta 1, você deve ter o seguinte.

Conta 2

Na Conta 2, a conta de destino para a qual a migração será feita, você deve ter o seguinte.

Opcional: Implante um aplicativo em seu cluster

Conta 1

Se você ainda não tiver um aplicativo que deseja migrar, poderá implantar o aplicativo de exemplo a seguir.

  1. Crie um PVC que faça referência à sua configuração de armazenamento de objetos.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: demo #Enter a name for your PVC.
      namespace: default
      annotations:
      ibm.io/auto-create-bucket: "true"
      ibm.io/auto-delete-bucket: "false"
      ibm.io/secret-name: SECRET-NAME #Enter the name of the secret you created earlier.
      ibm.io/secret-namespace: NAMESPACE #Enter the namespace where you want to create the PVC.
    spec:
        accessModes:
        - ReadWriteOnce
        resources:
            requests:
              storage: 10Gi
        storageClassName: ibmc-s3fs-cos #The storage class that you want to use.
    
  2. Crie o PVC em seu cluster.

    oc apply -f pvc-cos.yaml
    
  3. Crie um arquivo de configuração YAML para um pod que monte o PVC que você criou.

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-pod
      namespace: default
    spec:
      securityContext:
        runAsUser: 2000
        fsGroup: 2000
      volumes:
      - name: demo-vol
        persistentVolumeClaim:
          claimName: demo
      containers:
      - name: test
        image: nginxinc/nginx-unprivileged
        imagePullPolicy: Always
        volumeMounts:
        - name: demo-vol
          mountPath: /mnt/cosvol
    
  4. Crie o pod em seu cluster.

    oc apply -f demo-pod.yaml
    
  5. Verifique se o pod foi implementado. Observe que pode levar alguns minutos para o seu app entre em um estado Running.

    oc get pods
    
    NAME                                READY   STATUS    RESTARTS   AGE
    demo-pod                            1/1     Running   0          2m58s
    
  6. Verifique se o app pode gravar em seu volume de armazenamento de blocos efetuando login em seu pod.

    oc exec demo-pod -- bash -c "ls /mnt/cosvol"
    

Obtenha os detalhes do seu aplicativo

Conta 1

  1. Liste os pods e os PVCs.
    oc get pods
    
  2. Descreva seu PVC, revise os detalhes e anote o nome da caçamba.
    oc describe PVC -o yaml
    

Instalar rclone

Siga a rclone documentação para as etapas de instalação.

Configure " rclone para seu bucket na Conta 1

Conta 1

Depois de ter rclone instalado, você deve gerar um arquivo de configuração que defina a instância do COS da qual deseja migrar os dados.

  1. Execute o comando rclone config .

    rclone config
    

    Exemplo de saída

    2020/01/16 09:39:33 NOTICE: Config file "/Users/ryan/.config/rclone/rclone.conf" not found - using defaults
    No remotes found - make a new one
    n) New remote
    s) Set configuration password
    q) Quit config
    
  2. Digitar n para configurar um novo controle remoto e forneça um nome para ele.

    n/s/q> n
    

    Exemplo de nome remoto

    name> cos-instance-1
    
  3. Na lista de provedores, selecione Amazon S3 Compliant Storage Provider que inclui IBM COS.

    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / 1Fichier
      \ "fichier"
    2 / Alias for an existing remote
      \ "alias"
    3 / Amazon Drive
      \ "amazon cloud drive"
    4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
      \ "s3"
    5 / Backblaze B2
      \ "b2"
    ...
    provider> 4
    
  4. Selecione IBM COS como seu s3 provedor.

    Choose your S3 provider.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Amazon Web Services (AWS) S3
      \ "AWS"
    2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun
      \ "Alibaba"
    3 / Ceph Object Storage
      \ "Ceph"
    4 / Digital Ocean Spaces
      \ "DigitalOcean"
    5 / Dreamhost DreamObjects
      \ "Dreamhost"
    6 / IBM COS S3
      \ "IBMCOS"
    7 / Minio Object Storage
      \ "Minio"
    8 / Netease Object Storage (NOS)
      \ "Netease"
    9 / Wasabi Object Storage
      \ "Wasabi"
    10 / Any other S3 compatible provider
      \ "Other"
    
  5. Adicione suas credenciais COS selecionando a opção 1.

    Option env_auth.
    Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
    Only applies if access_key_id and secret_access_key is blank.
    Choose a number from below, or type in your own boolean value (true or false).
    Press Enter for the default (false).
    1 / Enter AWS credentials in the next step.
      \ (false)
    2 / Get AWS credentials from the environment (env vars or IAM).
      \ (true)
    env_auth> 1
    
  6. Quando solicitado, forneça o access_key_id e secret_access_key da sua instância COS. Para mais informações, veja Credenciais de serviço.

    AWS Access Key ID.
    Leave blank for anonymous access or runtime credentials.
    Enter a string value. Press Enter for the default ("").
    access_key_id> xxxxxxxxxxxxxxxxxxxxx
    AWS Secret Access Key (password)
    Leave blank for anonymous access or runtime credentials.
    Enter a string value. Press Enter for the default ("").
    secret_access_key> xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
  7. No Region to connect to prompt, selecione a opção 1.

    Region to connect to.
    Leave blank if you are using an S3 clone and you don't have a region.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Use this if unsure. Will use v4 signatures and an empty region.
      \ ""
    2 / Use this only if v4 signatures don't work, eg pre Jewel/v10 CEPH.
      \ "other-v2-signature"
    region> 1
    
  8. No Endpoint for IBM COS S3 API prompt, selecione a opção 1.

    Endpoint for IBM COS S3 API.
    Specify if using an IBM COS On Premise.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / US Cross Region Endpoint
      \ "s3-api.us-geo.objectstorage.softlayer.net"
    2 / US Cross Region Dallas Endpoint
      \ "s3-api.dal.us-geo.objectstorage.softlayer.net"
    3 / US Cross Region Washington DC Endpoint
      \ "s3-api.wdc-us-geo.objectstorage.softlayer.net"
    ...
    endpoint> 1
    
  9. No Location constraint alerta, pressione Retornar para usar o padrão.

    Location constraint - must match endpoint when using IBM Cloud Public.
    For on-prem COS, do not make a selection from this list, hit enter
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / US Cross Region Standard
      \ "us-standard"
    2 / US Cross Region Vault
      \ "us-vault"
    3 / US Cross Region Cold
      \ "us-cold"
    4 / US Cross Region Flex
      \ "us-flex"
    ...
    
  10. No prompt da política ACL, selecione private.

    Note that this ACL is applied when server side copying objects as S3
    doesn't copy the ACL from the source but rather writes a fresh one.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Owner gets FULL_CONTROL. No one else has access rights (default). This acl is available on IBM Cloud (Infra), IBM Cloud (Storage), On-Premise COS
      \ "private"
    2 / Owner gets FULL_CONTROL. The AllUsers group gets READ access. This acl is available on IBM Cloud (Infra), IBM Cloud (Storage), On-Premise IBM COS
      \ "public-read"
    3 / Owner gets FULL_CONTROL. The AllUsers group gets READ and WRITE access. This acl is available on IBM Cloud (Infra), On-Premise IBM COS
      \ "public-read-write"
    4 / Owner gets FULL_CONTROL. The AuthenticatedUsers group gets READ access. Not supported on Buckets. This acl is available on IBM Cloud (Infra) and On-Premise IBM COS
      \ "authenticated-read"
    acl> 1
    
  11. Ignore a opção de configuração avançada e confirme sua configuração.

    Edit advanced config? (y/n)
    y) Yes
    n) No
    y/n> n
    Remote config
    --------------------
    [cos-instance-1]
    type = s3
    provider = IBMCOS
    env_auth = false
    access_key_id = xxxxxx
    secret_access_key = xxxxxxxxx
    endpoint = s3-api.us-geo.objectstorage.softlayer.net
    location_constraint = us-standard
    acl = private
    --------------------
    y) Yes this is OK
    e) Edit this remote
    d) Delete this remote
    y/e/d> y
    Current remotes:
    
    Name                 Type
    ====                 ====
    cos-instance-1      s3
    
  12. Repita as etapas anteriores para adicionar a instância do COS em sua segunda conta. Quando tiver verificado as informações, pressione q para sair do processo de configuração.

Configure " rclone para seu bucket na Conta 2

Conta 2

Repita as etapas para configurar rclone para a Conta 2.

  1. Execute o comando rclone config .

    rclone config
    

    Exemplo de saída

    2020/01/16 09:39:33 NOTICE: Config file "/Users/ryan/.config/rclone/rclone.conf" not found - using defaults
    No remotes found - make a new one
    n) New remote
    s) Set configuration password
    q) Quit config
    
  2. Digitar n para configurar um novo controle remoto e forneça um nome para ele.

    n/s/q> n
    

    Exemplo de nome remoto

    name> cos-instance-2
    
  3. Na lista de provedores, selecione Amazon S3 Compliant Storage Provider que inclui IBM COS.

    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / 1Fichier
      \ "fichier"
    2 / Alias for an existing remote
      \ "alias"
    3 / Amazon Drive
      \ "amazon cloud drive"
    4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
      \ "s3"
    5 / Backblaze B2
      \ "b2"
    ...
    provider> 4
    
  4. Selecione IBM COS como seu s3 provedor.

    Choose your S3 provider.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Amazon Web Services (AWS) S3
      \ "AWS"
    2 / Alibaba Cloud Object Storage System (OSS) formerly Aliyun
      \ "Alibaba"
    3 / Ceph Object Storage
      \ "Ceph"
    4 / Digital Ocean Spaces
      \ "DigitalOcean"
    5 / Dreamhost DreamObjects
      \ "Dreamhost"
    6 / IBM COS S3
      \ "IBMCOS"
    7 / Minio Object Storage
      \ "Minio"
    8 / Netease Object Storage (NOS)
      \ "Netease"
    9 / Wasabi Object Storage
      \ "Wasabi"
    10 / Any other S3 compatible provider
      \ "Other"
    
  5. Adicione suas credenciais COS selecionando a opção 1.

    Option env_auth.
    Get AWS credentials from runtime (environment variables or EC2/ECS meta data if no env vars).
    Only applies if access_key_id and secret_access_key is blank.
    Choose a number from below, or type in your own boolean value (true or false).
    Press Enter for the default (false).
    1 / Enter AWS credentials in the next step.
      \ (false)
    2 / Get AWS credentials from the environment (env vars or IAM).
      \ (true)
    env_auth> 1
    
  6. Quando solicitado, forneça o access_key_id e secret_access_key da sua instância COS. Para mais informações, veja Credenciais de serviço.

    AWS Access Key ID.
    Leave blank for anonymous access or runtime credentials.
    Enter a string value. Press Enter for the default ("").
    access_key_id> xxxxxxxxxxxxxxxxxxxxx
    AWS Secret Access Key (password)
    Leave blank for anonymous access or runtime credentials.
    Enter a string value. Press Enter for the default ("").
    secret_access_key> xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    
  7. No Region to connect to prompt, selecione a opção 1.

    Region to connect to.
    Leave blank if you are using an S3 clone and you don't have a region.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Use this if unsure. Will use v4 signatures and an empty region.
      \ ""
    2 / Use this only if v4 signatures don't work, eg pre Jewel/v10 CEPH.
      \ "other-v2-signature"
    region> 1
    
  8. No Endpoint for IBM COS S3 API prompt, selecione a opção 1.

    Endpoint for IBM COS S3 API.
    Specify if using an IBM COS On Premise.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / US Cross Region Endpoint
      \ "s3-api.us-geo.objectstorage.softlayer.net"
    2 / US Cross Region Dallas Endpoint
      \ "s3-api.dal.us-geo.objectstorage.softlayer.net"
    3 / US Cross Region Washington DC Endpoint
      \ "s3-api.wdc-us-geo.objectstorage.softlayer.net"
    ...
    endpoint> 1
    
  9. No Location constraint alerta, pressione Retornar para usar o padrão.

    Location constraint - must match endpoint when using IBM Cloud Public.
    For on-prem COS, do not make a selection from this list, hit enter
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / US Cross Region Standard
      \ "us-standard"
    2 / US Cross Region Vault
      \ "us-vault"
    3 / US Cross Region Cold
      \ "us-cold"
    4 / US Cross Region Flex
      \ "us-flex"
    ...
    
  10. No prompt da política ACL, selecione private.

    Note that this ACL is applied when server side copying objects as S3
    doesn't copy the ACL from the source but rather writes a fresh one.
    Enter a string value. Press Enter for the default ("").
    Choose a number from below, or type in your own value
    1 / Owner gets FULL_CONTROL. No one else has access rights (default). This acl is available on IBM Cloud (Infra), IBM Cloud (Storage), On-Premise COS
      \ "private"
    2 / Owner gets FULL_CONTROL. The AllUsers group gets READ access. This acl is available on IBM Cloud (Infra), IBM Cloud (Storage), On-Premise IBM COS
      \ "public-read"
    3 / Owner gets FULL_CONTROL. The AllUsers group gets READ and WRITE access. This acl is available on IBM Cloud (Infra), On-Premise IBM COS
      \ "public-read-write"
    4 / Owner gets FULL_CONTROL. The AuthenticatedUsers group gets READ access. Not supported on Buckets. This acl is available on IBM Cloud (Infra) and On-Premise IBM COS
      \ "authenticated-read"
    acl> 1
    
  11. Ignore a opção de configuração avançada e confirme sua configuração.

    Edit advanced config? (y/n)
    y) Yes
    n) No
    y/n> n
    Remote config
    --------------------
    [cos-instance-2]
    type = s3
    provider = IBMCOS
    env_auth = false
    access_key_id = xxxxxx
    secret_access_key = xxxxxxxxx
    endpoint = s3-api.us-geo.objectstorage.softlayer.net
    location_constraint = us-standard
    acl = private
    --------------------
    y) Yes this is OK
    e) Edit this remote
    d) Delete this remote
    y/e/d> y
    Current remotes:
    
    Name                 Type
    ====                 ====
    cos-instance-1      s3
    cos-instance-2      s3
    
  12. Repita as etapas anteriores para adicionar a instância do COS em sua segunda conta. Quando tiver verificado as informações, pressione q para sair do processo de configuração.

Visualizar o conteúdo de seus buckets COS

Conta 1 Conta 2

Depois de configurar o rclone, revise o conteúdo de cada compartimento e sincronize os dados entre os compartimentos em cada conta.

  1. Visualize o conteúdo do bucket em primeira instância.

    rclone ls cos-instance-1:bucket-1
        45338 test.txt
    
  2. Visualize o conteúdo do bucket na instância 2. Neste exemplo, o nome do bucket é bucket-2.

    rclone ls cos-instance-2:bucket-2
    

Sincronizando conteúdo entre buckets

Conta 1 Conta 2

  1. Para mover os dados de um bucket para outro, você pode usar o rclone sync comando. Neste exemplo cos-instance-1:bucket-1 está em uma conta enquanto cos-instance-2:bucket-2 é uma segunda instância do COS em uma conta separada.

    Exemplo

    rclone sync -P cos-instance-1:bucket-1 cos-instance-2:bucket-2
    

    Exemplo de saída

    Transferred:      754.933k / 754.933 kBytes, 100%, 151.979 kBytes/s, ETA 0s
    Errors:                 0
    Checks:                 0 / 0, -
    Transferred:           18 / 18, 100%
    Elapsed time:        4.9
    
  2. Verifique o conteúdo do balde em cos-instance-1 foram sincronizados com o bucket em cos-instance-2.

    rclone ls cos-instance-2:bucket-2
    

    Exemplo de saída

    45338 test.txt
    

Reimplante seu aplicativo na Conta 2

Conta 2

  1. Acesse o seu Red Hat OpenShift cluster.

  2. Copie o seguinte PVC e salve-o em um arquivo chamado pvc.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: demo # Enter a name for your PVC.
      namespace: default
      annotations:
      ibm.io/bucket-name: "bucket-2" # Enter the name of the bucket in Account 2
      ibm.io/auto-create-bucket: "false"
      ibm.io/auto-delete-bucket: "false"
      ibm.io/secret-name: SECRET-NAME #Enter the name of the secret you created earlier.
      ibm.io/secret-namespace: NAMESPACE #Enter the namespace where you want to create the PVC.
    spec:
        accessModes:
        - ReadWriteOnce
        resources:
            requests:
              storage: 10Gi
        storageClassName: ibmc-s3fs-cos #The storage class that you want to use.
    
  3. Crie o PVC em seu cluster.

    oc apply -f pvc.yaml
    
  4. Crie um arquivo de configuração YAML para um pod que monte o PVC que você criou.

    apiVersion: v1
    kind: Pod
    metadata:
      name: demo-pod
      namespace: default
    spec:
      securityContext:
        runAsUser: 2000
        fsGroup: 2000
      volumes:
      - name: demo-vol
        persistentVolumeClaim:
          claimName: demo
      containers:
      - name: test
        image: nginxinc/nginx-unprivileged
        imagePullPolicy: Always
        volumeMounts:
        - name: demo-vol
          mountPath: /mnt/cosvol
    
  5. Crie o pod em seu cluster.

    oc apply -f demo-pod.yaml
    
  6. Verifique se o pod foi implementado. Observe que pode levar alguns minutos para o seu app entre em um estado Running.

    oc get pods
    
    NAME                                READY   STATUS    RESTARTS   AGE
    demo-pod                            1/1     Running   0          2m58s
    
  7. Verifique se o app pode gravar em seu volume de armazenamento de blocos efetuando login em seu pod.

    oc exec demo-pod -- bash -c "ls /mnt/cosvol"
    
    test.txt