IBM Cloud Docs
Installer le module complémentaire de cluster IBM Cloud Object Storage

Installer le module complémentaire de cluster IBM Cloud Object Storage

Le module complémentaire de cluster IBM Cloud Object Storage est disponible en version bêta pour les comptes autorisés uniquement. Pour être ajouté à la liste d'autorisation, contactez le service d'assistance. Pour plus d'informations, voir Demande d'accès aux fonctionnalités de la liste d'autorisation.

Prérequis
Le module complémentaire IBM Cloud Object Storage nécessite au moins 0.2 vCPU et 128 Mo de mémoire.

Comprendre la création et la suppression des seaux

  • Vous pouvez utiliser un seau existant en spécifiant le nom du seau dans votre PVC.
  • Si vous fournissez un nom de seau et que ce seau n'existe pas, un seau portant ce nom est créé.
  • Si vous ne fournissez pas de nom de godet, un godet avec la convention de dénomination temp-xxx est créé.
  • Les bacs sont supprimés en fonction de la politique de récupération définie dans votre classe de stockage.
    • Si reclaimPolicy: Delete est défini, le seau est supprimé lorsque le PVC est supprimé.
    • Si reclaimPolicy: Retain est défini, le seau est conservé même après la suppression du PVC.

Activation de l'extension IBM Cloud Object Storage

Avant de commencer : Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  1. Listez les modules complémentaires et trouvez la version que vous souhaitez installer.
    ibmcloud ks cluster addon versions
    
    Exemple de sortie
    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. Installer le module complémentaire.
    ibmcloud ks cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
    
  3. Vérification de l'installation.
    ibmcloud ks 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. Liste des classes de stockage disponibles.
    kubectl 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
    

Déployer une application qui utilise IBM Cloud Object Storage

Créez un secret Kubernetes qui contient vos informations d'identification COS.

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Enregistrez la configuration suivante dans un fichier appelé secret.yaml.

    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>
        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: |
    
  3. Encodez les informations d'identification que vous avez récupérées dans la section précédente en base64. Répétez cette commande pour chaque paramètre.

    echo -n "<value>" | base64
    
  4. Mettre à jour le fichier de configuration avec les valeurs encodées base64.

  5. Créez le secret.

    kubectl apply -f secret.yaml
    

Créer un PVC

  1. Enregistrez la configuration suivante dans un fichier appelé pvc.yaml.

    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.
    
  2. Modifier les valeurs du fichier de configuration. Veillez à spécifier le même espace de noms que celui dans lequel vous avez créé votre secret. Pour une liste des classes de stockage, voir la Référence des classes de stockage.

  3. Créez le PVC (circuit virtuel permanent).

    kubectl apply -f pvc.yaml
    

Créer un déploiement

  1. Enregistrez la configuration suivante dans un fichier appelé 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. Créez le déploiement.

    kubectl apply -f dep.yaml
    

Configuration de la récupération automatique pour les volumes périmés

Lorsque la connexion est perdue entre les ibm-object-csi-driver pods de serveur de nœuds et les pods d'application, vous pouvez voir des TransportEndpoint erreurs de connexion. Cette erreur peut se produire lorsque des mises à jour de correctifs sont appliquées. Pour éviter les erreurs de connexion, configurez la récupération automatique des volumes périmés en suivant les étapes suivantes.

  1. Copiez le fichier yaml suivant et enregistrez-le dans un fichier appelé stale.yaml

    apiVersion: objectdriver.csi.ibm.com/v1alpha1
    kind: RecoverStaleVolume
    metadata:
      labels:
        app.kubernetes.io/name: recoverstalevolume
        app.kubernetes.io/instance: recoverstalevolume-sample
      name: recoverstalevolume-sample
      namespace: default
    spec:
      logHistory: 200
      data:
        - namespace: default # The namesapce where your app is deployed
          deployments: [<A comma separated list of all the apps you want to recover>]
    
  2. Créez la ressource RecoverStaleVolume dans votre cluster.

    kubectl create -f stale.yaml
    

    Exemple de sortie

    recoverstalevolume.objectdriver.csi.ibm.com/recoverstalevolume-sample created
    
  3. Vérifier que la ressource a été créée.

    kubectl get recoverstalevolume
    

    Exemple de sortie

    NAME  AGE  recoverstalevolume-sample   41s
    
  4. Si le problème persiste, contactez l'assistance. Ouverture d'un cas de support. Dans les détails de l'affaire, veillez à inclure tout fichier journal, message d'erreur ou résultat de commande pertinent.

