Thuta Learning
ရှာဖွေရန်
IntermediateDevOpsintermediate

ConfigMaps

စိတ်လျှော့ပါ။ ဒီခန်းကို စာအုပ်လိုမဟုတ်ဘဲ စကားပြောသလိုပဲ၊ နားလည်လွယ်အောင် ရှင်းပါမယ်။

ဒီခန်းပြီးရင် ဘာတတ်သွားမလဲ

  • ConfigMaps ကို ကြောက်စရာမလိုအောင် နားလည်မယ်
  • ကိုယ်တိုင် kubectl command/YAML ကို run ကြည့်တတ်မယ်
  • Real project ထဲမှာ ဒီ concept ကို ချက်ချင်း အသုံးချတတ်မယ်

ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်

Config value (ဥပမာ `API_URL=https://staging.example.com`) ကို Docker image ထဲမှာ hardcode လုပ်ထားရင်, staging ကနေ production ပြောင်းတဲ့အခါ image ကို ပြန် build ရမယ် — ဒါက slow ပြီး error-prone ပါတယ်။ ConfigMap ကို သုံးရင် config value ကို Kubernetes object တစ်ခုအဖြစ် သီးသန့်ထားပြီး, Pod က run time မှာ environment variable (ဒါမှမဟုတ် file) အနေနဲ့ inject လုပ်ယူနိုင်ပါတယ် — image ကိုယ်တိုင် မပြောင်းရဘဲ ConfigMap တစ်ခုတည်း ပြောင်းလိုက်ရင် app behavior ပြောင်းနိုင်ပါတယ်။

လက်တွေ့ scenario နဲ့ ချိတ်ကြည့်မယ်

ConfigMap ကို YAML နဲ့ define လုပ်ပြီး Pod spec ထဲမှာ `envFrom` (ConfigMap ရဲ့ key-value အားလုံးကို env variable အဖြစ်) ဒါမှမဟုတ် `volumeMounts` (config file အဖြစ်) နဲ့ ချိတ်ဆက်ယူနိုင်ပါတယ်။ Staging environment နဲ့ production environment အတွက် ConfigMap နှစ်ခု ခွဲထားပြီး, Deployment YAML ကို မပြောင်းဘဲ ConfigMap ကိုပဲ ပြောင်းရုံနဲ့ environment ကူးပြောင်းနိုင်ပါတယ်။

အတူတူ ကြည့်မယ်

yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  API_URL: "https://api.example.com"
  LOG_LEVEL: "info"
---
apiVersion: v1
kind: Pod
metadata:
  name: app-with-config
spec:
  containers:
    - name: app
      image: my-app:latest
      envFrom:
        - configMapRef:
            name: app-config
You should see
$ kubectl exec app-with-config -- printenv API_URL
https://api.example.com

၅ မိနစ် စမ်းကြည့်

ConfigMap တစ်ခု create လုပ်ပြီး Pod ထဲမှာ envFrom နဲ့ ချိတ်ဆက်ကြည့်ပါ — `kubectl exec <pod> -- printenv` နဲ့ value ဝင်လာကြောင်း စစ်ကြည့်ပါ။

သတိလေးတစ်ချက်

ConfigMap ထဲက data ကို ဘယ်သူမဆို `kubectl get configmap -o yaml` နဲ့ ဖတ်နိုင်ပါတယ် — sensitive data တစ်စုံတစ်ခုမှ ConfigMap ထဲ မထည့်ပါနှင့်။

ဒီနေရာမှာ လူအများမှားတတ်တယ်

  • Password/API key ကို ConfigMap ထဲ ထည့်ခြင်း — ConfigMap ထဲက data က plain text ပါ, encrypt မထားပါ (Secret သုံးရပါမယ်)
  • ConfigMap ကို update လုပ်ပြီးတဲ့နောက် Pod ကို restart မလုပ်ဘဲ value အသစ် ချက်ချင်းဝင်လာမယ်လို့ ထင်ခြင်း — envFrom သုံးထားရင် Pod ပြန် create/restart ရမှ value အသစ်ဝင်ပါတယ်

အခု ကိုယ်တိုင် စမ်းကြည့်

ConfigMap တစ်ခု create လုပ်ပြီး Pod ထဲမှာ envFrom နဲ့ ချိတ်ဆက်ကြည့်ပါ — `kubectl exec <pod> -- printenv` နဲ့ value ဝင်လာကြောင်း စစ်ကြည့်ပါ။

You'll know it worked when: $ kubectl exec app-with-config -- printenv API_URL https://api.example.com

ConfigMaps | Thuta Learning