Questions fréquentes
Une ou plusieurs images Postgresql ne démarrent plus
Il arrive qu’à l’arrêt (très souvent non prévu) de la stack Datachain, la base de données peut ne plus démarrer, avec comme log d’erreur :
2023-03-24 11:12:35.314 CET [24] LOG: le système de bases de données a été arrêté à 2023-03-17 06:04:58 CET
2023-03-24 11:12:35.314 CET [24] LOG: identifiant du gestionnaire de ressource invalide dans l'enregistrement primaire du point de vérification
2023-03-24 11:12:35.314 CET [24] PANIC: n'a pas pu localiser un enregistrement d'un point de vérification valide
Dans ce cas, procédez comme suit :
-
sur la machine ou se trouve le Postgresql, identifier le répertoire des data de Postgresql :
-
soit c’est un nom de volume monté sur la machine et il est dans le fichier de déploiement docker-compose
-
soit c’est un volume docker, et il se trouve dans /var/lib/docker/volumes/NOM_DE_STACK_NOM_DU_VOLUME/_data (nom de stack issue du démarrage (up.sh ?), et nom du volume le volume dans le fichier docker-compose (potentiellement pg_data). La commande 'docker volume ls' permettra de valider que c’est le bon nom de volume. Exemple sur un fichier :
-
version: "3.7" services: dc_pg: image: dc/pg:dev networks: dc_network: aliases: - dc-pg deploy: mode: replicated replicas: 1 volumes: - pg_data:/var/lib/postgresql/data environment: - POSTGRES_PASSWORD=adobis ...
Si le nom de la stack est datachain, alors le volume sera datachain_pg_data, et le chemin /var/lib/docker/volumes/datachain_pg_data/_data.
-
Lorsque le chemin est validé, arrêter la stack.
-
Sur la machine du postgres ciblé, executer la commande suivante.
docker run -it -u postgres -v /var/lib/docker/volumes/datachain_pg_data/_data/:/var/lib/postgresql/data ${REGISTRY}/dc/pg:7.6.0 pg_resetwal /var/lib/postgresql/data/
A noter : vous pourriez utiliser l’image postgres standard 12, cela fonctionnerait aussi. * Redémarrer la stack.
Je souhaite supprimer les mots de passe des fichiers de déploiement docker-compose.yml. Comment puis-je faire ?
Dans swarm, tous les mots de passe de datachain peuvent être stockés directement au niveau du cluster swarm dans "docker secret".
Les variables d’environnement Datachain qui contiennent des mots de passe, ont pour la plupart une seconde variable suffixée par _FILE. La procédure de stockage d’un mot de passe va être la suivante :
-
création du secret dans docker depuis le manager Swarm
$ printf "my super secret password" | docker secret create my_secret -
-
utilisation de ce secret dans le fichier de déploiement (ou le fichier .en, selon votre préférence) et remplacement de la variable d’environnement par la variable suffixée.
version: "3.7"
services:
...
dc_pg_migration:
image: dc/pg_migration:dev
networks:
dc_network:
aliases:
- dc-pg-migration
environment:
- PG_HOST=dc-pg
- PG_PASSWORD=12345
deploy:
restart_policy:
condition: none
volumes:
- pg_dump:/data/pg_dump
devient
version: "3.7"
services:
...
dc_pg_migration:
image: dc/pg_migration:dev
networks:
dc_network:
aliases:
- dc-pg-migration
environment:
- PG_HOST=dc-pg
- PG_PASSWORD_FILE=/run/secrets/pg_password
- PG_EXPOSE_PASSWORD_FILE=/run/secrets/pg_password
- PG_KC_PASSWORD_FILE=/run/secrets/pg_password
deploy:
restart_policy:
condition: none
volumes:
- pg_dump:/data/pg_dump
secrets:
- pg_password
...
secrets:
pg_password:
external: true
-
Les variables d’environnement sont précisés dans la page dédiée.
J’ai besoin d’ajouter une autorité de confiance ou un certificat serveur pour permettre à Datachain d’accéder à des connecteurs/dépot HTTPS. Comment puis-je faire ?
Les autorités de confiances utilisées par Datachain sont stockées dans le magasin de certificat (keystore) standard de Java.
Il faut donc fournir le JKS à la JVM avec les autorités privées complémentaires.
Le mode opératoire est le suivant :
-
Récupération du jks standard java, à partir d’un conteneur livré, à faire directement sur la machine ou s’exécute le service spark
docker ps # récupérer l'identifiant d'un conteneur spark # et le mettre dans la commande suivante docker cp <idconteneurSpark>:/etc/ssl/certs/java/cacerts /tmp # Le fichier cacerts de la jvm a pour mot de passe "changeit".
-
Mise à jour du fichier cacerts avec la clé public de l’autorité
keytool -importcert -trustcacerts -keystore cacerts -file clepublique.pem -alias monAutorite
-
Mise à disposition du fichier sur toutes les machines pour le mettre à disposition des images du cluster spark et des conteneurs spark Adobis
-
Mise à jour du/des fichiers docker-compose du cluster spark et de datachain en ajoutant le fichier en tant que volume (mis ici dans un répertoire share/cacerts). Par exemple :
dc_spark1:
image: ${REGISTRY}/dc/spark:${PROJECT_VERSION}
networks:
traefik_network:
dc_network:
aliases:
- dc-spark1
env_file: spark1.env
ports:
- "4040:4040"
deploy:
mode: replicated
replicas: 1
labels:
- "traefik.enable=true"
- "traefik.http.routers.dc_spark1.rule=PathPrefix(`/actuator-spark1`)"
- "traefik.http.routers.dc_spark1.entrypoints=web"
- "traefik.port=9091"
- "traefik.docker.network=traefik_network"
- "traefik.http.services.dc_spark1.loadbalancer.server.port=9091"
- "traefik.http.routers.dc_spark1.middlewares=dc_spark1-auth@docker"
- "traefik.http.middlewares.dc_spark1-auth.basicauth.users=adobis:$$apr1$$ba1fhf6J$$nVxNFnb69azCnMzgBlsXP."
- "traefik.http.middlewares.dc_spark1-auth.basicauth.removeheader=true"
volumes:
- /opt/adobis/data/hdfs:/data
# déclarer comme volume le fichier cacerts.
- /share/cacerts:/etc/ssl/certs/java/cacerts