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>

Aquí:

  • 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:

  1. Migra la VM de origen a un contenedor.

  2. 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.

  3. 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
  4. Visualiza ConfigMap:

    kubectl describe configmaps
  5. Edita el deployment_spec.yaml creado cuando migraste el contenedor:

    vi deployment_spec.yaml
  6. En la especificación de implementación, agrega lo siguiente:

    1. Agrega un nuevo volumen para configmap en volumes:

      volumes:
      - configMap: 
           name: blocklistcm # Name of the config map you created above. 
         name: blocklistvol # Name of the configmap volume.
      
    2. 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. 
      
    3. 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 ser HC_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.

    4. Guarda el archivo.

  7. Implementa el contenedor:

    kubectl apply -f deployment_spec.yaml
  8. 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.

  1. Migra la VM de origen a un contenedor.

  2. Abre el Dockerfile en un editor.

  3. 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.

  4. 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 comando COPY. El nombre de la variable de entorno debe ser HC_CUSTOM_SERVICE_BLOCKLIST:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /file-path

    Por ejemplo:

    ENV HC_CUSTOM_SERVICE_BLOCKLIST /etc/mybl/my-blocklist.yaml
  5. Actualiza la imagen de contenedor.

    La forma en que actualizas la imagen del contenedor depende del entorno de compilación. Puedes usar:

    1. gcloud para compilar la imagen y subirla a Container Registry, como se describe en Guía de inicio rápido: compila.

    2. docker build como se describe en Compila y ejecuta tu imagen.

  6. 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 usaste gcloud para compilar la imagen y subirla a Container Registry.

  7. Implementa el contenedor:

    kubectl apply -f deployment_spec.yaml
  8. 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