Men-deploy container pada VM dan MIG


Anda dapat mengonfigurasi instance virtual machine (VM) atau template instance untuk men-deploy dan meluncurkan container Docker. Compute Engine menyediakan image Container-Optimized OS (COS) terbaru dengan Docker yang sudah diinstal dan meluncurkan container Anda saat VM dimulai.

Sebelum memulai

  • Jika Anda belum terbiasa dengan container, baca Apa itu container dan manfaatnya.
  • Jika Anda tidak terbiasa dengan Docker, baca dokumentasi Docker.
  • Baca tentang Container-Optimized OS.
  • Baca tentang grup instance terkelola (MIG).
  • 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:

    Konsol

    Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.

    gcloud

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

      gcloud init
    2. Menetapkan region dan zona default.

Memilih untuk men-deploy container pada VM dan MIG

Dengan men-deploy container di Compute Engine, Anda dapat menyederhanakan deployment aplikasi sambil mengontrol infrastruktur VM.

  • Kelola VM yang menjalankan container dengan cara yang sama seperti Anda memperlakukan VM lain saat mengonfigurasi dan mengelola infrastruktur Compute Engine.
  • Buat layanan skalabel menggunakan container yang sedang berjalan dari grup instance terkelola (MIG), yang menawarkan fitur seperti penskalaan otomatis, autohealing, update berkelanjutan, deployment multi-zona, dan load balancing.
  • Gunakan proses dan alat yang sudah dikenal seperti Google Cloud CLI atau Compute Engine API untuk mengelola VM dengan container.

Atau, Anda dapat mempertimbangkan untuk men-deploy ke Google Kubernetes Engine untuk:

  • Menjalankan microservice dalam jumlah besar
  • Memiliki waktu startup container yang lebih cepat
  • Memanfaatkan orkestrasi otomatis Kubernetes, termasuk upgrade otomatis, perbaikan otomatis node, dan penskalaan otomatis

Menjalankan setiap microservice pada virtual machine (VM) terpisah di Compute Engine dapat membuat overhead sistem operasi menjadi bagian signifikan biaya Anda. Google Kubernetes Engine memungkinkan Anda men-deploy beberapa container dan grup container untuk setiap instance VM, yang dapat mengalokasikan resource VM host secara lebih efisien ke microservice dengan jejak yang lebih kecil.

Cara kerja deployment container di Compute Engine

Metode umum untuk men-deploy software ke instance VM Compute Engine meliputi:

  • Men-deploy software pada booting VM menggunakan skrip startup atau cloud-init.
  • Membuat boot disk image kustom dengan software yang sudah diinstal sebelumnya.

Kedua metode di atas menggabungkan tugas mengonfigurasi aplikasi dan menyiapkan lingkungan sistem operasi. Sebagai developer, Anda harus melacak dan menyelesaikan setiap dependensi runtime dengan cermat. Misalnya, jika dua aplikasi yang berjalan di VM menggunakan versi berbeda library yang sama, Anda harus menginstal kedua versi dan mengarahkannya melalui variabel sistem.

Aplikasi yang berjalan di berbagai versi library yang sama.
Instance VM dengan aplikasi yang di-deploy langsung ke sistem operasi

Atau, Anda dapat men-deploy software dalam container ke instance VM atau ke MIG. Container membawa software aplikasi dan library yang diperlukan, serta diisolasi dari aplikasi dan library OS. Container dapat dengan mudah dipindahkan antara lingkungan deployment tanpa berurusan dengan versi library yang bertentangan di container dan OS-nya.

Aplikasi dalam container.
Instance VM dengan aplikasi yang di-deploy dalam sebuah container

Proses berikut menjelaskan cara men-deploy container di Compute Engine:

  1. Anda memaketkan aplikasi dan library yang diperlukan ke dalam image Docker dan memublikasikan image ke Artifact Registry, atau registry pihak ketiga seperti Docker Hub.
  2. Anda menentukan nama image Docker dan konfigurasi docker run saat membuat instance VM atau template instance untuk MIG.

