Mengonfigurasi metadata stateful di MIG


Metadata instance berguna untuk menetapkan properti dan berkomunikasi dengan aplikasi Anda melalui server metadata. Misalnya, Anda dapat menggunakan metadata untuk mengonfigurasi identitas instance virtual machine (VM), variabel lingkungan, informasi tentang arsitektur cluster, atau rentang data yang menjadi tanggung jawab VM.

Dengan mengonfigurasi metadata stateful dalam grup instance terkelola (MIG) Anda memastikan bahwa metadata khusus instance dipertahankan di peristiwa autohealing, update, dan pembuatan ulang instance terkelola.

Konfigurasikan metadata stateful satu per satu untuk instance VM dalam MIG dengan menetapkannya dalam konfigurasi per instance dan menerapkan konfigurasi. Anda dapat menetapkan konfigurasi per instance pada saat pembuatan instance atau terhadap instance terkelola yang sudah ada. Setelah konfigurasi per instance diterapkan, MIG menyimpan metadata stateful dalam kolom status yang dipertahankan dari konfigurasi (preservedStateFromConfig) dari instance terkelola.

Sebelum memulai

  • Tinjau kapan harus menggunakan MIG stateful dan cara kerja MIG stateful.
  • Siapkan autentikasi, jika Anda belum melakukannya. Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud. Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.

    Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:

    gcloud

    1. Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init
    2. Menetapkan region dan zona default.

    Terraform

    Untuk menggunakan contoh Terraform di halaman ini dari lingkungan pengembangan lokal, instal dan lakukan inisialisasi gcloud CLI, lalu siapkan Kredensial Default Aplikasi dengan kredensial pengguna Anda.

    1. Menginstal Google Cloud CLI.
    2. Untuk initialize gcloud CLI, jalankan perintah berikut:

      gcloud init
    3. Buat kredensial autentikasi lokal untuk Akun Google Anda:

      gcloud auth application-default login

    Untuk informasi selengkapnya, lihat Siapkan autentikasi untuk lingkungan pengembangan lokal.

    REST

    Untuk menggunakan contoh REST API di halaman ini dalam lingkungan pengembangan lokal, gunakan kredensial yang Anda berikan ke gcloud CLI.

      Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:

      gcloud init

Batasan

MIG dengan metadata stateful memiliki batasan berikut:

MIG dengan konfigurasi statefulMIG stateful—memiliki batasan berikut:

  • Anda tidak dapat menggunakan penskalaan otomatis jika MIG Anda memiliki konfigurasi stateful.
  • Jika ingin menggunakan update berkelanjutan otomatis, Anda harus menetapkan metode penggantian ke RECREATE.
  • Untuk MIG regional stateful, Anda harus menonaktifkan redistribusi proaktif (menetapkan jenis distribusi ulang ke NONE) untuk mencegah penghapusan instance stateful dengan redistribusi lintas zona otomatis.
  • Jika menggunakan konfigurasi semua instance untuk mengganti properti template instance, Anda tidak dapat menentukan properti tersebut dalam konfigurasi per instance mana pun dan pada saat yang sama dalam konfigurasi semua instance grup.

  • Saat Anda menghapus instance secara permanen (baik secara manual atau dengan mengubah ukuran), MIG tidak mempertahankan metadata stateful instance tersebut.

Menetapkan metadata stateful pada pembuatan instance

Menetapkan metadata stateful saat membuat instance di MIG secara manual. Hal ini berguna untuk memigrasikan aplikasi stateful pada VM mandiri ke MIG stateful dan saat membuat instance stateful.

Saat Anda membuat instance secara manual di MIG dan menyediakan metadata stateful, MIG akan melakukan tugas-tugas berikut:

  1. Membuat instance terkelola dari template instance menggunakan nama instance yang disediakan.
  2. Membuat konfigurasi per instance dengan metadata stateful yang disediakan dan menetapkan metadata tersebut pada instance.
  3. Menyimpan metadata stateful dalam status yang dipertahankan dari konfigurasi (preservedStateFromConfig) instance terkelola yang terkait.

