Apply suggestions from code review

Co-authored-by: Aris Cahyadi Risdianto <aris.risdianto@gmail.com>
pull/22420/head
Muhammad Panji 2020-07-09 08:26:17 +07:00 committed by GitHub
parent 664d53195e
commit ff92bc9c85
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 73 additions and 74 deletions

View File

@ -1,23 +1,23 @@
---
title: Berbagi Klaster dengan Namespaces
title: Membagi sebuah Klaster dengan Namespace
content_type: task
---
<!-- overview -->
Halaman ini menunjukkan bagaimana cara melihat, menggunakan dan menghapus {{< glossary_tooltip text="namespaces" term_id="namespace" >}}. Halaman ini juga menunjukkan bagaimana cara menggunakan namespace Kubernetes namespaces untuk membagi klaster kamu.
Laman ini menunjukkan bagaimana cara melihat, menggunakan dan menghapus {{< glossary_tooltip text="namespaces" term_id="namespace" >}}. Laman ini juga menunjukkan bagaimana cara menggunakan Namespace Kubernetes namespaces untuk membagi klaster kamu.
## {{% heading "prerequisites" %}}
* Memiliki [Klaster Kubernetes](/docs/setup/).
* Memiliki pemahaman dasar _[Pods](/docs/concepts/workloads/pods/pod/)_, _[Services](/docs/concepts/services-networking/service/)_, dan _[Deployments](/docs/concepts/workloads/controllers/deployment/)_ di Kubernetes.
* Memiliki [Klaster Kubernetes](/id/docs/setup/).
* Memiliki pemahaman dasar [_Pod_](/id/docs/concepts/workloads/pods/pod/), [_Service_](/id/docs/concepts/services-networking/service/), dan [_Deployment_](/id/docs/concepts/workloads/controllers/deployment/) dalam Kubernetes.
<!-- steps -->
## Melihat namespaces
## Melihat Namespace
1. Untuk melihat namespaces yang ada saat ini disebuah klaster anda bisa menggunakan:
1. Untuk melihat Namespace yang ada saat ini pada sebuah klaster anda bisa menggunakan:
```shell
kubectl get namespaces
@ -29,19 +29,19 @@ kube-system Active 11d
kube-public Active 11d
```
Kubernetes berjalan dengan tiga namespaces awal:
Kubernetes mulai dengan tiga Namespace pertama:
* `default` Namespace bawaan untuk objek-objek yang belum terkait dengan namespace lain
* `default` Namespace bawaan untuk objek-objek yang belum terkait dengan Namespace lain
* `kube-system` Namespace untuk objek-objek yang dibuat oleh sistem Kubernetes
* `kube-public` Namespae ini dibuat secara otomatis dan dapat dibaca seluruh pengguna (termasuk yang tidak terotentikasi). Namespace ini sering dicadangkan untuk penggunaan klaster, untuk kasus dimana beberapa sumber daya agar dapat terlihat dan dapat dibaca secara publik di keseluruhan klaster. Aspek publik di namespace ini hanya sebuah konvensi bukan kebutuhan.
* `kube-public` Namespace ini dibuat secara otomatis dan dapat dibaca oleh seluruh pengguna (termasuk yang tidak terotentikasi). Namespace ini sering dicadangkan untuk kepentingan klaster, untuk kasus dimana beberapa sumber daya seharusnya dapat terlihat dan dapat terlihat secara publik di seluruh klaster. Aspek publik pada Namespace ini hanya sebuah konvensi bukan suatu kebutuhan.
Kamu bisa mendapat ringkasan namespace tertentu menggunakan:
Kamu bisa mendapat ringkasan Namespace tertentu dengan menggunakan:
```shell
kubectl get namespaces <name>
```
Atau anda bisa mendapatkan informasi detail menggunakan:
Atau kamu bisa mendapatkan informasi detail menggunakan:
```shell
kubectl describe namespaces <name>
@ -60,25 +60,25 @@ Resource Limits
Container cpu - - 100m
```
Sebagai catatan, detail diatas menunjukkan baik kuota sumber daya (apabila ada) dan juga jangkauan batas sumber daya
Sebagai catatan, detail diatas menunjukkan baik kuota sumber daya (jika ada) dan juga jangkauan batas sumber daya.
Kuota sumber daya melacak penggunaan total sumber daya didalam *Namespace* dan mengijinkan operator-operator klaster mendefinisikan *batas atas* penggunaan sumber daya yang dapat di gunakan sebuah *Namespace*.
Kuota sumber daya melacak penggunaan total sumber daya didalam Namespace dan mengijinkan operator-operator klaster mendefinisikan batas atas penggunaan sumber daya yang dapat di gunakan sebuah Namespace.
Jangkauan batas mendefinisikan pembatas min/maks jumlah sumber daya yang dapat di gunakan oleh sebuah entitas di sebuah *Namespace*.
Jangkauan batas mendefinisikan pertimbangan min/maks jumlah sumber daya yang dapat di gunakan oleh sebuah entitas dalam sebuah Namespace.
Lihat [Admission control: Limit Range](https://git.k8s.io/community/contributors/design-proposals/resource-management/admission_control_limit_range.md)
Lihatlah [Kontrol Admisi: Rentang Batas](https://git.k8s.io/community/contributors/design-proposals/resource-management/admission_control_limit_range.md)
Sebuah namespace dapat berada di salah satu dari dua fase:
Sebuah Namespace dapat berada dalam salah satu dari dua buah fase:
* `Active` namespace sedang digunakan
* `Terminating` namespace sedang dihapus dan tidak dapat digunakan untuk objek-objek baru
* `Active` Namespace sedang digunakan
* `Terminating` Namespace sedang dihapus dan tidak dapat digunakan untuk objek-objek baru
Lihat [dokumentasi desain](https://git.k8s.io/community/contributors/design-proposals/architecture/namespaces.md#phases) untuk detil lebih lanjut.
## Membuat sebuah namespace baru
## Membuat sebuah Namespace baru
{{< note >}}
Hindari membuat namespace dengan awalan `kube-`, karena awalan ini dicadangkan untuk namespace sistem Kubernetes.
Hindari membuat Namespace dengan awalan `kube-`, karena awalan ini dicadangkan untuk Namespace dari sistem Kubernetes.
{{< /note >}}
1. Buat berkas YAML baru dengan nama `my-namespace.yaml` dengan isi berikut ini:
@ -95,40 +95,40 @@ Lihat [dokumentasi desain](https://git.k8s.io/community/contributors/design-prop
kubectl create -f ./my-namespace.yaml
```
2. Cara alternatif, kamu bisa membuat namespace menggunakan perintah dibawah ini:
2. Sebagai alternatif, kamu bisa membuat Namespace menggunakan perintah dibawah ini:
```
kubectl create namespace <insert-namespace-name-here>
```
Nama namespace kamu harus merupakan
[DNS label](/docs/concepts/overview/working-with-objects/names#dns-label-names) yang valid.
Nama Namespace kamu harus merupakan
[Label DNS](/docs/concepts/overview/working-with-objects/names#dns-label-names) yang valid.
Ada kolom opsional `finalizers`, yang memungkinkan _obvservables_ untuk membersihkan sumber daya ketika namespace dihapus. Ingat bahwa jika kamu memberikan finalizer yang tidak ada, namespace akan dibuat tapi akan macet di status `Terminating` jika pengguna mencoba untuk menghapusnya.
Ada kolom opsional `finalizers`, yang memungkinkan _observables_ untuk membersihkan sumber daya ketika Namespace dihapus. Ingat bahwa jika kamu memberikan finalizer yang tidak ada, Namespace akan dibuat tapi akan berhenti pada status `Terminating` jika pengguna mencoba untuk menghapusnya.
Informasi lebih lanjut mengenai `finalizers` bisa dibaca di [dokumentasi desain](https://git.k8s.io/community/contributors/design-proposals/architecture/namespaces.md#finalizers) namespace.
Informasi lebih lanjut mengenai `finalizers` bisa dibaca pada [dokumentasi desain](https://git.k8s.io/community/contributors/design-proposals/architecture/namespaces.md#finalizers) dari Namespace.
## Menghapus namespace
## Menghapus Namespace
Hapus namespace dengan
Hapus Namespace dengan
```shell
kubectl delete namespaces <insert-some-namespace-name>
```
{{< warning >}}
Ini akan menghapus _semua hal_ di dalam namespace!
Ini akan menghapus semua hal yang ada dalam Namespace!
{{< /warning >}}
Proses penghapusan ini asinkrin, jadi untuk beberapa waktu kamu akan melihat namespace dalam status `Terminating`.
Proses penghapusan ini asinkron, jadi untuk beberapa waktu kamu akan melihat Namespace dalam status `Terminating`.
## Membagi klaster kamu menggunakan namespace Kubernetes
## Membagi klaster kamu menggunakan Namespace Kubernetes
1. Pahami namespace bawaan
1. Pahami Namespace bawaan
Secara bawaan, sebuah klaster Kubernetes akan membuat namespace bawaan ketika menyediakan klaster untuk menampung Pod, Services, dan Deployment yang digunakan oleh klaster.
Secara bawaan, sebuah klaster Kubernetes akan membuat Namespace bawaan ketika menyediakan klaster untuk menampung Pod, Service, dan Deployment yang digunakan oleh klaster.
Dengan asumsi kamu memiliki klaster baru, kamu bisa mengecek namespace yang tersedia dengan melakukan hal berikut:
Dengan asumsi kamu memiliki klaster baru, kamu bisa mengecek Namespace yang tersedia dengan melakukan hal berikut:
```shell
kubectl get namespaces
@ -138,33 +138,33 @@ Proses penghapusan ini asinkrin, jadi untuk beberapa waktu kamu akan melihat nam
default Active 13m
```
2. Membuat namespace baru
2. Membuat Namespace baru
Untuk latihan ini, kita akan membuat dua namespace Kubernetes tambahan untuk menyimpan konten kita
Untuk latihan ini, kita akan membuat dua Namespace Kubernetes tambahan untuk menyimpan konten kita
Dalam sebuah skenario dimana sebuah organisasi menggunakan klaster Kuberetes yang digunakan bersama untuk pengguaan _development_ dan _production_:
Dalam sebuah skenario dimana sebuah organisasi menggunakan klaster Kubernetes yang digunakan bersama untuk penggunaan pengembangan dan produksi:
Tim pengembang ingin mengelola ruang di dalam klaster dimana mereka bisa melihat daftar Pod, Layanan, dan Deployment yang digunakan untuk membangun dan menjalankan apliksi mereka. Di ruang ini sumber daya akan datang dan prgi dan pembatasan mengenai siapa bisa atau tidak bisa memodifikasi sumber daya lebih santai untuk mendukung pengembangan secara _agile_.
Tim pengembang ingin mengelola ruang di dalam klaster dimana mereka bisa melihat daftar Pod, Service, dan Deployment yang digunakan untuk membangun dan menjalankan apliksi mereka. Di ruang ini sumber daya akan datang dan pergi, dan pembatasan yang tidak ketat mengenai siapa yang bisa atau tidak bisa memodifikasi sumber daya untuk mendukung pengembangan secara gesit (_agile_).
Tim operasi ingin mengelola ruang didalam klaster dimana mereka bisa memaksakan prosedur ketat mengenai siapa yang bisa atau tidak bisa melakukan manipulasi kumpulan Pod, Layanan, dan Deployment yang berjalan di situs _production_.
Tim operasi ingin mengelola ruang didalam klaster dimana mereka bisa memaksakan prosedur ketat mengenai siapa yang bisa atau tidak bisa melakukan manipulasi pada kumpulan Pod, Layanan, dan Deployment yang berjalan pada situs produksi.
Satu pola yang bisa diikuti organisasi ini adalah dengan membagi klaster Kubernetes menjadi dua namespace: `development` dan `production`
Satu pola yang bisa diikuti organisasi ini adalah dengan membagi klaster Kubernetes menjadi dua Namespace: `development` dan `production`
Mari kita buat dua namespace untuk menyimpan hasil kerja kita.
Mari kita buat dua Namespace untuk menyimpan hasil kerja kita.
Buat namespace `development` menggunakan kubectl:
Buat Namespace `development` menggunakan kubectl:
```shell
kubectl create -f https://k8s.io/examples/admin/namespace-dev.json
```
Kemudian mari kita buat namespace `production` menggunakan kubectl:
Kemudian mari kita buat Namespace `production` menggunakan kubectl:
```shell
kubectl create -f https://k8s.io/examples/admin/namespace-prod.json
```
Untuk memastikan apa yang kita lakukan benar, lihat seluruh namespace didalam klaster.
Untuk memastikan apa yang kita lakukan benar, lihat seluruh Namespace dalam klaster.
```shell
kubectl get namespaces --show-labels
@ -176,19 +176,19 @@ Proses penghapusan ini asinkrin, jadi untuk beberapa waktu kamu akan melihat nam
production Active 23s name=production
```
3. Buat pod di tiap namespace
3. Buat pod pada setiap Namespace
Sebuah namespace Kubernetes memberikan batasan untuk Pods, Layanan, dan Deployment di dalam klaster.
Sebuah Namespace Kubernetes memberikan batasan untuk Pod, Service, dan Deployment dalam klaster.
Pengguna yang berinteraksi dengan salah satu namespace tidak melihat konten di dalam namespace lain
Pengguna yang berinteraksi dengan salah satu Namespace tidak melihat konten di dalam Namespace lain
Untuk menunjukkan hal ini, Mari kita jalankan Deployment dan Pods sederhana di dalam namespace `development`.
Untuk menunjukkan hal ini, mari kita jalankan Deployment dan Pod sederhana di dalam Namespace `development`.
```shell
kubectl create deployment snowflake --image=k8s.gcr.io/serve_hostname -n=development
kubectl scale deployment snowflake --replicas=2 -n=development
```
Kita baru aja membuat sebuah deployment yang memiliki ukuran replika 2 menjalankan pod dengan nama `snowflake` dengan sebuah kontainer dasar yang hanya melayani hostname.
Kita baru aja membuat sebuah Deployment yang memiliki ukuran replika dua yang menjalankan Pod dengan nama `snowflake` dengan sebuah Container dasar yang hanya melayani _hostname_.
```shell
@ -207,18 +207,18 @@ Proses penghapusan ini asinkrin, jadi untuk beberapa waktu kamu akan melihat nam
snowflake-3968820950-vgc4n 1/1 Running 0 2m
```
Dan ini keren, pengembang bisa melakukan hal yang ingin mereka lakukan dan mereka tidak harus khawatir akan mempengaruhi konten di namespace `production`.
Dan ini merupakan sesuatu yang bagus, dimana pengembang bisa melakukan hal yang ingin mereka lakukan tanpa harus khawatir hal itu akan mempengaruhi konten pada namespace `production`.
Mari kita pindah ke namespace `production` dan menujukkan bagaimana sumber daya di satu namespace disembunyikan dari yang lain
Mari kita pindah ke Namespace `production` dan menujukkan bagaimana sumber daya di satu Namespace disembunyikan dari yang lain
Namespace `production` seharusnya kosong, dan perintah berikut ini seharunsnya tidak mengembalikan apapun.
Namespace `production` seharusnya kosong, dan perintah berikut ini seharusnya tidak menghasilkan apapun.
```shell
kubectl get deployment -n=production
kubectl get pods -n=production
```
Production ingin menjalankan cattle, mari kita buat beberapa pod cattle.
`Production` Namespace ingin menjalankan `cattle`, mari kita buat beberapa Pod `cattle`.
```shell
kubectl create deployment cattle --image=k8s.gcr.io/serve_hostname -n=production
@ -243,61 +243,60 @@ Proses penghapusan ini asinkrin, jadi untuk beberapa waktu kamu akan melihat nam
cattle-2263376956-sxpth 1/1 Running 0 34s
```
Sampai titik ini, seharusnya sudah jelas bahwa sumber daya yang dibuat pengguna di sebuah namespace disembunyikan dari namespace lainnya
Sampai sini, seharusnya sudah jelas bahwa sumber daya yang dibuat pengguna pada sebuah Namespace disembunyikan dari Namespace lainnya.
Seiring dengan evolusi dukungan kebijakan di kubernetes, kami akan memperluas skenario ini untuk menunjukkan bagaimana kamu bisa menyediakan aturan otorisasi yang berbeda untuk tiap namespace.
Seiring dengan evolusi dukungan kebijakan di Kubernetes, kami akan memperluas skenario ini untuk menunjukkan bagaimana kamu bisa menyediakan aturan otorisasi yang berbeda untuk tiap Namespace.
<!-- discussion -->
## Memahami motivasi penggunaan namespace
## Memahami motivasi penggunaan Namespace
Sebuah klaster tunggal umumnya bisa memenuhi kebutuhan pengguna yang berbeda atau kelompok pengguna (itulah sebabnya disebut 'komunitas pengguna').
_namespace_ Kubernetes membantu proyek-proyek, tim-tim dan pelanggan yang berbeda untuk berbagi klaster Kubernetes.
Namespace Kubernetes membantu proyek-proyek, tim-tim dan pelanggan yang berbeda untuk berbagi klaster Kubernetes.
Ini dilakukan dengan menyediakan hal berikut:
1. Cakupan untuk [Names](/docs/concepts/overview/working-with-objects/names/).
1. Cakupan untuk [Names](/id/docs/concepts/overview/working-with-objects/names/).
2. Sebuah mekanisme untuk memasang otorisasi dan kebijakan untuk bagian dari klaster.
Penggunaan namespace berbeda merupakan hal opsional.
Penggunaan Namespace berbeda merupakan hal opsional.
Tiap komunitas pengguna ingin bisa bekerja secara terisolasi dari komunitas lainnya.
Tiap komunitas pengguna memiliki hal berikut sendiri:
1. sumber daya (pods, services, pengendali replikasi, dll.)
2. kebijakan (siapa yang bisa atau tidak bisa melakukan hal tertentu di komunitasnya)
1. sumber daya (Pod, Service, _controller_ replikasi, dll.)
2. kebijakan (siapa yang bisa atau tidak bisa melakukan hal tertentu dalam komunitasnya)
3. batasan (komunitas ini diberi kuota sekian, dll.)
Seorang operator klaster dapat membuat sebuah Namespace untuk tiap komunitas user unik.
Seorang operator klaster dapat membuat sebuah Namespace untuk tiap komunitas user yang unik.
Namespace tersebut memberikan cakupan unik untuk:
Namespace tersebut memberikan cakupan yang unik untuk:
1. sumber daya yang diberi nama (untuk menghindari benturan penamaan mendasar)
2. otoritas pengelolaan terdelegasi untuk pengguna yang dipercaya
1. penamaan sumber daya (untuk menghindari benturan penamaan dasar)
2. pendelegasian otoritas pengelolaan untuk pengguna yang dapat dipercaya
3. kemampuan untuk membatasi konsumsi sumber daya komunitas
Contoh penggunaan mencakup
1. Sebagai operator klaster, aku ingin mendukung beberapa komunitas pengguna di sebuah klaster.
1. Sebagai operator klaster, aku ingin mendukung beberapa komunitas pengguna dalam sebuah klaster.
2. Sebagai operator klaster, aku ingin mendelegasikan otoritas untuk mempartisi klaster ke pengguna terpercaya di komunitasnya.
3. Sebagai operator klaster, aku ingin membatasi jumlah sumberdaya yang bisa dikonsumsi komunitas dalam rangka membatasi dampak ke komunitas lain yang menggunakan klaster yang sama.
4. Sebagai pengguna klaster, aku ingin berinteraks dengan sumber daya yang berkaitan dengan komunitas penggunaku secara terisolasi dari apa yang dilakukan komunitas lain di klaster yang sama.
3. Sebagai operator klaster, aku ingin membatasi jumlah sumber daya yang bisa dikonsumsi komunitas dalam rangka membatasi dampak ke komunitas lain yang menggunakan klaster yang sama.
4. Sebagai pengguna klaster, aku ingin berinteraksi dengan sumber daya yang berkaitan dengan komunitas pengguna saya secara terisolasi dari apa yang dilakukan komunitas lain di klaster yang sama.
## Memahami namespace dan DNS
## Memahami Namespace dan DNS
Ketika kamu membuat sebuah [Layanan](/docs/concepts/services-networking/service/), akan terbentuk [entri DNS](/docs/concepts/services-networking/dns-pod-service/) untuk layanan tersebut.
Entri DNS ini dalam bentuk `<service-name>.<namespace-name>.svc.cluster.local`, yang berarti jika sebuah kontainer hanya menggunakan `<service-name>` makan dia akan me-_resolve_ ke layanan yang lokal dalam namespace yang sama. Ini berguna untuk menggunakan konfigurasi yang sama di namespace yang berbeda seperti _Development_, _Staging_ dan _Production_. Jika kami ingin menjangkau lintas namespace, kamu harus menggunakan _fully qualified domain name_ (FQDN).
Ketika kamu membuat sebuah [Service](/docs/concepts/services-networking/service/), akan terbentuk [entri DNS](/id/docs/concepts/services-networking/dns-pod-service/) untuk Service tersebut.
Entri DNS ini dalam bentuk `<service-name>.<namespace-name>.svc.cluster.local`, yang berarti jika sebuah Container hanya menggunakan `<service-name>` maka dia akan me-_resolve_ ke layanan yang lokal dalam Namespace yang sama. Ini berguna untuk menggunakan konfigurasi yang sama pada Namespace yang berbeda seperti _Development_, _Staging_ dan _Production_. Jika kami ingin menjangkau antar Namespace, kamu harus menggunakan _fully qualified domain name_ (FQDN).
## {{% heading "whatsnext" %}}
* Pelajari lebih lanjut mengenai [pengaturan preferensi namespace preference](/docs/concepts/overview/working-with-objects/namespaces/#setting-the-namespace-preference).
* Pelajari lebih lanjut mengenai [pengaturan namespace untuk sebuah permintaan](/docs/concepts/overview/working-with-objects/namespaces/#setting-the-namespace-for-a-request)
* Baca [desain namespaces](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/architecture/namespaces.md).
* Pelajari lebih lanjut mengenai [pengaturan preferensi Namespace](/id/docs/concepts/overview/working-with-objects/namespaces/#pengaturan-preferensi-namespace).
* Pelajari lebih lanjut mengenai [pengaturan namespace untuk sebuah permintaan](/id/docs/concepts/overview/working-with-objects/namespaces/#pengaturan-namespace-untuk-sebuah-permintaan)
* Baca [desain Namespace](https://github.com/kubernetes/community/blob/{{< param "githubbranch" >}}/contributors/design-proposals/architecture/namespaces.md).