En esta página se describe el proceso para usar DM Convert y convertir tus configuraciones de Deployment Manager a Kubernetes Resource Model (KRM) o Terraform.
Configurar un entorno
Configurar las 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"
Configurar las herramientas
Debes tener acceso a las siguientes herramientas:
gcloud
docker
kubectl
bq
Si usas Cloud Shell para ejecutar DM Convert, ya tienes acceso a ellos.
Convertir configuraciones
A grandes rasgos, para migrar la configuración de Deployment Manager a Terraform o KRM, debes hacer lo siguiente:
Preparar un despliegue de Deployment Manager para la conversión.
Convierte la configuración al formato HCL (lenguaje de configuración de HashiCorp, para Terraform) o KRM (modelo de recursos de Kubernetes).
Usar Terraform o Config Connector para aplicar la configuración convertida.
Abandonar el despliegue de Deployment Manager.
Preparar una implementación
DM Convert funciona con archivos de configuración y plantillas de Deployment Manager. A lo largo de la guía, estos archivos se crearán y se guardarán de forma local como entrada para la herramienta DM Convert.
Puedes crear un archivo de configuración o adquirir una configuración de una implementación activa.
Convertir un archivo de configuración
Puedes usar la siguiente configuración de ejemplo para probar el convertidor. Sustituye PROJECT_ID
por el ID de tu proyecto Google Cloud y guarda el contenido siguiente 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
Adquirir una configuración de una implementación activa
Si quieres obtener y convertir la configuración de un despliegue activo, puedes recuperar la configuración ampliada y guardarla en el disco ejecutando los siguientes comandos. Sustituye
DEPLOYMENT_NAME
por el nombre del despliegue.# 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
Convertir un despliegue
Para convertir los recursos de deployment.yaml
al formato HCL o KRM y guardarlos como resultados convertidos, ejecuta el siguiente comando en el mismo directorio que deployment.yaml
con las sustituciones que quieras:
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
Haz las siguientes sustituciones:
OUTPUT_FORMAT
: el formato de salida de la conversión. Puede serTF
para Terraform oKRM
para KRM.OUTPUT_FILE
: Nombre del archivo en el que se guarda el resultado convertido.(Solo Terraform)
OUTPUT_IMPORT_FILE
: nombre del archivo en el que se guardan los comandos de importación de Terraform. Si se especifica una marcaproject_id
, los comandos de importación se generarán en función de esa marca. Si no se especifica ninguna marcaproject_id
, los comandos de importación se generan en función del atributoprojectId
de la configuración del recurso.DEPLOYMENT_NAME
: el nombre del despliegue. Esto es importante si usas plantillas en tu configuración de Deployment Manager y también usas la variable de entornodeployment
. Para obtener más información, consulta Usar una variable de entorno.
Ver las conversiones
# Print output file
cat OUTPUT_FILE
Aplicar la configuración convertida
Terraform
Configurar Terraform
# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
project = "$PROJECT_ID"
}
EOF
Una vez que hayas convertido tus recursos de Deployment Manager a Terraform, puedes usar Terraform para crear recursos desplegando directamente la configuración convertida.
Desplegar la 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
(Opcional) Importar recursos
Si vas a convertir una implementación que ya tienes y quieres usar Terraform para gestionar sus recursos sin volver a implementarla, puedes hacerlo con la función de importación de Terraform.
En esta sección, usarás deployment.yaml
para el proceso de importación.
Inicializa Terraform:
# 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
Una vez que hayas importado los recursos a tu estado de Terraform, puedes verificar si hay algún cambio entre el estado y la configuración de Terraform generada ejecutando el comando plan
de Terraform:
terraform plan
Se obtiene 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.
Acepta este cambio en el plan de Terraform, ya que elimina las etiquetas específicas de Deployment Manager, como goog-dm
, que no son necesarias cuando Terraform gestiona 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 gestionados por Terraform.
Por ejemplo, si quieres verificar que Terraform está gestionando los recursos convertidos, puedes hacerlo modificando ligeramente la configuración de Terraform. Para ello, cambia 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 hacer los cambios, puedes aplicar la configuración de Terraform y usar la bq
interfaz de línea de comandos (CLI) 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 de Terraform actualizada, lo que confirma que Terraform ahora gestiona estos recursos.
KRM
Configurar Config Connector
Para activar los recursos de 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 el artículo Instalar con el complemento de GKE.
En Cloud Shell, comprueba que tus credenciales de kubectl
estén configuradas para el clúster de GKE que quieras usar. Sustituye 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 con kubectl
.
Para implementar la 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
Limpieza
Limpiar 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 ejemplo, ejecuta lo siguiente:
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Abandonar el despliegue de ejemplo de Deployment Manager
Para abandonar una implementación activa que hayas convertido correctamente a 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 enumerar 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 de 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
Pasos siguientes
Consulta las prácticas recomendadas para la configuración convertida.