Membuat dan mengonfigurasi instance

Ada dua cara untuk membuat dan mengonfigurasi instance Compute Engine yang menjalankan Container-Optimized OS dari Google.

Untuk skenario sederhana saat Anda ingin menjalankan satu container di VM atau di setiap VM dalam grup instance terkelola, Anda dapat menentukan image container dan parameter konfigurasi opsional saat menentukan instance atau template instance. Compute Engine membuat instance dengan versi terbaru Container-Optimized OS dan meluncurkan penampung yang ditentukan saat VM dimulai.

Untuk skenario lanjutan tempat Anda dapat men-deploy beberapa container dan mengonfigurasi opsi Docker menggunakan cloud-init, Anda dapat membuat instance Compute Engine dengan image Container-Optimized OS pilihan Anda, lalu melanjutkan untuk mengonfigurasinya sesuai kebutuhan.

Membuat instance sederhana

Gunakan metode ini untuk men-deploy satu container di VM menggunakan versi terbaru Container-Optimized OS. Anda dapat melakukan tugas ini menggunakan Konsol Google Cloud atau gcloud CLI.

Konsol

  1. Buka halaman VM instances.

    Buka halaman VM instances

  2. Klik Create instance.

  3. Tentukan Nama untuk instance Anda.

  4. Di bagian Container, pilih kotak centang Deploy a container image to this VM instance.

  5. Tentukan Image container yang akan digunakan.

    • Anda dapat menentukan image dari Container Registry atau Artifact Registry. Contoh:
      • gcr.io/cloud-marketplace/google/nginx1:1.15 memilih image container NGINX 1.15 dari Google Cloud Marketplace.
      • us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0 memilih sampel image hello-app dari Artifact Registry.
    • Jika Anda menggunakan image container dari Docker Hub, selalu tentukan nama lengkap image Docker. Misalnya, tentukan nama image berikut untuk men-deploy image container Apache: docker.io/httpd:2.4.
  6. Secara opsional, klik Opsi container lanjutan. Untuk informasi selengkapnya, lihat Mengonfigurasi Opsi untuk Menjalankan Penampung.

  7. Klik Create untuk membuat instance, melakukan booting pada instance, dan meluncurkan penampung.

gcloud

Untuk membuat instance VM sederhana, jalankan perintah berikut:

gcloud compute instances create-with-container instance-name \
    --container-image image-name

Ganti kode berikut:

  • instance-name: nama untuk instance baru.
  • image-name: nama image container tersebut.

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

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

Demikian pula, Anda dapat membuat instance VM baru bernama hello-app yang akan meluncurkan dan menjalankan container contoh di Artifact Registry:

gcloud compute instances create-with-container hello-app \
--container-image us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0

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

docker.io/httpd:2.4

Untuk menjalankan satu container di setiap VM dalam grup instance terkelola, tentukan nama image container saat menentukan template instance. Lihat Membuat template instance dengan image container untuk mengetahui informasi selengkapnya.

Membuat instance untuk skenario lanjutan

Gunakan metode ini untuk memilih image Container-Optimized OS tertentu, men-deploy beberapa container, dan menggunakan cloud-init untuk konfigurasi lanjutan.

Melihat gambar yang tersedia

Image Container-Optimized OS tersedia di daftar image konsol Google Cloud dengan awalan cos. Fungsi ini dihosting dalam project cos-cloud. Anda juga dapat melihat semua rilis yang saat ini tersedia di command line dengan menjalankan perintah berikut:

gcloud compute images list --project cos-cloud --no-standard-images

Outputnya mirip dengan hal berikut ini:

NAME                       PROJECT    FAMILY      DEPRECATED  STATUS
cos-69-10895-385-0         cos-cloud  cos-69-lts              READY
cos-73-11647-534-0         cos-cloud  cos-73-lts              READY
cos-77-12371-251-0         cos-cloud  cos-77-lts              READY
cos-81-12871-103-0         cos-cloud  cos-81-lts              READY
cos-beta-81-12871-44-0     cos-cloud  cos-beta                READY
cos-dev-84-13078-0-0       cos-cloud  cos-dev                 READY
cos-stable-81-12871-103-0  cos-cloud  cos-stable              READY

Membuat instance

Anda dapat membuat instance menggunakan konsol Google Cloud, gcloud CLI, atau API.

Konsol

