From d327b9e5d3d375897cc313085d774a0ae5bd254e Mon Sep 17 00:00:00 2001 From: WilliamChang80 Date: Mon, 5 Oct 2020 21:45:26 +0700 Subject: [PATCH 1/3] Add description on concept overview ID page --- .../id/docs/concepts/overview/components.md | 3 + .../docs/concepts/overview/kubernetes-api.md | 3 + .../object-management-kubectl/_index.md | 5 - .../declarative-config.md | 869 ------------------ .../imperative-command.md | 133 --- .../imperative-config.md | 117 --- .../concepts/overview/what-is-kubernetes.md | 10 + .../overview/working-with-objects/_index.md | 4 + netlify.toml | 2 +- 9 files changed, 21 insertions(+), 1125 deletions(-) delete mode 100644 content/id/docs/concepts/overview/object-management-kubectl/_index.md delete mode 100644 content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md delete mode 100644 content/id/docs/concepts/overview/object-management-kubectl/imperative-command.md delete mode 100644 content/id/docs/concepts/overview/object-management-kubectl/imperative-config.md diff --git a/content/id/docs/concepts/overview/components.md b/content/id/docs/concepts/overview/components.md index aa2ee52152263..43bba4d783d48 100644 --- a/content/id/docs/concepts/overview/components.md +++ b/content/id/docs/concepts/overview/components.md @@ -2,6 +2,9 @@ title: Komponen-Komponen Kubernetes content_type: concept weight: 20 +description: > + Sebuah klaster Kubernetes terdiri dari komponen yang merepresentasikan + bidang kontrol dan sepasang mesin yaitu _nodes_. card: name: concepts weight: 20 diff --git a/content/id/docs/concepts/overview/kubernetes-api.md b/content/id/docs/concepts/overview/kubernetes-api.md index 35bf3f67dc6ed..336c48f60f9c0 100644 --- a/content/id/docs/concepts/overview/kubernetes-api.md +++ b/content/id/docs/concepts/overview/kubernetes-api.md @@ -2,6 +2,9 @@ title: API Kubernetes content_type: concept weight: 30 +description: > + API Kubernetes membuatmu dapat melakukan _query_ dan memanipulasi keadaan objek dalam Kubernetes. + Inti dari bidang kontrol Kubernetes adalah _server_ API dan HTTP API yang diekspos. Pengguna, berbagai bagian klastermu, dan komponen eksternal semuanya berkomunikasi satu sama lain melalui server API. card: name: concepts weight: 30 diff --git a/content/id/docs/concepts/overview/object-management-kubectl/_index.md b/content/id/docs/concepts/overview/object-management-kubectl/_index.md deleted file mode 100644 index 909abd79ce669..0000000000000 --- a/content/id/docs/concepts/overview/object-management-kubectl/_index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Pengelolaan Objek dengan kubectl" -weight: 50 ---- - diff --git a/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md b/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md deleted file mode 100644 index 46066769d4bd1..0000000000000 --- a/content/id/docs/concepts/overview/object-management-kubectl/declarative-config.md +++ /dev/null @@ -1,869 +0,0 @@ ---- -title: Pengelolaan Objek Kubernetes secara Deklaratif dengan Menggunakan File Konfigurasi -content_type: concept -weight: 40 ---- - - -Objek-objek Kubernetes dapat dibuat, diperbarui, dan dihapus dengan menjalankan perintah `kubectl apply` terhadap file-file konfigurasi objek yang disimpan dalam sebuah direktori secara rekursif sesuai dengan kebutuhan. Perintah `kubectl diff` bisa digunakan untuk menampilkan pratinjau tentang perubahan apa saja yang akan dibuat oleh perintah `kubectil apply`. - - - - -## Kelebihan dan kekurangan - -Perintah `kubectl` memungkinkan tiga cara untuk mengelola objek: - -* Perintah imperatif -* Konfigurasi objek imperatif -* Konfigurasi objek deklaratif - -Lihat [Pengelolaan Objek Kubernetes](/docs/concepts/overview/object-management-kubectl/overview/) untuk menyimak diskusi mengenai kelebihan dan kekurangan dari tiap cara pengelolaan objek. - -## Sebelum kamu mulai - -Konfigurasi objek secara deklaratif membutuhkan pemahaman yang baik -tentang definisi dan konfigurasi objek-objek Kubernetes. Jika belum pernah, kamu disarankan untuk membaca terlebih dulu dokumen-dokumen berikut: - -- [Pengelolaan Objek Kubernetes Menggunakan Perintah Imperatif](/id/docs/concepts/overview/object-management-kubectl/imperative-command/) -- [Pengelolaan Objek Kubernetes Menggunakan File Konfigurasi Imperatif](/id/docs/concepts/overview/object-management-kubectl/imperative-config/) - -Berikut adalah beberapa defnisi dari istilah-istilah yang digunakan -dalam dokumen ini: - -- *objek file konfigurasi / file konfigurasi*: Sebuah *file* yang -mendefinisikan konfigurasi untuk sebuah objek Kubernetes. Dokumen ini akan memperlihatkan cara menggunakan *file* konfigurasi dengan perintah `kubectl apply`. *File-file* konfigurasi biasanya disimpan di sebuah *source control* seperti Git. -- *konfigurasi objek live / konfigurasi live*: nilai konfigurasi *live* dari sebuah objek, sebagaimana yang tersimpan di klaster Kubernetes. Nilai-nilai ini disimpan di *storage* klaster Kubernetes, biasanya etcd. -- *writer konfigurasi deklaratif / writer deklaratif*: Seseorang atau sebuah komponen perangkat lunak yang membuat pembaruan ke objek *live*. *Live writer* yang disebut pada dokumen ini adalah *writer* yang membuat perubahan terhadap *file* konfigurasi objek dan menjalankan perintah `kubectl apply` untuk menulis perubahan-perubahan tersebut. - -## Cara membuat objek - -Gunakan perintah `kubectl apply` untuk membuat semua objek, kecuali objek-objek yang sudah ada sebelumnya, yang didefinisikan di *file-file* konfigurasi dalam direktori yang ditentukan: - -```shell -kubectl apply -f / -``` - -Perintah di atas akan memberi anotasi `kubectl.kubernetes.io/last-applied-configuration: '{...}'` pada setiap objek yang dibuat. Anotasi ini berisi konten dari *file* konfigurasi objek yang digunakan untuk membuat objek tersebut. - -{{< note >}} -Tambahkan parameter `-R` untuk memproses seluruh direktori secara rekursif. -{{< /note >}} - -Berikut sebuah contoh *file* konfigurasi objek: - -{{< codenew file="application/simple_deployment.yaml" >}} - -Jalankan perintah `kubectl diff` untuk menampilkan objek yang akan dibuat: - -```shell -kubectl diff -f https://k8s.io/examples/application/simple_deployment.yaml -``` - -{{< note >}} -Perintah `diff` menggunakan [*server-side dry-run*](/docs/reference/using-api/api-concepts/#dry-run), yang perlu diaktifkan di `kube-apiserver`. -{{< /note >}} - -Buat objek dengan perintah `kubectl apply`: - -```shell -kubectl apply -f https://k8s.io/examples/application/simple_deployment.yaml -``` - -Tampilkan konfigurasi *live* dengan perintah `kubectl get`: - -```shell -kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml -``` - -Keluaran perintah di atas akan menunjukkan bahwa anotasi `kubectl.kubernetes.io/last-applied-configuration` sudah dituliskan ke konfigurasi *live*, dan anotasi tersebut sesuai dengan *file* konfigurasi: - -```yaml -kind: Deployment -metadata: - annotations: - # ... - # Ini merupakan representasi dari simple_deployment.yaml dalam format json - # Ini ditulis oleh perintah `kubectl apply` ketika objek dibuat - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"apps/v1","kind":"Deployment", - "metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"}, - "spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}}, - "spec":{"containers":[{"image":"nginx:1.7.9","name":"nginx", - "ports":[{"containerPort":80}]}]}}}} - # ... -spec: - # ... - minReadySeconds: 5 - selector: - matchLabels: - # ... - app: nginx - template: - metadata: - # ... - labels: - app: nginx - spec: - containers: - - image: nginx:1.7.9 - # ... - name: nginx - ports: - - containerPort: 80 - # ... - # ... - # ... - # ... -``` - -## Cara memperbarui objek - -Kamu juga bisa menggunakan `kubectl apply` untuk memperbarui semua objek yang didefinisikan dalam sebuah direktori, termasuk objek-objek yang sudah ada sebelumnya. Cara ini akan melakukan hal-hal berikut: - -1. Menyimpan nilai *field-field* yang ada di *file* konfigurasi ke konfigurasi *live*. -2. Menghapus *field-field* yang dihapus di *file* konfigurasi dari konfigurasi *live*. - -```shell -kubectl diff -f / -kubectl apply -f / -``` - -{{< note >}} -Tambahkan argumen `-R` untuk memproses seluruh direktori secara rekursif. -{{< /note >}} - -Berikut sebuah contoh *file* konfigurasi: - -{{< codenew file="application/simple_deployment.yaml" >}} - -Buat objek dengan perintah `kubectl apply`:: - -```shell -kubectl apply -f https://k8s.io/examples/application/simple_deployment.yaml -``` - -{{< note >}} -Untuk keperluan ilustrasi, perintah berikut merujuk ke satu *file* konfigurasi alih-alih ke satu direktori. -{{< /note >}} - -Tampilkan konfigurasi *live* dengan perintah `kubectl get`: - -```shell -kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml -``` - -Keluaran perintah di atas akan menunjukkan bahwa anotasi `kubectl.kubernetes.io/last-applied-configuration` sudah dituliskan ke konfigurasi *live*, dan anotasi tersebut sesuai dengan *file* konfigurasi: - -```yaml -kind: Deployment -metadata: - annotations: - # ... - # Berikut merupakan representasi dari simple_deployment.yaml dalam format json - # Representasi berikut ditulis oleh perintah kubectl apply ketika objek dibuat - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"apps/v1","kind":"Deployment", - "metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"}, - "spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}}, - "spec":{"containers":[{"image":"nginx:1.7.9","name":"nginx", - "ports":[{"containerPort":80}]}]}}}} - # ... -spec: - # ... - minReadySeconds: 5 - selector: - matchLabels: - # ... - app: nginx - template: - metadata: - # ... - labels: - app: nginx - spec: - containers: - - image: nginx:1.7.9 - # ... - name: nginx - ports: - - containerPort: 80 - # ... - # ... - # ... - # ... -``` - -Perbarui nilai `replicas` secara langsung di konfigurasi `live` dengan menggunakan perintah `kubectl scale`. Pembaruan ini tidak menggunakan perintah `kubectl apply`: - -```shell -kubectl scale deployment/nginx-deployment --replicas=2 -``` - -Tampilkan konfigurasi *live* dengan perintah `kubectl get`: - -```shell -kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml -``` - -Keluaran perintah di atas akan menunjukkan bahwa nilai `replicas` telah diubah menjadi 2, dan anotasi `last-applied-configuration` tidak memuat nilai `replicas`: - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - # ... - # perhatikan bahwa anotasi tidak memuat nilai replicas - # karena nilai tersebut tidak diperbarui melalui perintah kubectl-apply - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"apps/v1","kind":"Deployment", - "metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"}, - "spec":{"minReadySeconds":5,"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}}, - "spec":{"containers":[{"image":"nginx:1.7.9","name":"nginx", - "ports":[{"containerPort":80}]}]}}}} - # ... -spec: - replicas: 2 # ditulis oleh perintah kubectl scale - # ... - minReadySeconds: 5 - selector: - matchLabels: - # ... - app: nginx - template: - metadata: - # ... - labels: - app: nginx - spec: - containers: - - image: nginx:1.7.9 - # ... - name: nginx - ports: - - containerPort: 80 - # ... -``` - -Perbarui *file* konfigurasi `simple_deployment.yaml`, ubah *image* dari `nginx:1.7.9` ke `nginx:1.11.9`, dan hapus *field* `minReadySeconds`: - -{{< codenew file="application/update_deployment.yaml" >}} - -Terapkan perubahan yang telah dibuat di *file* konfigurasi: - -```shell -kubectl diff -f https://k8s.io/examples/application/update_deployment.yaml -kubectl apply -f https://k8s.io/examples/application/update_deployment.yaml -``` - -Tampilkan konfigurasi *live* dengan perintah `kubectl get`: - -``` -kubectl get -f https://k8s.io/examples/application/simple_deployment.yaml -o yaml -``` - -Keluaran perintah di atas akan menunjukkan perubahan-perubahan berikut pada konfiguasi *live*: - -- *Field* `replicas` tetap bernilai 2 sesuai dengan nilai yang diatur oleh perintah `kubectl scale`. Hal ini karena *field* `replicas` dihapuskan dari *file* konfigurasi. -- Nilai *field* `image` telah diperbarui menjadi `nginx:1.11.9` dari `nginx:1.7.9`. -- Anotasi `last-applied-configuration` telah diperbari dengan *image* terbaru. -- *Field* `minReadySeconds` telah dihapus. -- Anotasi `last-applied-configuration` tidak lagi memuat *field* `minReadySeconds`. - -```yaml -apiVersion: apps/v1 -kind: Deployment -metadata: - annotations: - # ... - # Anotasi memuat image yang telah diperbarui ke nginx 1.11.9, - # tetapi tidak memuat nilai replica yang telah diperbarui menjadi 2 - kubectl.kubernetes.io/last-applied-configuration: | - {"apiVersion":"apps/v1","kind":"Deployment", - "metadata":{"annotations":{},"name":"nginx-deployment","namespace":"default"}, - "spec":{"selector":{"matchLabels":{"app":nginx}},"template":{"metadata":{"labels":{"app":"nginx"}}, - "spec":{"containers":[{"image":"nginx:1.11.9","name":"nginx", - "ports":[{"containerPort":80}]}]}}}} - # ... -spec: - replicas: 2 # Diatur oleh `kubectl scale`, tidak diubah oleh `kubectl apply`. - # minReadySeconds dihapuskan oleh `kubectl apply` - # ... - selector: - matchLabels: - # ... - app: nginx - template: - metadata: - # ... - labels: - app: nginx - spec: - containers: - - image: nginx:1.11.9 # Diatur oleh `kubectl apply` - # ... - name: nginx - ports: - - containerPort: 80 - # ... - # ... - # ... - # ... -``` - -{{< warning >}} -Mencampur perintah `kubectl apply` dengan perintah imperatif untuk konfigurasi objek seperti `create` dan `replace` tidak dimungkinkan. Hal ini karena `create` dan `replace` tidak menyimpan anotasi `kubectl.kubernetes.io/last-applied-configuration` yang diperlukan oleh `kubectl aplly` untuk melakukan pembaruan. -{{< /warning >}} - -## Cara menghapus objek - -Ada dua cara untuk menghapus objek-objek yang dikelola dengan `kubectl apply`. - -### Rekomendasi: `kubectl delete -f ` - -Penghapusan objek secara manual dengan menggunakan perintah imperatif merupakan cara yang direkomendasikan karena lebih eksplisit dalam menentukan objek apa yang akan dihapus dan lebih kecil kemungkinannya untuk pengguna menghapus objek lain secara tidak sengaja: - -```shell -kubectl delete -f -``` - -### Alternatif: `kubectl apply -f --prune -l your=label` - -Lakukan ini hanya jika kamu benar-benar mengetahui apa yang kamu lakukan. - -{{< warning >}} -Perintah `kubectl apply --prune` masih dalam versi alpha dan perubahan-perubahan yang tidak memiliki kompatibilitas dengan versi sebelumnya mungkin akan diperkenalkan pada rilis-rilis berikutnya. -{{< /warning >}} - -{{< warning >}} -Kamu harus berhati-hati ketika menggunakan perintah ini agar kamu tidak menghapus objek-objek lain secara tak sengaja. -{{< /warning >}} - -Sebagai alternatif dari `kubectl delete`, kamu bisa menggunakan `kubectl apply` untuk mengidentifikasi objek-objek yang hendak dihapus setelah file konfigurasi objek-objek tersebut dihapus dari direktori. Ketika dijalankan dengan argumen `--prune`, perintah `kubectl apply` akan melakukan *query* ke *API server* untuk mencari semua objek yang sesuai dengan himpunan label-label tertentu, dan berusaha untuk mencocokkan kofigurasi objek *live* yg diperoleh terhadap *file* konfigurasi objek. Jika sebuah objek cocok dengan *query* yang dilakukan, dan objek tersebut tidak memiliki *file* konfigurasi di direktori serta tidak memiliki anotasi `last-applied-configuration`, objek tersebut akan dihapus. - -{{< comment >}} -TODO(pwittrock): Kita perlu mengubah cara kerja perintah ini untuk mencegah pengguna menjalankan apply ke sub direktori secara tidak disengaja. -{{< /comment >}} - -```shell -kubectl apply -f --prune -l -``` - -{{< warning >}} -Perintah `kubectl apply` dengan argumen `--prune` sebaiknya hanya dijalankan terhadap direktori *root* yang berisi *file-file* konfigurasi objek. Menjalankan perintah tadi terhadap sub direktori bisa menyebabkan terhapusnya objek-objek lain secara tidak disengaja jika objek-objek tersebut memenuhi kriteria selektor label yang dispesifikasikan oleh argumen `-l