Convertire le configurazioni di Deployment Manager con DM Convert

Questa pagina descrive la procedura di utilizzo di DM Convert per convertire le configurazioni di Deployment Manager in Kubernetes Resource Model (KRM) o Terraform.

Configura l'ambiente

Imposta le variabili di ambiente

Salva le seguenti variabili di ambiente, che verranno utilizzate nel resto di questa guida:

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 gli strumenti

Devi avere accesso ai seguenti strumenti:

  • gcloud

  • docker

  • kubectl

  • bq

  • jq

Se utilizzi Cloud Shell per eseguire DM Convert, hai già accesso a questi strumenti.

Apri in Cloud Shell

Converti le configurazioni

A livello generale, esegui la migrazione della configurazione di Deployment Manager a Terraform o KRM:

  1. Prepara un deployment di Deployment Manager per la conversione.

  2. Converti la configurazione nel formato HCL (HashiCorp Configuration Language, per Terraform) o KRM (Kubernetes Resource Model).

  3. Utilizza Terraform o Config Connector per applicare la configurazione convertita.

  4. Abbandona il deployment di Deployment Manager esistente.

Prepara il deployment esistente

DM Convert opera su file di configurazione e modelli di Deployment Manager. Nel corso della guida, questi file verranno creati e salvati localmente come input per lo strumento DM Convert.

Puoi creare un file di configurazione o acquisire una configurazione da un deployment live.

Converti un file di configurazione

Puoi utilizzare la seguente configurazione di esempio per provare il convertitore. Sostituisci PROJECT_ID con l'ID del Google Cloud progetto e salva i contenuti riportati di seguito in un file denominato 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
  • Acquisisci una configurazione da un deployment live

    Se vuoi acquisire e convertire la configurazione di un deployment live, puoi recuperare la configurazione espansa e salvarla su disco eseguendo i seguenti comandi, sostituendo DEPLOYMENT_NAME con il nome del deployment.

    # 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)"
    
    # The output should look like this:
    # 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
    

Converti il deployment

Per convertire le risorse in deployment.yaml nel formato HCL o KRM e salvarle come output convertiti, esegui il seguente comando nella stessa directory di deployment.yaml con le sostituzioni desiderate:

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

Apporta le seguenti sostituzioni:

  • OUTPUT_FORMAT: il formato di output per la conversione. Può essere TF per Terraform o KRM per KRM.

  • OUTPUT_FILE: il nome del file in cui viene salvato l'output convertito.

  • (Solo Terraform) OUTPUT_IMPORT_FILE: il nome del file in cui vengono salvati i comandi di importazione di Terraform. Se viene specificato un flag project_id, i comandi di importazione vengono generati in base a questo flag. Se non viene specificato un flag project_id, i comandi di importazione vengono generati in base all'attributo projectId della configurazione della risorsa.

  • DEPLOYMENT_NAME: il nome del deployment. Questo è pertinente se utilizzi i modelli nella configurazione di Deployment Manager e anche la variabile di ambiente deployment. Per ulteriori informazioni, consulta Utilizzo di una variabile di ambiente.

Visualizza le conversioni

# Print output file
cat OUTPUT_FILE

Applica la configurazione convertita

Terraform

Configura Terraform

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

Dopo aver convertito le risorse di Deployment Manager in Terraform, puoi utilizzare Terraform per creare le risorse eseguendo il deployment diretto della configurazione convertita.

Esegui il deployment della configurazione convertita utilizzando 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

(Facoltativo) Importa le risorse esistenti

Se stai convertendo un deployment esistente e vuoi utilizzare Terraform per gestire le relative risorse senza eseguire nuovamente il deployment, puoi farlo utilizzando la funzionalità di importazione di Terraform.

Per questa sezione, utilizzerai deployment.yaml per la procedura di importazione.

Inizializza Terraform:

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

I comandi di importazione vengono generati e salvati in OUTPUT_IMPORT_FILE. Per esaminarne i contenuti, esegui il comando seguente:

cat OUTPUT_IMPORT_FILE

Per importare le risorse per deployment.yaml, esegui il comando seguente:

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

Dopo aver importato le risorse nello stato di Terraform, puoi verificare se sono presenti modifiche tra lo stato e la configurazione di Terraform generata eseguendo il comando plan di Terraform:

terraform plan

Viene generato il seguente output:

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.

Accetta questa modifica nel piano di Terraform, poiché rimuove le etichette specifiche di Deployment Manager, ad esempio goog-dm, che non sono necessarie una volta che le risorse vengono gestite da Terraform.

Per applicare la configurazione di Terraform, esegui il comando seguente:

# Accept changes by entering yes when prompted
terraform apply

Ora tutte le risorse definite in deployment.yaml sono gestite da Terraform.

Ad esempio, se vuoi verificare che Terraform stia effettivamente gestendo le risorse convertite, puoi farlo apportando una piccola modifica alla configurazione di Terraform modificando il tempo di scadenza predefinito della tabella nella risorsa google_bigquery_dataset.bigquerydataset:

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

Dopo aver apportato le modifiche, puoi applicare la configurazione di Terraform e utilizzare l'interfaccia a riga di comando (CLI) bq per verificare le modifiche:

# 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'

L'output ricevuto deve corrispondere ai valori forniti nella configurazione di Terraform aggiornata, a conferma che Terraform ora gestisce queste risorse.

KRM

Configura Config Connector

Per attivare le risorse nei file di configurazione KRM, devi disporre di un cluster Kubernetes con Config Connector installato. Per creare un cluster di test, consulta Installazione con il componente aggiuntivo GKE.

In Cloud Shell, assicurati che le credenziali kubectl siano configurate per il cluster GKE che vuoi utilizzare. Sostituisci GKE_CLUSTER con il nome del cluster ed esegui il comando seguente:

gcloud container clusters get-credentials GKE_CLUSTER

Esegui il deployment della configurazione KRM convertita utilizzando kubectl

Per eseguire il deployment della configurazione KRM convertita utilizzando kubectl, esegui i seguenti comandi:

# 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

Libera spazio

Libera spazio nel set di dati e nella tabella di esempio

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

Per liberare spazio nel set di dati e nella tabella BigQuery dalla configurazione di esempio, esegui:

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

Abbandona il deployment di Deployment Manager di esempio

Per abbandonare un deployment live che hai convertito correttamente in KRM o Terraform, esegui:

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

Risorse supportate per la conversione

Terraform

Per elencare le risorse supportate per Terraform, esegui il comando seguente:

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

Per elencare le risorse supportate per KRM, esegui il comando seguente:

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

Passaggi successivi

Esamina le best practice e le raccomandazioni per la configurazione convertita.