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.
- Si
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.
- Listez les modules complémentaires et trouvez la version que vous souhaitez installer.
Exemple de sortieibmcloud ks cluster addon versions
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 - -
- Installer le module complémentaire.
ibmcloud ks cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
- 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)
- 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.
-
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: |
-
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
-
Mettre à jour le fichier de configuration avec les valeurs encodées base64.
-
Créez le secret.
kubectl apply -f secret.yaml
Créer un PVC
-
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.
-
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.
-
Créez le PVC (circuit virtuel permanent).
kubectl apply -f pvc.yaml
Créer un déploiement
-
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.
-
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.
-
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>]
-
Créez la ressource
RecoverStaleVolume
dans votre cluster.kubectl create -f stale.yaml
Exemple de sortie
recoverstalevolume.objectdriver.csi.ibm.com/recoverstalevolume-sample created
-
Vérifier que la ressource a été créée.
kubectl get recoverstalevolume
Exemple de sortie
NAME AGE recoverstalevolume-sample 41s
-
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
-
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
-
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>
-
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>
-
Supprimer le pod
ibm-object-csi-node-xxx
dans l'espace de nomsibm-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
-
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>
-
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
- Exécutez la commande suivante pour désactiver le module complémentaire.
Exemple de sortieibmcloud ks cluster addon disable ibm-object-csi-driver --cluster CLUSTER
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
- 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
-
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
-
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
-
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: |
-
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
-
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 classessmart
- Si vous avez utilisé une classe
standard
, choisissez l'une des nouvelles classesstandard
- Les classes
cold
etvault
ne sont plus disponibles avec le module complémentaire ; choisissez une classesmart
oustandard
à la place.
- Si vous avez utilisé une classe
-
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>
-
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
-
Vérifier que le PVC est
Bound
.kubectl get pvc
-
Obtenez les détails de votre application.
kubectl get pods
-
Réduisez votre application à zéro.
kubectl scale deployment --replicas=0 my-app
-
Créez un déploiement de remplacement qui fait référence au PVC que vous avez créé à l'étape précédente.
-
Une fois la nouvelle répartition en cours d'exécution, vous pouvez supprimer l'ancienne répartition.
-
Répétez ces étapes pour chaque PVC que vous souhaitez migrer.
IBM Cloud Object Storage cluster add-on storage classes
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 |