Ada dua cara untuk membuat dan mengonfigurasi instance Compute Engine yang menjalankan Container-Optimized OS dari Google.
Untuk skenario sederhana ketika ingin menjalankan satu container pada VM atau di setiap VM dalam grup instance terkelola, Anda dapat menentukan image container dan parameter konfigurasi opsional saat menentukan template instance atau instance. Compute Engine membuat instance dengan versi terbaru OS yang Dioptimalkan untuk Container dan meluncurkan container yang ditentukan saat VM dimulai.
Untuk skenario lanjutan yang memungkinkan Anda men-deploy beberapa container dan mengonfigurasi opsi Docker menggunakan cloud-init
, Anda dapat membuat instance Compute Engine dengan pilihan image OS yang Dioptimalkan untuk Container pilihan, lalu melanjutkan mengonfigurasinya sesuai kebutuhan.
Membuat instance sederhana
Gunakan metode ini untuk men-deploy satu penampung pada VM menggunakan versi terbaru Container-Optimized OS. Anda dapat melakukan tugas ini menggunakan Google Cloud Console atau gcloud CLI.
Konsol
Buka halaman VM instances.
Klik Create instance.
Tentukan Nama instance Anda.
Di bagian Container, pilih kotak centang Deploy a container image to this VM instance.
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 imagehello-app
contoh 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
.
- Anda dapat menentukan image dari Container Registry atau Artifact Registry.
Contoh:
Secara opsional, klik Opsi container lanjutan. Untuk informasi selengkapnya, lihat Mengonfigurasi Opsi untuk Menjalankan Container.
Klik Create untuk membuat instance, mem-booting 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.
Misalnya, perintah berikut membuat instance VM baru bernama nginx-vm
, yang akan meluncurkan dan menjalankan image container 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 penampung tunggal pada setiap VM dalam grup instance terkelola, tentukan nama gambar 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 OS yang Dioptimalkan untuk Container tertentu, men-deploy beberapa container, dan menggunakan cloud-init
untuk konfigurasi lanjutan.
Melihat gambar yang tersedia
Image OS yang Dioptimalkan untuk Container tersedia di daftar gambar Konsol Google Cloud dengan awalan cos
.
Library ini dihosting di project cos-cloud
. Anda juga dapat melihat semua
rilis yang tersedia saat ini 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 untuk Container dan Docker yang terinstal, lakukan hal berikut:
Buka halaman pembuatan instance Compute Engine di Konsol Google Cloud.
Tentukan Nama instance Anda.
Di bagian Containers, hapus centang pada kotak Deploy a container image to this VM instance. Opsi ini berguna jika Anda ingin men-deploy container tunggal di VM.
Di bagian Boot disk, pilih image OS yang Dioptimalkan untuk Container.
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 OS yang Dioptimalkan untuk Container untuk instance, yang diperoleh dari daftar gambar 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 defaultnya adalah
n1-standard-1
.
Misalnya, perintah berikut akan 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
Jika Anda menginginkan dev
, beta
, atau stable
Container-Optimized OS terbaru yang tersedia, gunakan tanda --image-family
, seperti berikut:
gcloud compute instances create instance-name \ --image-family cos-beta \ --image-project cos-cloud \ --zone compute-zone \ --machine-type machine-type-name
Anda dapat menambahkan tanda --preemptible
untuk instance eksperimental satu kali.
API
Di API, buat permintaan normal untuk membuat instance, tetapi sertakan image sumber OS yang Dioptimalkan untuk Container. 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/family/cos-stable' } } ] }
Mengonfigurasi instance
Dalam beberapa kasus, Anda mungkin ingin melakukan konfigurasi tambahan saat instance
melakukan 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 Cloud config
Image OS yang Dioptimalkan untuk Container menyertakan cloud-init
sebagai cara untuk mengonfigurasi instance Anda saat melakukan booting. Alat cloud-init
mengharapkan konfigurasinya dalam nilai kunci user-data
dari
metadata instance. Alat cloud-init
memahami berbagai format.
Berikut adalah contoh file cloud-init
yang menunjukkan cara membuat akun pengguna dan
membuat layanan sistem milik pengguna ini yang mengontrol pengelolaan
penampung sibuk 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 OS yang Dioptimalkan untuk Container yang mereferensikan file cloud-init
ini, gunakan tanda command line --metadata-from-file
.
Dengan asumsi bahwa file cloud-init
disebut filename dalam direktori saat ini, perintah berikut akan membuat instance OS yang Dioptimalkan untuk Container dan memicu cloud-init
dengan menetapkan konten file ke kunci user-data
di Metadata Instance:
gcloud compute instances create instance-name \ --image-family cos-stable \ --image-project cos-cloud \ --metadata-from-file user-data=filename
Ganti kode berikut:
- instance-name: nama instance VM Anda.
- filename: nama file metadata.
Anda dapat menetapkan tanda metadata lainnya saat membuat instance OS yang Dioptimalkan untuk Container. Karena properti ini merupakan key-value pair sederhana, Anda dapat menggunakan flag --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
. Tanda yang ditentukan pada tingkat instance akan lebih diutamakan daripada tanda 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-family cos-stable \ --image-project cos-cloud \ --metadata-from-file user-data=filename \ --metadata=cos-metrics-enabled=true
Tanda metadata lainnya
Kunci Metadata | Deskripsi | Perilaku Default |
---|---|---|
cos-update-strategy |
Menentukan perilaku update. Satu-satunya nilai yang diterima adalah: update_disabled . |
Jika tidak disetel:
|
cos-metrics-enabled |
Mengaktifkan pengumpulan file dump error. Nilainya dapat berupa:true false (default). |
Dinonaktifkan secara default |
Menghubungkan ke sebuah instance
Anda dapat menerapkan SSH ke instance VM yang menjalankan image node cos
dengan cara yang sama seperti menjalankan 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. Baca bagian 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 Protokol Waktu Jaringan (NTP) jarak jauh melalui
protokol SNTP. Entri dalam file konfigurasi /etc/systemd/timesyncd.conf
berikut menampilkan nilai konfigurasi default yang diberi komentar untuk membantu
administrator membuat 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 serta interval polling minimum dan maksimum untuk pesan NTP masing-masing adalah 32 dan 2048 detik.
Mulai dari tahap pencapaian 85, Container-Optimized OS menggunakan layanan chronyd
untuk menyinkronkan
jam sistem lokal dengan server Protokol Waktu Jaringan (NTP) jarak jauh melalui
protokol NTP. Entri dalam file konfigurasi /etc/chrony/chrony.conf
berikut menampilkan nilai konfigurasi default sebagai komentar untuk membantu
administrator melakukan 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 disetel 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
bersifat stateless, sehingga zona waktu akan direset ke default
(UTC0) setiap mulai ulang.
Menonaktifkan pembaruan otomatis
Ada dua cara untuk menonaktifkan update otomatis. Metode yang direkomendasikan adalah menggunakan kunci metadata instance cos-update-strategy
:
gcloud compute instances create instance-name \ --image-family cos-stable \ --image-project cos-cloud \ --metadata cos-update-strategy=update_disabled
Mulai dari milestone 97, Anda juga dapat menonaktifkan update otomatis dalam 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