Tutorial ini menunjukkan cara mengelola kompleksitas pembuatan versi dalam membangun image yang menargetkan beberapa versi Windows Server. Container Windows Server memiliki persyaratan kompatibilitas versi yang mencegah container berjalan di lebih dari satu versi host Windows Server. Namun, Docker di Windows Server mendukung image container multi-arch (atau multi-platform) yang dapat berjalan di beberapa versi Windows Server.
Dengan image multi-arch, Anda dapat mengupgrade node pool Windows Server
Google Kubernetes Engine (GKE) ke versi Windows Server
pilihan Anda tanpa perlu membangun ulang image dan mengubah spesifikasi Pod. Misalnya:
- GKE versi 1.15 mendukung Windows Server 1809
- GKE versi 1.16 mendukung Windows Server 1909
Untuk mengupgrade GKE ke versi yang lebih baru secara otomatis, Anda harus membangun image multi-arch untuk workload Windows Anda. Untuk membangun image multi-arch, Anda harus membangun image untuk setiap versi Windows Server, kemudian membuat manifes yang merujuk image tersebut untuk setiap versi Windows Server. Anda dapat membangun image secara manual jika ingin kontrol penuh atas proses pembuatan dan pembangunan gambar. Atau, Anda dapat menggunakan Cloud Build untuk membangun image multi-arch Windows Server secara otomatis.
Tujuan
Dalam tutorial ini, Anda akan mempelajari cara membuat image multi-arch Windows Server secara manual atau dengan Cloud Build.Membuat image secara manual:
- Buat 2 image Docker dengan versi atau jenis Server Windows yang berbeda, misalnya Long-Term Servicing Channel (LTSC) dan Semi-Annual Channel (SAC).
- Buat VM Windows Server.
- Buat manifes dan kirim ke registry.
Membangun image menggunakan Cloud Build:
- Siapkan lingkungan Anda dengan membuat project, mengaktifkan API, dan memberikan izin.
- Buat aplikasi, Dockerfile, dan file build.
- Jalankan perintah untuk membangun image.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.
Sebelum memulai
Sebelum memulai, pastikan Anda telah melakukan tugas berikut:- Menginstal Google Cloud CLI untuk menjalankan perintah
gcloud
. - Menginstal Docker untuk membangun container.
- Menginstal Go untuk membuat biner Windows Server.
- Tutorial ini menggunakan Artifact Registry sebagai repositori. Pastikan Anda telah membuat repositori Docker.
Membangun gambar multi-arch secara manual
Membangun image multi-arch secara manual memberi Anda fleksibilitas untuk membangun image yang menyertakan versi Windows Server yang Anda butuhkan. Untuk membangun image multi-arch secara manual:
- Buat image single-arch Docker LTSC 2019. Lihat detail
tentang membuat image Docker di
Men-deploy aplikasi Windows Server.
Misalnya,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2019
. - Buat image single-arch Docker LTSC 2022. Misalnya,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-2022
- Buat image single-arch Docker SAC 20H2. Misalnya,
us-docker.pkg.dev/my-project/docker-repo/foo:1.0-20h2
. - Buat VM Windows Server, misalnya versi 20H2. Lihat Panduan memulai menggunakan VM Windows Server.
- Menggunakan RDP untuk terhubung ke VM.
- Buka jendela PowerShell untuk menjalankan perintah di langkah berikutnya.
Mengaktifkan fitur eksperimental
docker manifest
. Manifes Docker adalah daftar image yang akan dikirim ke registry:PS C:\> $env:DOCKER_CLI_EXPERIMENTAL = 'enabled'
Buat manifes multi-arch:
docker manifest create ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2019 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-2022 ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0-20h2
Kirim manifes image multi-arch yang baru dibuat ke repositori Artifact Registry:
docker manifest push ` REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0
Untuk memastikan image multi-arch Anda berhasil dibuat dan dikirim, buka
REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo
dan klik image tersebut. Anda akan melihat 3 image di dalam:foo:1.0-2019
foo:1.0-2022
foo:1.0-20h2
foo:1.0
Sekarang Anda dapat merujuk ke image multi-arch REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/foo:1.0
di
spesifikasi Pod. Langkah ini memungkinkan Anda untuk menggunakan upgrade otomatis untuk node pool
GKE Windows dengan aman.
Membangun image multi-arch menggunakan gke-windows-builder Cloud Build
Untuk memudahkan langkah-langkah membangun secara manual, Anda dapat menggunakan gke-windows-builder berdasarkan OSS gke-windows-builder. Anda dapat menggunakan gke-windows-builder dengan Cloud Build untuk membangun image multi-arch Windows Server secara otomatis. GKE mengupdate builder untuk menyertakan versi SAC dan LTSC Windows baru yang didukung saat dirilis. Manfaat lain dari penggunaan builder adalah Anda tidak perlu membuat VM Windows sendiri dengan Powershell untuk membangun image. VM Windows diganti dengan container Docker yang menjalankan perintah untuk Anda di dalam Cloud Build.
Untuk membantu Anda memahami cara kerja builder, ikuti contoh ini untuk membangun image multi-arch "hello world". Langkah-langkah ini dapat dilakukan di server Linux atau Windows.
Mempersiapkan lingkungan
Untuk mempersiapkan lingkungan Anda, lakukan langkah-langkah berikut:
- Buat direktori ruang kerja di komputer kerja Anda, misalnya:
~/gke-windows-builder/hello-world
. - Buat atau pilih project untuk tutorial ini.
- Pastikan penagihan diaktifkan untuk project Anda.
Aktifkan Compute Engine, Cloud Build, dan Artifact Registry API untuk project Anda. gke-windows-builder dipanggil menggunakan Cloud Build, dan image container multi-arch yang dihasilkan dikirim ke Artifact Registry. Compute Engine diperlukan builder untuk membuat dan mengelola VM Windows Server.
gcloud services enable compute.googleapis.com cloudbuild.googleapis.com \ artifactregistry.googleapis.com cloudbuild.googleapis.com
Berikan peran Identity and Access Management (IAM) berikut ke akun layanan Cloud Build Anda menggunakan Google Cloud CLI:
Tetapkan variabel:
export PROJECT=$(gcloud info --format='value(config.project)') export MEMBER=$(gcloud projects describe $PROJECT --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com
Tetapkan peran. Peran ini diperlukan builder untuk membuat VM Windows Server, menyalin ruang kerja ke bucket Cloud Storage, mengonfigurasi jaringan guna membangun image Docker, dan mengirim image yang dihasilkan ke Artifact Registry:
gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.instanceAdmin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/iam.serviceAccountUser' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/compute.networkViewer' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/storage.admin' gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:$MEMBER --role='roles/artifactregistry.writer'
Tambahkan aturan firewall bernama
allow-winrm-ingress
agar WinRM dapat terhubung ke VM Windows Server untuk menjalankan build Docker:gcloud compute firewall-rules create allow-winrm-ingress --allow=tcp:5986 --direction=INGRESS
Buat repositori Docker di Artifact Registry untuk project Anda. Jika Anda belum pernah menggunakan repositori Docker di Artifact Registry, selesaikan Panduan Memulai Docker terlebih dahulu. Jalankan perintah ini untuk membuat repositori Anda:
gcloud artifacts repositories create REPOSITORY \ --repository-format=docker --location=REGISTRY_REGION \ --description="Docker repository"
Ganti kode berikut:
REPOSITORY
: nama sepertiwindows-multi-arch-images
.REGISTRY_REGION
: lokasi Artifact Registry yang valid.
Membuat biner hello.exe di ruang kerja Anda
Untuk tutorial ini, buat aplikasi "hello world" sederhana, yang ditulis dalam Go. Kode untuk aplikasi contoh ada di GitHub.
Buat clone repositori yang berisi kode contoh untuk tutorial ini ke komputer lokal Anda dengan perintah berikut:
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples/windows/windows-multi-arch
File
hello.go
akan mencetak kata "Hello World":Buat biner
hello.exe
:GOOS=windows go build hello.go
Anda akan melihat biner hello.exe
di ruang kerja Anda.
Membuat Dockerfile dan membangun file di ruang kerja Anda
Di bagian ini, Anda menggunakan Dockerfile
untuk membangun semua image Server
Windows single-arch, lalu menggunakan file build untuk memicu Cloud Build. Build
ini menggabungkan image single-arch menjadi image multi-arch.
Dockerfile
adalah dokumen teks yang berisi petunjuk untuk Docker dalam membangun image. gke-windows-builder menggantiWINDOWS_VERSION
dengan versi Windows Server tertentu yang sesuai dengan image yang dibangun. Misalnya, builder akan menjalankandocker build -t multi-arch-helloworld:latest_20h2 --build-arg WINDOWS_VERSION=20H2 .
di Windows Server 20H2.Dalam direktori yang sama yang berisi
Dockerfile
, filecloudbuild.yaml
adalah file konfigurasi build Anda. Ganti <REPOSITORY> dan <REGISTRY_REGION> dengan nama dan region untuk repositori Artifact Registry yang Anda buat di langkah sebelumnya. Pada waktu build, Cloud Build mengganti$PROJECT_ID
dengan ID project Anda secara otomatis.
Membangun image
Sekarang Anda dapat membangun image dan melihat log untuk memverifikasi build yang berhasil.
Untuk membangun image, jalankan perintah berikut:
gcloud builds submit --config=cloudbuild.yaml .
Anda akan melihat log seperti contoh ini. Baris terakhir dalam log menunjukkan bahwa build berhasil:
Creating temporary tarball archive of 2 file(s) totalling 492 bytes before compression. Uploading tarball of [.] to [gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz] Created [https://cloudbuild.googleapis.com/v1/projects/PROJECT_ID/builds/ec333452-1301-47e8-90e2-716aeb2f5650]. Logs are available at [https://console.cloud.google.com/cloud-build/builds/ec333452-1301-47e8-90e2-716aeb2f5650?project=840737568665]. ------------------------ REMOTE BUILD OUTPUT--------------------------------------- ... ... Created manifest list REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest sha256:3ecbbc9f5144f358f81f7c7f1a7e28f069c98423d59c40eaff72bf184af0be02 2020/09/14 11:34:25 Instance: 35.184.178.49 shut down successfully PUSH DONE ----------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS ec333452-1301-47e8-90e2-716aeb2f5650 2020-09-14T11:21:43+00:00 12M43S gs://PROJECT_ID_cloudbuild/source/1600082502.509759-b949721a922d462c94a75da9be9f1181.tgz - SUCCESS
Anda baru saja membangun image menggunakan file konfigurasi build dan mengirim
image ke Artifact Registry di REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/multiarch-helloworld:latest
.
Men-deploy image
Untuk men-deploy image multi-arch Windows ke cluster, lihat Men-deploy aplikasi Windows Server untuk mempelajari cara men-deploy image.
Penggunaan gke-windows-builder tingkat lanjut
Anda dapat menyesuaikan perilaku gke-windows-builder dengan menambahkan flag ke
bagian args
dari file konfigurasi build cloudbuild.yaml
. Beberapa flag untuk perilaku
umum dijelaskan di bagian ini, tetapi ini bukan daftar lengkap. Untuk
melihat daftar lengkap flag yang didukung gke-windows-builder, jalankan perintah
berikut di server Linux atau di Cloud
Shell:
docker run -it us-docker.pkg.dev/gke-windows-tools/docker-repo/gke-windows-builder:latest --help
Untuk mempercepat build, Anda dapat menggunakan jenis mesin yang lebih besar untuk instance Windows:
- --machineType
- 'n1-standard-8'
Alih-alih membangun image untuk semua versi Windows yang didukung
GKE, Anda dapat memilih versi Windows Server tertentu untuk dibangun menggunakan
flag --versions
:
- --versions
- '20H2,ltsc2019'
Jika ruang kerja Anda memiliki banyak file, build image akan lebih andal jika Anda
mengonfigurasi builder untuk menyalin ruang kerja melalui Cloud Storage, bukan WinRM.
Buat bucket di project Anda, seperti
gs://{your project}_builder
, lalu tetapkan flag --workspace-bucket
:
- --workspace-bucket
- '{your project}_builder'
Untuk menjalankan instance builder Windows dalam project layanan VPC Bersama, gunakan flag yang mengontrol penyiapan jaringan instance ini:
- --subnetwork-project
- 'shared-vpc-host-project'
- --subnetwork
- 'host-project-subnet-shared-with-service-project'
Pembersihan
Setelah menyelesaikan tutorial, Anda dapat membersihkan resource yang dibuat agar resource tersebut berhenti menggunakan kuota dan dikenai biaya. Bagian berikut menjelaskan cara menghapus atau menonaktifkan resource ini.
Menghapus image
Untuk menghapus image multiarch-helloworld
di Artifact Registry, lihat Menghapus image.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Langkah selanjutnya
Pelajari tutorial Kubernetes Engine lainnya.
Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.