Compute Engine menjalankan tugas-tugas berikut setelah Anda membuat permintaan untuk membuat instance VM:

  1. Compute Engine membuat instance VM yang menggunakan image Container-Optimized OS yang disediakan Google. Image ini mencakup runtime Docker dan software tambahan yang bertanggung jawab untuk memulai container Anda.
  2. Compute Engine menyimpan setelan container Anda di metadata instance di bagian kunci metadata gce-container-declaration.
  3. Saat VM dimulai, image Container-Optimized OS akan menggunakan konfigurasi perintah docker run yang disimpan dalam metadata instance, mengambil image container dari repositori, dan memulai container.
Menggunakan image container dan perintah docker run.
Langkah-langkah untuk membuat instance VM atau grup instance terkelola yang menjalankan container

Batasan

  • Anda hanya dapat men-deploy satu container untuk setiap instance VM. Pertimbangkan Google Kubernetes Engine jika Anda perlu men-deploy beberapa container per instance VM.
  • Anda hanya dapat men-deploy container dari repositori publik atau dari repositori Artifact Registry atau Container Registry pribadi yang dapat Anda akses. Repositori pribadi lainnya tidak didukung.

    Lihat dokumentasi kontrol akses untuk Artifact Registry atau Container Registry untuk mengetahui informasi tentang izin registry pribadi.

  • Anda tidak dapat memetakan port instance VM ke port container (opsi -p Docker). Untuk mengaktifkan akses ke penampung Anda, lihat Memublikasikan port container.

  • Anda hanya dapat menggunakan Image Container-Optimized OS dengan metode deployment ini.

  • Anda hanya dapat menggunakan fitur ini melalui konsol Google Cloud atau Google Cloud CLI, bukan API.

Menyiapkan container untuk deployment

Pilih salah satu pendekatan berikut agar image container Anda dapat diakses oleh Compute Engine:

  • Upload image Docker Anda ke Artifact Registry.
  • Gunakan image container yang tersedia secara publik dari Docker Hub atau registry lainnya.

Men-deploy container pada instance VM baru

Anda dapat men-deploy container pada instance VM baru menggunakan konsol Google Cloud atau Google Cloud CLI.

Konsol

Contoh berikut men-deploy container dari image Nginx Docker yang disediakan Google, https://gcr.io/cloud-marketplace/google/nginx1:latest, ke instance VM. Untuk menggunakan image Docker yang berbeda, tentukan image yang Anda inginkan pada contoh di bawah.

  1. Buka halaman Buat instance.

    Buka Create an instance

  2. Tentukan detail VM.

  3. Di bagian Container, klik Deploy container.

  4. Pada halaman Konfigurasi container, tentukan nama image container dan konfigurasi opsi untuk menjalankan container sesuai kebutuhan Anda. Misalnya, Anda dapat menentukan gcr.io/cloud-marketplace/google/nginx1:latest untuk image container.

  5. Lanjutkan dengan proses pembuatan VM.

gcloud

Gunakan perintah gcloud compute instances create-with-container:

gcloud compute instances create-with-container VM_NAME \
    --container-image DOCKER_IMAGE

Misalnya, perintah berikut membuat instance VM baru bernama nginx-vm, yang meluncurkan dan menjalankan image Docker gcr.io/cloud-marketplace/google/nginx1:latest.

gcloud compute instances create-with-container nginx-vm \
    --container-image gcr.io/cloud-marketplace/google/nginx1:latest

Pelajari perintah gcloud compute instances create-with-container lebih lanjut.

Anda harus selalu menentukan nama image Docker lengkap saat menggunakan image publik dari Docker Hub. Misalnya, tentukan nama image berikut untuk men-deploy image container Apache:

docker.io/httpd:2.4

Mengupdate container pada instance VM

Anda dapat mengupdate image Docker dan opsi konfigurasi untuk menjalankan container pada instance VM menggunakan konsol Google Cloud atau Google Cloud CLI.

