Deployment Manager-Konfigurationen mit DM Convert konvertieren

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. 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 entweder TF für Terraform oder KRM 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 ein project_id-Flag angegeben ist, werden die Importbefehle auf Grundlage dieses Flags generiert. Wenn das Flag project_id nicht angegeben ist, werden die Importbefehle auf 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 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.