Mengonversi konfigurasi Deployment Manager Anda dengan DM Convert

Halaman ini menjelaskan proses penggunaan DM Convert untuk mengonversi konfigurasi Deployment Manager Anda ke Kubernetes Resource Model (KRM) atau Terraform.

Menyiapkan lingkungan Anda

Menyiapkan variabel lingkungan

Simpan variabel lingkungan berikut, yang akan digunakan bagian lain dalam panduan ini:

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"

Menyiapkan alat

Anda harus memiliki akses ke alat berikut:

  • gcloud

  • docker

  • kubectl

  • bq

  • jq

Jika menggunakan Cloud Shell untuk menjalankan DM Convert, Anda sudah memiliki akses ke DM Convert tersebut.

Buka di Cloud Shell

Mengonversi konfigurasi Anda

Pada level tinggi, Anda memigrasikan konfigurasi Deployment Manager ke Terraform atau KRM dengan:

  1. Menyiapkan deployment Deployment Manager untuk konversi.

  2. Mengonversi konfigurasi ke format HCL (Bahasa konfigurasi HashiCorp, untuk Terraform) atau KRM (Kubernetes Resource Model).

  3. Menggunakan Terraform atau Config Connector untuk menerapkan konfigurasi yang dikonversi.

  4. Mengabaikan deployment Deployment Manager yang ada.

Menyiapkan deployment yang ada

DM Convert beroperasi pada file dan template konfigurasi Deployment Manager. Dalam panduan ini, file ini akan dibuat dan disimpan secara lokal sebagai input untuk alat DM Convert.

Anda dapat membuat file konfigurasi sendiri atau memperoleh konfigurasi dari deployment langsung.

Mengonversi file konfigurasi

Anda dapat menggunakan contoh konfigurasi berikut untuk mencoba pengonversi. Ganti PROJECT_ID dengan project ID Google Cloud Anda, dan simpan konten di bawah ke file bernama 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
  • Memperoleh konfigurasi dari deployment langsung

    Jika ingin memperoleh dan mengonversi konfigurasi deployment langsung, Anda dapat mengambil konfigurasi yang diperluas dan menyimpannya ke disk dengan menjalankan perintah berikut, dengan mengganti DEPLOYMENT_NAME dengan nama deployment.

    # 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
    

Mengubah deployment Anda

Untuk mengonversi resource dalam deployment.yaml ke format HCL atau KRM dan menyimpannya sebagai output yang dikonversi, jalankan perintah berikut di direktori yang sama dengan deployment.yaml dengan substitusi yang diinginkan:

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

Buat substitusi berikut:

  • OUTPUT_FORMAT: Format output untuk konversi. ID ini dapat berupa TF untuk Terraform atau KRM untuk KRM.

  • OUTPUT_FILE: Nama file tempat output yang dikonversi disimpan.

  • (Khusus Terraform) OUTPUT_IMPORT_FILE: Nama file tempat perintah impor Terraform disimpan. Jika flag project_id ditentukan, perintah impor akan dibuat berdasarkan flag tersebut. Jika tanda project_id tidak ditentukan, perintah impor akan dibuat berdasarkan atribut projectId dari konfigurasi resource.

  • DEPLOYMENT_NAME: Nama deployment. Hal ini relevan jika Anda menggunakan template dalam konfigurasi Deployment Manager dan juga menggunakan variabel lingkungan deployment. Untuk mengetahui informasi selengkapnya, buka Menggunakan variabel lingkungan.

Melihat konversi

# Print output file
cat OUTPUT_FILE

Menerapkan konfigurasi yang dikonversi

Terraform

Menyiapkan Terraform

# Configure default project
cat <<EOF > echo > main.tf
provider "google" {
  project = "$PROJECT_ID"
}
EOF

Setelah mengonversi resource Deployment Manager ke Terraform, Anda dapat menggunakan Terraform untuk membuat resource dengan secara langsung men-deploy konfigurasi yang dikonversi.

Men-deploy konfigurasi konversi Anda menggunakan Terraform

# 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

(Opsional) Mengimpor resource yang ada

Jika ingin mengonversi deployment yang sudah ada dan ingin menggunakan Terraform untuk mengelola resource-nya tanpa men-deploy ulang, Anda dapat melakukannya menggunakan Fitur Impor Terraform.