Untuk menjalankan instance Compute Engine dengan OS yang Dioptimalkan Container dan Docker terinstal, lakukan hal berikut:

  1. Buka halaman pembuatan instance Compute Engine di konsol Google Cloud.

    Membuat instance Compute Engine baru

  2. Tentukan Nama untuk instance Anda.

  3. Di bagian Containers, hapus centang pada kotak Deploy a container image to this VM instance. Opsi ini berguna jika Anda ingin men-deploy satu penampung di VM.

  4. Di bagian Boot disk, pilih image Container-Optimized OS.

  5. Klik Create untuk membuat dan mem-booting instance.

gcloud

Tinjau image yang tersedia saat ini, lalu gunakan perintah berikut untuk membuat instance image node cos:

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --zone compute-zone \
    --machine-type machine-type-name

Ganti kode berikut:

  • instance-name: nama instance VM Anda.
  • image-name: nama image Container-Optimized OS untuk instance, yang diperoleh dari daftar image yang tersedia. Dari contoh sebelumnya, kita dapat menggunakan cos-beta-81-12871-44-0.
  • compute-zone: zona komputasi untuk instance Anda.
  • machine-type-name: jenis mesin yang akan digunakan untuk instance baru ini. Jenis default-nya adalah n1-standard-1.

Misalnya, perintah berikut membuat instance bernama cos-test menggunakan image cos-beta-67-10575-13-0:

gcloud compute instances create cos-test \
    --image cos-beta-67-10575-13-0 \
    --image-project cos-cloud \
    --zone us-east1-d \
    --machine-type n1-standard-1

Anda dapat menambahkan flag --preemptible untuk instance eksperimental satu kali.

API

Di API, buat permintaan normal untuk membuat instance, tetapi sertakan image sumber Container-Optimized OS. Contoh:

POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/compute-zone/instances

{
  'machineType': 'zones/compute-zone/machineTypes/machine-type-name',
  'name': 'instance-name',
  'networkInterfaces': [
    {
      'accessConfigs': [
        {
          'type': 'ONE_TO_ONE_NAT',
          'name': 'External NAT'
        }
      ],
      'network': 'global/networks/default'
    }
  ],
  'disks': [
    {
      'type': 'PERSISTENT',
      'boot': true,
      'autoDelete': true,
      'initializeParams': {
        'sourceImage': 'projects/cos-cloud/global/images/image-name'
      }
    }
  ]
}

Mengonfigurasi instance

Dalam beberapa kasus, Anda mungkin ingin melakukan konfigurasi tambahan saat instance di-booting. Anda dapat menggunakan alat cloud-init dengan Container-Optimized OS untuk menerapkan informasi konfigurasi yang Anda berikan dalam format cloud-config.

Menggunakan cloud-init dengan format konfigurasi Cloud

Image Container-Optimized OS menyertakan cloud-init sebagai cara untuk mengonfigurasi instance saat di-booting. Alat cloud-init mengharapkan konfigurasinya dalam nilai kunci user-data dari metadata instance. Alat cloud-init memahami beberapa format.

Berikut adalah contoh file cloud-init yang menunjukkan cara membuat akun pengguna dan membuat layanan systemd yang dimiliki oleh pengguna ini yang mengontrol pengelolaan penampung busybox Docker:

#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container

    [Service]
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice busybox:latest /bin/sleep 3600
    ExecStop=/usr/bin/docker stop mycloudservice
    ExecStopPost=/usr/bin/docker rm mycloudservice

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service

# Optional once-per-boot setup. For example: mounting a PD.
bootcmd:
- fsck.ext4 -tvy /dev/[DEVICE_ID]
- mkdir -p /mnt/disks/[MNT_DIR]
- mount -t ext4 -O ... /dev/[DEVICE_ID] /mnt/disks/[MNT_DIR]

Untuk membuat instance VM Container-Optimized OS yang mereferensikan file cloud-init ini, gunakan flag command line --metadata-from-file. Dengan asumsi file cloud-init disebut filename di direktori saat ini, perintah berikut akan membuat instance Container-Optimized OS dan memicu cloud-init dengan menetapkan konten file ke kunci user-data di Metadata Instance:

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --metadata-from-file user-data=filename

Ganti kode berikut:

  • instance-name: nama instance VM Anda.
  • image-name: nama image Container-Optimized OS untuk instance. Contoh, --image=cos-113-18244-85-29.
  • filename: nama file metadata.

Anda dapat menetapkan flag metadata lainnya saat membuat instance Container-Optimized OS. Karena properti ini adalah pasangan nilai kunci sederhana, Anda dapat menggunakan tanda --metadata dalam perintah gcloud compute instances create untuk membuat properti. Selain itu, mulai dari milestone 97, Anda dapat menetapkan flag metadata dalam metadata project menggunakan flag --metadata dalam perintah gcloud compute project-info add-metadata. Flag yang ditentukan di tingkat instance akan lebih diutamakan daripada flag yang ditentukan di tingkat project.