gcloud

Untuk membuat instance terkelola dengan nama kustom dan menetapkan metadata stateful pada VM tersebut, gunakan perintah gcloud compute instance-groups managed create-instance dengan flag --stateful-metadata.

gcloud compute instance-groups managed create-instance NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...]

Ganti kode berikut:

  • NAME: nama MIG tempat membuat instance
  • INSTANCE_NAME: nama instance yang akan dibuat
  • KEY dan VALUE: key-value pair metadata stateful yang ditetapkan satu per satu untuk instance selain metadata yang ditentukan dalam template instance
    • Nilai kunci yang Anda tetapkan di sini akan diprioritaskan daripada nilai kunci yang bertentangan dari template instance

Contoh

Anda perlu men-deploy cluster node, example-cluster, yang dapat beroperasi dalam salah satu dari dua mode: active atau standby. Anda dapat menetapkan mode satu per satu untuk setiap VM dalam cluster menggunakan metadata, misalnya: mode:active. Anda juga mengonfigurasi logging yang terperinci untuk setiap node, menggunakan kunci metadata logging yang dapat ditetapkan ke basic atau elaborate. Aplikasi pada node dikonfigurasi menggunakan nilai dari metadata instance.

Untuk membuat node aktif, node-12, dengan logging yang terperinci, Anda harus menjalankan perintah berikut:

gcloud compute instance-groups managed create-instance example-cluster \
  --instance node-12 \
  --stateful-metadata mode=active,logging=elaborate

Perintah ini membuat VM, node-12, dalam MIG example-cluster dan menetapkan dua key-value pair metadata, mode:active dan logging:elaborate, untuk instance baru.

Terraform

Untuk membuat instance terkelola dengan nama kustom dan menetapkan metadata stateful pada VM tersebut, gunakan resource google_compute_per_instance_config.

Contoh berikut menggunakan MIG zona. Jika Anda belum memiliki MIG zona, buat MIG zona dengan VM yang dibatasi ke satu zona.

resource "google_compute_per_instance_config" "default" {
  instance_group_manager = google_compute_instance_group_manager.default.name
  zone                   = google_compute_instance_group_manager.default.zone
  name                   = "node-12"
  preserved_state {
    metadata = {
      mode    = "active"
      logging = "elaborate"
    }
  }
}

Untuk mempelajari cara menerapkan atau menghapus konfigurasi Terraform, lihat Perintah dasar Terraform.

REST

Untuk membuat satu atau beberapa instance terkelola di MIG dengan nama VM kustom dan untuk menetapkan metadata stateful satu per satu pada VM tersebut, gunakan metode instanceGroupManagers.createInstances. Untuk MIG regional, gunakan metode regionInstanceGroupManagers.createInstances.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/createInstances
{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY" : "VALUE",
          ...
        }
      }
    },
    ...
  ]
}

Ganti kode berikut:

  • PROJECT_ID: project ID untuk permintaan
  • ZONE: zona tempat MIG berada (berlaku untuk MIG zona)
    • Untuk MIG regional, ganti zones/ZONE dengan regions/REGION dan tentukan region MIG
  • NAME: nama MIG untuk membuat instance
  • INSTANCE_NAME: nama instance yang akan dibuat
  • KEY dan VALUE: key-value pair metadata stateful yang ditetapkan satu per satu untuk instance selain metadata yang ditentukan dalam template instance
    • Nilai kunci yang Anda tetapkan di sini akan diprioritaskan daripada nilai kunci yang bertentangan dari template instance

Contoh

