Accéder au contenu principal Passer au contenu complémentaire

Déployer Dynamic Engine avec des images minimales

Réduisez la surface d'attaque et la taille d'image de votre déploiement Dynamic Engine en migrant tous les services Dynamic Engine vers des images de conteneur sans distribution (distroless) et les images de tâche Talend Management Console vers des images de conteneur minimales avec un SE très léger.

La définition de global.profile: minimal dans votre fichier de valeurs Helm remplace chaque image de service Dynamic Engine par une variante sans distribution. Une fois que c'est fait, les images de service d'infrastructure utilisent le suffixe de balise -distroless ; les tâches d'intégration de données et les images de services de données ou de Routes utilisent le suffixe de balise -minimal.

Les images sans distribution ne contiennent pas de shell ni de gestionnaire de packages, ce qui réduit l'empreinte du système de fichiers et limite la surface d'attaque exposée à des attaques potentielles.

Cette configuration est recommandée pour les modes Kubernetes gérés, notamment Amazon EKS Auto Mode et GKE Autopilot.

Le support des images sans distribution a été lancé dans Dynamic Engine v1.6.0.

Pourquoi et quand exécuter cette tâche

Note InformationsImportant :

Pour les modes Kubernetes gérés (Amazon EKS Auto Mode et GKE Autopilot), utilisez cette configuration avec PodDisruptionBudget configuration et configuration.persistence.enabled=false.

Note InformationsImportant :

Les Jobs Big data (Spark Batch et Spark Streaming) sont incompatibles avec les images minimales.

Lors de l'utilisation de global.profile: minimal, remplacez chaque Job Big Data en ajoutant l'argument de traitement suivant à son profil d'exécution correspondant :

-K8S:ImageProfile=standard

Ce paramètre de profil d'exécution remplace global.profile au niveau de chaque tâche, de sorte que le conteneur du Job Big Data utilise l'image de base complète standard tandis que les autres tâches utilisent l'image minimale. Pour des informations sur la création et la modification de profils d'exécution, consultez Gérer les profils d'exécution pour les tâches d'environnement de Dynamic Engine.

Procédure

  1. Créez un fichier de valeurs Helm personnalisé définissant global.profile sur minimal.
    cat <<EOF > custom-minimal-image-values.yaml
    ---
    global:
      profile: minimal
    EOF

    Ce fichier de valeurs unique est appliqué aux deux charts dynamic-engine et dynamic-engine-environment pour garantir que tous les services utilisent des images sans distribution.

  2. Installez ou mettez à niveau les charts dynamic-engine-crd, dynamic-engine et dynamic-engine-environment en transmettant le fichier de valeurs personnalisé aux deux charts de runtime.
    DYNAMIC_ENGINE_VERSION=1.6.0
    DYNAMIC_ENGINE_ID=<engine_id>
    DYNAMIC_ENGINE_ENVIRONMENT_ID=<environment_id>
    
    helm upgrade --install dynamic-engine-crd \
      oci://ghcr.io/talend/helm/dynamic-engine-crd --version $DYNAMIC_ENGINE_VERSION
    
    helm upgrade --install dynamic-engine-$DYNAMIC_ENGINE_ID \
      oci://ghcr.io/talend/helm/dynamic-engine --version $DYNAMIC_ENGINE_VERSION \
      -f $DYNAMIC_ENGINE_ID-values.yaml \
      -f custom-minimal-image-values.yaml
    
    helm upgrade --install dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID \
      oci://ghcr.io/talend/helm/dynamic-engine-environment --version $DYNAMIC_ENGINE_VERSION \
      -f $DYNAMIC_ENGINE_ENVIRONMENT_ID-values.yaml \
      -f custom-minimal-image-values.yaml

    Remplacez <engine_id> et <environment_id> par vos identificateurs d'environnement et de moteur actuels.

Résultats

Tous les pods de service Dynamic Engine redémarrent et extraient des variantes d'image sans distribution. Vous pouvez vérifier le profil actif via les commandes suivantes :

helm get values dynamic-engine-$DYNAMIC_ENGINE_ID --output json | jq -r '.global.profile'
helm get values dynamic-engine-environment-$DYNAMIC_ENGINE_ENVIRONMENT_ID --output json | jq -r '.global.profile'

Les deux commandes renvoient minimal.

Que faire ensuite

Si l'une de vos tâches est un Job Big Data, créez ou mettez à jour le profil d'exécution correspondant pour y inclure -K8S:ImageProfile=standard. Pour plus d'informations, consultez Gérer les profils d'exécution pour les tâches d'environnement de Dynamic Engine.

Dépannage des déploiements d'images minimales

Diagnostiquez les problèmes courants qui se produisent après le passage à des images de conteneur sans distribution.

Procédure

  1. Si les services continuent d'utiliser des images standards après la mise à niveau, vérifiez que le fichier de valeurs personnalisé a été appliqué aux deux charts.

    Le fichier de valeurs personnalisé doit être transmis aux deux commandes de mise à niveau Helm dynamic-engine et dynamic-engine-environment. Si un seul chart a été mis à jour, réexécutez la mise à niveau Helm pour l'autre chart en ajoutant -f custom-minimal-image-values.yaml.

  2. Si des pods indiquent ImagePullBackOff, vérifiez que la balise d'image sans distribution existe pour la version de chart déployée.

    La balise d'image -distroless est disponible à partir de la version 1.6.0. Si vous utilisez une version de chart antérieure, il se peut que la variante distroless (sans distribution) ne soit pas présente. Vérifiez les balises disponibles :

    crane ls ghcr.io/talend/engine-config-manager | grep distroless

    Si la balise est absente, effectuez une mise à niveau vers la version 1.6.0 ou une version ultérieure ou rétablissez global.profile: standard.

  3. Si vous ne parvenez pas à exécuter de commandes à l'intérieur d'un pod, utilisez un conteneur de débogage au lieu de kubectl exec.

    Les images sans distribution ne contiennent pas de shell. kubectl exec -it <pod> -- /bin/sh échouera. Utilisez un conteneur de débogage :

    kubectl debug -it <pod> --image=busybox --target=<container>

Cette page vous a-t-elle aidé ?

Si vous rencontrez des problèmes sur cette page ou dans son contenu – une faute de frappe, une étape manquante ou une erreur technique – faites-le-nous savoir.