ConfigMap
Versi Bahasa Indonesia. Baca dalam Bahasa Inggris
ConfigMap adalah objek API yang digunakan untuk menyimpan data non-rahasia dalam pasangan key-value. Pod dapat menggunakan ConfigMap sebagai environment variable, argumen baris perintah, atau sebagai file konfigurasi dalam volume.
ConfigMap memungkinkan Anda memisahkan konfigurasi khusus lingkungan dari image container, sehingga aplikasi Anda mudah dipindahkan (portable).
Aplikasi: Mengambil Konfigurasi dari ENV
Kita sudah memiliki aplikasi yang akan mengembalikan respons JSON {"message":"Success"}. Mari kita buat aplikasi tersebut dapat dikonfigurasi sehingga aplikasi kita akan memeriksa environment variable DEFAULT_MESSAGE dan menggunakan nilainya sebagai pesan dalam respons kita.
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
"os"
)
type Response struct {
Message string `json:"message,omitempty"`
}
func main() {
// get default message from env
message := os.Getenv("DEFAULT_MESSAGE")
if message == "" {
// fallback message
message = "Success"
}
srv := http.NewServeMux()
srv.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
res := Response{
Message: message,
}
err := json.NewEncoder(w).Encode(res)
if err != nil {
log.Fatal(err)
}
})
fmt.Println("Server is running on port 8080...")
err := http.ListenAndServe(":8080", srv)
if err != nil {
log.Fatal(err)
}
}Coba jalankan dengan environment variable tambahan seperti ini DEFAULT_MESSAGE="k8s" go run main.go dan akan mengembalikan k8s sebagai pesan ketika kita mengaksesnya.
β curl http://127.0.0.1:8080
{"message":"k8s"}Bangun aplikasi kita lagi menggunakan perintah docker build --tag simple-go . sehingga image baru tersedia di image docker Kubernetes.
Mendefinisikan ConfigMap
Mari kita buat file baru bernama configmap.yaml dan definisikan objek ConfigMap di dalamnya.
apiVersion: v1
kind: ConfigMap
metadata:
name: simple-go-config
data:
DEFAULT_MESSAGE: "Everything is fine!"Ini akan membuat objek ConfigMap dengan nama simple-go-config. Bagian data adalah pasangan key-value untuk konfigurasi kita. Di sini kita memiliki data konfigurasi dengan key DEFAULT_MESSAGE dan value "Everything is fine!".
Mari kita terapkan menggunakan perintah kubectl apply -f configmap.yaml. Dan periksa menggunakan kubectl get configmaps. Kita akan melihat simple-go-config dalam daftar.
β kubectl get configmaps
NAME DATA AGE
kube-root-ca.crt 1 20d
simple-go-config 1 3sKita juga dapat melihat detailnya menggunakan perintah kubectl describe configmaps simple-go-config.
β kubectl describe configmaps simple-go-config
Name: simple-go-config
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
DEFAULT_MESSAGE:
----
Everything is fine!
BinaryData
====
Events: <none>Mengikat ConfigMap di Deployment
Sekarang kita sudah menyiapkan ConfigMap, kita perlu memperbarui konfigurasi deployment untuk mengatur environment variable dengan nama DEFAULT_MESSAGE dan mengambil nilainya dari ConfigMap bernama simple-go-config dengan key DEFAULT_MESSAGE.
apiVersion: apps/v1
kind: Deployment
metadata:
name: simple-go
labels:
app: simple-go
spec:
replicas: 3
selector:
matchLabels:
app: simple-go
template:
metadata:
labels:
app: simple-go
spec:
containers:
- name: server
image: simple-go:latest
imagePullPolicy: Never
ports:
- containerPort: 8080
env:
- name: DEFAULT_MESSAGE
valueFrom:
configMapKeyRef:
name: simple-go-config
key: DEFAULT_MESSAGETerapkan deployment dan kita akan melihat kumpulan pod baru dibuat menggantikan pod lama.
β kubectl apply -f deployment.yaml
deployment.apps/simple-go configuredβ kubectl get pods
NAME READY STATUS RESTARTS AGE
simple-go-77b89f5cf8-6ldx9 1/1 Running 0 8s
simple-go-77b89f5cf8-bpsgq 1/1 Running 0 9s
simple-go-77b89f5cf8-jcfc7 1/1 Running 0 7sSekarang mari kita lakukan port-forward ke salah satu pod dan akses aplikasi kita dengan curl.
β kubectl port-forward simple-go-77b89f5cf8-6ldx9 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080Aplikasi kita sekarang akan mengembalikan pesan respons "Everything is fine!" seperti ini.
β curl http://127.0.0.1:8080
{"message":"Everything is fine!"}Setiap kali kita memperbarui ConfigMap, kita juga perlu me-restart pod agar mendapatkan konfigurasi terbaru.
Referensi
Last updated on