> 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/service-limit/workload-rules.md).

# Aturan Workload

Tiga jenis objek diperiksa melalui admission dan ditagihkan: **Pod**, **PersistentVolumeClaim (PVC)**, serta **Service bertipe LoadBalancer**.

## Pod

### Wajib: batas sumber daya

Setiap container **harus** memiliki `resources.limits.cpu` dan `resources.limits.memory`. Jika tidak ditentukan, platform **mengisi otomatis** `cpu: 100m` dan `memory: 128Mi` sebelum Pod divalidasi. Untuk workload kecil, Anda biasanya tidak perlu mengaturnya sendiri. Namun, jika menetapkan batas secara eksplisit, `cpu` dan `memory` harus diisi bersama. Jika tidak, permintaan ditolak. Lihat [Troubleshooting](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/troubleshooting.md), [`POD6011`](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/troubleshooting.md#code-pod6011), [`POD6012`](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/troubleshooting.md#code-pod6012), dan [`POD6013`](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/troubleshooting.md#code-pod6013).

**Aturan praktis:** selalu tetapkan batas `cpu` dan `memory` secara eksplisit pada container yang membutuhkan lebih dari nilai default 100m/128Mi. Jangan hanya menetapkan salah satunya.

```yaml
resources:
  limits:
    cpu: "2"
    memory: "8Gi"
  requests:
    cpu: "2"
    memory: "8Gi"
```

### Permintaan GPU

* Minta GPU dengan cara Kubernetes standar (`resources.limits["nvidia.com/gpu"]`) dan gunakan node selector untuk menentukan model GPU.
* Jika meminta GPU **MIG-sliced** dengan node selector yang memuat `-MIG-`, misalnya `NVIDIA-H100-80GB-HBM3-MIG-1g.10gb`, platform otomatis mengubah permintaan sumber daya ke nama sumber daya MIG yang benar. Platform juga menormalkan node selector ke tipe GPU dasar.
* Runtime class container NVIDIA yang benar otomatis ditambahkan untuk Pod GPU.
* Model GPU tanpa entri kuota, atau tipe GPU yang tidak dapat diidentifikasi dari selector, akan ditolak.

### Pemeriksaan kuota atau saldo

Setiap pembuatan Pod diperiksa terhadap kuota atau saldo berdasarkan [matriks tipe penagihan × tipe biaya](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/quota-and-limits.md). `kubectl apply` pada Pod yang melampaui sisa kuota atau proyeksi saldo 48 jam akan ditolak. Tidak ada objek yang dibuat.

### Hal yang tidak dapat diubah setelah pembuatan

Pembaruan dan penghapusan Pod **tidak dibatasi oleh kuota**. Hanya pembuatan yang diperiksa. Setelah Pod berjalan, objek `CloudekaResource` terkait (`kubectl get container`) secara otomatis melacak biaya langsung dan fasenya. Menghapus Pod menghentikan biaya.

## PersistentVolumeClaim (PVC)

### Field wajib

* `spec.storageClassName` harus diisi dan merupakan kelas yang memiliki kuota. Periksa `spec.storage` dengan `kubectl get rquota -o yaml`.
* `spec.resources.requests.storage` harus diisi.

```yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-data
spec:
  storageClassName: storage-nvme-c1
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 50Gi
```

### Pemeriksaan kuota atau saldo

PVC menggunakan matriks tipe penagihan dan tipe biaya yang sama dengan Pod. Pemeriksaan diterapkan pada ukuran storage yang diminta dan harga per kelasnya.

### Mengubah ukuran

* **Menambah ukuran** PVC dengan meningkatkan `resources.requests.storage` diizinkan. Namun, kuota atau saldo tidak diperiksa kembali saat ukuran diubah. Periksa penggunaan `rquota` setelah menambah ukuran secara signifikan.
* **Mengurangi ukuran** PVC selalu **ditolak** (`VOL3006`). Jika membutuhkan storage lebih sedikit, hapus lalu buat ulang PVC. Tindakan ini melepaskan dan menggunakan kembali kuota.

## Service (LoadBalancer / Floating IP)

Hanya Service `type: LoadBalancer` yang diperiksa dan ditagihkan. `ClusterIP` dan `NodePort` gratis serta tidak dibatasi.

```yaml
apiVersion: v1
kind: Service
metadata:
  name: my-app
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 8080
```

## Memeriksa Kuota dan Saldo Floating IP

Saat pembuatan, platform memeriksa **kuota atau saldo Floating IP** Anda, yaitu field `floatingIP` dalam `rquota`, sebelum mengizinkan Service.

## Menunggu Penetapan IP Eksternal

IP eksternal ditetapkan secara asinkron oleh IP pool load balancer platform. IP tidak langsung tersedia. Pantau dengan:

```bash
kubectl get svc my-app -n <your-namespace> -w
```

## Melihat Objek CloudekaFloatingIP Terkait

Setelah IP ditetapkan, objek [CloudekaFloatingIP](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/crds/cloudeka-floating-ip.md) (`cfip`) dengan nama yang sama akan muncul. Objek ini menampilkan IP eksternal, ClusterIP internal, port, dan biaya per jam:

```bash
kubectl get cfip my-app -n <your-namespace>
```

## Melepaskan IP

Menghapus Service, atau mengubahnya dari `LoadBalancer`, akan melepaskan IP dan menghentikan biaya. Objek [`CloudekaFloatingIP`](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/crds/cloudeka-floating-ip.md) juga dihapus.

{% hint style="info" %}
IP pool ([CloudekaIPPool](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/crds/cloudeka-ippool.md)) dikelola oleh platform. Anda menggunakannya, tetapi tidak membuat atau mengonfigurasi pool tersebut.
{% endhint %}

## Ringkasan — Permintaan yang Langsung Ditolak

{% hint style="info" %}
Untuk teks error yang tepat dan cara mengatasinya, lihat [Troubleshooting](/deka-gpu-documentations/panduan-untuk-enterprise/service-limit/troubleshooting.md).
{% endhint %}

<table><thead><tr><th width="257.666748046875">Tindakan</th><th>Ditolak saat</th></tr></thead><tbody><tr><td>Membuat Pod</td><td>Batas CPU <strong>atau</strong> memory tidak lengkap; kuota atau saldo tidak mencukupi; permintaan GPU tidak dapat diidentifikasi</td></tr><tr><td>Membuat PVC</td><td>Kelas storage tidak diisi; kelas storage tidak ada dalam kuota; ukuran storage tidak diisi; kuota atau saldo tidak mencukupi</td></tr><tr><td>Memperbarui PVC</td><td>Ukuran yang diminta <strong>lebih kecil</strong> dari ukuran saat ini</td></tr><tr><td>Membuat Service (LoadBalancer)</td><td>Kuota atau saldo Floating IP tidak mencukupi</td></tr></tbody></table>