Saat Anda mengupdate VM yang menjalankan container, Compute Engine melakukan dua langkah:

  • Mengupdate deklarasi container pada instance. Compute Engine menyimpan deklarasi container yang telah diupdate di metadata instance pada kunci metadata gce-container-declaration.
  • Menghentikan dan memulai ulang instance untuk mengaktifkan konfigurasi yang diupdate, jika instance sedang berjalan. Jika instance dihentikan, update deklarasi container dan biarkan instance tetap dihentikan. Instance VM mendownload image baru dan meluncurkan container saat VM dimulai.

Konsol

  1. Buka halaman VM instances.

    Buka instance VM

  2. Klik nama VM yang akan diupdate.

  3. Di halaman detail instance, klik Edit.

  4. Tentukan image container baru dan perbarui opsi untuk menjalankan container sesuai kebutuhan.

  5. Untuk menyimpan perubahan, klik Simpan dan mulai ulang. Compute Engine menyimpan perubahan dan memulai ulang instance secara otomatis untuk melakukan update. Setelah dimulai ulang, VM akan mendownload image baru dan memulai container dengan konfigurasi yang diupdate.

gcloud

Update deklarasi container menggunakan perintah gcloud compute instances update-container. Contoh:

gcloud compute instances update-container nginx-vm \
    --container-image gcr.io/cloud-marketplace/google/nginx1:latest

Perintah ini menetapkan image container ke gcr.io/cloud-marketplace/google/nginx1:latest dan memulai ulang instance untuk mengaktifkan perubahan. Anda juga dapat mengupdate properti apa pun yang dijelaskan dalam Mengonfigurasi opsi untuk menjalankan container dengan menambahkan flag yang sesuai.

Setelah instance dimulai ulang, instance akan mendownload image container baru dan memulai container dengan konfigurasi baru.

Men-deploy container pada grup instance terkelola

Anda dapat men-deploy container ke grup instance terkelola (MIG) baru menggunakan konsol Google Cloud atau Google Cloud CLI dengan mengikuti langkah-langkah berikut:

  1. Buat template instance yang didasarkan pada image Docker.

  2. Buat MIG dari template instance baru.

Konsol

Contoh berikut membuat template instance yang men-deploy container dari image Docker Nginx (gcr.io/cloud-marketplace/google/nginx1:15) yang disediakan Google ke MIG. Untuk menggunakan image Docker lainnya, tentukan gambar yang Anda inginkan, bukan gcr.io/cloud-marketplace/google/nginx1:15, pada contoh berikut.

  1. Buka halaman Template instance.

    Buka Template instance

  2. Untuk membuat template instance, klik Buat template instance.

  3. Di bagian Container, pilih Deploy image container.

  4. Di bagian Image container, tentukan nama image Docker dan konfigurasikan opsi untuk menjalankan container jika diinginkan. Misalnya, Anda dapat menentukan gcr.io/cloud-marketplace/google/nginx1:15 untuk image container.

  5. Klik Create.

Selanjutnya, buat MIG yang menggunakan template instance baru.

gcloud

Buat template instance untuk menjalankan image Docker menggunakan perintah gcloud compute instance-templates create-with-container:

gcloud compute instance-templates create-with-container TEMPLATE_NAME \
  --container-image DOCKER_IMAGE

Anda juga dapat mengonfigurasi opsi untuk menjalankan container jika diinginkan.

Misalnya, perintah berikut akan membuat template instance baru dengan nama nginx-template, yang menyertakan informasi tentang image Docker. Instance VM yang dibuat dari template ini akan diluncurkan dan menjalankan image Docker gcr.io/cloud-marketplace/google/nginx1:15 saat VM dimulai.

gcloud compute instance-templates create-with-container nginx-template \
    --container-image gcr.io/cloud-marketplace/google/nginx1:15

Selanjutnya, buat MIG menggunakan template instance baru.

Setelah memiliki template instance, Anda dapat membuat MIG yang menggunakan template instance. Misalnya, untuk membuat MIG menggunakan gcloud CLI dan nginx-template yang baru saja Anda buat, jalankan perintah berikut:

gcloud compute instance-groups managed create example-group \
    --base-instance-name nginx-vm \
    --size 3 \
    --template nginx-template