Anda perlu men-deploy cluster node, example-cluster, yang dapat beroperasi dalam salah satu dari dua mode: active atau standby. Anda dapat menetapkan mode satu per satu untuk setiap VM dalam cluster menggunakan metadata, misalnya: mode:active. Anda juga mengonfigurasi logging yang terperinci untuk setiap node, menggunakan kunci metadata logging yang dapat ditetapkan ke basic atau elaborate. Aplikasi pada node dikonfigurasi menggunakan nilai dari metadata instance.

Untuk membuat node aktif, node-12, dengan logging yang terperinci, jalankan metode berikut:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/createInstances

{
  "instance": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode":"active",
          "logging":"elaborate"
        }
      }
    }
  ]
}

Metode ini akan membuat VM, node-12, dalam MIG example-cluster dan menetapkan dua key-value pair metadata, mode:active dan logging:elaborate, untuk instance baru.

Menetapkan, mengubah, dan menghapus metadata stateful satu per satu untuk instance VM yang ada

Menetapkan, mengubah, atau menghapus metadata stateful untuk instance yang ada di MIG dengan menyetelnya ke dalam konfigurasi per instance yang terkait, lalu menerapkan konfigurasi dengan mengupdate instance.

gcloud

Untuk mengonfigurasi metadata stateful satu per satu untuk instance VM di MIG, tetapkan atau hapus metadata stateful dalam konfigurasi per instance yang terkait. Jika Anda menerapkan konfigurasi ke instance secara bersamaan (--update-instance), Anda dapat memilih apakah instance akan tetap berjalan, memulai ulang, atau membuatnya ulang. Jika Anda tidak menerapkan konfigurasi (--no-update-instance), perubahan Anda tidak akan diterapkan sampai Anda membuat ulang atau mengupdate instance.

Jika konfigurasi per instance tidak ada untuk instance tertentu, gunakan perintah gcloud compute instance-groups managed instance-configs create dengan salah satu flag berikut:

gcloud compute instance-groups managed instance-configs create NAME \
  --instance INSTANCE_NAME \
  --stateful-metadata KEY=VALUE[,KEY=VALUE,...] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Jika konfigurasi per instance sudah ada untuk instance tertentu, gunakan perintah gcloud compute instance-groups managed instance-configs update dengan:

  • Flag --stateful-metadata untuk menyetel atau mengubah metadata, atau
  • Flag --remove-stateful-metadata untuk menghapus metadata stateful khusus instance.
gcloud compute instance-groups managed instance-configs update NAME \
  --instance INSTANCE_NAME \
  [--stateful-metadata KEY=VALUE[,KEY=VALUE,...]] \
  [--remove-stateful-metadata KEY[,KEY,...]] \
  [--no-update-instance | --update-instance] \
  [--instance-update-minimal-action MINIMAL_ACTION]

Ganti kode berikut:

  • NAME: Nama grup instance terkelola.
  • INSTANCE_NAME: Nama instance yang akan mengonfigurasi metadata stateful.
  • KEY=VALUE: Key-value pair metadata stateful yang akan ditetapkan satu per satu untuk instance selain metadata yang ditentukan dalam template instance. Nilai kunci yang Anda tetapkan di sini lebih diprioritaskan daripada nilai kunci yang bertentangan dari template instance.
  • KEY: Kunci metadata stateful khusus instance yang akan dihapus dari konfigurasi per instance.
    • Jika nilai untuk kunci tidak ditentukan oleh template instance, key-value pair akan dihapus sepenuhnya dari instance saat perubahan diterapkan.
    • Jika nilai untuk kunci ditentukan oleh template instance, nilai dari template instance akan ditetapkan pada instance ketika perubahan diterapkan.
  • MINIMAL_ACTION: Menjalankan setidaknya tindakan yang ditentukan saat menerapkan update konfigurasi per instance ke instance. MINIMAL_ACTION hanya dapat ditetapkan jika flag --update-instance digunakan. Nilainya harus berupa salah satu dari berikut:

    • none: Tidak ada tindakan.
    • refresh: Menerapkan update yang dapat diterapkan tanpa menghentikan instance.
    • restart: Menghentikan instance, lalu memulainya lagi.
    • replace: Membuat ulang instance.

    Jika dihilangkan, tindakan yang paling tidak mengganggu yang diperlukan oleh update akan digunakan.