Vérification de la récupération par la simulation d'une erreur

  1. Dressez la liste de vos déploiements.

    kubectl get deploy -o wide
    

    Exemple de sortie

    NAME               READY   UP-TO-DATE   AVAILABLE   AGE     CONTAINERS     IMAGES     SELECTOR
    cos-csi-test-app   1/1     1            1           7h24m   app-frontend   rabbitmq   app=cos-csi-test-app
    
  2. Listez vos app pods.

    kubectl get pods -o wide
    

    Exemple de sortie

    NAME                                READY   STATUS    RESTARTS   AGE     IP             NODE           NOMINATED NODE   READINESS GATES
    cos-csi-test-app-6b99bd8bf4-5lt7p   1/1     Running   0          7h24m   172.30.69.21   10.73.114.86   <none>           <none>
    
  3. Liste des pods dans l'espace de noms ibm-object-csi-operator.

    kubectl get pods -n ibm-object-csi-operator -o wide
    
    NAME                                                          READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
    ibm-object-csi-controller-d64df8f57-l6grj                     3/3     Running   0          7h31m   172.30.69.19    10.73.114.86   <none>           <none>
    ibm-object-csi-node-6d4x4                                     3/3     Running   0          7h31m   172.30.64.24    10.48.3.149    <none>           <none>
    ibm-object-csi-node-gg5pj                                     3/3     Running   0          7h31m   172.30.116.13   10.93.120.14   <none>           <none>
    ibm-object-csi-node-vk8jf                                     3/3     Running   0          7h31m   172.30.69.20    10.73.114.86   <none>           <none>
    ibm-object-csi-operator-controller-manager-8544d4f798-llbf8   1/1     Running   0          7h37m   172.30.69.18    10.73.114.86   <none>           <none>
    
  4. Supprimer le pod ibm-object-csi-node-xxx dans l'espace de noms ibm-object-csi-operator.

    kubectl delete pod ibm-object-csi-node-vk8jf -n ibm-object-csi-operator
    

    Exemple de sortie

    pod "ibm-object-csi-node-vk8jf" deleted
    
  5. Liste des pods dans l'espace de noms ibm-object-csi-operator.

    kubectl get pods -n ibm-object-csi-operator -o wide
    

    Exemple de sortie

    NAME                                                          READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
    ibm-object-csi-controller-d64df8f57-l6grj                     3/3     Running   0          7h37m   172.30.69.19    10.73.114.86   <none>           <none>
    ibm-object-csi-node-6d4x4                                     3/3     Running   0          7h37m   172.30.64.24    10.48.3.149    <none>           <none>
    ibm-object-csi-node-gg5pj                                     3/3     Running   0          7h37m   172.30.116.13   10.93.120.14   <none>           <none>
    ibm-object-csi-node-kmn94                                     3/3     Running   0          8s      172.30.69.23    10.73.114.86   <none>           <none>
    ibm-object-csi-operator-controller-manager-8544d4f798-llbf8   1/1     Running   0          7h43m   172.30.69.18    10.73.114.86   <none>           <none>
    
  6. Obtenez les logs du ibm-object-csi-operator-controller-manager pour suivre la récupération de l'app pod. Notez que l'Opérateur supprime le pod de l'application afin qu'il soit redémarré.

    2024-07-10T17:25:39Z	INFO	recoverstalevolume_controller	Time to complete	{"fetchVolumeStatsFromNodeServerPodLogs": 0.066584637}
    2024-07-10T17:25:39Z	INFO	recoverstalevolume_controller	Volume Stats from NodeServer Pod Logs	{"Request.Namespace": "default", "Request.Name": "recoverstalevolume-sample", "volume-stas": {"pvc-9d12a2f5-09a9-4eb4-b1f5-2a727249ed2b":"transport endpoint is not connected "}}
    2024-07-10T17:25:39Z	INFO	recoverstalevolume_controller	Stale Volume Found	{"Request.Namespace": "default", "Request.Name": "recoverstalevolume-sample", "volume": "pvc-9d12a2f5-09a9-4eb4-b1f5-2a727249ed2b"}
    2024-07-10T17:25:39Z	INFO	recoverstalevolume_controller	Pod using stale volume	{"Request.Namespace": "default", "Request.Name": "recoverstalevolume-sample", "volume-name": "pvc-9d12a2f5-09a9-4eb4-b1f5-2a727249ed2b", "pod-name": "cos-csi-test-app-6b99bd8bf4-5lt7p"}
    2024-07-10T17:25:39Z	INFO	recoverstalevolume_controller	Pod deleted.	{"Request.Namespace": "default", "Request.Name": "recoverstalevolume-sample"}
    

