Convierte tus opciones de configuración de Deployment Manager con DM Convert

En esta página, se describe el proceso de conversión de DM para convertir de Deployment Manager para Modelo de recursos de Kubernetes (KRM) o Terraform.

Configure su entorno

Configura tus variables de entorno

Guarda las siguientes variables de entorno que se usan en el resto de esta guía:

export PROJECT_ID=$(gcloud config get-value project) \
export DM_CONVERT_IMAGE="us-central1-docker.pkg.dev/\
dm-convert-host/deployment-manager/dm-convert:public-preview"

Configura tus herramientas

Debes tener acceso a las siguientes herramientas:

  • gcloud

  • docker

  • kubectl

  • bq

  • jq

Si usas Cloud Shell para ejecutar DM Convert, ya tienes acceso a ellas.

Abrir en Cloud Shell

Convierte tus configuraciones

En un alto nivel, puedes migrar la configuración de Deployment Manager a Terraform o KRM de la siguiente manera:

  1. Prepara una implementación de Deployment Manager para la conversión.

  2. Convierte la configuración en formato de HCL (lenguaje de configuración HashiCorp, para Terraform) o KRM (modelo de recursos de Kubernetes).

  3. Usa Terraform o Config Connector para aplicar la configuración convertida.

  4. Abandona la implementación existente de Deployment Manager.

Prepara la implementación existente

DM Convert funciona en los archivos y las plantillas de configuración de Deployment Manager. A lo largo de la guía, estos archivos se crearán y guardarán localmente como entrada para la herramienta de conversión de DM.

Puedes crear un archivo de configuración por tu cuenta o adquirir una configuración de una implementación en vivo.

Convierte un archivo de configuración

Puedes usar la siguiente configuración de muestra para probar el conversor. Reemplaza PROJECT_ID por el ID del proyecto de Google Cloud y guarda el siguiente contenido en un archivo llamado deployment.yaml:

  resources:
  - name: bigquerydataset
    type: bigquery.v2.dataset
    properties:
      datasetReference:
        datasetId: bigquerydataset
        projectId: PROJECT_ID
      defaultTableExpirationMs: 36000000
      location: us-west1
  - type: bigquery.v2.table
    name: bigquerytable
    properties:
      datasetId: bigquerydataset
      labels:
        data-source: external
        schema-type: auto-junk
      tableReference:
        projectId: PROJECT_ID
        tableId: bigquerytable
    metadata:
      dependsOn:
      - bigquerydataset
  • Adquiere una configuración de una implementación en vivo

    Si deseas adquirir y convertir la configuración de una implementación activa, puedes recuperar la configuración expandida y guardarla en el disco si ejecutas los siguientes comandos y reemplazas DEPLOYMENT_NAME por el nombre de la implementación.

    # Configure your project/deployment
    DEPLOYMENT_NAME=DEPLOYMENT_NAME
    PROJECT_ID=PROJECT_ID
    
    # Fetch the latest manifest for the given deployment
    gcloud deployment-manager deployments describe $DEPLOYMENT_NAME \
      --project $PROJECT_ID --format="value(deployment.manifest)"
    https://www.googleapis.com/deploymentmanager/v2/projects/$PROJECT_ID/global/deployments/bq/manifests/manifest-1618872644848
    
    # The manifest name is the last path segment from the URI
    # in the above command output
    MANIFEST_NAME="manifest-1618872644848"
    # Save the expanded manifest to deployment.yaml
    gcloud deployment-manager manifests describe $MANIFEST_NAME \
      --deployment $DEPLOYMENT_NAME --project $PROJECT_ID \
      --format="value(expandedConfig)" > deployment.yaml
    

Convierte tu implementación

Para convertir recursos en deployment.yaml a formato HCL o KRM, y guardarlos como resultados convertidos, ejecuta el siguiente comando en el mismo directorio que deployment.yaml por las sustituciones deseadas:

CONVERTED_RESOURCES=OUTPUT_FILE

docker run --rm -it --workdir=/convert \
--volume=$(pwd):/convert \
$DM_CONVERT_IMAGE \
--config deployment.yaml \
--output_format OUTPUT_FORMAT \
--output_file OUTPUT_FILE \
--output_tf_import_file OUTPUT_IMPORT_FILE \
--deployment_name DEPLOYMENT_NAME \
--project_id $PROJECT_ID

Realiza las siguientes sustituciones:

  • OUTPUT_FORMAT: El formato de salida de la conversión. Puede ser TF para Terraform o KRM para KRM.

  • OUTPUT_FILE: Es el nombre del archivo al que se guardará el resultado convertido.

  • (Solo para Terraform) OUTPUT_IMPORT_FILE: Es el nombre del archivo al que Se guardarán los comandos de importación de Terraform. Si se especifica una marca project_id, los comandos de importación se generan según esa marca. Si no se especifica una marca project_id, los comandos de importación se Se genera según el atributo projectId de la configuración del recurso.

  • DEPLOYMENT_NAME: El nombre de la implementación. Este es relevante si usas plantillas en tu configuración de Deployment Manager y también usas la variable de entorno deployment. Para obtener más información, visita Usa una variable de entorno.

Cómo ver las conversiones

# Print output file
cat OUTPUT_FILE

Aplica la configuración convertida

Terraform

Configura Terraform

# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
  project = "$PROJECT_ID"
}
EOF

