Pada artikel ini, saya akan menunjukkan bagaimaan cara memenuhi kebutuhan server Windows Kita dengan KubeVirt. Saya juga akan menjelaskan beberapa kasus di mana Kita bisa memilih Kubevirt sebagai pilihan yang tepat.
Latar Belakang
Saya bekerja untuk perusahaan yang memiliki applikasi yang berjalan di Server Windows, dan biaya menggunakan windows di Public Cloud cukup tinggi. Untuk mengatasi tantangan ini, saya mengusulkan solusi untuk menjalankan server Windows pada BMAAS yang sudah kita sewa (sudah menjadi cluster kubernetes). Pendekatan ini tidak hanya memberikan latensi yang lebih baik karena server ada di Indonesia, tetapi juga signifikan mengurangi biaya.
Persyaratan
1. Virtualisasi Diaktifkan
Pastikan node kubernetes Kita sudah mengaktifkan mode virtualisasi.
2. Penyimpanan Backend Yang Persisten
Kita membutuhkan storageclass kubernetes dengan penyimpanan backend persisten seperti CEPH, Longhorn, vSAN, atau apa pun.
3. Pahami Apa yang Dilakukan Kubevirt
Jika Anda belum memahami apa yang dilakukan kubevirt, kubevirt pada dasarnya melakukan automasi terhadap operasional kvm dan qemu dengan YAML kubernetes. Lihat kubevirt.io
4. Menginstal KubeVirt dan Container Data Importer Engine
Ikuti panduan dari dokumen resmi, atau baca artikel saya sebelumnya tentang kubevirt.
5. Plugin Virt Kubectl
Kita memerlukan plugin ini untuk memudahkan hidup kita, instal dengan krew.sigs.k8s.io
$ kubectl krew install virt
Mari Buat Windows Kita
Dalam blog ini, saya akan menggunakan image base dari cloudbase.it, karena image tersebut sudah terdapat cloudinit atau beberapa orang mungkin mengatakan "Cloud Native".
1. Unduh Image Base
Unduh image base dari tempat di mana kita dapat mengakses cluster kita dengan kubectl
.
2. Forward Service CDI Upload Proxy ke Local
Container data Importer Engine mempunyai proxy yang dapat kita gunakan untuk mengunggah file image base kita mejadi PVC. Di sini saya melakukan forwarding port 6969 di localhost saya menuju service cdi-uploadproxy
kubectl port-forward svc/cdi-uploadproxy -n cdi 6969:443
3. Unggah Image Base Dengan Virt Plugin
kubectl virt image-upload \
--image-path=./windows_server_2012_kvm.qcow2 \
--pvc-name=iso-winserver-r12 \
--access-mode=ReadWriteOnce \
--pvc-size=20G \
--storage-class=kind-local \
--uploadproxy-url=https://localhost:6969 \
--insecure
4. Buat Spesifikasi Perangkat Windows Kita
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachine
metadata:
creationTimestamp: 2023-04-10T15:03:08Z
generation: 1
labels:
kubevirt.io/os: windows
name: windowsvm1
spec:
running: true
template:
metadata:
creationTimestamp: null
labels:
kubevirt.io/domain: windowsvm1
spec:
domain:
cpu:
cores: 4
devices:
disks:
- disk:
bus: virtio
name: disk0
- cdrom:
bus: sata
readonly: true
name: cloudinitdisk
machine:
type: q35
resources:
requests:
memory: 4096M
volumes:
- name: disk0
persistentVolumeClaim:
claimName: iso-winserver-r12
- cloudInitConfigDrive:
userData: |
#ps1
net user Administrator THizisMypzzzowrd
name: cloudinitdisk