Mengupdate grup instance terkelola yang menjalankan container

Anda dapat mengupdate grup instance terkelola (MIG) untuk men-deploy image Docker versi baru atau versi baru image Container-Optimized OS.

Mengupdate MIG ke versi baru image container

Anda dapat men-deploy image Docker versi baru ke MIG menggunakan Updater Grup Instance Terkelola, dalam tiga langkah:

  1. Siapkan image Docker baru untuk deployment.
  2. Buat template instance berdasarkan image Docker baru dengan cara yang sama seperti Anda membuat template berbasis container.
  3. Update MIG ke template instance baru dengan menggunakan Updater Grup Instance Terkelola.

Mengupdate grup instance terkelola ke versi baru image Container-Optimized OS

Google mengupdate image Container-Optimized OS secara teratur, dan sebaiknya terapkan update tersebut ke MIG dalam container tanpa mengubah image Docker Anda. Anda dapat mengupdate MIG ke versi baru image Container-Optimized OS menggunakan konsol Google Cloud atau Google Cloud CLI dalam dua langkah:

  1. Buat template instance berdasarkan versi image Docker Anda saat ini, dengan cara yang sama seperti Anda membuat template berbasis container untuk MIG baru. Versi terbaru image Container-Optimized OS yang didukung akan digunakan secara default.
  2. Update MIG dengan template instance baru menggunakan Updater Grup Instance Terkelola.

Menghubungkan ke container menggunakan SSH

Anda dapat terhubung ke container di VM dengan menggunakan SSH. Gunakan gcloud CLI untuk menjalankan gcloud compute ssh dengan flag --container:

gcloud compute ssh VM_NAME --container CONTAINER_NAME

Ganti kode berikut:

  • VM_NAME: nama instance VM
  • CONTAINER_NAME: nama container

Pelajari perintah gcloud compute ssh dan argumennya lebih lanjut.

Memantau container di Compute Engine

Untuk memantau instance yang menjalankan image Container-Optimized OS, gunakan agen Pendeteksi Masalah Node, yang berkomunikasi dengan Cloud Monitoring dan melaporkan metrik terkait kesehatan. Agen ini dibangun ke dalam image Container-Optimized OS mulai dari Milestone 77.

Untuk mengaktifkan agen, dalam container yang menggunakan dengan Milestone 88 atau yang lebih baru, edit bagian metadata kustom dan tetapkan google-monitoring-enabled ke true.

Untuk menemukan cara lain mengaktifkan Pendeteksi Masalah Node, buka Mengaktifkan pemantauan kondisi.

Agen Pendeteksi Masalah Node mendukung metrik dalam daftar metrik yang dimulai dengan guest/.

Untuk berinteraksi dengan metrik yang dikumpulkan oleh agen, kunjungi Metrics Explorer.

Melihat log

Anda dapat melihat tiga jenis log yang terkait dengan container:

  1. Log agen startup, juga dikenal sebagai log konlet. Agen startup mengurai konfigurasi container dan menjalankan tugas untuk memulai container di instance VM Compute Engine.

  2. Log aktivitas Docker melaporkan peristiwa container, termasuk peristiwa awal dan penghentian container.

  3. Log dari container Anda menyertakan STDOUT dari aplikasi yang berjalan di container Anda.

Melihat log agen startup

Log agen startup tersedia di konsol serial, melalui layanan sistem journald yang disertakan dalam image OS, dan melalui Cloud Logging.

Melihat log agen startup di konsol serial

Konsol

  1. Buka halaman VM instances.

    Buka instance VM

  2. Pilih instance VM dengan log agen startup yang ingin Anda lihat.

  3. Pada Log, klik Port serial 1 (konsol) untuk melihat log konsol serial.

    Mencatat port serial 1.

gcloud

Gunakan perintah get-serial-port-output untuk melihat log pada port serial instance.

gcloud compute instances get-serial-port-output VM_NAME

Ganti VM_NAME dengan nama instance VM.

Misalnya, gunakan perintah berikut untuk melihat output port serial instance VM bernama nginx-vm:

