Di halaman ini, Anda akan mempelajari cara men-deploy aplikasi Windows Server stateless di cluster Google Kubernetes Engine (GKE). Anda juga dapat mempelajari cara men-deploy aplikasi Windows stateful.
Sebelum memulai
Sebelum memulai, pastikan Anda telah menjalankan tugas berikut:
- Aktifkan Artifact Registry API dan Google Kubernetes Engine API. Aktifkan API
- Jika ingin menggunakan Google Cloud CLI untuk tugas ini,
instal lalu
lakukan inisialisasi
gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan
gcloud components update
.
Men-deploy aplikasi Windows Server ke cluster dengan node publik
Untuk men-deploy aplikasi Windows Server ke cluster GKE hanya dengan node publik, Anda harus melakukan tugas-tugas berikut:
- Membuat cluster dengan node publik.
- Membuat file manifes Deployment.
- Membuat dan mengekspos Deployment.
- Memverifikasi bahwa Pod berjalan.
Membuat cluster dengan node publik
Jika Anda sudah memiliki cluster GKE yang menggunakan node
pool Windows Server, lanjutkan ke langkah berikutnya. Jika tidak, buat cluster menggunakan node pool Windows Server
Untuk menyediakan node dengan alamat IP eksternal (node publik), gunakan
flag --no-enable-private-nodes
saat membuat cluster.
Membuat file manifes Deployment
Node Windows Server
diberi taint
menggunakan key-value pair berikut: node.kubernetes.io/os=windows:NoSchedule
.
Taint ini memastikan bahwa penjadwal GKE tidak mencoba menjalankan container Linux pada node Windows Server. Untuk menjadwalkan container Windows Server di node Windows Server, file manifes Anda harus menyertakan pemilih node ini:
nodeSelector:
kubernetes.io/os: windows
Webhook penerimaan yang berjalan di cluster akan memeriksa workload baru untuk mengetahui keberadaan pemilih node Windows ini dan jika ditemukan, akan menerapkan toleransi berikut ke workload yang memungkinkannya berjalan pada node Windows Server yang telah diberi taint:
tolerations:
- effect: NoSchedule
key: node.kubernetes.io/os
operator: Equal
value: windows
Dalam beberapa kasus, Anda mungkin perlu menyertakan toleransi ini secara eksplisit dalam file manifes. Misalnya, jika Anda men-deploy DaemonSet dengan image container multi-arch untuk dijalankan pada semua node Linux dan Windows Server dalam cluster, file manifes tidak akan menyertakan pemilih node Windows. Anda harus menyertakan toleransi untuk taint Windows secara eksplisit.
Contoh manifes file
Contoh file Deployment (iis.yaml
) berikut men-deploy image IIS Microsoft
ke satu Pod:
apiVersion: apps/v1
kind: Deployment
metadata:
name: iis
labels:
app: iis
spec:
replicas: 1
selector:
matchLabels:
app: iis
template:
metadata:
labels:
app: iis
spec:
nodeSelector:
kubernetes.io/os: windows
containers:
- name: iis-server
image: mcr.microsoft.com/windows/servercore/iis
ports:
- containerPort: 80
File ini ditujukan untuk cluster dengan semua workload menggunakan jenis dan versi image node Windows Server yang sama. Untuk mengetahui detail tentang cara menggunakan image node campuran, lihat bagian Menggunakan image node campuran.
Membuat dan mengekspos Deployment
Membuat dan mengekspos file Deployment yang sudah Anda buat di langkah sebelumnya sebagai Layanan Kubernetes dengan Deployment load balancer eksternal.
Untuk membuat resource Deployment, jalankan perintah berikut:
kubectl apply -f iis.yaml
Untuk mengekspos Deployment sebagai load balancer eksternal, jalankan perintah berikut:
kubectl expose deployment iis \ --type=LoadBalancer \ --name=iis
Memverifikasi bahwa Pod sedang berjalan
Pastikan Pod berfungsi dengan cara memvalidasinya.
Periksa status Pod menggunakan
kubectl
:kubectl get pods
Tunggu hingga output yang ditampilkan menunjukkan bahwa Pod memiliki
Running
sebagai statusnya:NAME READY STATUS RESTARTS AGE iis-5c997657fb-w95dl 1/1 Running 0 28s
Dapatkan status layanan, dan tunggu hingga kolom
EXTERNAL-IP
terisi:kubectl get service iis
Anda akan melihat output berikut:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE iis LoadBalancer 10.44.2.112 external-ip 80:32233/TCP 17s
Untuk melihat halaman web IIS, Anda kini dapat menggunakan browser
untuk membuka http://EXTERNAL_IP
.
Men-deploy aplikasi Windows Server ke cluster dengan node pribadi
Bagian ini menunjukkan cara men-deploy aplikasi penampung Windows Server ke cluster GKE yang diaktifkan hanya dengan node pribadi.
Image container Windows Server memiliki beberapa lapisan, dan lapisan dasar disediakan oleh Microsoft. Lapisan dasar disimpan sebagai lapisan asing, bukan disematkan dengan image seperti lapisan image Docker Linux. Saat image container Windows Server diambil untuk kali pertama, lapisan dasar biasanya harus didownload dari server Microsoft. Karena node pribadi tidak memiliki konektivitas ke internet, lapisan penampung dasar Windows Server tidak dapat langsung diambil dari server Microsoft.
Untuk menggunakan cluster dengan node pribadi yang diaktifkan, Anda dapat mengonfigurasi daemon Docker guna mengizinkan pengiriman lapisan yang tidak dapat didistribusikan ke registry pribadi. Untuk mempelajari lebih lanjut, lihat Mengizinkan pengiriman artefak yang tidak dapat didistribusikan di halaman GitHub Docker.
Untuk men-deploy aplikasi Windows Server ke cluster yang diaktifkan dengan node pribadi:
- Membuat cluster dengan node Windows Server dan mengaktifkan node pribadi.
- Membangun image Docker aplikasi Windows Server.
- Men-deploy aplikasi ke cluster yang diaktifkan dengan node pribadi.
- Memverifikasi bahwa Pod berjalan.
Membuat cluster dengan node pribadi
Ikuti petunjuk di Membuat cluster dengan node Windows Server. Untuk menyediakan node
hanya dengan alamat IP internal (node pribadi), gunakan
flag --enable-private-nodes
saat membuat cluster.
Membangun image Docker aplikasi Windows Server
Untuk membangun image Docker, mulai instance Compute Engine dengan versi Windows Server tempat Anda ingin menjalankan container aplikasi, seperti Windows Server 2019 atau Windows Server versi 20H2. Selain itu, pastikan Anda memiliki konektivitas internet.
Di instance Compute Engine, buka konfigurasi daemon Docker:
cat C:\ProgramData\docker\config\daemon.json
Konfigurasikan file
daemon.json
Docker agar lapisan asing dapat dikirim ke registry pribadi Anda dengan menambahkan baris berikut:{ "allow-nondistributable-artifacts": ["REGISTRY_REGION-docker.pkg.dev"] }
Dalam contoh ini,
REGISTRY_REGION-docker.pkg.dev
merujuk pada Artifact Registry, tempat image akan dihosting.Mulai ulang daemon Docker:
Restart-Service docker
Bangun dan beri tag image Docker untuk aplikasi Anda:
cd C:\my-app
docker build -t REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/my-app:v2 .
Perintah ini akan memerintahkan Docker untuk membangun image menggunakan Dockerfile dalam direktori saat ini dan memberinya tag dengan nama, seperti
us-central1-docker.pkg.dev/my-project/my-repository/my-app:v2
.Kirim image Docker aplikasi ke repositori Artifact Registry di project Anda. Kumpulan konfigurasi
allow-nondistributable-artifacts
menyebabkan lapisan dasar Windows dikirim ke registry pribadi Anda.docker push REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/my-app:v2
Membuat file manifes Deployment
Berikut adalah contoh file manifes Deployment yang bernama my-app.yaml
. Image
dalam contoh ini adalah image yang telah Anda kirim pada langkah sebelumnya (REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/my-app:v2
).
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
nodeSelector:
kubernetes.io/os: windows
containers:
- name: my-server
image: REGISTRY_REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/my-app:v2
Gunakan perintah
get-credentials
agarkubectl
dapat berfungsi dengan cluster yang telah Anda buat:gcloud container clusters get-credentials CLUSTER_NAME
Ganti
CLUSTER_NAME
dengan nama cluster yang Anda buat.Deploy aplikasi yang ditentukan dalam file
my-app.yaml
ke cluster Anda:kubectl apply -f my-app.yaml
Memverifikasi bahwa Pod berjalan
Mencantumkan semua Pod untuk memastikan aplikasi berjalan dengan benar:
kubectl get pods
Anda akan melihat Pod dengan status Running
seperti di output berikut:
NAME READY STATUS RESTARTS AGE
my-app-c95fc5596-c9zcb 1/1 Running 0 5m
Menggunakan image node campuran
Cluster Anda dapat berisi node pool dengan beberapa jenis Windows Server dan versi Windows Server. Cluster juga dapat menggabungkan workload Windows Server dan Linux. Bagian berikut memberikan detail tentang cara mengonfigurasi workload Anda untuk menggunakan jenis cluster ini.
Menggunakan workload dengan jenis image node Windows Server yang berbeda
Anda dapat menambahkan node pool menggunakan jenis image Windows Server yang berbeda ke cluster Anda. Pada cluster dengan jenis Windows Server campuran, Anda harus memastikan bahwa container Windows Server tidak dijadwalkan ke node Windows Server yang tidak kompatibel.
Jika Anda memiliki satu node pool LTSC Windows Server dan satu node
pool SAC Windows Server, tambahkan label node gke-os-distribution
ke kedua workload Anda.
Sertakan nodeSelector berikut dalam file manifes untuk workload LTSC Windows Server Anda:
nodeSelector:
kubernetes.io/os: windows
cloud.google.com/gke-os-distribution: windows_ltsc
Sertakan nodeSelector berikut dalam file manifes untuk workload SAC Windows Server Anda.
nodeSelector:
kubernetes.io/os: windows
cloud.google.com/gke-os-distribution: windows_sac
Menambahkan label ini memastikan bahwa image container LTSC Anda tidak dijadwalkan ke node SAC yang tidak kompatibel dan juga sebaliknya.
Menggunakan workload dengan versi OS Windows Server LTSC yang berbeda
Node Windows Server mendukung image OS LTSC2022 dan LTSC2019. Anda dapat
menentukan versi OS Windows yang akan digunakan (LTSC2022) dengan key-value pair
berikut di nodeSelector: cloud.google.com/gke-windows-os-version=2022
.
Label node ini memastikan bahwa penjadwal GKE akan memilih node Server Windows yang benar untuk menjalankan workload LTSC2022 atau LTSC2019. Kedua node Windows Server termasuk
dalam jenis image windows_ltsc_containerd
. Nilai label node dapat berupa
2022
atau 2019
. Jika label node tidak ditentukan, node LTSC2019 atau
LTSC2022 dapat digunakan untuk menjadwalkan container. Untuk menjadwalkan container Windows Server
hanya di node Windows Server LTSC2022, file manifes Anda harus
menyertakan pemilih node ini:
nodeSelector:
kubernetes.io/os: windows
cloud.google.com/gke-os-distribution: windows_ltsc
cloud.google.com/gke-windows-os-version: 2022
Menggunakan workload dengan versi Windows Server yang berbeda
Jika Anda harus menjalankan node pool Windows Server dengan beberapa versi LTSC atau
SAC yang berbeda, sebaiknya buat image container sebagai
image multi-arch
yang dapat berjalan di semua versi Windows Server yang
digunakan di cluster Anda.
Label node gke-os-distribution
tidak cukup untuk mencegah workload
Anda dari kemungkinan dijadwalkan ke node yang tidak kompatibel.
Menggunakan workload Linux dan Windows Server dalam cluster
Tambahkan pemilih node berikut ke workload Linux Anda untuk memastikan workload tersebut selalu dijadwalkan ke node Linux:
nodeSelector:
kubernetes.io/os: linux
Tindakan ini akan memberikan perlindungan tambahan agar workload Linux tidak dijadwalkan
ke node Windows Server jika
taint NoSchedule
tidak sengaja dihapus
dari node Windows Server.