|
| 1 | +--- |
| 2 | +title: API Kubernetes |
| 3 | +content_template: templates/concept |
| 4 | +weight: 30 |
| 5 | +card: |
| 6 | + name: concepts |
| 7 | + weight: 30 |
| 8 | +--- |
| 9 | + |
| 10 | +{{% capture overview %}} |
| 11 | + |
| 12 | +Secara keseluruhan standar yang digunakan untuk API dijelaskan di dalam [dokumentasi API standar](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md). |
| 13 | + |
| 14 | +<i>Endpoints API</i>, <i>resource types</i> serta contoh penggunaan dijelaskan di dalam [API Reference](/en/docs/reference). |
| 15 | + |
| 16 | +Akses <i>remote</i> penggunaan API dijelaskan di dalam [dokumentasi akses API](/en/docs/reference/access-authn-authz/controlling-access/). |
| 17 | + |
| 18 | +API Kubernetes juga berperan sebagai skema konfigurasi yang deklaratif di dalam sistem.. Sementara itu, [kubectl](/en/docs/reference/kubectl/overview/) merupakan <i>command-line</i> yang dapat digunakan untuk membuat, menmperbaharui, menghapus, dan mendapatkan obyek API. |
| 19 | + |
| 20 | +Kubernetes menyimpan bentuk terserialisasi dari obyek API yang dimilikinya di dalam [etcd](https://coreos.com/docs/distributed-configuration/getting-started-with-etcd/). |
| 21 | + |
| 22 | +Kubernetes sendiri dibagi menjadi beberapa komponen yang saling dapat saling interaksi melalui API. |
| 23 | + |
| 24 | +{{% /capture %}} |
| 25 | + |
| 26 | + |
| 27 | +{{% capture body %}} |
| 28 | + |
| 29 | +## Perubahan API |
| 30 | + |
| 31 | +Berdasarkan pengalaman kami, semua sistem yang berhasil memerlukan kebutuhan |
| 32 | +untuk terus tumbuh dan berkembang seiring dengan bertambahnya kebutuhan |
| 33 | +yang ada. Dengan demikian, kami berekspektasi bahwa API akan selalu berubah seiring dengan bertambahnya kebutuhan yang ada. |
| 34 | +Meski begitu, perubahan yang ada akan selalu kompatibel dengan implementasi sebelumnya, untuk jangka waktu tertentu. |
| 35 | +Secara umum, penambahan pada sebuah resource API atau field resource bisa sering terjadi.. Penghapusan <i>resource API</i> atau suatu <i>field</i>, di sisi lain, |
| 36 | +diharapkan untuk dapat memenuhi [kaidah deprecation API](/docs/reference/using-api/deprecation-policy/). |
| 37 | + |
| 38 | +Hal-hal apa saja yang perlu diperhatikan untuk menjamin kompatibilitas API |
| 39 | +secara rinci dibahas di dalam [dokumentasi perubahan API](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md). |
| 40 | + |
| 41 | +## Swagger and OpenAPI Definition |
| 42 | + |
| 43 | +Detail mengenai API didokumentasikan dengan menggunakan [OpenAPI](https://www.openapis.org/). |
| 44 | + |
| 45 | +Semenjak Kubernetes versi 1.10, Kubernetes menghadirkan spesifikasi <i>OpenAPI</i> melalui <i>endpoint</i> `/openapi/v2`. |
| 46 | +Format <i>request</i> dapat diterapkan dengan cara menambahkan <i>header HTTP</i>: |
| 47 | + |
| 48 | +Header | Opsi |
| 49 | +------ | --------------- |
| 50 | +Accept | `application/json`, `application/com.github.proto-openapi.spec.v2@v1.0+protobuf` (<i>content-type</i> standar yang digunakan adalah `application/json` untuk `*/*`) |
| 51 | +Accept-Encoding | `gzip` |
| 52 | + |
| 53 | +Sebelum versi 1.14, terdapat 4 buah <i>endpoint</i> yang menyediakan spesifikasi <i>OpenAPI</i> |
| 54 | +dalam format berbeda yang dapat digunakan (`/swagger.json`, `/swagger-2.0.0.json`, `/swagger-2.0.0.pb-v1`, `/swagger-2.0.0.pb-v1.gz`). |
| 55 | +<i>Endpoint</i> ini bersifat <i>deprecated</i> dan akan dihapus pada Kubernetes versi 1.14. |
| 56 | + |
| 57 | +**Cara mendapatkan spesifikasi <i>OpenAPI</i>**: |
| 58 | + |
| 59 | +Sebelum 1.10 | Mulai Kubernetes 1.10 |
| 60 | +----------- | ----------------------------- |
| 61 | +GET /swagger.json | GET /openapi/v2 **Accept**: application/json |
| 62 | +GET /swagger-2.0.0.pb-v1 | GET /openapi/v2 **Accept**: application/com.github.proto-openapi.spec.v2@v1.0+protobuf |
| 63 | +GET /swagger-2.0.0.pb-v1.gz | GET /openapi/v2 **Accept**: application/com.github.proto-openapi.spec.v2@v1.0+protobuf **Accept-Encoding**: gzip |
| 64 | + |
| 65 | +Kubernetes juga menyediakan alternatif mekanisme serialisasi lain, |
| 66 | +yaitu dengan menggunakan <i>Protobuf</i>, yang secara umum digunakan untuk mekanisme komunikasi |
| 67 | +intra-kluster, hal ini didokumentasikan di dalam [proposal desain](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/protobuf.md) |
| 68 | +serta berkas IDL sebagai bentuk spesifikasi skema berada dalam <i>package</i> Go |
| 69 | + |
| 70 | +Sebelum Kubernetes versi 1.14, <i>apiserver</i> Kubernetes juga mengekspos API |
| 71 | +yang dapat digunakan untuk mendapatkan spesifikasi [Swagger v1.2](http://swagger.io/) pada <i>endpoint</i> `/swaggerapi`. |
| 72 | +<i>Endpoint</i> ini akan sudah bersifat <i>deprecated</i> dan akan dihapus pada |
| 73 | +Kubernetes versi 1.14. |
| 74 | + |
| 75 | +## Pemberian Versi pada API |
| 76 | + |
| 77 | +Untuk memudahkan restrukturisasi field dan resource yang ada, |
| 78 | +Kubernetes menyediakan beberapa versi API yang berada pada <i>path</i> yang berbeda, |
| 79 | +misalnya `/api/v1` atau `/apis/extensions/v1beta1`. |
| 80 | + |
| 81 | +Kita dapat memilih versi yang akan digunakan pada tingkatan API |
| 82 | +dan bukan pada tingkatan <i>field</i> atau <i>resource</i> untuk memastikan |
| 83 | +API yang digunakan memperlihatkan gambaran yang jelas serta konsisten |
| 84 | +mengenai <i>resoure</i> dan sifat sistem yang ada. |
| 85 | + |
| 86 | +Perhatikan bahwa pemberian versi pada API dan pemberian versi pada API dan perangkat lunak memiliki keterkaitan secara tak langsung. |
| 87 | +Proposal [API and release |
| 88 | +versioning](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md) memberikan deskripsi keterkaitan antara |
| 89 | +pemberian versi pada API dan pemberian versi pada perangkat lunak. |
| 90 | + |
| 91 | +API dengan versi yang berbeda menunjukan tingkatan kestabilan dan ketersediaan yang diberikan pada versi tersebut. |
| 92 | +Kriteria untuk setiap tingkatan dideskripsikan secara lebih detail di dalam |
| 93 | +[dokumentasi perubahan API](https://git.k8s.io/community/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions). They are summarized here: |
| 94 | + |
| 95 | +- Tingkatan <i>Alpha</i>: |
| 96 | + - Nama dari versi ini mengandung string `alpha` (misalnya, `v1alpha1`). |
| 97 | + - Bisa jadi terdapat <i>bug</i>. Secara <i>default</i> fitur ini tidak diekspos. |
| 98 | + - Ketersediaan untuk fitur yang ada bisa saja dihilangkan pada suatu waktu tanpa pemberitahuan sebelumnya. |
| 99 | + - API yang ada mungkin saja berubah tanpa memperhatikan kompatibilitas dengan versi perangkat lunak sebelumnya. |
| 100 | + - Hanya direkomendasikan untuk kluster yang digunakan untuk tujuan <i>testing</i>. |
| 101 | +- Tingkatan <i>Beta</i>: |
| 102 | + - Nama dari versi ini mengandung string `beta` (misalnya `v2beta3`). |
| 103 | + - Kode yang ada sudah melalui mekanisme <i>testing</i> yang cukup baik. Menggunakan fitur ini dianggap cukup aman. Fitur ini diekspos secara <i>default</i>. |
| 104 | + - Ketersediaan untuk fitur secara menyeluruh tidak akan dihapus, meskipun begitu detail untuk suatu fitur bisa saja berubah. |
| 105 | + - Skema dan/atau semantik dari suatu obyek mungkin saja berubah tanpa memerhatikan kompatibilitas pada rilis <i>beta</i> selanjutnya. |
| 106 | + Jika hal ini terjadi, kami akan menyediakan suatu instruksi untuk melakukan migrasi di versi rilis selanjutnya. hal ini bisa saja terdiri dari penghapusan, pengubahan, ataupun pembuatan |
| 107 | + obyek API. Proses pengubahan mungkin saja membutuhkan pemikiran yang matang. Dampak proses ini bisa saja menyebabkan <i>downtime</i> aplikasi yang bergantung pada fitur ini. |
| 108 | + - Disarankan hanya untuk digunakan untuk penggunaan yang untuk penggunaan yang tidak berdampak langsung pada bisnis kamu. |
| 109 | + - **Kami mohon untuk mencoba versi <i>beta</i> yang kami sediakan dan berikan masukan terhadap fitur yang kamu pakai! Apabila fitur tersebut sudah tidak lagi berada di dalam tingkatan <i>beta</i> perubahan yang kami buat terhadap fitur tersebut bisa jadi tidak lagi dapat digunakan** |
| 110 | +- Tingkatan stabil: |
| 111 | + - Nama dari versi ini mengandung string `vX` dimana `X` merupakan bilangan bulat. |
| 112 | + - Fitur yang ada pada tingkatan ini akan selalu muncul di rilis berikutnya. |
| 113 | + |
| 114 | +## <i>API groups</i> |
| 115 | + |
| 116 | +Untuk memudahkan proses ekstensi suatu API Kubernetes, kami mengimplementasikan [*API groups*](https://git.k8s.io/community/contributors/design-proposals/api-machinery/api-group.md). |
| 117 | +<i>API group</i> ini dispesifikasikan di dalam <i>path</i> <i>REST</i> serta di dalam <i>field</i> `apiVersion` dari sebuah obyek yang sudah diserialisasi. |
| 118 | + |
| 119 | +Saat ini, terdapat beberapa <i>API groups</i> yang digunakan: |
| 120 | + |
| 121 | +1. Kelompok *core*, seringkali disebut sebagai *legacy group*, berada pada <i>path</i> <i>REST</i> `/api/v1` serta menggunakan `apiVersion: v1`. |
| 122 | + |
| 123 | +1. <i>Named groups</i> berada pada <i>path</i> <i>REST</i> `/apis/$GROUP_NAME/$VERSION`, serta menggunakan `apiVersion: $GROUP_NAME/$VERSION` |
| 124 | + (misalnya `apiVersion: batch/v1`). Daftar menyeluruh mengenai apa saja <i>API groups</i> dapat dilihat di [Kubernetes API reference](/docs/reference/). |
| 125 | + |
| 126 | + |
| 127 | +Ekstensi API dengan custom resources dapat dilakukan melalui dua buah path: |
| 128 | + |
| 129 | +1. [CustomResourceDefinition]() |
| 130 | + digunakan jika memerlukan seluruh set semantik Kubernetes API, pengguna boleh implementasi apiserver sendiri dengan menggunakan aggregator. |
| 131 | +1. Pengguna yang membutuhkan seperangkat semantik API Kubernetes API dapat mengimplementasikan <i>apiserver</i> mereka sendiri. |
| 132 | + dengan menggunakan [aggregator]() |
| 133 | + untuk membuat integrasi dengan klien menjadi lebih mudah. |
| 134 | + |
| 135 | + |
| 136 | +## Mengaktifkan <i> API groups</i> |
| 137 | + |
| 138 | +Beberapa <i>resources</i> dan <i>API groups</i> sudah diaktifkan secara <i>default</i>. |
| 139 | +<i>Resource</i> dan <i>API groups</i> ini dapat diaktifkan dan dinonaktifkan dengan mengatur penanda `--runtime-config` |
| 140 | +pada <i>apiserver</i>. `--runtime-config` menerima nilai yang dipisahkan oleh koma. Sebagai contoh: untuk menonaktifkan batch/v1, tetapkan |
| 141 | +`--runtime-config=batch/v1=false`, untuk mengaktifkan batch/v2alpha1, tetapkan `--runtime-config=batch/v2alpha1`. |
| 142 | +Penanda menerima nilai yang dipisahkan oleh pasangan `key=value` yang mendeskripsikan konfigurasi <i>runtime</i> pada <i>apiserver</i>. |
| 143 | + |
| 144 | +PENTING: Melakukan proses mengaktifkan atau menonaktifkan <i>groups</i> atau <i>resources</i> |
| 145 | +membutuhkan mekanisme <i>restart</i> <i>apiserver</i> dan <i>controller-manager</i> |
| 146 | +agar <i>apiserver</i> dapat menerima perubahan `--runtime-config`. |
| 147 | + |
| 148 | +## Mengaktifkan <i>resources</i> di dalam <i>groups</i> |
| 149 | + |
| 150 | +<i>DaemonSets</i>, <i>Deployments</i>, <i>HorizontalPodAutoscalers</i>, |
| 151 | +<i>Ingresses</i>, <i>Jobs</i>, dan <i>ReplicaSets</i> diaktifkan secara <i>default</i>. |
| 152 | +Ekstensi lain dapat diaktifkan penanda `--runtime-config` pada <i>apiserver</i>. Penanda `--runtime-config` menerima nilai yang dipisahkan oleh koma. |
| 153 | + Sebagai contoh untuk menonaktifkan <i>deployments</i> dan <i>ingress</i>, tetapkan. |
| 154 | +`--runtime-config=extensions/v1beta1/deployments=false,extensions/v1beta1/ingresses=false` |
| 155 | + |
| 156 | +{{% /capture %}} |
0 commit comments