Migration des applications et des données de Cloud Object Storage (COS) entre les comptes IBM Cloud

Infrastructure classique Cloud privé virtuel

Dans ce tutoriel, vous allez migrer une application et des données COS d'un IBM Cloud Kubernetes Service cluster dans un compte, vers un Red Hat OpenShift on IBM Cloud cluster dans un compte séparé.

Prérequis

Compte 1

Dans le compte 1, vous devez disposer des éléments suivants.

Compte 2

Dans le compte 2, le compte de destination vers lequel la migration doit être effectuée, vous devez disposer des éléments suivants.

Facultatif : déployer une application dans votre cluster

Compte 1

Si vous n'avez pas encore d'application à migrer, vous pouvez déployer l'application d'exemple suivante.

  1. Créez un PVC qui fait référence à votre configuration de stockage d'objets.

    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. Créez la PVC dans votre cluster.

    oc apply -f pvc-cos.yaml
    
  3. Créez un fichier de configuration YAML pour un pod qui monte le PVC que vous créez.

    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. Créez le pod dans votre cluster.

    oc apply -f demo-pod.yaml
    
  5. Vérifiez que le pod est déployé. Il peut s'écouler quelques minutes avant que votre application ne passe à l'état Running.

    oc get pods
    
    NAME                                READY   STATUS    RESTARTS   AGE
    demo-pod                            1/1     Running   0          2m58s
    
  6. Vérifiez que l'application peut écrire dans votre volume de stockage de bloc en vous connectant à votre pod.

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

Obtenez les détails de votre application

Compte 1

  1. Dresser la liste des pods et des PVC.
    oc get pods
    
  2. Décrivez votre PVC, passez en revue les détails et notez le nom du seau.
    oc describe PVC -o yaml
    

Installer rclone

Suivez la rclone documentation pour les étapes d'installation.

Configurez " rclone pour votre seau dans le compte 1

Compte 1

Après avoir installé rclone, vous devez générer un fichier de configuration qui définit l'instance de COS à partir de laquelle vous souhaitez migrer des données.

  1. Exécutez la commande rclone config.

    rclone config
    

    Exemple de sortie

    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. Entrer n pour configurer une nouvelle télécommande, puis donnez un nom à votre télécommande.

    n/s/q> n
    

    Exemple de nom distant

    name> cos-instance-1
    
  3. Dans la liste des fournisseurs, sélectionnez Amazon S3 Compliant Storage Provider qui comprend 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. Sélectionnez IBM COS comme s3 fournisseur.

    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. Ajoutez vos informations d'identification COS en sélectionnant l'option 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. Lorsque vous y êtes invité, fournissez le access_key_id et secret_access_key de votre instance COS. Pour plus d'informations, voir Identifiants de service.

    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. Dans le Region to connect to invite, sélectionnez l'option 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. Dans le Endpoint for IBM COS S3 API invite, sélectionnez l'option 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. Dans le Location constraint invite, appuyez sur Retour pour utiliser la valeur par défaut.

    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. Dans l'invite de stratégie ACL, sélectionnez 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. Ignorez l’option de configuration avancée et confirmez votre configuration.

    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. Répétez les étapes précédentes pour ajouter l'instance COS à votre deuxième compte. Lorsque vous avez vérifié les informations, appuyez sur q pour quitter le processus de configuration.

Configurez " rclone pour votre seau dans le compte 2

Compte 2

Répétez les étapes pour configurer rclone pour le compte 2.

  1. Exécutez la commande rclone config.

    rclone config
    

    Exemple de sortie

    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. Entrer n pour configurer une nouvelle télécommande, puis donnez un nom à votre télécommande.

    n/s/q> n
    

    Exemple de nom distant

    name> cos-instance-2
    
  3. Dans la liste des fournisseurs, sélectionnez Amazon S3 Compliant Storage Provider qui comprend 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. Sélectionnez IBM COS comme s3 fournisseur.

    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. Ajoutez vos informations d'identification COS en sélectionnant l'option 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. Lorsque vous y êtes invité, fournissez le access_key_id et secret_access_key de votre instance COS. Pour plus d'informations, voir Identifiants de service.

    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. Dans le Region to connect to invite, sélectionnez l'option 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. Dans le Endpoint for IBM COS S3 API invite, sélectionnez l'option 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. Dans le Location constraint invite, appuyez sur Retour pour utiliser la valeur par défaut.

    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. Dans l'invite de stratégie ACL, sélectionnez 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. Ignorez l’option de configuration avancée et confirmez votre configuration.

    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. Répétez les étapes précédentes pour ajouter l'instance COS à votre deuxième compte. Lorsque vous avez vérifié les informations, appuyez sur q pour quitter le processus de configuration.

Visualiser le contenu de vos buckets COS

Compte 1 Compte 2

Après avoir configuré rclone, examinez le contenu de chaque seau, puis synchronisez les données entre les seaux de chaque compte.

  1. Affichez le contenu du compartiment dans un premier temps.

    rclone ls cos-instance-1:bucket-1
        45338 test.txt
    
  2. Affichez le contenu du bucket dans l'instance 2. Dans cet exemple, le nom du seau est bucket-2.

    rclone ls cos-instance-2:bucket-2
    

Synchronisation du contenu entre les compartiments

Compte 1 Compte 2

  1. Pour déplacer les données d'un bucket à un autre, vous pouvez utiliser le rclone sync commande. Dans cet exemple cos-instance-1:bucket-1 est dans un seul compte pendant que cos-instance-2:bucket-2 est une deuxième instance de COS dans un compte distinct.

    Exemple

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

    Exemple de sortie

    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. Vérifiez le contenu du seau dans cos-instance-1 ont été synchronisés avec le bucket dans cos-instance-2.

    rclone ls cos-instance-2:bucket-2
    

    Exemple de sortie

    45338 test.txt
    

Redéployez votre application sur le compte 2

Compte 2

  1. Accédez à votre cluster Red Hat OpenShift.

  2. Copiez le PVC suivant et enregistrez-le dans un fichier nommé 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. Créez la PVC dans votre cluster.

    oc apply -f pvc.yaml
    
  4. Créez un fichier de configuration YAML pour un pod qui monte le PVC que vous créez.

    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. Créez le pod dans votre cluster.

    oc apply -f demo-pod.yaml
    
  6. Vérifiez que le pod est déployé. Il peut s'écouler quelques minutes avant que votre application ne passe à l'état Running.

    oc get pods
    
    NAME                                READY   STATUS    RESTARTS   AGE
    demo-pod                            1/1     Running   0          2m58s
    
  7. Vérifiez que l'application peut écrire dans votre volume de stockage de bloc en vous connectant à votre pod.

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