Liste de blocage des services personnalisés

Par défaut, Migrate to Containers désactive les services inutiles présents sur une VM en cas de migration vers un conteneur. Ces services peuvent parfois entraîner des problèmes au niveau du conteneur migré, ou ils ne sont pas nécessaires dans le contexte du conteneur.

Vous pouvez également définir votre propre liste de services à désactiver dans un conteneur migré à l'aide d'une liste de blocage personnalisée. Avec une liste de blocage, vous pouvez spécifier un ou plusieurs services à désactiver dans un conteneur migré.

Définir la liste de blocage

Définissez votre liste de blocage personnalisée dans un fichier .yaml, au format suivant :

service_list:
  - name: <var>group-name-1</var>
    services:
      - <var>service-name</var>
  - name: <var>group-name-2</var>
    services:
      - <var>service-name</var>
      - <var>ervice-name</var>

Où :

  • Les groupes sont des ensembles de services logiques qui vous permettent de collecter des services similaires dans un groupe unique. Indiquez une valeur de chaîne pour le nom du groupe.
  • Le nom du service spécifie le service à désactiver dans le conteneur migré.

Par exemple, définissez le fichier my-blocklist.yaml comme suit :

service_list:
  - name: lvm-related
    services:
      - lvm2-lvmetad
  - name: hardware-related
    services:
      - microcode
      - microcode.ctl

Appliquer une liste de blocage personnalisée

Appliquez votre liste de blocage personnalisée à un conteneur de l'une des manières suivantes :

  • Créez une ressource Kubernetes configmap contenant la liste de blocage et ajoutez-la à la spécification de déploiement du conteneur.

    Cette méthode vous permet d'ajouter la liste de blocage sans avoir à recréer le conteneur. Vous devez toutefois recréer configmap sur chaque cluster utilisé pour héberger le conteneur.

  • Modifiez le fichier Dockerfile du conteneur et recréez l'image du conteneur.

    Cette méthode nécessite de recréer l'image de conteneur pour ajouter la liste de blocage. La liste de blocage étant maintenant incluse dans le conteneur, il n'est pas nécessaire d'effectuer de configuration supplémentaire sur le cluster avant le déploiement.

Utiliser un fichier ConfigMap

Pour créer une liste de blocage à l'aide d'un fichier configmap, procédez comme suit :

  1. Migrez la VM source vers un conteneur.

  2. Créez un fichier .yaml de liste de blocage, comme indiqué ci-dessus, qui répertorie le service que vous souhaitez désactiver. Dans cet exemple, nommez le fichier my-blocklist.yaml.

  3. Créez un fichier configmap à partir du fichier .list de la liste de blocage :

    kubectl create configmap configmap-name --from-file=path-to-yaml

    Dans cet exemple, le fichier ConfigMap est nommé blocklistcm :

    kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
  4. Affichez le fichier ConfigMap :

    kubectl describe configmaps
  5. Modifiez le fichier deployment_spec.yaml créé lors de la migration du conteneur :

    vi deployment_spec.yaml
  6. Dans la spécification de déploiement, ajoutez les éléments suivants :

    1. Ajoutez un nouveau volume pour le fichier configmap sous volumes :

      volumes:
      - configMap: 
           name: blocklistcm # Name of the config map you created above. 
         name: blocklistvol # Name of the configmap volume.
      
    2. Ajoutez un montage de volume pour le fichier ConfigMap :

      spec:
        containers: 
          volumeMounts: 
          - mountPath: /etc/bl # Mount path for the configmap volume. 
            name: blocklistvol # Name of the configmap volume. 
      
    3. Ajoutez une nouvelle variable d'environnement nommée HC_CUSTOM_SERVICE_BLOCKLIST spécifiant le chemin d'accès au fichier .yaml de la liste de blocage. Le nom de la variable d'environnement doit être HC_CUSTOM_SERVICE_BLOCKLIST :

      containers:
       - image: container-image-location
         env:
         - name: HC_CUSTOM_SERVICE_BLOCKLIST
           value: "/etc/bl/my-blocklist.yaml"
      

      Le chemin d'accès spécifié par la valeur est la concaténation des fichiers mountPath et ConfigMap et du nom du fichier .yaml de la liste de blocage, my-blocklist.yaml.

    4. Enregistrez le fichier.

  7. Déployez le conteneur :

    kubectl apply -f deployment_spec.yaml
  8. Une fois le conteneur déployé, vous pouvez l'examiner pour vous assurer que les services ne sont pas en cours d'exécution. Exemple :

    # Get pod name.
    $ kubectl get pod
    # Connect to pod.
    $ kubectl exec -it POD_NAME -- /bin/bash
    # View running services. This step is OS dependent. For example:
    $ service --status-all```
    

Modifier le fichier Dockerfile

Cette section décrit comment créer une liste de blocage personnalisée en modifiant le fichier Dockerfile créé par la migration.

  1. Migrez la VM source vers un conteneur.

  2. Ouvrez le fichier Dockerfile dans un éditeur.

  3. Ajoutez la commande COPY suivante pour ajouter le fichier .yaml de la liste de blocage au système de fichiers du conteneur :

    COPY src dest 

    Exemple :

    COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml

    Le chemin de la destination peut être un chemin d'accès au sein du conteneur.

  4. Ajoutez une variable d'environnement nommée HC_CUSTOM_SERVICE_BLOCKLIST spécifiant le chemin d'accès au fichier .yaml de la liste de blocage en vous basant sur la destination du fichier spécifiée par la commande COPY. Le nom de la variable d'environnement doit être HC_CUSTOM_SERVICE_BLOCKLIST :

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path

    Exemple :

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
  5. Mettez à jour l'image du conteneur.

    La manière à utiliser pour mettre à jour l'image de conteneur dépend de votre environnement de compilation. Vous pouvez indiquer :

    1. gcloud pour créer l'image et l'importer dans Container Registry, comme décrit dans le Guide de démarrage rapide : compilation ;

    2. docker build, comme décrit sur la page Compiler et exécuter votre image.

  6. Après avoir créé la nouvelle image, ouvrez le fichier deployment_spec.yaml dans un éditeur pour mettre à jour l'emplacement de l'image :

    spec:
      containers:
      - image: new-image-location

    Par exemple, new-image-location pourrait être gcr.io/my-project/my-new-image:v1.0 si vous avez utilisé gcloud pour créer l'image et l'avez importée dans Container Registry.

  7. Déployez le conteneur :

    kubectl apply -f deployment_spec.yaml
  8. Une fois le conteneur déployé, vous pouvez l'examiner pour vous assurer que les services ne sont pas en cours d'exécution. Exemple :

    # Get pod name.
    $ kubectl get pod
    # Connect to pod.
    $ kubectl exec -it POD_NAME -- /bin/bash
    # View running services. This step is OS dependent. For example:
    $ service --status-all