> For the complete documentation index, see [llms.txt](https://docs.cloudeka.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cloudeka.ai/deka-gpu-documentations/panduan-untuk-enterprise/deka-gpu/deka-gpu-vms/how-to-manually-create-a-virtual-machine/configuration-file-vm.yaml.md).

# File Konfigurasi vm.yaml

File `vm.yaml` digunakan untuk mendefinisikan mesin virtual (VM) yang berjalan di Kubernetes, misalnya melalui KubeVirt. File ini berisi informasi spesifikasi VM, seperti CPU, memori, dan sistem operasi yang digunakan. VM diperlakukan sebagai objek Kubernetes yang dapat dikendalikan dan dikelola seperti pod. Jalankan sintaks sesuai sistem operasi komputer Anda melalui terminal atau *command prompt*.

1. *Windows*

Jika menggunakan sistem operasi *Windows*, Anda dapat menggunakan *Notepad++* atau editor teks lain di komputer.

2. *Linux*

Jika menggunakan sistem operasi *Linux*, gunakan perintah berikut.

{% tabs %}
{% tab title="vim" %}

```bash
vim svc.yaml
```

{% endtab %}

{% tab title="nano" %}

```bash
nano vm.yaml
```

{% endtab %}
{% endtabs %}

## Dengan GPU

Jika ingin menggunakan GPU pada VM, tambahkan kode sumber berikut ke file `vm.yaml`.

```yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: database-prod-vm
  namespace: default
spec:
  running: true
  template:
    spec:
      domain:
        resources:
          limits:                       
            memory: "64Gi"
            cpu: "8"
          requests:     
            memory: "64Gi"
            cpu: "8"
        devices:
          gpus:
          - deviceName: nvidia.com/NVIDIA_L40S-24Q
            name: gpu1
          disks:
          - name: containerdisk
            disk:
              bus: virtio
          - disk:
              bus: virtio
            name: cloudinitdisk
          interfaces:
          - masquerade: {}
            name: defaultnetwork
      networks:
      - name: defaultnetwork
        pod: {}     
      volumes:
      - name: containerdisk
        dataVolume:
          name: mta-dv        
      - name: cloudinitdisk
        cloudInitNoCloud:
          userData: |-
            #cloud-config
            #password: fedora
            #chpasswd: { expire: False }
            #cloud-config
            chpasswd:
              list: |
                ubuntu:QQ4j8fpusvqVgTu
                root:toor
              expire: False
```

## Tanpa GPU

Jika tidak ingin menggunakan GPU pada VM, tambahkan kode sumber berikut ke file `vm.yaml`.

```yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
  name: database-prod-vm
  namespace: default
spec:
  running: true
  template:
    spec:
      domain:
        resources:
          limits:                       
            memory: "64Gi"
            cpu: "8"
          requests:     
            memory: "64Gi"
            cpu: "8"
        devices:
          disks:
          - name: containerdisk
            disk:
              bus: virtio
          - disk:
              bus: virtio
            name: cloudinitdisk
          interfaces:
          - masquerade: {}
            name: defaultnetwork
      networks:
      - name: defaultnetwork
        pod: {}     
      volumes:
      - name: containerdisk
        dataVolume:
          name: mta-dv            
      - name: cloudinitdisk
        cloudInitNoCloud:
          userData: |-
            #cloud-config
            #password: fedora
            #chpasswd: { expire: False }
            #cloud-config
            chpasswd:
              list: |
                ubuntu:QQ4j8fpusvqVgTu
                root:toor
              expire: False
```

Berikut penjelasan kode sumber yang dapat disesuaikan dengan kebutuhan Anda.

### Metadata

Bagian `metadata` berisi `name` dan `namespace`. Keduanya menjadi identitas mesin virtual. Isi `name` dengan nama mesin yang digunakan, lalu sesuaikan `namespace` dengan namespace pada vcluster yang digunakan di *Service Portal* Cloudeka.

<figure><img src="https://putri.box.cloudeka.id/cloudeka-assets/docs.cloudeka.ai/1dekagpu/vmyaml_01.png" alt=""><figcaption><p>Metadata</p></figcaption></figure>

### Spesifikasi

Bagian `spec` pada file `vm.yaml` menentukan spesifikasi VM. Beberapa nilai perlu disesuaikan.

<figure><img src="https://putri.box.cloudeka.id/cloudeka-assets/docs.cloudeka.ai/1dekagpu/vmyaml_02.png" alt=""><figcaption><p><em>Specs</em></p></figcaption></figure>

Bagian `spec` berisi `domain` dan `devices`. Bagian `domain` mengatur sumber daya minimum dan maksimum yang dapat digunakan VM. Jika menggunakan GPU, tambahkan kode sumber berikut pada bagian `devices`.

```yaml
          gpus:
          - deviceName: nvidia.com/NVIDIA_L40S-24Q
            name: gpu1
```

Berikut perbandingan kode sumber dengan GPU dan tanpa GPU.

<figure><img src="https://putri.box.cloudeka.id/cloudeka-assets/docs.cloudeka.ai/1dekagpu/vmyaml_03.png" alt=""><figcaption></figcaption></figure>

Bagian `volumes` berisi konfigurasi `containerdisk` dan `cloudinitdisk`. Pada bagian `dataVolumes` di `containerdisk`, gunakan nilai `name` dari bagian `metadata` pada file `dv.yaml`. Pada bagian kata sandi di `cloudinitdisk`, sesuaikan kata sandi untuk mengakses VM. Untuk mengubah kata sandi, cukup ubah nilai setelah `root:`. `root` adalah nama pengguna untuk masuk ke VM.

<figure><img src="https://putri.box.cloudeka.id/cloudeka-assets/docs.cloudeka.ai/1dekagpu/vmyaml_04.png" alt=""><figcaption><p><em>Specs - Volumes</em></p></figcaption></figure>

Gunakan sintaks perintah berikut untuk menyimpan perubahan pada file `vm.yaml`.

```bash
kubectl apply -f vm.yaml
```