gcloud compute instances get-serial-port-output nginx-vm

Melihat log agen startup di journald

  1. Hubungkan ke instance Anda dengan container menggunakan SSH.
  2. Jalankan perintah sudo journalctl untuk melihat log startup container dan startup VM. Gunakan perintah berikut untuk memfilter log agen startup container (konlet).

    sudo journalctl -u konlet*
    

Melihat log agen startup di Logging

Konsol

  1. Buka halaman VM instances.

    Buka instance VM

  2. Pilih instance VM dengan log agen startup yang ingin Anda lihat.

  3. Pada Log, klik Cloud Logging untuk melihat log Cloud Logging.

    Mencatat port serial 1.

  4. Masukkan filter penelusuran untuk mengambil log agen startup.

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cos_system"
    jsonPayload.SYSLOG_IDENTIFIER="konlet-startup"
    jsonPayload._HOSTNAME="VM_NAME"
    

    Ganti kode berikut:

    • PROJECT_ID: project ID yang berisi instance
    • VM_NAME: nama instance yang lognya ingin Anda dapatkan

gcloud

Gunakan perintah gcloud logging read dengan filter yang sesuai untuk melihat log agen startup container.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/PROJECT_ID/logs/cos_system AND \
    jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \
    jsonPayload._HOSTNAME=VM_NAME"

Ganti kode berikut:

  • PROJECT_ID: project ID yang berisi instance
  • VM_NAME: nama instance yang ingin Anda dapatkan lognya

Misalnya, gunakan perintah berikut untuk melihat 10 log agen startup terakhir di Logging untuk instance VM bernama nginx-vm yang menjalankan COS 70 dan yang ada di my-project.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/my-project/logs/cos_system AND \
    jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \
    jsonPayload._HOSTNAME=nginx-vm" \
    --limit 10

Melihat log aktivitas Docker

Anda dapat melihat log aktivitas Docker di journald dan di Cloud Logging.

Melihat log aktivitas Docker di journald

  1. Hubungkan ke instance Anda dengan container menggunakan SSH.
  2. Jalankan perintah sudo journalctl dengan filter berikut untuk melihat log aktivitas Docker.

    sudo journalctl -u docker-events-collector
    

Melihat log aktivitas Docker di Logging

Konsol

  1. Buka halaman VM instances.

    Buka instance VM

  2. Pilih instance VM dengan log agen startup yang ingin Anda lihat.

  3. Pada Log, klik Cloud Logging untuk melihat log Cloud Logging.

    Mencatat port serial 1.

  4. Masukkan filter penelusuran berikut untuk mengambil log aktivitas Docker.

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cos_system"
    jsonPayload._HOSTNAME="VM_NAME"
    jsonPayload.SYSLOG_IDENTIFIER="docker"
    

    Ganti kode berikut:

    • PROJECT_ID: project ID yang berisi instance
    • VM_NAME: nama instance yang lognya ingin Anda dapatkan

gcloud

Gunakan perintah gcloud logging read dengan filter yang sesuai untuk melihat log aktivitas Docker.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/PROJECT_ID/logs/cos_system AND \
    jsonPayload._HOSTNAME=VM_NAME AND \
    jsonPayload.SYSLOG_IDENTIFIER=docker"

Ganti kode berikut:

  • PROJECT_ID: project ID yang berisi instance
  • VM_NAME: nama instance yang lognya ingin Anda dapatkan

Misalnya, gunakan perintah berikut untuk melihat 10 log aktivitas Docker terakhir di Logging untuk instance VM bernama nginx-vm yang menjalankan COS 70 dan yang ada di my-project.

gcloud logging read "resource.type=gce_instance AND \
    logName=projects/my-project/logs/cos_system AND \
    jsonPayload._HOSTNAME=nginx-vm AND \
    jsonPayload.SYSLOG_IDENTIFIER=docker" \
    --limit 10

Melihat log container

