134 lines
7.6 KiB
Markdown
134 lines
7.6 KiB
Markdown
---
|
|
title: Pengelolaan Objek Kubernetes dengan Perintah Imperatif
|
|
content_type: concept
|
|
weight: 30
|
|
---
|
|
|
|
<!-- overview -->
|
|
Objek-objek Kubernetes bisa dibuat, diperbarui, dan dihapus secara langsung dengan menggunakan perintah-perintah imperatif yang ada pada *command-line* `kubectl`. Dokumen ini menjelaskan cara perintah-perintah tersebut diorganisir dan cara menggunakan perintah-perintah tersebut untuk mengelola objek *live*.
|
|
|
|
|
|
<!-- body -->
|
|
|
|
## Kelebihan dan kekurangan
|
|
|
|
Perintah `kubectl` mendukung tiga cara pengelolaan objek:
|
|
|
|
* Perintah imperatif
|
|
* Konfigurasi objek imperatif
|
|
* Konfigurasi objek deklaratif
|
|
|
|
Lihat [Pengelolaan Objek Kubernetes](/id/docs/concepts/overview/working-with-objects/object-management/) untuk mengenali lebih lanjut kelebihan dan kekurangan dari tiap pengelolaan objek.
|
|
|
|
## Cara membuat objek
|
|
|
|
Perangkat `kubectl` mendukung perintah-perintah berbentuk kata kerja untuk membuat beberapa tipe objek yang paling umum. Perintah-perintah tersebut diberi nama yang mudah dikenali oleh pengguna yang belum familiar dengan tipe-tipe objek Kubernetes.
|
|
|
|
- `run`: Membuat sebuah objek Deployment untuk menjalankan kontainer di satu atau lebih Pod.
|
|
- `expose`: Membuat sebuah objek Service untuk mengatur lalu lintas beban antar Pod.
|
|
- `autoscale`: Membuat sebuah objek Autoscaler untuk melakukan *scaling* horizontal secara otomatis terhadap sebuah objek *controller*, misalnya sebuah objek Deployment.
|
|
|
|
Perangkat `kubectl` juga mendukung perintah-perintah pembuatan objek yang berdasarkan pada tipe objek. Perintah-perintah ini mendukung lebih banyak tipe objek dan lebih eksplisit tentang intensi mereka. Tapi, perintah-perintah ini memerlukan pengguna untuk memahami tipe dari objek-objek yang hendak mereka buat.
|
|
|
|
- `create <objecttype> [<subtype>] <instancename>`
|
|
|
|
Beberapa tipe objek memiliki sub tipe yang bisa kamu spesifikasikan pada perintah `create`. Misalnya, objek Service memiliki beberapa sub tipe seperti ClusterIP, LoadBalancer, dan NodePort. Berikut adalah sebuah contoh cara membuat sebuah Service dengan sub tipe NodePort:
|
|
|
|
```shell
|
|
kubectl create service nodeport <myservicename>
|
|
```
|
|
|
|
Pada contoh di atas, perintah `create service nodeport` merupakan sub perintah dari `create service`.
|
|
|
|
Kamu bisa menggunakan parameter `-h` untuk mencari argumen-argumen dan paramenter-parameter yang didukung oleh sebuah sub perintah:
|
|
|
|
```shell
|
|
kubectl create service nodeport -h
|
|
```
|
|
|
|
## Cara memperbarui objek
|
|
|
|
Perintah `kubectl` mendukung perintah-perintah berbasis kata kerja untuk beberapa operasi pembaruan yang umum. Perintah-perintah ini diberi nama yang memudahkan pengguna yang belum familiar dengan objek-objek Kubernetes untuk melakukan pembaruan tanpa terlebih dulu mengetahui *field-field* spesifik yang harus diperbarui:
|
|
|
|
- `scale`: Melakukan *scaling* horizontal terhadap sebuah *controller* untuk menambah atau menghapus Pod dengan memperbarui jumlah replika dari *controller* tersebut.
|
|
- `annotate`: Menambah atau menghapus anotasi sebuah objek.
|
|
- `label`: Menambah atau menghapus label sebuah objek.
|
|
|
|
Perintah `kubectl` juga mendukung perintah-perintah pembaruan berdasarkan salah satu aspek dari sebuah objek. Untuk tiap tipe objek yang berbeda, memperbarui sebuah aspek tertentu bisa berarti memperbarui sekumpulan *field* yang berbeda pula:
|
|
|
|
- `set` `<field>`: Memperbarui salah satu aspek dari sebuah objek.
|
|
|
|
{{< note >}}
|
|
Pada Kubernetes versi 1.5, tidak semua perintah yang berdasarkan kata kerja berasosiasi dengan perintah yang berdasarkan aspek tertentu.
|
|
{{< /note >}}
|
|
|
|
Perangkat `kubectl` juga mendukung beberapa cara lain untuk memperbarui objek *live* secara langsung, meskipun cara-cara berikut membutuhkan pemahaman yang lebih tentang skema objek Kubernetes.
|
|
|
|
- `edit`: Secara langsung mengedit konfigurasi mentah dari sebuah objek *live* dengan membuka konfigurasinya di sebuah editor.
|
|
- `patch`: Secara langsung memodifikasi *field-field* spesifik dari sebuah objek *live* dengan menggunakan *patch string*. Untuk detil lebih lanjut mengenai `patch string`, lihat bagian tentang *patch* pada [Konvensi API](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#patch-operations).
|
|
|
|
## Cara menghapus objek
|
|
|
|
Kamu bisa menggunakan perintah `delete` pada sebuah objek dari sebuah klaster:
|
|
|
|
- `delete <type>/<name>`
|
|
|
|
{{< note >}}
|
|
Kamu bisa menggunakan `kubectl delete` baik untuk perintah imperatif maupun konfigurasi objek imperatif. Perbedaannya hanya pada argumen yang diberikan ke perintah tersebut. Untuk menggunakan `kubectl delete` sebagai perintah imperatif, argumen yang diberikan adalah objek yang hendak dihapus. Berikut adalah sebuah contoh perintah `kubectl delete` dengan sebuah objek Deployment bernama nginx sebagai argumen:
|
|
{{< /note >}}
|
|
|
|
```shell
|
|
kubectl delete deployment/nginx
|
|
```
|
|
|
|
## Cara melihat objek
|
|
|
|
{{< comment >}}
|
|
TODO(pwittrock): Uncomment this when implemented.
|
|
|
|
Kamu bisa menggunakan `kubectl view` untuk menampilkan *field-field* tertentu dari sebuah objek.
|
|
|
|
- `view`: Menampilkan nilai dari *field* tertentu pada sebuah objek.
|
|
|
|
{{< /comment >}}
|
|
|
|
Ada beberapa perintah untuk menampilkan informasi tentang sebuah objek:
|
|
|
|
- `get`: Menampilkan informasi dasar dari objek-objek yang sesuai dengan parameter dari perintah ini. Gunakan `get -h` untuk melihat daftar opsi yang bisa digunakan.
|
|
- `describe`: Menampilkan agregat informasi detil dari objek-objek yang sesuai dengan parameter dari perintah ini.
|
|
- `logs`: Menampilkan isi stdout dan stderr dari sebuah kontainer yang berjalan di sebuah Pod.
|
|
|
|
## Menggunakan perintah `set` untuk memodifikasi objek sebelum dibuat
|
|
|
|
Ada beberapa *field* objek yang tidak memiliki parameter yang bisa kamu gunakan pada perintah `create`. Pada kasus-kasus tersebut, kamu bisa menggunakan kombinasi dari perintah `set` dan `create` untuk menspesifikasikan nilai untuk *field-field* tersebut sebelum objek dibuat. Ini dilakukan dengan melakukan *piping* pada hasil dari perintah `create` ke perintah `set`, dan kemudian mengembalikan hasilnya ke perintah `create`. Simak contoh berikut:
|
|
|
|
```sh
|
|
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run | kubectl set selector --local -f - 'environment=qa' -o yaml | kubectl create -f -
|
|
```
|
|
|
|
1. Perintah `kubectl create service -o yaml --dry-run` membuat konfigurasi untuk sebuah Service, tapi kemudian menuliskan konfigurasi tadi ke stdout dalam format YAML alih-alih mengirimnya ke *API Server* Kubernetes.
|
|
1. Perintah `kubectl set selector --local -f - -o yaml` membaca konfigurasi dari stdin, dan menuliskan pembaruan konfigurasi ke stdout dalam format YAML.
|
|
1. Perintah `kubectl create -f -` membuat objek dengan menggunakan konfigurasi yang disediakan pada stdin.
|
|
|
|
## Menggunakan `--edit` untuk memodifikasi objek sebelum dibuat
|
|
|
|
Kamu bisa menggunakan perintah `kubectl create --edit` untuk membuat perubahan terhadap sebuah objek sebelum objek tersebut dibuat. Simak contoh berikut:
|
|
|
|
```sh
|
|
kubectl create service clusterip my-svc --clusterip="None" -o yaml --dry-run > /tmp/srv.yaml
|
|
kubectl create --edit -f /tmp/srv.yaml
|
|
```
|
|
|
|
1. Perintah `kubectl create service` membuat konfigurasi untuk objek Service dan menyimpannya di `/tmp/srv.yaml`.
|
|
1. Perintah `kubectl create --edit` membuka berkas konfigurasi untuk disunting sebelum objek dibuat.
|
|
|
|
|
|
|
|
## {{% heading "whatsnext" %}}
|
|
|
|
- [Pengelolaan Objek Kubernetes secara Imperatif dengan Menggunakan Konfigurasi Objek](/id/docs/tasks/manage-kubernetes-objects/imperative-config/)
|
|
- [Pengelolaan Objek Kubernetes secara Deklaratif dengan Menggunakan Konfigurasi Objek](/id//docs/tasks/manage-kubernetes-objects/declarative-config/)
|
|
- [Rujukan Perintah Kubectl](/docs/reference/generated/kubectl/kubectl-commands/)
|
|
- [Kubernetes API Reference](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)
|
|
|