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
Si usas Cloud Shell para ejecutar DM Convert, ya tienes acceso a ellas.
Convierte tus configuraciones
En un alto nivel, puedes migrar la configuración de Deployment Manager a Terraform o KRM de la siguiente manera:
Prepara una implementación de Deployment Manager para la conversión.
Convierte la configuración en formato de HCL (lenguaje de configuración HashiCorp, para Terraform) o KRM (modelo de recursos de Kubernetes).
Usa Terraform o Config Connector para aplicar la configuración convertida.
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 serTF
para Terraform oKRM
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 marcaproject_id
, los comandos de importación se generan según esa marca. Si no se especifica una marcaproject_id
, los comandos de importación se Se genera según el atributoprojectId
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 entornodeployment
. 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.