Auf dieser Seite wird beschrieben, wie Sie mit DM Convert Ihre Deployment Manager-Konfigurationen in das Kubernetes-Ressourcenmodell (KRM) oder Terraform konvertieren.
Umgebung einrichten
Umgebungsvariablen einrichten
Speichern Sie die folgenden Umgebungsvariablen, die im weiteren Verlauf dieser Anleitung verwendet werden:
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"
Tools einrichten
Sie benötigen Zugriff auf die folgenden Tools:
gcloud
docker
kubectl
bq
Wenn Sie DM Convert mit Cloud Shell ausführen, haben Sie bereits Zugriff darauf.
Konfigurationen konvertieren
Auf übergeordneter Ebene migrieren Sie Ihre Deployment Manager-Konfiguration so zu Terraform oder KRM:
Vorbereiten einer Deployment Manager-Bereitstellung für die Konvertierung.
Konvertieren der Konfiguration in das HCL-Format (HashiCorp-Konfigurationssprache für Terraform) oder das KRM-Format (Kubernetes-Ressourcenmodell).
Verwenden der Terraform- oder Config Connector-Anwendung, um die konvertierte Konfiguration anzuwenden.
Verwerfen der vorhandenen Deployment Manager-Bereitstellung.
Vorhandene Bereitstellung vorbereiten
DM Convert basiert auf Deployment Manager-Konfigurationsdateien und -Vorlagen. Im gesamten Leitfaden werden diese Dateien lokal erstellt und als Eingabe für das DM Convert-Tool gespeichert.
Sie können selbst eine Konfigurationsdatei erstellen oder eine Konfiguration aus einer Live-Bereitstellung abrufen.
Konfigurationsdatei konvertieren
Mit der folgenden Beispielkonfiguration können Sie den Converter testen. Ersetzen Sie PROJECT_ID
durch Ihre Google Cloud-Projekt-ID und speichern Sie den folgenden Inhalt in einer Datei mit dem Namen 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
Konfiguration aus einer Live-Bereitstellung abrufen
Wenn Sie die Konfiguration einer Live-Bereitstellung abrufen und konvertieren möchten, können Sie die erweiterte Konfiguration abrufen und auf dem Laufwerk speichern. Führen Sie dazu die folgenden Befehle aus und ersetzen Sie dabei
DEPLOYMENT_NAME
durch den Namen der Bereitstellung.# 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
Bereitstellung konvertieren
Führen Sie den folgenden Befehl im selben Verzeichnis wie deployment.yaml
mit den gewünschten Ersetzungen aus, um Ressourcen im Format deployment.yaml
in HCL oder KRM zu konvertieren und als konvertierte Ausgaben zu speichern:
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
Ersetzen Sie die Parameter:
OUTPUT_FORMAT
: Das Ausgabeformat der Konvertierung. Dies kann entwederTF
für Terraform oderKRM
für KRM sein.OUTPUT_FILE
: Der Name der Datei, in der die umgewandelte Ausgabe gespeichert wird.(Nur Terraform)
OUTPUT_IMPORT_FILE
: Der Name der Datei, in der die Terraform-Importbefehle gespeichert werden. Wenn einproject_id
-Flag angegeben ist, werden die Importbefehle basierend auf diesem Flag generiert. Wenn keinproject_id
-Flag angegeben ist, werden die Importbefehle auf der Grundlage des AttributsprojectId
aus der Ressourcenkonfiguration generiert.DEPLOYMENT_NAME
: Der Name der Bereitstellung. Dies ist wichtig, wenn Sie Vorlagen in Ihrer Deployment Manager-Konfiguration und wenn Sie die Umgebungsvariabledeployment
verwenden. Weitere Informationen finden Sie unter Umgebungsvariable verwenden.
Conversions ansehen
# Print output file
cat OUTPUT_FILE
Konvertierte Konfiguration anwenden
Terraform
Terraform einrichten
# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
project = "$PROJECT_ID"
}
EOF
Nachdem Sie Ihre Deployment Manager-Ressourcen in Terraform konvertiert haben, können Sie mit Terraform Ressourcen erstellen. Dazu stellen Sie die konvertierte Konfiguration direkt bereit.
Konvertierte Konfiguration mit Terraform bereitstellen
# 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
Optional: Vorhandene Ressourcen importieren
Wenn Sie eine vorhandene Bereitstellung konvertieren und Terraform verwenden möchten, um deren Ressourcen ohne erneute Bereitstellung zu verwalten, können Sie dazu die Importfunktion von Terraform verwenden.
In diesem Abschnitt verwenden Sie deployment.yaml
für den Importvorgang.
Initialisieren Sie Terraform:
# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init
Die Importbefehle werden generiert und unter OUTPUT_IMPORT_FILE
gespeichert.
Führen Sie den folgenden Befehl aus, um den Inhalt zu prüfen:
cat OUTPUT_IMPORT_FILE
Führen Sie den folgenden Befehl aus, um die Ressourcen für deployment.yaml
zu importieren:
# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE
Nachdem Sie die Ressourcen in den Terraform-Status importiert haben, können Sie mit dem Befehl Terraform plan
prüfen, ob es Änderungen zwischen dem Status und der generierten Terraform-Konfiguration gibt:
terraform plan
Das Ergebnis sieht so aus:
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.
Akzeptieren Sie diese Änderung im Terraform-Plan, da Deployment Manager-spezifische Labels entfernt werden (z.B. goog-dm
, die nicht erforderlich sind, sobald Ressourcen von Terraform verwaltet werden).
Führen Sie den folgenden Befehl aus, um die Terraform-Konfiguration anzuwenden:
# Accept changes by entering yes when prompted
terraform apply
Jetzt werden alle in deployment.yaml
definierten Ressourcen unter Terraform verwaltet.
Wenn Sie beispielsweise prüfen möchten, ob Terraform die konvertierten Ressourcen tatsächlich verwaltet, nehmen Sie eine kleine Änderung an der Terraform-Konfiguration vor. Ändern Sie dazu die Standardablaufzeit von Tabellen in der Ressource google_bigquery_dataset.bigquerydataset
:
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
Nachdem Sie die Änderungen vorgenommen haben, können Sie die Terraform-Konfiguration anwenden und die Änderungen über die bq
-Befehlszeile prüfen:
# 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'
Die Ausgabe, die Sie erhalten, sollte mit den Werten in der aktualisierten Terraform-Konfiguration übereinstimmen und bestätigen, dass Terraform jetzt diese Ressourcen verwaltet.
KRM
Config Connector einrichten
Zum Bearbeiten der Ressourcen in den KRM-Konfigurationsdateien benötigen Sie einen Kubernetes-Cluster mit installiertem Config Connector. Informationen zum Erstellen eines Testclusters finden Sie unter Mit dem GKE-Add-on installieren.
Achten Sie in Cloud Shell darauf, dass Ihre kubectl
-Anmeldedaten für den zu verwendenden GKE-Cluster konfiguriert sind. Ersetzen Sie GKE_CLUSTER
durch den Namen des Clusters und führen Sie den folgenden Befehl aus:
gcloud container clusters get-credentials GKE_CLUSTER
Konvertierte KRM-Konfiguration mit kubectl
bereitstellen
Führen Sie die folgenden Befehle aus, um Ihre konvertierte KRM-Konfiguration mit kubectl
bereitzustellen:
# 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
Bereinigen
Beispiel-Dataset und -Tabelle bereinigen
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
Führen Sie folgenden Befehl aus, um das BigQuery-Dataset und die Tabelle aus der Beispielkonfiguration zu bereinigen:
# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
-f OUTPUT_FILE
Deployment Manager-Beispielbereitstellung verwerfen
Führen Sie folgenden Befehl aus, um eine Live-Bereitstellung zu verwerfen, die Sie erfolgreich in KRM oder Terraform konvertiert haben:
gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON
Unterstützte Conversion-Ressourcen
Terraform
Führen Sie den folgenden Befehl aus, um unterstützte Ressourcen für Terraform aufzulisten:
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
Führen Sie den folgenden Befehl aus, um unterstützte Ressourcen für KRM aufzulisten:
docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types
Nächste Schritte
Sehen Sie sich die Best Practices und Empfehlungen für die konvertierte Konfiguration an.