Konsol

  1. Buka halaman VM instances.

    Buka instance VM

  2. Pilih instance VM dengan log agen startup yang ingin Anda lihat.

  3. Pada Log, klik Cloud Logging untuk melihat log Cloud Logging.

    Mencatat port serial 1.

  4. Pemuatan halaman Cloud Logging dengan filter penelusuran default. Salin nilai untuk resource.labels.instance_id. Anda akan menggunakannya nanti.

  5. Update filter penelusuran untuk mengambil log container.

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/cos_containers"
    resource.labels.instance_id="INSTANCE_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: project ID yang berisi instance
    • INSTANCE_ID: ID instance yang ingin Anda dapatkan lognya

gcloud

Gunakan perintah gcloud logging read untuk melihat log container.

  1. Tentukan ID untuk instance yang ingin Anda dapatkan lognya:

    gcloud compute instances describe VM_NAME \
       --zone ZONE \
       --format="value(id)"
    

    Ganti kode berikut:

    • VM_NAME: nama instance yang ingin Anda dapatkan lognya
    • ZONE: zona tempat instance berada
  2. Gunakan filter dan perintah berikut untuk melihat log container instance.

    gcloud logging read "resource.type=gce_instance AND \
        logName=projects/PROJECT_ID/logs/cos_containers AND \
        resource.labels.instance_id=INSTANCE_ID"
    

    Ganti kode berikut:

    • PROJECT_ID: project ID yang berisi instance.
    • INSTANCE_ID: ID instance.

    Misalnya, gunakan perintah berikut untuk melihat 10 log container terakhir di Cloud Logging untuk instance VM yang menjalankan COS 70, yang ada di my-project, dan yang memiliki ID instance 555123456789012345.

    gcloud logging read "resource.type=gce_instance AND \
        logName=projects/my-project/logs/cos_containers AND \
        resource.labels.instance_id=555123456789012345" \
        --limit 10
    

Menentukan image atau kelompok imager yang dioptimalkan untuk container

Instance VM dalam container atau template instance dibuat untuk menggunakan image yang dioptimalkan untuk container terbaru yang didukung secara default. Image ini termasuk dalam project cos-cloud.

Anda dapat mengganti default ini dengan image lain dari project cos-cloud. Untuk mengetahui informasi tentang kelompok image yang tersedia dan atributnya, baca Memilih versi Container-Optimized OS yang tepat.

Misalnya, setelah Anda mengetahui image mana yang ingin digunakan, di gcloud CLI, berikan flag --image untuk mengganti image default yang dioptimalkan container atau berikan flag --image-family untuk memilih image terbaru dari kelompok yang ditentukan pada waktu pembuatan VM.

Contoh berikut akan membuat instance VM dalam container yang menggunakan gambar terbaru dari kelompok gambar cos-dev:

gcloud compute instances create-with-container nginx-vm \
    --image-family cos-dev \
    --image-project cos-cloud \
    --container-image gcr.io/cloud-marketplace/google/nginx1:1.15

Mengonfigurasi aturan firewall

VM dalam container meluncurkan container yang jaringannya ditetapkan ke mode host. Container berbagi stack jaringan host, dan semua antarmuka dari host tersedia untuk container tersebut.

Secara default, aturan firewall Google Cloud akan memblokir semua koneksi masuk ke instance VM dan mengizinkan semua koneksi keluar dari instance VM.

Buat aturan firewall untuk mengizinkan koneksi masuk ke instance Anda dan juga ke container.

Mengonfigurasi opsi untuk menjalankan container

Anda dapat mengonfigurasi opsi berikut untuk menjalankan container:

  • Tentukan kebijakan mulai ulang container.
  • Ganti ENTRYPOINT container (perintah default untuk dijalankan saat container dimulai).
  • Teruskan argumen ke perintah ENTRYPOINT container.
  • Jalankan container dalam mode dilindungi.
  • instal direktori host atau tmpfs sebagai volume data di dalam container.
  • Tetapkan variabel lingkungan.
  • Alokasikan buffering untuk STDIN dalam runtime container.
  • Alokasikan pseudo-TTY.

Pelajari lebih lanjut cara mengonfigurasi opsi untuk menjalankan container Anda.

Langkah selanjutnya