Actualiza las cargas de trabajo de los contenedores para mejorar el entorno de ejecución

Si tienes cargas de trabajo de contenedores existentes que usan las versiones 1.7.x y 1.8.x de Migrate to Containers, puedes convertirlas para que usen el administrador de servicios de Linux simplificado. Esta conversión te permite ejecutar estos contenedores en clústeres de GKE Autopilot.

Para realizar la conversión, edita el Dockerfile y el archivo deployment_spec.yaml que se creó cuando realizaste la migración original. Una vez editado, puedes implementar la carga de trabajo del contenedor en los clústeres de Autopilot.

Sobre la conversión de cargas de trabajo de contenedores

El procedimiento para convertir cargas de trabajo existentes depende de si conviertes una carga de trabajo sin estado o una con estado.

Una carga de trabajo con estado es la que mantiene o almacena información de estado. Para cargas de trabajo con estado, a menudo activas volúmenes adicionales mediante StatefulSet en spec.containers.volumeMounts. Asegúrate de conservar las definiciones volumeMounts mientras las quitas para /sys/fs/cgroup. Consulta Activa volúmenes externos para obtener más información.

El proceso general de conversión de una carga de trabajo existente requiere que edites lo siguiente:

  • Dockerfile

    • Establece la versión de Migrate to Containers en 1.15.0.
    • Inserta dos comandos ADD para copiar el archivo logs.yaml en la imagen de contenedor.
    • Inserta un comando RUN para la utilidad servicemanager_generate_config.
  • Archivo deployment_spec.yaml en:

    • Borra las definiciones hostPath y volumeMounts para /sys/fs/cgroup.
    • Borra la definición securityContext.
    • Borra la definición readinessProbe.
    • Puedes dejar las definiciones mountPath y configMap para logs-config. Sin embargo, el registro no funciona actualmente con el administrador de servicios de Linux simplificado.

Para el proceso de conversión específico, consulta las siguientes secciones:

Convierte una carga de trabajo sin estado

En el siguiente ejemplo, se muestra cómo convertir una carga de trabajo de contenedor sin estado:

  1. Ubica el directorio que contiene los artefactos de migración existentes, incluido el archivo deployment_spec.yaml.

  2. Edita el Dockerfile a fin de configurar la versión del producto, copiar el archivo logs.yaml y ejecutar la utilidad servicemanager_generate_config:

    ...
    # Set the product version to 1.15.0:
    FROM anthos-migrate.gcr.io/v2k-run-embedded:v1.15.0 as migrate-for-anthos-runtime
    
    ...
    
    ADD blocklist.yaml /.m4a/blocklist.yaml
    # Insert the ADD commands to copy the `logs.yaml` file to the container image:
    ADD logs.yaml /code/config/logs/logsArtifact.yaml
    ADD logs.yaml /code/config/logs/logs.yaml
    
    # Insert the RUN command for servicemanager_generate_config:
    RUN /servicemanager_generate_config build-all -o /.m4a/
    
    # Migrate to Containers image includes entrypoint
    ENTRYPOINT [ "/.v2k.go" ]
  3. Abre el archivo deployment_spec.yaml en un editor. Por ejemplo:

    vi  deployment_spec.yaml
  4. Ubica la siguiente sección en el archivo y borra las líneas indicadas:

    apiVersion: apps/v1 
    kind: Deployment
    metadata: 
      creationTimestamp: null 
      name: IMAGE_NAME  
          
        spec:
          containers:
          - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL
            name: IMAGE_NAME
    # Delete the following lines:
            readinessProbe:
              exec:
                command:
                - /code/ready.sh
            resources: {}
            securityContext:
              privileged: true
            volumeMounts:
            - mountPath: /sys/fs/cgroup
              name: cgroups
            - mountPath: /code/config/logs
              name: logs-config
          volumes:
          - hostPath:
              path: /sys/fs/cgroup
              type: Directory
            name: cgroups
          - configMap:
              name: suitecrm-crddefault-logs
            name: logs-config
    # Stop the delete here.
  5. Agrega las siguientes líneas para configurar la variable de entorno HC_V2K_SERVICE_MANAGER.

    spec:
      containers:
      - image: gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL
        name: IMAGE_NAME
    # Add the following lines:
        env:
          - name: HC_V2K_SERVICE_MANAGER
            value: "true"
  6. Guarde el archivo.

  7. Asegúrate de que el clúster de destino tenga acceso de lectura al registro de imágenes de Docker, como se describió en Asegúrate de que el clúster de destino tenga acceso de lectura al registro de imágenes de Docker.

  8. Compila la imagen actualizada y envíala a Container Registry con una etiqueta de versión actualizada, lo que garantiza que haya tiempo suficiente para que la compilación finalice. En el siguiente ejemplo, la imagen está en el directorio actual:

    gcloud builds submit --timeout 4h --tag gcr.io/PROJECT_NAME/IMAGE_NAME:LABEL .
  9. Implementa el contenedor: