> 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/guideline-for-enterprise/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
```