Contoh sebelumnya dapat diperluas untuk mengumpulkan statistik penggunaan dan pengumpulan dump error dengan perintah berikut:

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --metadata-from-file user-data=filename \
    --metadata=cos-metrics-enabled=true

Flag metadata lainnya

Kunci Metadata Deskripsi Perilaku Default
cos-update-strategy Menentukan perilaku update otomatis. Nilai dapat berupa update_enabled, update_disabled, atau tidak ditetapkan.
Jika tidak ditetapkan, perilaku update otomatis default untuk tonggak pencapaian akan digunakan.
Jika diaktifkan, perilakunya bergantung pada saluran rilis:
  • cos-dev dan cos-beta: Update dari versi OS terbaru dalam kelompok image yang sesuai
  • LTS milestone dan cos-stable: Update dari versi OS terbaru dari milestone yang sama
  • Versi < 117: Diaktifkan secara default
  • Tonggak pencapaian >= 117: Dinonaktifkan secara default
cos-metrics-enabled Mengaktifkan pengumpulan dump error. Nilainya dapat berupa:
true
false (default).
Dinonaktifkan secara default

Menghubungkan ke instance

Anda dapat melakukan SSH ke instance VM yang menjalankan image node cos dengan cara yang sama seperti Anda melakukan SSH ke instance Compute Engine lainnya.

Contoh:

gcloud compute ssh instance-name \
    --project project-id \
    --zone compute-zone

Menjalankan skrip startup

Anda dapat menentukan skrip startup melalui server metadata, menggunakan kunci metadata startup-script. Anda dapat menggunakan Google Cloud CLI, API, atau konsol Google Cloud untuk menyediakan skrip startup. Lihat Menjalankan Skrip Startup untuk mengetahui detailnya.

Sinkronisasi waktu

Sebelum milestone 85, Container-Optimized OS menggunakan layanan systemd-timesyncd systemd untuk menyinkronkan jam sistem lokal dengan server Network Time Protocol (NTP) jarak jauh melalui protokol SNTP. Entri berikut dalam file konfigurasi /etc/systemd/timesyncd.conf menampilkan nilai konfigurasi default yang dikomentari untuk membantu administrator melakukan perubahan yang diinginkan:

cat /etc/systemd/timesyncd.conf
# comments omitted for brevity
[Time]
#NTP=
#FallbackNTP=metadata.google.internal
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

Jadi, jarak root maksimum yang dapat diterima adalah 5 detik dan interval polling minimum dan maksimum untuk pesan NTP masing-masing adalah 32 dan 2048 detik.

Mulai dari tonggak pencapaian 85, Container-Optimized OS menggunakan layanan chronyd untuk menyinkronkan jam sistem lokal dengan server Network Time Protocol (NTP) jarak jauh melalui protokol NTP. Entri berikut dalam file konfigurasi /etc/chrony/chrony.conf menampilkan nilai konfigurasi default yang dikomentari untuk membantu administrator membuat perubahan yang diinginkan:

cat /etc/chrony/chrony.conf
# Use custom NTP servers
server metadata.google.internal prefer iburst

# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift

# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3

# Enable kernel synchronization of the real-time clock (RTC).
rtcsync

Server NTP ditetapkan dari respons DHCP eth0, yang biasanya merupakan server metadata Compute Engine:

networkctl status eth0 | grep NTP
             NTP: 169.254.169.254

Mengubah zona waktu

Zona waktu default Container-Optimized OS dari Google adalah UTC0. Buat link simbolis ke zona waktu yang Anda inginkan seperti pada contoh berikut:

sudo rm /etc/localtime
sudo ln -s /usr/share/zoneinfo/US/Pacific /etc/localtime

Perhatikan bahwa /etc stateless, sehingga zona waktu akan direset ke default (UTC0) setiap kali dimulai ulang.

Mengaktifkan atau menonaktifkan update otomatis

Ada dua cara untuk mengaktifkan atau menonaktifkan update otomatis. Metode yang lebih disukai adalah menetapkan kunci metadata instance cos-update-strategy ke update_enabled atau update_disabled. Contoh:

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --metadata cos-update-strategy=update_disabled

Mulai dari milestone 97, Anda juga dapat menonaktifkan atau mengaktifkan update otomatis di metadata project:

gcloud compute project-info add-metadata \
    --metadata cos-update-strategy=update_disabled

Anda juga dapat menonaktifkan update otomatis pada instance yang sedang berjalan dengan systemctl:

sudo systemctl stop update-engine
sudo systemctl mask update-engine