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. In dieser Anleitung 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 übernehmen.
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
Wenn Sie Ressourcen im deployment.yaml
-Format in das HCL- oder KRM-Format konvertieren und als konvertierte Ausgaben speichern möchten, führen Sie den folgenden Befehl im selben Verzeichnis wie deployment.yaml
mit den gewünschten Substitutionen aus:
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 auf Grundlage dieses Flags generiert. Wenn das Flagproject_id
nicht angegeben ist, werden die Importbefehle auf 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 zum Verwalten der Ressourcen ohne erneute Bereitstellung verwenden möchten, können Sie dazu das Terraform-Importfeature verwenden.
Für diesen 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 in OUTPUT_IMPORT_FILE
gespeichert.
Führen Sie den folgenden Befehl aus, um den Inhalt zu überprü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 Ihren Terraform-Zustand importiert haben, können Sie mit dem Terraform-Befehl plan
prüfen, ob zwischen dem Status und der generierten Terraform-Konfiguration Änderungen vorgenommen wurden:
terraform plan
Dies erzeugt 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 Deployment Manager-spezifische Labels wie goog-dm
entfernt werden, 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 befinden sich alle in deployment.yaml
definierten Ressourcen unter der Terraform-Verwaltung.
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. Ändern Sie dazu die Standardablaufzeit der Tabelle in der Ressource google_bigquery_dataset.bigquerydataset
:
...
# 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 und die bq
-Befehlszeile verwenden, 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 Werten der aktualisierten Terraform-Konfiguration übereinstimmen und bestätigt, dass diese Ressourcen jetzt von Terraform verwaltet werden.
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 Ressourcen für die Konvertierung
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.