Contoh

Anda memiliki cluster node, example-cluster, yang dapat beroperasi dalam salah satu dari dua mode: active atau standby. Anda dapat menetapkan mode satu per satu untuk setiap VM dalam cluster menggunakan metadata, misalnya: mode:active. Anda juga mengonfigurasi seperti apa logging terperinci untuk setiap node, menggunakan kunci metadata logging yang dapat ditetapkan ke basic atau elaborate. Aplikasi di setiap node menggunakan nilai dari metadata instance.

Template instance menentukan metadata mode:active dan logging:basic untuk digunakan sebagai default untuk semua instance. Anda telah menetapkan logging:elaborate dalam konfigurasi per instance untuk VM node-12 di cluster. Sekarang, Anda ingin mengalihkan node-12 ke mode standby dan mengalihkan logging ke basic untuk VM ini.

Untuk mengalihkan instance node-12 ke mode standby dan logging-nya ke versi dasar, jalankan perintah berikut:

gcloud compute instance-groups managed instance-configs update example-cluster \
  --instance node-12 \
  --stateful-metadata mode=standby \
  --remove-stateful-metadata logging

Perintah tersebut melakukan hal berikut:

  1. Menetapkan metadata mode:standby dalam konfigurasi per instance yang terkait dengan VM, node-12, di MIG example-cluster.
  2. Menghapus metadata logging:elaborate dari konfigurasi per instance untuk instance node-12.
  3. Menerapkan perubahan konfigurasi per instance ke VM node-12:
    • Menetapkan metadata mode:standby, sesuai dengan konfigurasi.
    • Menetapkan metadata logging:basic dari template instance karena nilai untuk kunci logging tidak lagi ditentukan oleh konfigurasi per instance.
  4. Perubahan ini segera diterapkan ke VM secara default karena flag --no-update-instance dihilangkan.
  5. VM terus berjalan selama update karena flag --instance-update-minimal-action dihilangkan dan tindakan yang paling tidak mengganggu akan dipilih untuk update secara default, dalam hal ini: refresh.

REST

Untuk mengonfigurasi metadata stateful satu per satu untuk instance VM yang ada di MIG, tetapkan atau hapus metadata dalam konfigurasi per instance terkait. Kemudian, update instance untuk menerapkan konfigurasi.

Jika konfigurasi per instance belum ada untuk instance tertentu, gunakan metode instanceGroupManagers.updatePerInstanceConfigs dengan metadata stateful:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/updatePerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Jika konfigurasi per instance sudah ada untuk instance tertentu, gunakan metode instanceGroupManagers.patchPerInstanceConfigs

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/NAME/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "INSTANCE_NAME",
      "preservedState" : {
        "metadata": {
          "KEY": "VALUE",
          ...
        }
      },
      "fingerprint: "FINGERPRINT"
    },
    ...
  ]
}

Ganti kode berikut:

  • PROJECT_ID: Project ID untuk permintaan.
  • ZONE: Zona tempat MIG berada (berlaku untuk MIG zona).
    • Untuk MIG regional, ganti zones/ZONE dengan regions/REGION dan tentukan region MIG.
  • NAME: Nama MIG.
  • INSTANCE_NAME: Nama VM yang akan mengonfigurasi metadata stateful.
  • KEY dan VALUE: Key-value pair metadata stateful untuk ditetapkan satu per satu untuk instance selain metadata yang ditentukan dalam template instance.
    • Nilai metadata stateful yang ditentukan untuk kunci yang sudah ada dalam template instance akan menggantikan nilai dari template instance.
    • Entri metadata lainnya dari template instance tetap tidak terpengaruh dan tersedia.
    • Menyediakan null sebagai nilai akan menghapus kunci dari konfigurasi per instance.
  • FINGERPRINT: (Opsional). Sidik jari untuk konfigurasi tertentu jika sudah ada. Digunakan untuk penguncian optimistis.