Después de convertir los recursos de Deployment Manager en Terraform, puedes Puede usar Terraform para crear recursos implementando directamente la configuración convertida.

Implementa tu configuración convertida con Terraform

# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
echo "***************  TERRAFORM PLAN  ******************"
terraform plan
echo "**************  TERRAFORM APPLY  ******************"
terraform apply

Importa recursos existentes (opcional)

Si conviertes una implementación existente y quieres usar Terraform para administrar sus recursos sin volver a implementarlos, puedes hacerlo con la función Import de Terraform.

En esta sección, usarás deployment.yaml para el proceso de importación.

Inicializa Terraform mediante este comando:

# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init

Los comandos de importación se generan y se guardan en OUTPUT_IMPORT_FILE. Para revisar su contenido, ejecuta el siguiente comando:

cat OUTPUT_IMPORT_FILE

Para importar los recursos de deployment.yaml, ejecuta el siguiente comando:

# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE

Después de importar los recursos a tu estado de Terraform, puedes verificar si hay algún cambio entre el estado y la configuración de Terraform de Terraform ejecutando el comando plan de Terraform:

terraform plan

Esto produce el siguiente resultado:

Terraform will perform the following actions:

# google_bigquery_dataset.bigquerydataset will be updated in-place
~ resource "google_bigquery_dataset" "bigquerydataset" {
    ...
    ~ labels = {
        # the label value will be based on the deployment name and may not
        # match
        - "goog-dm" = "bq-for-import" -> null
      }
    ...
  }

# google_bigquery_table.bigquerytable will be updated in-place
~ resource "google_bigquery_table" "bigquerytable" {
    ...
    ~ labels = {
        # the label value will be based on the deployment name and may not
        # match
        - "goog-dm" = "bq-for-import" -> null
      }
    ...
  }

Plan: 0 to add, 2 to change, 0 to destroy.

Aceptar este cambio en el plan de Terraform, ya que quitará Etiquetas específicas de Deployment Manager, es decir, goog-dm, que no son obligatorias una vez que Terraform administra los recursos.

Para aplicar la configuración de Terraform, ejecuta el siguiente comando:

# Accept changes by entering yes when prompted
terraform apply

Ahora, todos los recursos definidos en deployment.yaml están bajo la administración de Terraform.

Por ejemplo, si deseas verificar que Terraform realmente administra los recursos convertidos, puedes hacerlo realizando un pequeño cambio en la configuración de Terraform. Para ello, modifica el tiempo de vencimiento predeterminado de la tabla en el recurso google_bigquery_dataset.bigquerydataset:

...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...

Después de realizar los cambios, puedes aplicar la configuración de Terraform y usar la interfaz de línea de comandos (CLI) de bq para verificar los cambios:

# Accept changes by entering yes when prompted
terraform apply
# Access the dataset properties via bq to verify the changes
bq show --format=prettyjson bigquerydataset | jq '.defaultTableExpirationMs'

El resultado que recibas debe coincidir con los valores proporcionados en la configuración actualizada de Terraform, lo que confirma que Terraform ahora administra estos recursos.

KRM

Configura Config Connector

Para activar los recursos en los archivos de configuración de KRM, necesitas un clúster de Kubernetes con Config Connector instalado. Para crear un clúster de prueba, consulta Instala con el complemento de GKE.

En Cloud Shell, asegúrate de que tus credenciales de kubectl estén configuradas para el clúster de GKE que deseas usar. Reemplaza GKE_CLUSTER por el nombre del clúster y ejecuta el siguiente comando:

gcloud container clusters get-credentials GKE_CLUSTER

Implementa la configuración de KRM convertida mediante kubectl

Para implementar tu configuración de KRM convertida con kubectl, ejecuta los siguientes comandos:

# Ensure that the namespace is annotated to create resources in the correct
# project/folder/organization. https://cloud.google.com/config-connector/docs/how-to/install-upgrade-uninstall#specify
kubectl apply -n CONFIG_CONNECTOR_NAMESPACE \
  -f OUTPUT_FILE

# Wait for the resources to become healthy
kubectl wait -n CONFIG_CONNECTOR_NAMESPACE \
  --for=condition=Ready \
  --timeout=5m -f OUTPUT_FILE

Limpia

Limpia el conjunto de datos y la tabla de muestra

Terraform

# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
echo "***************  TERRAFORM INIT  ******************"
terraform init
# Remove delete protection on BigQuery table
sed -i "/resource \"google_bigquery_table\"/a deletion_protection=\"false\"" \
OUTPUT_FILE
terraform apply
echo "***************  TERRAFORM DESTROY ****************"
terraform destroy

KRM

Para limpiar el conjunto de datos y la tabla de BigQuery de la configuración de muestra, ejecuta lo siguiente:

# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
  -f OUTPUT_FILE

Abandona la implementación de ejemplo de Deployment Manager

Para abandonar una implementación activa que hayas convertido correctamente en KRM o Terraform, ejecuta el siguiente comando:

gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON

Recursos admitidos para la conversión

Terraform

Para obtener una lista de los recursos compatibles con Terraform, ejecuta el siguiente comando:

docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format tf \
--list_supported_types

KRM

Para enumerar los recursos admitidos para KRM, ejecuta el siguiente comando:

docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types

Próximos pasos

Revisa las prácticas recomendadas y las recomendaciones para la configuración convertida.