Deployment Manager-Konfigurationen mit DM Convert umwandeln

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

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

  • jq

Wenn Sie DM Convert mit Cloud Shell ausführen, haben Sie bereits Zugriff darauf.

In Cloud Shell öffnen

Konfigurationen konvertieren

Auf übergeordneter Ebene migrieren Sie Ihre Deployment Manager-Konfiguration so zu Terraform oder KRM:

  1. Vorbereiten einer Deployment Manager-Bereitstellung für die Konvertierung.

  2. Konvertieren der Konfiguration in das HCL-Format (HashiCorp-Konfigurationssprache für Terraform) oder das KRM-Format (Kubernetes-Ressourcenmodell).

  3. Verwenden der Terraform- oder Config Connector-Anwendung, um die konvertierte Konfiguration anzuwenden.

  4. 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 entweder TF für Terraform oder KRM 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 ein project_id-Flag angegeben ist, werden die Importbefehle basierend auf diesem Flag generiert. Wenn kein project_id-Flag angegeben ist, werden die Importbefehle auf der Grundlage des Attributs projectId 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 Umgebungsvariable deployment 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.