Questa pagina descrive la procedura per utilizzare DM Convert per convertire le configurazioni di Deployment Manager in Kubernetes Resource Model (KRM) o Terraform.
Configura l'ambiente
Configura le variabili di ambiente
Salva le seguenti variabili di ambiente, 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 disporre dell'accesso ai seguenti strumenti:
gcloud
docker
kubectl
bq
Se utilizzi Cloud Shell per eseguire DM Convert, hai già accesso.
Converti le configurazioni
A livello generale, esegui la migrazione della configurazione di Deployment Manager a Terraform o KRM:
Preparazione di un deployment Deployment Manager per la conversione.
Conversione della configurazione in formato HCL (linguaggio di configurazione HashiCorp per Terraform) o KRM (Kubernetes Resource Model).
Utilizzo di Terraform o Config Connector per applicare la configurazione convertita.
Abbandonare il deployment Deployment Manager esistente.
Prepara il deployment esistente
DM Convert opera sui file di configurazione e sui 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 autonomamente o acquisire una configurazione da un deployment attivo.
Convertire un file di configurazione
Puoi utilizzare la seguente configurazione di esempio per provare il convertitore. Sostituisci
PROJECT_ID
con il tuo ID progetto Google Cloud 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 attivo
Se vuoi acquisire e convertire la configurazione di un deployment in produzione, puoi recuperare la configurazione espansa e salvarla su disco eseguendo i comandi riportati di seguito, 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)" 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
in 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ò essereTF
per Terraform oKRM
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 Terraform. Se viene specificato un flagproject_id
, i comandi di importazione vengono generati in base a quel flag. Se non viene specificato un flagproject_id
, i comandi di importazione vengono generati in base all'attributoprojectId
della configurazione della risorsa.DEPLOYMENT_NAME
: il nome del deployment. Questo è importante se utilizzi i modelli nella configurazione di Deployment Manager e anche la variabile di ambientedeployment
. Per ulteriori informazioni, consulta la sezione Utilizzare 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 risorse eseguendo direttamente il deployment 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 seguente comando:
cat OUTPUT_IMPORT_FILE
Per importare le risorse per deployment.yaml
,
esegui il seguente comando:
# 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 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 Terraform poiché vengono rimosse 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 sotto la gestione di Terraform.
Ad esempio, se vuoi verificare che Terraform stia effettivamente gestendo le risorse convertite, puoi farlo apportando una leggera modifica alla configurazione di Terraform modificando la data e l'ora di scadenza della tabella predefinite 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) di bq
per verificarle:
# 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 che ricevi deve corrispondere ai valori forniti nella configurazione Terraform aggiornata, a conferma del fatto che Terraform ora gestisce queste risorse.
KRM
Configura Config Connector
Per attivare le risorse nei file di configurazione KRM, è necessario un cluster Kubernetes con Config Connector installato. Per creare un cluster di test, consulta Installazione mediante il componente aggiuntivo di 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
seguente comando:
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
Esegui la pulizia
Ripulire il set di dati e la 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 ripulire il set di dati e la tabella BigQuery dalla configurazione di esempio, esegui:
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Abbandonare il deployment di Deployment Manager di esempio
Per abbandonare un deployment attivo 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 seguente 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
Passaggi successivi
Esamina le best practice e i consigli per la configurazione convertita.