Skip to content

Commit

Permalink
Initialize Common Label for ID Localization. (kubernetes#16706)
Browse files Browse the repository at this point in the history
  • Loading branch information
irvifa authored and zacharysarah committed Dec 5, 2019
1 parent 5547a52 commit 2d46952
Showing 1 changed file with 179 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
---
title: Label yang Disarankan
content_template: templates/concept
---

{{% capture overview %}}
Kamu dapat melakukan visualisasi dan mengatur objek Kubernetes dengan lebih banyak _tools_
dibandingkan dengan perintah kubectl dan dasbor. Sekumpulan label mengizinkan _tools_
untuk bekerja dengan interoperabilitas, mendeskripsikan objek dengan cara yang umum yang dapat
dipahami semua _tools_.

Sebagai tambahan bagi _tooling_ tambahan, label yang disarankan ini mendeskripsikan
aplikasi sehingga informasi yang ada diapat di-_query_.
{{% /capture %}}

{{% capture body %}}
Metadata ini diorganisasi berbasis konsep dari sebuah aplikasi. Kubernetes bukan merupakan
sebuah platform sebagai sebuah _service_ (_platform as a service_/PaaS) dan tidak
mewajibkan sebuah gagasan formal dari sebuah aplikasi.
Sebagai gantinya, aplikasi merupakan suatu hal informal yang dideskripsikan melalui metadata.
Definisi yang dimiliki oleh sebuah aplikasi merupakan sebuah hal yang cukup longgar.

{{< note >}}
Berikut merupakan label yang disarankan. Label ini mempermudah
proses manajemen aplikasi tetapi tidak dibutuhkan untuk _tooling_ utama apa pun.
{{< /note >}}

Label yang digunakan secara umum serta anotasi memiliki prefiks yang serupa: `app.kubernetes.io`. Label
tanpa sebuah prefiks bersifat privat khusus pengguna saja. Prefiks yang digunakan secara umum tadi
menjamin bahwa label tadi tidak akan mengganggu label _custom_ yang diberikan oleh pengguna.

## Label

Untuk mendapatkan keuntungan menyeluruh dari penggunaan label ini,
label harus digunakan pada seluruh objek sumber daya.

| _Key_ | Deskripsi | Contoh | Tipe |
| ----------------------------------- | --------------------- | -------- | ---- |
| `app.kubernetes.io/name` | Nama aplikasi | `mysql` | string |
| `app.kubernetes.io/instance` | Nama unik yang bersifat sebagai pengidentifikasi dari sebuah instans aplikasi | `wordpress-abcxzy` | string |
| `app.kubernetes.io/version` | Versi saat ini dari aplikasi (misalnya sebuah versi semantik, hash revisi, etc.) | `5.7.21` | string |
| `app.kubernetes.io/component` | Komponen yang ada pada arsitektur | `database` | string |
| `app.kubernetes.io/part-of` | Nama dari komponen lebih tinggi dari aplikasi yang mencakup bagian ini | `wordpress` | string |
| `app.kubernetes.io/managed-by` | Alat yang digunakan untuk mengatur operasi pada aplikasi | `helm` | string |

Untuk memberikan ilustrasi dari penggunaan label, bayangkan sebuah objek StatefulSet yang didefinisikan sebagai berikut:

```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: wordpress-abcxzy
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
app.kubernetes.io/managed-by: helm
```
## Aplikasi dan Instans Aplikasi
Sebuah aplikasi dapat diinstal sekali atau beberapa kali di dalam kluster Kubernetes dan,
pada beberapa kasus, di dalam sebuah _namespace_ yang sama. Misalnya, wordpress dapat
diinstal lebih dari satu kali dimana situs web yang berbeda merupakan hasil instalasi yang berbeda.
Nama dari sebuah aplikasi dan nama instans akan dicatat secara terpisah. Sebagai contoh,
WordPress memiliki `wordpress` sebagai nilai dari `app.kubernetes.io/name` dimana
nama instans yang digunakan adalah `wordpress-abcxzy` yang merupakan nilai dari `app.kubernetes.io/instance`.
Hal ini memungkinkan aplikasi dan instans aplikasi untuk dapat diidentifikasi. Setiap instans dari aplikasi
haruslah memiliki nama yang unik.

## Contoh

Untuk memberikan ilustrasi dengan cara yang berbeda pada penggunaan label, contoh di bawah ini
memiliki tingkat kompleksitas yang cukup beragam.

### Sebuah Aplikasi _Stateless_ Sederhana

Bayangkan sebuah kasus dimana sebuah aplikasi _stateless_ di-_deploy_
menggunakan Deployment dan Service. Di bawah ini merupakan
contoh kutipan yang merepresentasikan bagaimana
label dapat digunakan secara sederhana.

Deployment digunakan untuk memastikan Pod dijalankan untuk aplikasi itu sendiri.
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxzy
...
```

Service digunakan untuk mengekspos aplikasi.
```yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: myservice
app.kubernetes.io/instance: myservice-abcxzy
...
```

### Sebuah Aplikasi Web dengan Basis Data

Bayangkan sebuah aplikasi yang lebih kompleks: sebuah aplikasi web (WordPress)
yang menggunakan basis data (MySQL), yang diinstal menggunakan Helm.
Kutipan berikut merepresentasikan objek yang di-_deploy_ untuk aplikasi ini.

Berikut merupakan konfigurasi Deployment yang digunakan untuk WordPress:

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxzy
app.kubernetes.io/version: "4.9.4"
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: server
app.kubernetes.io/part-of: wordpress
...
```

Service yang digunakan untuk mengekspos WordPress:

```yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: wordpress
app.kubernetes.io/instance: wordpress-abcxzy
app.kubernetes.io/version: "4.9.4"
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: server
app.kubernetes.io/part-of: wordpress
...
```

MySQL diekspos sebagai StatefulSet dengan metadata yang digunakan untuk StatefulSet tersebut serta aplikasi yang menggunakannya:

```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxzy
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
```

Service yang digunakan untuk mengekspos MySQL sebagai bagian dari WordPress:

```yaml
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/name: mysql
app.kubernetes.io/instance: mysql-abcxzy
app.kubernetes.io/version: "5.7.21"
app.kubernetes.io/managed-by: helm
app.kubernetes.io/component: database
app.kubernetes.io/part-of: wordpress
...
```

Dengan StatefulSet MySQL dan Service kamu dapat mengetahui informasi yang ada pada MySQL dan Wordpress.

{{% /capture %}}

0 comments on commit 2d46952

Please sign in to comment.