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 Verlauf dieses Leitfadens werden diese Dateien erstellt und lokal als Eingabe für das DM Convert-Tool gespeichert.
Sie können eine Konfigurationsdatei selbst 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
Um Ressourcen im deployment.yaml
-Format in das HCL- oder KRM-Format zu konvertieren und als
konvertierten Ausgaben den folgenden Befehl im selben Verzeichnis
deployment.yaml
durch die gewünschten Substitutionen:
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 konvertierte 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 basierend auf demprojectId
-Attribut 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, indem Sie die konvertierte Konfiguration direkt bereitstellen.
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 Ihre Ressourcen mit Terraform verwalten möchten, ohne sie noch einmal bereitzustellen. Verwenden Sie dazu die Terraform-Importfunktion.
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 überprüfen:
cat OUTPUT_IMPORT_FILE
So importieren Sie die Ressourcen für deployment.yaml
:
führen Sie den folgenden Befehl aus:
# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE
Nachdem Sie die Ressourcen in den Terraform-Zustand importiert haben, können Sie mit dem Terraform-Befehl plan
prüfen, ob es Änderungen zwischen dem Zustand und der generierten Terraform-Konfiguration gibt:
terraform plan
Dies erzeugt die folgende Ausgabe:
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 sie entfernt wird
Deployment Manager-spezifische Labels, z.B. goog-dm
, die nicht erforderlich sind
sobald die 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 von Terraform verwaltet.
Wenn Sie beispielsweise prüfen möchten, ob Terraform die konvertierten Ressourcen tatsächlich verwaltet, können Sie eine kleine Änderung an der Terraform-Konfiguration vornehmen, indem Sie die Standardablaufzeit der Tabelle in der google_bigquery_dataset.bigquerydataset
-Ressource ändern:
...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...
Nachdem Sie Ihre Änderungen vorgenommen haben, können Sie die Terraform-Konfiguration anwenden.
Verwenden Sie die bq
-Befehlszeile, um die Änderungen zu 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 sollte mit den in der aktualisierten Terraform-Konfiguration angegebenen Werten übereinstimmen. Das bestätigt, dass Terraform diese Ressourcen jetzt 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
Beispiel-Deployment Manager-Bereitstellung 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 Ressourcen für die Konvertierung
Terraform
Führen Sie den folgenden Befehl aus, um die unterstützten 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 die unterstützten 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.