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 :
Migrez la VM source vers un conteneur.
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
.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
Affichez le fichier ConfigMap :
kubectl describe configmaps
Modifiez le fichier
deployment_spec.yaml
créé lors de la migration du conteneur :vi deployment_spec.yaml
Dans la spécification de déploiement, ajoutez les éléments suivants :
Ajoutez un nouveau volume pour le fichier
configmap
sousvolumes
:volumes: - configMap: name: blocklistcm # Name of the config map you created above. name: blocklistvol # Name of the configmap volume.
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.
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 êtreHC_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
.Enregistrez le fichier.
Déployez le conteneur :
kubectl apply -f deployment_spec.yaml
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.
Migrez la VM source vers un conteneur.
Ouvrez le fichier Dockerfile dans un éditeur.
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.
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 commandeCOPY
. Le nom de la variable d'environnement doit êtreHC_CUSTOM_SERVICE_BLOCKLIST
:ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path
Exemple :
ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
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 :
gcloud
pour créer l'image et l'importer dans Container Registry, comme décrit dans le Guide de démarrage rapide : compilation ;docker build
, comme décrit sur la page Compiler et exécuter votre image.
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.Déployez le conteneur :
kubectl apply -f deployment_spec.yaml
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