Lista de anunciantes bloqueados de servicios personalizados
De forma predeterminada, Migrate to Containers inhabilita los servicios que no son necesarios en una VM cuando la migras a un contenedor. A veces, estos servicios pueden causar problemas con el contenedor migrado o no son necesarios en un contexto de contenedor.
También puedes definir tu propia lista personalizada de servicios que inhabilitar en un contenedor migrado con una lista personalizada de entidades bloqueadas. Con una lista de entidades bloqueadas, se especifican uno o más servicios para inhabilitarlos en un contenedor migrado.
Define la lista de entidades bloqueadas
Define tu lista de entidades bloqueadas personalizada en un archivo .yaml, de la siguiente manera:
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>
Donde:
- Los grupos son un conjunto lógico de servicios para que puedas recopilar servicios similares en un solo grupo. Especifica cualquier valor de string para el nombre del grupo.
- El nombre del servicio especifica el servicio que se va a inhabilitar en el contenedor migrado.
Por ejemplo, define el archivo my-blocklist.yaml
de la siguiente manera:
service_list:
- name: lvm-related
services:
- lvm2-lvmetad
- name: hardware-related
services:
- microcode
- microcode.ctl
Aplica una lista personalizada de entidades bloqueadas
Para aplicar tu lista de bloqueo personalizada a un contenedor, sigue estos pasos:
Crea un
configmap
de Kubernetes que contenga la lista de entidades bloqueadas y agrégala a la especificación de implementación del contenedor.Este método te permite agregar la lista sin necesidad de volver a compilar el contenedor. Sin embargo, debes volver a crear el
configmap
en cada clúster que se usa para alojar el contenedor.Edita el Dockerfile para el contenedor y vuelve a compilar la imagen del contenedor.
Este método requiere que vuelvas a compilar la imagen de contenedor para agregar la lista de entidades bloqueadas. Debido a que la lista ahora está incluida en el contenedor, no es necesario realizar ninguna configuración adicional en el clúster antes de la implementación.
Usa un configmap
Para crear una lista de entidades bloqueadas con un configmap
, sigue estos pasos:
Migra la VM de origen a un contenedor.
Crea un archivo .yaml de lista de entidades bloqueadas de bloqueo, como se mostró antes, que enumere el servicio que deseas inhabilitar. En este ejemplo, asigna un nombre al archivo
my-blocklist.yaml
.Crea un
configmap
desde el archivo .yaml de bloqueo:kubectl create configmap configmap-name --from-file=path-to-yaml
En este ejemplo, ConfigMap se llama
blocklistcm
:kubectl create configmap blocklistcm --from-file=./my-blocklist.yaml
Visualiza ConfigMap:
kubectl describe configmaps
Edita el
deployment_spec.yaml
creado cuando migraste el contenedor:vi deployment_spec.yaml
En la especificación de implementación, agrega lo siguiente:
Agrega un nuevo volumen para
configmap
envolumes
:volumes: - configMap: name: blocklistcm # Name of the config map you created above. name: blocklistvol # Name of the configmap volume.
Agrega una activación de volumen para el configmap:
spec: containers: volumeMounts: - mountPath: /etc/bl # Mount path for the configmap volume. name: blocklistvol # Name of the configmap volume.
Agrega una variable de entorno nueva llamada
HC_CUSTOM_SERVICE_BLOCKLIST
que especifique la ruta al archivo .yaml de lista de entidades bloqueadas. El nombre de la variable de entorno debe serHC_CUSTOM_SERVICE_BLOCKLIST
:containers: - image: container-image-location env: - name: HC_CUSTOM_SERVICE_BLOCKLIST value: "/etc/bl/my-blocklist.yaml"
La ruta de acceso especificada por el valor es la concatenación de mountPath del mapa de configuración y el nombre del archivo .yaml de lista de entidades bloqueadas,
my-blocklist.yaml
.Guarda el archivo.
Implementa el contenedor:
kubectl apply -f deployment_spec.yaml
Después de implementar el contenedor, puedes examinarlo para asegurarte de que los servicios no se estén ejecutando. Por ejemplo:
# 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```
Edita el Dockerfile
En esta sección, se describe cómo crear una lista de entidades bloqueadas personalizada mediante la edición del Dockerfile creado por la migración.
Migra la VM de origen a un contenedor.
Abre el Dockerfile en un editor.
Agrega el siguiente comando
COPY
para agregar el archivo .yaml de la lista de entidades bloqueadas al sistema de archivos del contenedor:COPY src dest
Por ejemplo:
COPY my-blocklist.yaml /etc/mybl/my-blocklist.yaml
La ruta de destino puede ser cualquier ruta dentro del contenedor.
Agrega una variable de entorno nueva llamada
HC_CUSTOM_SERVICE_BLOCKLIST
que especifique la ruta al archivo .yaml de lista de entidades bloqueadas según el destino del archivo que especifique el comandoCOPY
. El nombre de la variable de entorno debe serHC_CUSTOM_SERVICE_BLOCKLIST
:ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path
Por ejemplo:
ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
Actualiza la imagen de contenedor.
La forma en que actualizas la imagen del contenedor depende del entorno de compilación. Puedes usar:
gcloud
para compilar la imagen y subirla a Container Registry, como se describe en Guía de inicio rápido: compila.docker build
como se describe en Compila y ejecuta tu imagen.
Después de compilar la imagen nueva, abre el archivo
deployment_spec.yaml
en un editor para actualizar la ubicación de la imagen:spec: containers: - image: new-image-location
Por ejemplo, new-image-location podría ser
gcr.io/my-project/my-new-image:v1.0
si usastegcloud
para compilar la imagen y subirla a Container Registry.Implementa el contenedor:
kubectl apply -f deployment_spec.yaml
Después de implementar el contenedor, puedes examinarlo para asegurarte de que los servicios no se estén ejecutando. Por ejemplo:
# 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