Désactivation du module complémentaire IBM Cloud Object Storage

  1. Exécutez la commande suivante pour désactiver le module complémentaire.
     ibmcloud ks cluster addon disable ibm-object-csi-driver --cluster CLUSTER
    
    Exemple de sortie
    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. Vérifier que le module complémentaire a été supprimé.
    ibmcloud ks cluster addon ls --cluster CLUSTER
    

Migration du plug-in Helm vers le module complémentaire cluster

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Obtenez les détails de vos PVC et sélectionnez-en un à migrer.

    kubectl 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
    

    Exemple de sortie

    PVC: pvc-test in Namespace: default uses ibm.io/ibmc-s3fs storage provisioner
    
  3. Décrire le PVC et obtenir le nom du seau.

    kubectl describe pvc <pvc_name> | grep ibm.io/bucket:
    

    Exemple de sortie

    ibm.io/bucket: test-s3
    
  4. Créez un secret portant le même nom que votre PVC.

    apiVersion: v1
    kind: Secret
    type: cos-s3-csi-driver
    metadata:
        name: test-s3 # Name your secret the same name your PVC
        namespace: default # Specify the namespace where you want to create the secret. In this example, the previous PVC and secret were in the default namespace.
    data:
        bucketName: <base64-encoded-bucket-name>
        apiKey: <base64-encoded-COS-Service-Instance-API-key>
        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: |
    
  5. Recherchez la classe de stockage utilisée dans votre PVC.

    kubectl describe pvc <pvc_name> | grep StorageClass:
    

    Exemple de commande pour un PVC appelé test-s3.

    kubectl describe pvc test-s3 | grep StorageClass:
    

    Exemple de sortie

    StorageClass:  ibmc-s3fs-smart-perf-regional
    
  6. Examinez les nouvelles classes de stockage disponibles avec le module complémentaire et sélectionnez une classe de remplacement.

    • Si vous avez utilisé une classe flex, choisissez l'une des nouvelles classes smart
    • Si vous avez utilisé une classe standard, choisissez l'une des nouvelles classes standard
    • Les classes cold et vault ne sont plus disponibles avec le module complémentaire ; choisissez une classe smart ou standard à la place.
  7. Examinez les détails de votre PVC.

    kubectl describe pvc test-s3
    

    Exemple de sortie

    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. Créez un PVC de remplacement qui utilise une nouvelle classe de stockage et fait référence au secret que vous avez créé précédemment.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: test-s3 # Enter the same name as the secret you created earlier.
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
        requests:
        storage: 3Gi
    storageClassName: ibm-object-storage-smart-s3fs
    
  9. Vérifier que le PVC est Bound.

    kubectl get pvc
    
  10. Obtenez les détails de votre application.

    kubectl get pods
    
  11. Réduisez votre application à zéro.

    kubectl scale deployment --replicas=0 my-app
    
  12. Créez un déploiement de remplacement qui fait référence au PVC que vous avez créé à l'étape précédente.

  13. Une fois la nouvelle répartition en cours d'exécution, vous pouvez supprimer l'ancienne répartition.

  14. Répétez ces étapes pour chaque PVC que vous souhaitez migrer.

IBM Cloud Object Storage cluster add-on storage classes

Classes de stockage supplémentaires pour les clusters COS.
Nom Stratégie de récupération Mode de liaison
ibm-object-storage-smart-rclone Supprimer Immédiate
ibm-object-storage-smart-rclone-retain Conserver Immédiate
ibm-object-storage-smart-s3fs Supprimer Immédiate
ibm-object-storage-smart-s3fs-retain Conserver Immédiate
ibm-objet-stockage-standard-rclone Supprimer Immédiate
ibm-object-storage-standard-rclone-retain Conserver Immédiate
ibm-object-storage-standard-s3fs Supprimer Immédiate
ibm-object-storage-standard-s3fs-retain Conserver Immédiate