diff --git a/content/id/docs/tasks/configure-pod-container/_index.md b/content/id/docs/tasks/configure-pod-container/_index.md new file mode 100755 index 0000000000..65d61d64fa --- /dev/null +++ b/content/id/docs/tasks/configure-pod-container/_index.md @@ -0,0 +1,5 @@ +--- +title: "Mengatur Pod dan Kontainer" +weight: 20 +--- + diff --git a/content/id/docs/tasks/configure-pod-container/configure-pod-configmap.md b/content/id/docs/tasks/configure-pod-container/configure-pod-configmap.md new file mode 100644 index 0000000000..3d678ad75f --- /dev/null +++ b/content/id/docs/tasks/configure-pod-container/configure-pod-configmap.md @@ -0,0 +1,684 @@ +--- +title: Mengatur Pod untuk Menggunakan ConfigMap +content_template: templates/task +weight: 150 +card: + name: tasks + weight: 50 +--- + +{{% capture overview %}} +ConfigMap mengizinkan kamu untuk memisahkan artifak-artifak konfigurasi dari konten _image_ untuk menjaga aplikasi yang dikontainerisasi tetap portabel. Artikel ini menyediakan sekumpulan contoh penerapan yang mendemonstrasikan bagaimana cara membuat ConfigMap dan mengatur Pod menggunakan data yang disimpan di dalam ConfigMap. + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + +{{% capture steps %}} + + +## Membuat ConfigMap +Kamu dapat menggunakan `kubectl create configmap` ataupun generator ConfigMap pada `kustomization.yaml` untuk membuat sebuah ConfigMap. Perlu diingat bahwa `kubectl` mulai mendukung `kustomization.yaml` sejak versi 1.14. + +### Membuat ConfigMap Menggunakan kubectl create configmap + +Gunakan perintah `kubectl create configmap` untuk membuat ConfigMap dari [direktori](#membuat-configmap-dari-direktori), [berkas](#membuat-configmap-dari-berkas), ataupun [nilai-nilai yang harfiah (_literal values_)](#membuat-configmap-dari-nilai-harfiah): + +```shell +kubectl create configmap +``` + +di mana \ merupakan nama yang ingin kamu berikan pada ConfigMap tersebut dan \ adalah direktori, berkas, atau nilai harfiah yang digunakan sebagai sumber data. +Nama dari sebuah objek ConfigMap haruslah berupa +[nama subdomain DNS](/docs/concepts/overview/working-with-objects/names#dns-subdomain-names) yang sah. + +Ketika kamu membuat ConfigMap dari sebuah berkas, secara bawaan, _basename_ dari berkas tersebut akan menjadi kunci pada \, dan isi dari berkas tersebut akan menjadi nilai dari kunci tersebut. + +Kamu dapat menggunakan [`kubectl describe`](/docs/reference/generated/kubectl/kubectl-commands/#describe) atau +[`kubectl get`](/docs/reference/generated/kubectl/kubectl-commands/#get) untuk mengambil informasi +mengenai sebuah ConfigMap. + +#### Membuat ConfigMap dari direktori + +Kamu dapat menggunakan `kubectl create configmap` untuk membuat sebuah ConfigMap dari banyak berkas dalam sebuah direktori yang sama. Ketika kamu membuat sebuah ConfigMap dari sebuah direktori, kubectl akan mengidentifikasi berkas-berkas yang memiliki _basename_ yang merupakan sebuah kunci yang sah pada direktori dan mengemas tiap berkas tersebut ke dalam sebuah ConfigMap baru. Seluruh entri direktori kecuali berkas reguler akan diabaikan (subdirektori, _symlink_, _device_, _pipe_, dsb). + +Sebagai contoh: + +```shell +# Membuat direktori lokal +mkdir -p configure-pod-container/configmap/ + +# Mengunduh berkas-berkas sampel ke dalam direktori `configure-pod-container/configmap/` +wget https://kubernetes.io/examples/configmap/game.properties -O configure-pod-cont1ainer/configmap/game.properties +wget https://kubernetes.io/examples/configmap/ui.properties -O configure-pod-container/configmap/ui.properties + +# Membuat configmap +kubectl create configmap game-config --from-file=configure-pod-container/configmap/ +``` + +Perintah di atas mengemas tiap berkas, dalam kasus ini, `game.properties` dan `ui.properties` dalam direktori `configure-pod-container/configmap/` ke dalam ConfigMap dengan nama game-config. Kamu dapat menampilkan detail dari ConfigMap menggunakan perintah berikut: + +```shell +kubectl describe configmaps game-config +``` + +Keluaran akan tampil seperti berikut: +``` +Name: game-config +Namespace: default +Labels: +Annotations: + +Data +==== +game.properties: +---- +enemies=aliens +lives=3 +enemies.cheat=true +enemies.cheat.level=noGoodRotten +secret.code.passphrase=UUDDLRLRBABAS +secret.code.allowed=true +secret.code.lives=30 +ui.properties: +---- +color.good=purple +color.bad=yellow +allow.textmode=true +how.nice.to.look=fairlyNice +``` + +Berkas-berkas `game.properties` dan `ui.properties` pada direktori `configure-pod-container/configmap/` direpresentasikan oleh bagian `data` pada ConfigMap. + +```shell +kubectl get configmaps game-config -o yaml +``` +Keluaran akan tampil seperti berikut: + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + creationTimestamp: 2016-02-18T18:52:05Z + name: game-config + namespace: default + resourceVersion: "516" + uid: b4952dc3-d670-11e5-8cd0-68f728db1985 +data: + game.properties: | + enemies=aliens + lives=3 + enemies.cheat=true + enemies.cheat.level=noGoodRotten + secret.code.passphrase=UUDDLRLRBABAS + secret.code.allowed=true + secret.code.lives=30 + ui.properties: | + color.good=purple + color.bad=yellow + allow.textmode=true + how.nice.to.look=fairlyNice +``` + +#### Membuat ConfigMap dari berkas + +Kamu dapat menggunakan `kubectl create configmap` untuk membuat sebuah ConfigMap dari berkas individual, atau dari banyak berkas. + +Sebagai contoh, + +```shell +kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties +``` + +akan menghasilkan ConfigMap berikut: + +```shell +kubectl describe configmaps game-config-2 +``` + +dengan keluaran seperti berikut: + +``` +Name: game-config-2 +Namespace: default +Labels: +Annotations: + +Data +==== +game.properties: +---- +enemies=aliens +lives=3 +enemies.cheat=true +enemies.cheat.level=noGoodRotten +secret.code.passphrase=UUDDLRLRBABAS +secret.code.allowed=true +secret.code.lives=30 +``` + +Kamu dapat memasukkan argumen `--from-file` beberapa kali untuk membuat sebuah ConfigMap dari banyak sumber data. + +```shell +kubectl create configmap game-config-2 --from-file=configure-pod-container/configmap/game.properties --from-file=configure-pod-container/configmap/ui.properties +``` + +Kamu dapat menampilkan detail dari ConfigMap `game-config-2` menggunakan perintah berikut: + +```shell +kubectl describe configmaps game-config-2 +``` + +Keluaran akan tampil seperti berikut: + +``` +Name: game-config-2 +Namespace: default +Labels: +Annotations: + +Data +==== +game.properties: +---- +enemies=aliens +lives=3 +enemies.cheat=true +enemies.cheat.level=noGoodRotten +secret.code.passphrase=UUDDLRLRBABAS +secret.code.allowed=true +secret.code.lives=30 +ui.properties: +---- +color.good=purple +color.bad=yellow +allow.textmode=true +how.nice.to.look=fairlyNice +``` + +Gunakan opsi `--from-env-file` untuk membuat sebuah ConfigMap dari sebuah _env-file_, sebagai contoh: + +```shell +# Env-file berisi sebuah daftar variabel _environment_. +# Ada aturan-aturan sintaks yang berlaku: +# Tiap baris pada sebuah env file harus memiliki format VAR=VAL. +# Baris yang diawali # (komentar) akan diabaikan. +# Baris-baris kosong akan diabaikan. +# Tidak ada penanganan spesial untuk tanda kutip (tanda kutip akan menjadi bagian dari nilai pada ConfigMap). + +# Mengunduh berkas-berkas sampel berikut ke dalam direktori `configure-pod-container/configmap/` +wget https://kubernetes.io/examples/configmap/game-env-file.properties -O configure-pod-container/configmap/game-env-file.properties + +# Berkas env-file `game-env-file.properties` berisi sebagai berikut: +cat configure-pod-container/configmap/game-env-file.properties +enemies=aliens +lives=3 +allowed="true" + +# Komentar ini dan baris kosong di atasnya akan diabaikan. +``` + +```shell +kubectl create configmap game-config-env-file \ + --from-env-file=configure-pod-container/configmap/game-env-file.properties +``` + +akan menghasilkan ConfigMap sebagai berikut: + +```shell +kubectl get configmap game-config-env-file -o yaml +``` + +dengan keluaran seperti berikut: +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + creationTimestamp: 2017-12-27T18:36:28Z + name: game-config-env-file + namespace: default + resourceVersion: "809965" + uid: d9d1ca5b-eb34-11e7-887b-42010a8002b8 +data: + allowed: '"true"' + enemies: aliens + lives: "3" +``` + +{{< caution >}} +Ketika memasukkan `--from-env-file` beberapa kali untuk membuat sebuah ConfigMap dari beberapa sumber data, hanya env-file terakhir yang akan digunakan. +{{< /caution >}} + +Contoh perilaku memasukkan `--from-env-file` beberapa kali didemonstrasikan dengan: + +```shell +# Mengunduh berkas-berkas sampel berikut ke dalam direktori `configure-pod-container/configmap/` +wget https://kubernetes.io/examples/configmap/ui-env-file.properties -O configure-pod-container/configmap/ui-env-file.properties + +# Membuat configmap +kubectl create configmap config-multi-env-files \ + --from-env-file=configure-pod-container/configmap/game-env-file.properties \ + --from-env-file=configure-pod-container/configmap/ui-env-file.properties +``` + +akan menghasilkan ConfigMap sebagai berikut: + +```shell +kubectl get configmap config-multi-env-files -o yaml +``` + +dengan keluaran seperti berikut: +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + creationTimestamp: 2017-12-27T18:38:34Z + name: config-multi-env-files + namespace: default + resourceVersion: "810136" + uid: 252c4572-eb35-11e7-887b-42010a8002b8 +data: + color: purple + how: fairlyNice + textmode: "true" +``` + +#### Menentukan kunci yang akan digunakan ketika membuat ConfigMap dari sebuah berkas + +Kamu dapat menentukan kunci selain dari nama berkas untuk digunakan pada bagian `data` pada ConfigMap yang kamu buat menggunakan argumen `--from-file`: + +```shell +kubectl create configmap game-config-3 --from-file== +``` + +di mana `` merupakan kunci yang ingin kamu gunakan pada ConfigMap dan `` merupakan lokasi dari berkas sumber data yang akan menjadi nilai dari kunci tersebut. + +Sebagai contoh: + +```shell +kubectl create configmap game-config-3 --from-file=game-special-key=configure-pod-container/configmap/game.properties +``` + +akan menghasilkan ConfigMap sebagai berikut: +``` +kubectl get configmaps game-config-3 -o yaml +``` + +dengan keluaran seperti berikut: +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + creationTimestamp: 2016-02-18T18:54:22Z + name: game-config-3 + namespace: default + resourceVersion: "530" + uid: 05f8da22-d671-11e5-8cd0-68f728db1985 +data: + game-special-key: | + enemies=aliens + lives=3 + enemies.cheat=true + enemies.cheat.level=noGoodRotten + secret.code.passphrase=UUDDLRLRBABAS + secret.code.allowed=true + secret.code.lives=30 +``` + +#### Membuat ConfigMap dari nilai harfiah + +Kamu dapat menggunakan `kubectl create configmap` dengan argumen `--from-literal` untuk menentukan nilai harfiah dari baris perintah: + +```shell +kubectl create configmap special-config --from-literal=special.how=very --from-literal=special.type=charm +``` + +Kamu dapat memasukkan beberapa pasang kunci-nilai. Tiap pasang yang dimasukkan pada _command line_ direpresentasikan sebagai sebuah entri terpisah pada bagian `data` dari ConfigMap. + +```shell +kubectl get configmaps special-config -o yaml +``` + +Keluaran akan tampil seperti berikut: +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + creationTimestamp: 2016-02-18T19:14:38Z + name: special-config + namespace: default + resourceVersion: "651" + uid: dadce046-d673-11e5-8cd0-68f728db1985 +data: + special.how: very + special.type: charm +``` + +### Membuat ConfigMap dari generator +`kubectl` mendukung `kustomization.yaml` sejak versi 1.14. +Kamu juga dapat membuat ConfigMap dari generator lalu menggunakannya untuk membuat objek tersebut pada +peladen API. Generator +harus dituliskan pada `kustomization.yaml` dalam sebuah direktori. + +#### Menghasilkan ConfigMap dari berkas +Sebagai contoh, untuk menghasilkan ConfigMap dari berkas `configure-pod-container/configmap/game.properties` +```shell +# Membuat berkas kustomization.yaml dengan ConfigMapGenerator +cat <./kustomization.yaml +configMapGenerator: +- name: game-config-4 + files: + - configure-pod-container/configmap/game.properties +EOF +``` + +Gunakan direktori kustomization untuk membuat objek ConfigMap. +```shell +kubectl apply -k . +configmap/game-config-4-m9dm2f92bt created +``` + +Kamu dapat melihat ConfigMap yang dihasilkan seperti berikut: + +```shell +kubectl get configmap +NAME DATA AGE +game-config-4-m9dm2f92bt 1 37s + + +kubectl describe configmaps/game-config-4-m9dm2f92bt +Name: game-config-4-m9dm2f92bt +Namespace: default +Labels: +Annotations: kubectl.kubernetes.io/last-applied-configuration: + {"apiVersion":"v1","data":{"game.properties":"enemies=aliens\nlives=3\nenemies.cheat=true\nenemies.cheat.level=noGoodRotten\nsecret.code.p... + +Data +==== +game.properties: +---- +enemies=aliens +lives=3 +enemies.cheat=true +enemies.cheat.level=noGoodRotten +secret.code.passphrase=UUDDLRLRBABAS +secret.code.allowed=true +secret.code.lives=30 +Events: +``` + +Perlu diingat baha nama dari ConfigMap yang dihasilkan memiliki sufiks yang ditambahkan dengan melakukan _hashing_ terhadap konten dari ConfigMap tersebut. Hal ini memastikan bahwa +sebuah ConfigMap baru akan dihasilkan setiap kali konten dimodifikasi. + +#### Menentukan kunci yang akan digunakan ketika generating ConfigMap dari sebuah berkas +Kamu dapat menentukan kunci selain nama berkas untuk digunakan pada generator ConfigMap. +Sebagai contoh, untuk menghasilkan sebuah ConfigMap dari berkas `configure-pod-container/configmap/game.properties` +dengan kunci `game-special-key` + +```shell +# Membuat berkas kustomization.yaml dengan ConfigMapGenerator +cat <./kustomization.yaml +configMapGenerator: +- name: game-config-5 + files: + - game-special-key=configure-pod-container/configmap/game.properties +EOF +``` + +Gunakan direktori kustomization untuk membuat objek ConfigMap. +```shell +kubectl apply -k . +configmap/game-config-5-m67dt67794 created +``` + +#### Menghasilkan ConfigMap dari Nilai-nilai Harfiah +Untuk menghasilkan ConfigMap dari nilai-nilai harfiah `special.type=charm` dan `special.how=very`, +kamu dapat menentukan generator ConfigMap pada `kustomization.yaml` sebagai berikut +```shell +# Membuat berkas kustomization.yaml dengan ConfigMapGenerator +cat <./kustomization.yaml +configMapGenerator: +- name: special-config-2 + literals: + - special.how=very + - special.type=charm +EOF +``` +Gunakan direktori kustomization untuk membuat objek ConfigMap. +```shell +kubectl apply -k . +configmap/special-config-2-c92b5mmcf2 created +``` + +## Menentukan variabel _environment_ kontainer menggunakan data ConfigMap + +### Menentukan variabel _environment_ kontainer dengan data dari sebuah ConfigMap + +1. Menentukan sebuah variabel _environment_ sebagai sepasang kunci-nilai pada ConfigMap: + + ```shell + kubectl create configmap special-config --from-literal=special.how=very + ``` + +2. Memberikan nilai `special.how` yang sudah terdapat pada ConfigMap pada variabel _environment_ `SPECIAL_LEVEL_KEY` di spesifikasi Pod. + + {{< codenew file="pods/pod-single-configmap-env-variable.yaml" >}} + + Buat Pod: + + ```shell + kubectl create -f https://kubernetes.io/id/examples/pods/pod-single-configmap-env-variable.yaml + ``` + + Sekarang, keluaran dari Pod meliputi variabel _environment_ `SPECIAL_LEVEL_KEY=very`. + +### Menentukan variabel _environment_ kontainer dengan data dari beberapa ConfigMap + + * Seperti pada contoh sebelumnya, buat ConfigMap terlebih dahulu. + + {{< codenew file="configmap/configmaps.yaml" >}} + + Buat ConfigMap: + + ```shell + kubectl create -f https://kubernetes.io/examples/configmap/configmaps.yaml + ``` + +* Tentukan variabel _environment_ pada spesifikasi Pod. + + {{< codenew file="pods/pod-multiple-configmap-env-variable.yaml" >}} + + Buat Pod: + + ```shell + kubectl create -f https://kubernetes.io/id/examples/pods/pod-multiple-configmap-env-variable.yaml + ``` + + Sekarang, keluaran Pod meliputi variabel _environment_ `SPECIAL_LEVEL_KEY=very` dan `LOG_LEVEL=INFO`. + +## Mengatur semua pasangan kunci-nilai pada ConfigMap sebagai variabel _environment_ kontainer + +{{< note >}} +Fungsi ini tersedia pada Kubernetes v1.6 dan selanjutnya. +{{< /note >}} + +* Buat ConfigMap yang berisi beberapa pasangan kunci-nilai. + + {{< codenew file="configmap/configmap-multikeys.yaml" >}} + + Buat ConfigMap: + + ```shell + kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml + ``` + +* Gunakan `envFrom` untuk menentukan seluruh data pada ConfigMap sebagai variabel _environment_ kontainer. Kunci dari ConfigMap akan menjadi nama variabel _environment_ di dalam Pod. + + {{< codenew file="pods/pod-configmap-envFrom.yaml" >}} + + Buat Pod: + + ```shell + kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-envFrom.yaml + ``` + + Sekarang, Pod keluaran pod meliputi variabel _environment_ `SPECIAL_LEVEL=very` dan `SPECIAL_TYPE=charm`. + + +## Menggunakan variabel _environment_ yang ditentukan ConfigMap pada perintah Pod + +Kamu dapat menggunakan variabel _environment_ yang ditentukan ConfigMap pada bagian `command` dari spesifikasi Pod menggunakan sintaks substitusi Kubernetes `$(VAR_NAME)`. + +Sebagai contoh, spesifikasi Pod berikut + +{{< codenew file="pods/pod-configmap-env-var-valueFrom.yaml" >}} + +dibuat dengan menjalankan + +```shell +kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-env-var-valueFrom.yaml +``` + +menghasilkan keluaran pada kontainer `test-container` seperti berikut: + +```shell +very charm +``` + +## Menambahkan data ConfigMap pada Volume + +Seperti yang sudah dijelaskan pada [Membuat ConfigMap dari berkas](#membuat-configmap-dari-berkas), ketika kamu membuat ConfigMap menggunakan ``--from-file``, nama dari berkas tersebut akan menjadi kunci yang disimpan pada bagian `data` dari ConfigMap. Isi berkas tersebut akan menjadi nilai dari kunci tersebut. + +Contoh pada bagian ini merujuk pada ConfigMap bernama `special-config`, Seperti berikut. + +{{< codenew file="configmap/configmap-multikeys.yaml" >}} + +Buat ConfigMap: + +```shell +kubectl create -f https://kubernetes.io/examples/configmap/configmap-multikeys.yaml +``` + +### Mengisi Volume dengan data yang disimpan Pada ConfigMap + +Tambahkan nama ConfigMap di bawah bagian `volumes` pada spesifikasi Pod. +Hal ini akan menambahkan data ConfigMap pada direktori yang ditentukan oleh `volumeMounts.mountPath` (pada kasus ini, `/etc/config`). +Bagian `command` berisi daftar berkas pada direktori dengan nama-nama yang sesuai dengan kunci-kunci pada ConfigMap. + +{{< codenew file="pods/pod-configmap-volume.yaml" >}} + +Buat Pod: + +```shell +kubectl create -f https://kubernetes.io/i/examples/pods/pod-configmap-volume.yaml +``` + +Ketika Pod berjalan, perintah `ls /etc/config/` akan menghasilkan keluaran di bawah: + +```shell +SPECIAL_LEVEL +SPECIAL_TYPE +``` + +{{< caution >}} +Jika ada beberapa berkas pada direktori `/etc/config/`, berkas-berkas tersebut akan dihapus. +{{< /caution >}} + +### Menambahkan data ConfigMap pada jalur tertentu pada Volume + +Gunakan kolom `path` untuk menentukan jalur berkas yang diinginkan untuk butir tertentu pada ConfigMap (butir ConfigMap tertentu). +Pada kasus ini, butir `SPECIAL_LEVEL` akan akan dipasangkan sebagai `config-volume` pada `/etc/config/keys`. + +{{< codenew file="pods/pod-configmap-volume-specific-key.yaml" >}} + +Buat Pod: + +```shell +kubectl create -f https://kubernetes.io/examples/pods/pod-configmap-volume-specific-key.yaml +``` + +Ketika Pod berjalan, perintah `cat /etc/config/keys` akan menghasilkan keluaran di bawah: + +```shell +very +``` + +{{< caution >}} +Seperti sebelumnya, semua berkas yang sebelumnya berada pada direktori `/etc/config/` akan dihapus. +{{< /caution >}} + +### Memproyeksikan kunci ke jalur dan perizinan berkas tertentu + +Kamu dapat memproyeksikan kunci ke jalur dan perizinan tertentu pada setiap +berkas. Panduan pengguna [Secret](/docs/concepts/configuration/secret/#using-secrets-as-files-from-a-pod) menjelaskan mengenai sintaks-sintaksnya. + +### ConfigMap yang dipasang akan diperbarui secara otomatis + +Ketika sebuah ConfigMap yang sudah dipasang pada sebuah volume diperbarui, kunci-kunci yang diproyeksikan akan turut diperbarui. Kubelet akan memeriksa apakah ConfigMap yang dipasang merupakan yang terbaru pada sinkronisasi berkala. Namun, ConfigMap menggunakan _cache_ lokal berbasis ttl (_time-to-live_) miliknya untuk mendapatkan nilai dari ConfigMap saat ini. Hasilnya, keseluruhan penundaan dari saat ketika ConfigMap diperbarui sampai saat ketika kunci-kunci baru diproyeksikan ke pada Pod bisa selama periode sinkronisasi kubelet (secara bawaan selama 1 menit) + ttl dari _cache_ ConfigMap (secara bawaan selama 1 menit) pada kubelet. Kamu dapat memicu pembaruan langsung dengan memperbarui salah satu dari anotasi Pod. + +{{< note >}} +Kontainer yang menggunakan ConfigMap sebagai volume [subPath](/docs/concepts/storage/volumes/#using-subpath) tidak akan menerima pembaruan ConfigMap. +{{< /note >}} + +{{% /capture %}} + +{{% capture discussion %}} + +## Memahami ConfigMap dan Pod + +Sumber daya API ConfigMap menyimpan data konfigurasi sebagai pasangan kunci-nilai. Data tersebut dapat dikonsumsi oleh Pod atau sebagai penyedia konfigurasi untuk komponen-komponen sistem seperti kontroler. ConfigMap mirip dengan [Secret](/docs/concepts/configuration/secret/), tetapi ConfigMap dimaksudkan untuk mengolah tulisan yang tidak memiliki informasi yang sensitif. Baik pengguna maupun komponen sistem dapat menyimpan data konfigurasi pada ConfigMap. + +{{< note >}} +ConfigMap harus mereferensikan berkas-berkas properti, bukan menggantikannya. Anggaplah ConfigMap sebagai sesuatu yang merepresentasikan direktori `/etc` beserta isinya pada Linux. Sebagai contoh, jika kamu membuat sebuah [Volume Kubernetes](/docs/concepts/storage/volumes/) dari ConfigMap, tiap butir data pada ConfigMap direpresentasikan sebagai sebuah berkas pada volume. +{{< /note >}} + +Kolom `data` pada ConfigMap berisi data konfigurasi. Seperti pada contoh di bawah, hal ini bisa berupa sesuatu yang sederhana -- seperti properti individual yang ditentukan menggunakan `--from-literal` -- atau sesuatu yang kompleks -- seperti berkas konfigurasi atau _blob_ JSON yang ditentukan dengan `--from-file`. + +```yaml +apiVersion: v1 +kind: ConfigMap +metadata: + creationTimestamp: 2016-02-18T19:14:38Z + name: example-config + namespace: default +data: + # contoh properti yang sederhana yang ditentukan menggunakan --from-literal + example.property.1: hello + example.property.2: world + # contoh properti yang kompleks yang ditentukan menggunakan --from-file + example.property.file: |- + property.1=value-1 + property.2=value-2 + property.3=value-3 +``` + +### Batasan + +- Kamu harus membuat ConfigMap sebelum merujuknya pada spesifikasi Pod (kecuali kamu menandai ConfigMap sebagai "_optional_"). Jika kamu merujuk sebuah ConfigMap yang tidak ada, Pod tersebut tidak akan berjalan. Sama halnya, mereferensikan kunci yang tidak ada pada ConfigMap akan mencegah Pod untuk berjalan. + +- Jika kamu menggunakan `envFrom` untuk menentukan variabel _environment_ dari ConfigMap, kunci-kunci yang dianggap tidak sah akan dilewat. Pod akan diizinkan untuk berjalan, tetapi nama-nama yang tidak sah akan direkam pada _event log_ (`InvalidVariableNames`). Pesan _log_ tersebut mencantumkan tiap kunci yang dilewat. Sebagai contoh: + + ```shell + kubectl get events + ``` + + Keluaran akan tampil seperti berikut: + ``` + LASTSEEN FIRSTSEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE + 0s 0s 1 dapi-test-pod Pod Warning InvalidEnvironmentVariableNames {kubelet, 127.0.0.1} Keys [1badkey, 2alsobad] from the EnvFrom configMap default/myconfig were skipped since they are considered invalid environment variable names. + ``` + +- ConfigMap berada pada {{< glossary_tooltip term_id="namespace" >}} tertentu. ConfigMap hanya dapat dirujuk oleh Pod yang berada pada Namespace yang sama. + +- Kamu tidak dapat menggunakan ConfigMap untuk {{< glossary_tooltip text="Pod statis" term_id="static-pod" >}}, karena Kubelet tidak mendukung hal ini. + +{{% /capture %}} + +{{% capture whatsnext %}} +* Ikuti contoh penerapan pada dunia nyata [Mengatur Redis menggunakan ConfigMap](/docs/tutorials/configuration/configure-redis-using-configmap/). + +{{% /capture %}} diff --git a/content/id/examples/configmap/configmap-multikeys.yaml b/content/id/examples/configmap/configmap-multikeys.yaml new file mode 100644 index 0000000000..289702d123 --- /dev/null +++ b/content/id/examples/configmap/configmap-multikeys.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: special-config + namespace: default +data: + SPECIAL_LEVEL: very + SPECIAL_TYPE: charm diff --git a/content/id/examples/configmap/configmaps.yaml b/content/id/examples/configmap/configmaps.yaml new file mode 100644 index 0000000000..91b9f29755 --- /dev/null +++ b/content/id/examples/configmap/configmaps.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: special-config + namespace: default +data: + special.how: very +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: env-config + namespace: default +data: + log_level: INFO diff --git a/content/id/examples/pods/pod-configmap-env-var-valueFrom.yaml b/content/id/examples/pods/pod-configmap-env-var-valueFrom.yaml new file mode 100644 index 0000000000..a72b4335ce --- /dev/null +++ b/content/id/examples/pods/pod-configmap-env-var-valueFrom.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: k8s.gcr.io/busybox + command: [ "/bin/sh", "-c", "echo $(SPECIAL_LEVEL_KEY) $(SPECIAL_TYPE_KEY)" ] + env: + - name: SPECIAL_LEVEL_KEY + valueFrom: + configMapKeyRef: + name: special-config + key: SPECIAL_LEVEL + - name: SPECIAL_TYPE_KEY + valueFrom: + configMapKeyRef: + name: special-config + key: SPECIAL_TYPE + restartPolicy: Never diff --git a/content/id/examples/pods/pod-configmap-envFrom.yaml b/content/id/examples/pods/pod-configmap-envFrom.yaml new file mode 100644 index 0000000000..70ae7e5bcf --- /dev/null +++ b/content/id/examples/pods/pod-configmap-envFrom.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: k8s.gcr.io/busybox + command: [ "/bin/sh", "-c", "env" ] + envFrom: + - configMapRef: + name: special-config + restartPolicy: Never diff --git a/content/id/examples/pods/pod-configmap-volume-specific-key.yaml b/content/id/examples/pods/pod-configmap-volume-specific-key.yaml new file mode 100644 index 0000000000..72e38fd836 --- /dev/null +++ b/content/id/examples/pods/pod-configmap-volume-specific-key.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: k8s.gcr.io/busybox + command: [ "/bin/sh","-c","cat /etc/config/keys" ] + volumeMounts: + - name: config-volume + mountPath: /etc/config + volumes: + - name: config-volume + configMap: + name: special-config + items: + - key: SPECIAL_LEVEL + path: keys + restartPolicy: Never diff --git a/content/id/examples/pods/pod-configmap-volume.yaml b/content/id/examples/pods/pod-configmap-volume.yaml new file mode 100644 index 0000000000..16457e63c4 --- /dev/null +++ b/content/id/examples/pods/pod-configmap-volume.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: k8s.gcr.io/busybox + command: [ "/bin/sh", "-c", "ls /etc/config/" ] + volumeMounts: + - name: config-volume + mountPath: /etc/config + volumes: + - name: config-volume + configMap: + # Berikan nama dari ConfigMap yang berisi berkas-berkas yang ingin kamu + # tambahkan ke kontainer + name: special-config + restartPolicy: Never diff --git a/content/id/examples/pods/pod-multiple-configmap-env-variable.yaml b/content/id/examples/pods/pod-multiple-configmap-env-variable.yaml new file mode 100644 index 0000000000..4790a9c661 --- /dev/null +++ b/content/id/examples/pods/pod-multiple-configmap-env-variable.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: k8s.gcr.io/busybox + command: [ "/bin/sh", "-c", "env" ] + env: + - name: SPECIAL_LEVEL_KEY + valueFrom: + configMapKeyRef: + name: special-config + key: special.how + - name: LOG_LEVEL + valueFrom: + configMapKeyRef: + name: env-config + key: log_level + restartPolicy: Never diff --git a/content/id/examples/pods/pod-single-configmap-env-variable.yaml b/content/id/examples/pods/pod-single-configmap-env-variable.yaml new file mode 100644 index 0000000000..c2aacd2de0 --- /dev/null +++ b/content/id/examples/pods/pod-single-configmap-env-variable.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: Pod +metadata: + name: dapi-test-pod +spec: + containers: + - name: test-container + image: k8s.gcr.io/busybox + command: [ "/bin/sh", "-c", "env" ] + env: + # Tentukan variabel environment + - name: SPECIAL_LEVEL_KEY + valueFrom: + configMapKeyRef: + # ConfigMap berisi nilai yang ingin kamu berikan pada SPECIAL_LEVEL_KEY + name: special-config + # Tentukan kunci yang diasosiasikan dengan nilainya + key: special.how + restartPolicy: Never