Mise à niveau de 7.3 à 8.0
Avant de commencer la mise à jour
La mise à niveau vers ThingPark Enterprise 8.0 nécessite de mettre à jour à plusieurs reprises les ressources à l'échelle du cluster (mongo kafka controller et CRD). Ces opérations, marquées comme CAP required (Permissions d'administrateur de cluster) et nécessitent des permissions clusterAdmin.
La mise à jour ThingPark Enterprise 8.0 redimensionne les segments et vous devez réévaluer la page de dimensionnement du matériel À la même capacité de Capteurs et passerelles, vous serez en mesure de réduire au plus petit segment. Elle est transparente pour les ressources de calcul, mais le stockage mongodb nécessite une opération spécifique pour recréer un volume plus petit.
La mise à jour nécessite qu'une charge de travail s'exécute comme root pour mettre à jour les propriétaires des fichiers. Si votre cluster applique une Norme de Sécurité de Pod restreinte, vous devrez exécuter manuellement la mise à jour selon cette procédure.
Dans tous les cas, il est toujours conseillé d'effectuer une sauvegarde manuelle juste avant de commencer la mise à jour. Veuillez suivre la procédure de sauvegarde manuelle pour la version 7.3 de ThingPark Enterprise.
Migration de DATA
La mise à jour de TPE de la version 7.3 à 8.0.x inclut une étape de migration de DATA obligatoire. Cette migration introduit un modèle de traitement des DATA plus évolutif. Pour plus de détails, voir Compaction de plateforme dans les notes de version TPE 8.0.
L'étape de migration est requise et prend un temps non négligeable en fonction du nombre de capteurs hébergés.
Le tableau suivant fournit un temps d'exécution estimé pour la migration de DATA :
| Nombre de capteurs hébergés | Durée estimée pour la migration |
|---|---|
| < 1 000 | ~10 minutes |
| 2 000 | ~20 minutes |
| 5 000 | ~30 minutes |
| 10 000 | ~40 minutes |
| 20 000 | ~1 heure |
| 50 000 | ~3 heures |
| 100 000 | ~6 heures |
Note : Pour limiter la durée de mise à jour, seul l'historique des 7 derniers jours est conservé après la mise à jour à la version 8.0.
Note : Ces valeurs de temps sont indicatives et peuvent varier en fonction des performances du système et de la configuration matérielle.
Les étapes suivantes (étape 1 à étape 5) doivent être exécutées dans l'ordre.
ÉTAPE 1. Mise à jour du replicaset MongoDb
1,1. MongoDb 4,4 étape
Mettez à jour l'opérateur Percona Server Mongodb vers 1.14.0 et les ressources liées (crd, rbac : CAP requis)
kubectl patch -n $NAMESPACE deploy psmdb-operator --type=strategic --patch '{
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "psmdb-operator",
"image": "repository.thingpark.com/percona-server-mongodb-operator:1.14.0",
"env": [
{
"name": "DISABLE_TELEMETRY",
"value": "false"
}
]
}
]
}
}
}}'
kubectl apply --server-side --force-conflicts -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/percona-server-mongodb-operator-crds-1.14.0.yaml
kubectl apply -n $NAMESPACE -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/percona-server-mongodb-operator-rbac-1.14.0.yaml
Mettre à jour la ressource personnalisée psmdb
kubectl patch -n $NAMESPACE psmdb mongo-replicaset --type=merge --patch '{
"spec": {
"crVersion":"1.14.0",
"initImage": "repository.thingpark.com/percona-server-mongodb-operator:1.14.0",
"image": "repository.thingpark.com/percona-server-mongodb:4.4.18-18"
}}'
Redémarrer les membres du réplica
Identifier le primaire du cluster mongo
MONGO_PASSWORD=$(kubectl -n $NAMESPACE get secrets mongo-replicaset -o jsonpath='{.data.MONGODB_CLUSTER_ADMIN_PASSWORD}'| base64 -d)
MONGO_CLIENT_IMAGE=$(kubectl -n $NAMESPACE get sts mongo-replicaset-rs0 -o jsonpath='{.spec.template.spec.containers[0].image}')
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.isMaster().primary'| tail -n 1"
If you don't see a command prompt, try pressing enter.
mongo-replicaset-rs0-0.mongo-replicaset-rs0.thingpark-enterprise.svc.cluster.local:27017
pod "mongo-client" deleted
Mettre à jour l'arbitre et les membres secondaires de l'ensemble répliqué. Delete each pod one by one and
check that the mongodb member stateStr back to respectively ARBITER and SECONDARY before delete next pod
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-arbiter-0
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<secondary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Mettre à jour le primaire après l'avoir déclassé
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0-<primary pod id>.mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.stepDown()'"
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<primary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Mettez à jour la FeatureCompatibilityVersion
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 \
--eval 'db.adminCommand( { setFeatureCompatibilityVersion: \"4.4\" } )'"
# Check FeatureCompatibilityVersion command
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 \
--eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )'"
If you don't see a command prompt, try pressing enter.
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1739372666, 1),
"signature" : {
"hash" : BinData(0,"G42h8LnrvCE0cQ1Yq+FF2kQdmd0="),
"keyId" : NumberLong("7470465578344382469")
}
},
"operationTime" : Timestamp(1739372666, 1)
}
Vérifiez que la ressource personnalisée psmdb est de retour à l'état prêt
kubectl -n $NAMESPACE get perconaservermongodb mongo-replicaset -o jsonpath='{.status.state}'
ready
1,2. MongoDb 5,0 étape
Réglez le enableMajorityReadConcern sur true en éditant la ressource de réplication mongo psmdb et en mettant à jour le bloc de configuration
kubectl -n $NAMESPACE edit perconaservermongodb mongo-replicaset
spec:
...
replsets:
...
configuration: |
replication:
enableMajorityReadConcern: true
Mise à jour du réplica mongo psmdb
kubectl patch -n $NAMESPACE psmdb mongo-replicaset --type=merge --patch '{
"spec": {
"initImage": "repository.thingpark.com/percona-server-mongodb-operator:1.14.0",
"image": "repository.thingpark.com/percona-server-mongodb:5.0.14-12"
}}'
Réutiliser la procédure de redémarrage du pod de l'étape MongoDb 4,4 pour mettre à jour le cluster
Vérifiez que la ressource personnalisée psmdb est de retour à l'état prêt
kubectl -n $NAMESPACE get perconaservermongodb mongo-replicaset -o jsonpath='{.status.state}'
ready
Mettez à jour la FeatureCompatibilityVersion
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongo -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 \
--eval 'db.adminCommand( { setFeatureCompatibilityVersion: \"5.0\" } )'"
1,3. MongoDb 6,0 étape
Mettez à jour l'opérateur Percona Server Mongodb vers 1.15.0 et les ressources liées (crd, rbac : CAP requis)
kubectl patch -n $NAMESPACE deploy psmdb-operator --type=strategic --patch '{
"spec": {
"template": {
"spec": {
"containers": [
{
"name": "psmdb-operator",
"image": "repository.thingpark.com/percona-server-mongodb-operator:1.15.0",
"env": [
{
"name": "DISABLE_TELEMETRY",
"value": "false"
}
]
}
]
}
}
}}'
Mise à jour du réplica mongo psmdb
kubectl patch -n $NAMESPACE psmdb mongo-replicaset --type=merge --patch '{
"spec": {
"crVersion":"1.15.0",
"initImage": "repository.thingpark.com/percona-server-mongodb-operator:1.15.0",
"image": "repository.thingpark.com/percona-server-mongodb:6.0.9-7"
}}'
kubectl apply --server-side -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/percona-server-mongodb-operator-crds-1.15.0.yaml
kubectl apply -n $NAMESPACE -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/percona-server-mongodb-operator-rbac-1.15.0.yaml
Redémarrer les membres du réplica
Identifier le primaire du cluster mongo
MONGO_CLIENT_IMAGE=$(kubectl -n $NAMESPACE get sts mongo-replicaset-rs0 -o jsonpath='{.spec.template.spec.containers[0].image}')
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.isMaster().primary'| tail -n 1"
Mettre à jour l'arbitre et les membres secondaires de l'ensemble répliqué. Delete each pod one by one and
check that the mongodb member stateStr back to respectively ARBITER and SECONDARY before delete next pod
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-arbiter-0
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<secondary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Mettre à niveau le primaire
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0-<primary pod id>.mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.stepDown()'"
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<primary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status()'"
Vérifiez que la ressource personnalisée psmdb est de retour à l'état prêt
kubectl -n $NAMESPACE get perconaservermongodb mongo-replicaset -o jsonpath='{.status.state}'
ready
Mettez à jour la FeatureCompatibilityVersion
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'db.adminCommand( { setFeatureCompatibilityVersion: \"6.0\" } )'"
If you don't see a command prompt, try pressing enter.
{
ok: 1,
'$clusterTime': {
clusterTime: Timestamp({ t: 1741179562, i: 1 }),
signature: {
hash: Binary.createFromBase64("xOPKf4ti1opTPsxojzcXdPFP6VA=", 0),
keyId: Long("7478249012567474181")
}
},
operationTime: Timestamp({ t: 1741179562, i: 1 })
}
pod "mongo-client" deleted
ÉTAPE 2. Thingpark-data-controllers (CAP requis)
Mettez à jour les contrôleurs de données de la manière suivante :
helm upgrade -i tpe-data-controllers -n $NAMESPACE \
actility/thingpark-data-controllers --version $THINGPARK_DATA_CONTROLLERS_VERSION \
-f values-data-stack-all.yaml
kubectl apply --force-conflicts --server-side -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/strimzi-crds-0.44.0.yaml
kubectl apply --force-conflicts --server-side -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/percona-server-mongodb-operator-crds-1.17.0.yaml
kubectl -n $NAMESPACE apply -f \
$CONFIG_REPO_BASEURL/manifests/upgrade/percona-server-mongodb-operator-rbac-1.17.0.yaml
L'erreur de journalisation et d'arrêt du pod de l'opérateur de cluster strimzi lors du déploiement peut être ignorée jusqu'à la mise à jour de l'application de graphique de données
ÉTAPE 3. Thingpark-data
Préparations pour la réduction de dimensionnement
Dans le values-data-stack-all.yaml que vous avez préparé pour la 8.0, vous devez
mettre à jour la taille de la demande de volume persistant mongo pendant la période de mise à niveau.
La valeur actuelle doit être préservée.
Par exemple, si vous avez un segment 7.3 L et que vous passez à un segment 8.0 M pour préserver la capacité :
...
mongo-replicaset:
persistence:
size: 25Gi # in place of initial 15Gi
...
Redémarrez le statefulset mariadb-galera et attendez la fin de l'opération
kubectl -n $NAMESPACE rollout restart sts mariadb-galera
kubectl -n $NAMESPACE rollout status -w sts mariadb-galera
Mettre à niveau la pile de données
helm upgrade -i tpe-data -n $NAMESPACE \
actility/thingpark-data --version $THINGPARK_DATA_VERSION \
-f values-data-stack-all.yaml
Vérifiez que le cluster mariadb-galera a été correctement déployé
kubectl -n $NAMESPACE rollout status sts mariadb-galera
La commande doit renvoyer
statefulset rolling update complete 3 pods at revision mariadb-galera-5f4cdf8f7c...
Note : Si le déploiement de mariadb-galera échoue, un redémarrage à froid est nécessaire. Veuillez suivre la procédure "redémarrage à froid de Mariadb" décrite ci-dessous.
Procédure de redémarrage à froid de Mariadb (nécessaire uniquement si le déploiement de mariadb-galera échoue)
Arrêtez le routeur ProxySQL avant de réduire le statefulset mariadb-galera
kubectl -n $NAMESPACE scale deployment sql-proxy --replicas=0
kubectl -n $NAMESPACE scale sts mariadb-galera --replicas=0
Une fois que tous les pods mariadb-galera sont arrêtés, réappliquez la configuration de la version Helm tpe-data
helm -n $NAMESPACE upgrade -i tpe-data actility/thingpark-data \
--version $THINGPARK_DATA_VERSION --reuse-values
kubectl -n $NAMESPACE rollout status -w sts mariadb-galera
kubectl -n $NAMESPACE scale deployment sql-proxy --replicas=2
Remarque Si le déploiement mariadb-galera échoue encore, veuillez contacter votre support Actility.
ÉTAPE 4. Thingpark-data: tâches post-mise à jour
4.1 MongoDb
Mettre à jour l'arbitre et les membres secondaires de l'ensemble répliqué. Identifier le primaire du cluster mongo
MONGO_CLIENT_IMAGE=$(kubectl -n $NAMESPACE get sts mongo-replicaset-rs0 -o jsonpath='{.spec.template.spec.containers[0].image}')
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.isMaster().primary'| tail -n 1"
Mettre à jour l'arbitre et les membres secondaires de l'ensemble répliqué. Delete each pod one by one and
check that the mongodb member stateStr back to respectively ARBITER and SECONDARY before delete next pod
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-arbiter-0
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<secondary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Mettre à niveau le primaire
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0-<primary pod id>.mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.stepDown()'"
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<primary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Vérifiez que l'état de perconaservermongodb mongo-replicaset est revenu à prêt
kubectl -n $NAMESPACE get psmdb mongo-replicaset -o jsonpath='{.status.state}'
ready
Finalement, mettez à jour la VersionCompatibilitéDesFonctionnalités
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 \
--eval 'db.adminCommand( { setFeatureCompatibilityVersion: \"7.0\", confirm: true } )'"
# Check FeatureCompatibilityVersion command
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 \
--eval 'db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )'"
4.2 MariaDb
Exécutez la commande mysql_upgrade sur chaque nœud
kubectl -n $NAMESPACE exec -it mariadb-galera-0 -- mysql_upgrade -u root -p
kubectl -n $NAMESPACE exec -it mariadb-galera-1 -- mysql_upgrade -u root -p
kubectl -n $NAMESPACE exec -it mariadb-galera-2 -- mysql_upgrade -u root -p
ÉTAPE 5. Mise à jour de ThingPark Enterprise
5.1. Contrôleurs d'applications de Thingpark
Mettre à jour le graphique thingpark-application-controllers :
helm upgrade -i tpe-controllers -n $NAMESPACE \
actility/thingpark-application-controllers --version $THINGPARK_APPLICATION_CONTROLLERS_VERSION \
-f values-thingpark-stack-all.yaml
5.2. Thingpark-entreprise
Enfin, mettez à niveau le graphique thingpark-enterprise en utilisant votre personnalisation
Note : L'étape de migration des données est réalisée pendant la commande de mise à niveau helm suivante. La durée du délai doit être ajustée en ajoutant la durée estimée de migration précédente à la valeur par défaut
Si la commande helm expire avant que le travail
twa-tm-migratene soit terminé, vous devez attendre que le pod de travail correspondant termine avant de lancer à nouveau la mise à niveau helm. Cela garantit que la migration des données est terminée avant de continuer la mise à niveau.kubectl -n $NAMESPACE get jobs twa-tm-migrate
NAME STATUS COMPLETIONS DURATION AGE
twa-tm-migrate Complete 1/1 5s 6d
helm upgrade -i tpe --debug --timeout 20m -n $NAMESPACE \
actility/thingpark-enterprise --version $THINGPARK_ENTERPRISE_VERSION \
-f values-thingpark-stack-all.yaml
5.3. Réduction des volumes de données
À ce stade, la taille de la demande de volume persistant mongo peut être rétablie
values-data-stack-all.yaml à la cible pour la 8.0.
Par exemple, pour le segment 8.0 M
...
mongo-replicaset:
persistence:
size: 15Gi
...
Appliquez cette nouvelle configuration
helm upgrade -i tpe-data -n $NAMESPACE \
actility/thingpark-data --version $THINGPARK_DATA_VERSION \
-f values-data-stack-all.yaml
La mise à jour du statefulset mongo-replicaset-rs0 doit être forcée en le recréant
kubectl -n $NAMESPACE delete sts mongo-replicaset-rs0 --cascade=orphan
Les prochaines étapes consistent à supprimer le PVC actuel et à utiliser la réplication mongo pour le recréer. Identifiez d'abord le nœud principal actuel
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.isMaster().primary'| tail -n 1"
Supprimez le membre secondaire en retirant la demande de volume persistant. Vous devrez utiliser ctrl+C pour interrompre la prochaine commande car le pvc ne peut être supprimé avant la suppression du pod
kubectl -n $NAMESPACE delete pvc mongod-data-mongo-replicaset-rs0-<secondary pod id>
Supprimez le pod. La durée de resynchronisation dépendra de la quantité de données stockées
dans mongodb. Vous devez surveiller le stateStr du membre secondaire mongodb. Il doit revenir à SECONDARY avant de continuer et de retirer le volume principal
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<secondary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Validez que la nouvelle demande de volume persistant a été recréée avec le dimensionnement 8.0
kubectl -n $NAMESPACE get pvc mongod-data-mongo-replicaset-rs0-<secondary pod id>
Validez que la nouvelle demande de volume persistant a été recréée avec le dimensionnement 8.0
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0-<primary pod id>.mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.stepDown()'"
kubectl -n $NAMESPACE delete pvc mongod-data-mongo-replicaset-rs0-<primary pod id>
kubectl -n $NAMESPACE delete pod mongo-replicaset-rs0-<primary pod id>
kubectl run -n $NAMESPACE mongo-client -it --rm --restart='Never' \
--overrides='{ "spec": { "imagePullSecrets": [{"name": "thingpark-image-pull-secret"}] } }' \
--env="MONGO_PASSWORD=$MONGO_PASSWORD" --image $MONGO_CLIENT_IMAGE --command -- bash -c \
"mongosh -u clusterAdmin -p $MONGO_PASSWORD mongodb://mongo-replicaset-rs0/admin?replicaSet=rs0 --eval 'rs.status().members'"
Validez que la nouvelle demande de volume persistant a été recréée avec le dimensionnement 8.0
kubectl -n $NAMESPACE get pvc mongod-data-mongo-replicaset-rs0-<primary pod id>
Vérifiez que l'état de perconaservermongodb mongo-replicaset est revenu à prêt
kubectl -n $NAMESPACE get psmdb mongo-replicaset -o jsonpath='{.status.state}'
ready