Metode updatePerInstanceConfigs dan patchPerInstanceConfigs akan memperbarui konfigurasi per instance yang ditentukan, tetapi tidak menerapkan pembaruan konfigurasi ke instance VM yang terkait. Perubahan tersebut diterapkan ke VM saat Anda mengupdate atau membuat ulang instance. Untuk menerapkan perubahan ke VM, Anda dapat menerapkan update secara manual atau menggunakan Updater dalam mode proaktif atau oportunistik.

Contoh

Anda memiliki cluster node, example-cluster, yang dapat beroperasi dalam salah satu dari dua mode: active atau standby. Anda dapat menetapkan mode satu per satu untuk setiap VM dalam cluster menggunakan metadata, misalnya: mode:active. Anda juga mengonfigurasi seperti apa logging terperinci untuk setiap node, menggunakan kunci metadata logging yang dapat ditetapkan ke basic atau elaborate. Aplikasi di setiap node menggunakan nilai dari metadata instance.

Template instance menentukan metadata mode:active dan logging:basic untuk digunakan sebagai default untuk semua instance. Anda telah menetapkan logging:elaborate dalam konfigurasi per instance untuk VM node-12 di cluster. Sekarang, Anda ingin mengalihkan node-12 ke mode standby dan mengalihkan logging ke basic untuk instance ini.

Untuk mengalihkan VM node-12 ke mode standby dan logging-nya ke versi dasar, patch konfigurasi per instance yang terkait dengan menggunakan metode patchPerInstanceConfigs:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/patchPerInstanceConfigs

{
  "perInstanceConfigs": [
    {
      "name": "node-12",
      "preservedState" : {
        "metadata": {
          "mode": "standby",
          "logging": null
        }
      }
    }
  ]
}

Metode ini akan melakukan hal berikut:

  1. Menetapkan metadata mode:standby dalam konfigurasi per instance yang terkait dengan VM, node-12, di MIG example-cluster.
  2. Menghapus metadata logging:elaborate dari konfigurasi per instance karena nilai yang diberikan adalah null.

Update konfigurasi belum diterapkan ke instance VM node-12. Update konfigurasi akan diterapkan saat Anda selanjutnya membuat ulang atau mengupdate instance atau jika Anda menggunakan update otomatis proaktif.

Untuk menerapkan update konfigurasi per instance ke instance VM node-12, panggil metode instanceGroupManagers.applyUpdatesToInstances untuk instance tersebut:

POST https://compute.googleapis.com/compute/v1/projects/example-project/zones/us-east1-c/instanceGroupManagers/example-cluster/applyUpdatesToInstances

{
  "instances": ["/zones/us-east1-c/instances/node-12"],
  "minimalAction": "NONE"
}

Metode ini menerapkan konfigurasi per instance yang telah diupdate ke VM node-12:

  1. Menetapkan metadata mode:standby, sesuai dengan konfigurasi per instance.
  2. Menetapkan metadata logging:basic dari template instance karena nilai untuk kunci logging tidak lagi ditentukan oleh konfigurasi per instance.
  3. VM tetap berjalan selama update karena minimalAction ditetapkan ke NONE, yang memungkinkan MIG menggunakan tindakan yang paling tidak mengganggu yang diperlukan untuk update. Update metadata instance memerlukan tindakan REFRESH, yang tidak mengganggu instance yang sedang berjalan.

Masukan

Kami ingin mempelajari kasus penggunaan, tantangan, dan masukan Anda tentang MIG stateful. Berikan masukan Anda kepada tim kami di mig-discuss@google.com.

Langkah selanjutnya