Untuk bagian ini, Anda akan menggunakan deployment.yaml untuk proses impor.

Lakukan inisialisasi Terraform:

# NOTE: if Terraform state gets corrupted during testing,
# use init --reconfigure to reset backend
terraform init

Perintah impor dibuat dan disimpan ke OUTPUT_IMPORT_FILE. Untuk meninjau kontennya, jalankan perintah berikut:

cat OUTPUT_IMPORT_FILE

Guna mengimpor resource untuk deployment.yaml, jalankan perintah berikut:

# Make the import file executable
chmod +x OUTPUT_IMPORT_FILE
# Perform the import
./OUTPUT_IMPORT_FILE

Setelah mengimpor resource ke status Terraform, Anda dapat memverifikasi apakah ada perubahan antara status dan konfigurasi Terraform yang dihasilkan dengan menjalankan perintah plan Terraform:

terraform plan

Tindakan ini menghasilkan output berikut:

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.

Setujui perubahan ini dalam paket Terraform karena label khusus Deployment Manager akan dihapus, yaitu goog-dm yang tidak diperlukan setelah resource dikelola oleh Terraform.

Untuk menerapkan konfigurasi Terraform, jalankan perintah berikut ini:

# Accept changes by entering yes when prompted
terraform apply

Sekarang semua resource yang ditentukan dalam deployment.yaml berada di bawah pengelolaan Terraform.

Misalnya, jika ingin memverifikasi bahwa Terraform benar-benar mengelola resource yang dikonversi, Anda dapat melakukannya dengan membuat sedikit perubahan pada konfigurasi Terraform dengan mengubah waktu habis masa berlaku tabel default di resource google_bigquery_dataset.bigquerydataset:

...
# change from 10 hrs to 12 hrs
default_table_expiration_ms = 43200000
...

Setelah melakukan perubahan, Anda dapat menerapkan konfigurasi Terraform, dan menggunakan antarmuka command line (CLI) bq untuk memverifikasi perubahan tersebut:

# 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'

Output yang Anda terima harus cocok dengan nilai yang diberikan dalam konfigurasi Terraform yang telah diupdate, yang mengonfirmasi bahwa Terraform kini mengelola resource ini.

KRM

Menyiapkan Config Connector

Untuk menjalankan resource dalam file konfigurasi KRM, Anda memerlukan cluster Kubernetes dengan Config Connector terinstal. Untuk membuat cluster pengujian, lihat Menginstal dengan add-on GKE.

Di Cloud Shell, pastikan kredensial kubectl Anda dikonfigurasi untuk cluster GKE yang ingin Anda gunakan. Ganti GKE_CLUSTER dengan nama cluster, dan jalankan perintah berikut:

gcloud container clusters get-credentials GKE_CLUSTER

Deploy konfigurasi KRM yang dikonversi menggunakan kubectl

Untuk men-deploy konfigurasi KRM yang dikonversi menggunakan kubectl, jalankan perintah berikut:

# 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

Pembersihan

Bersihkan {i>dataset <i}dan tabel sampel

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

Untuk membersihkan set data dan tabel BigQuery dari contoh konfigurasi, jalankan:

# If the resource was created via Config Connector:
kubectl delete -n CONFIG_CONNECTOR_NAMESPACE \
  -f OUTPUT_FILE

Abaikan contoh deployment Deployment Manager

Untuk meninggalkan deployment live yang berhasil dikonversi ke KRM atau Terraform, jalankan:

gcloud deployment-manager deployments delete DEPLOYMENT_NAME --delete-policy ABANDON

Resource yang didukung untuk konversi

Terraform

Untuk menampilkan daftar resource yang didukung untuk Terraform, jalankan perintah berikut:

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

Untuk menampilkan daftar resource yang didukung untuk KRM, jalankan perintah berikut:

docker run --rm -it \
us-central1-docker.pkg.dev/dm-convert-host/deployment-manager/dm-convert:public-preview \
--output_format krm \
--list_supported_types

Langkah berikutnya

Tinjau praktik terbaik dan rekomendasi untuk konfigurasi yang dikonversi.