Introduction to Kubernetes

suum (RHCE| CC-ISC2| NSE3| AZ-900)
10 min readJul 11, 2021

Kubernetes ဆိုသည်မှာ Open Source system ဖြစ်ပြီး၊ Containers များကို ထိန်းကျောင်းမောင်းနှင်ပေးနိုင်သော Controller/Management Unit ဖြစ်သည်၊ Container Orchestrator ဟုလည်းခေါ် သည်။

Container Orchestrator ဆိုသည်မှာ cluster လုပ်ထားသော system group အတွင်းရှိ container များကို deploying, managing, fault-tolerant နဲ့ scalable စသော နည်းပညာများဖြင့် automatically မောင်းနှင်ပေးသည်။

Container ဆိုသည်မှာ application တစ်ခုအတွက် လိုအပ်သော libraries, frameworks နဲ့ အခြားလိုအပ်သော dependencies များကို Package ထုပ်ပိုးပေးထားပြီး၊ အဆိုပါ application ကိုသီးခြား Isolated ဖြစ်သော Environment တစ်ခုကို ထောက်ပံ့ပေးသည်။

Kubernetes

Keubernetes ဆိုသည်မှာGreek ဘာသာစကား κυβερνήτης မှဆင်းသက်လာပြီး helmsman or ship pilot အဓိပ္ပါယ်ရသည်။ တနည်းအားဖြင့် kubernetes သည် pilot on a ship of containers ကုန်တင်သ‌င်္ဘောပေါ်ရှိ ၊ ယာဥ်မှူးဖြစ်သည်။

Kubernetes ကို K နဲ့ s အကြားရှိ စကားလုံး ၈လုံးကို စု၍ K8s ဟုလည်းခေါ် သည်။

Kubernetes ကို Google ၏ Engineer များမှ Design နဲ့ Develop ပြုလုပ်ထားခဲ့သည့် Google’s Borg system ကိုအခြေခံထားကာ၊ Go language နဲ့ ရေးသားထားပြီး Apache License, Version 2.0. အောက်တွင်ရှိသည့် နည်းပညာဖြစ်သည်။ Google သည် kubernete v1.0 ဇူလိုင် ၂၀၁၅ တွင် release ပြုလုပ်ခဲ့ပြီး၊ Cloud Native Computing Foundation (CNCF) ကို လှူဒါန်းခဲ့သည်။

Kubernetes version

Version release ကို 3 months cycles ပုံစံဖြင့်ထုတ်ပေးပါတယ်။

Container Orchestration ပြုလုပ်ပေးနိုင်သော အခြား Tools များလည်းရှိသည်။ ၄င်းတို့မှာ-Amazon (ECS, EKS), Azure(ACI, ASF(open source), CNCF (Kubernetes), Marathon (Apache Mesos), Nomad(HashiCorp), Docker Swarm(Docker, Inc.)

Kubernetes Features

Automatic bin packing

Containers များ၏ resource လိုအပ်ချက်များနဲ့ အခြား သောလုပ်ဆောင်မှုများအတွက်Availability ကိုမထိခိုက်စေဘဲ Automatically အစားထိုးပေးနိုင်သည်။ Resources အသုံးချမှုကို အရေးကြီးသော အခြေအနေများနဲ့ workloads မျာကောင်းဆုံး အလုပ်လုပ်စေရန်အတွက် လိုအပ်သလို မောင်းနှင်ပေးနိုင်သည်။ Resources အသုံးပြုမှုကိုလည်း ပိုမိုသက်သာစေသည်။

Self-healing

Containers များ fail ဖြစ်လျှင် restarts လုပ်ပေးသည်။ Nodes die ဖြစ်သွားလျှင် containers များကို automatically replace နဲ့ reschedules ပြုလုပ်ပေးသည်။ Rule/policy အပေါ် မူတည်ပြီး health checks အရ တုန်ပြန်မှုမရှိသော containers များကို လည်း restart သို့မဟုတ် kill လုပ်ပေးနိုင်သည်။ တုန်ပြန်မှုမရှိသော containers များထံသို့ routed traffic များမရောက်အောင်းလည်း တာဆီးပေးသည်။

Service discovery and load balancing

Kubernetes သည် pods များကို ကိုယ်ပိုင် ip address များ၊ Pods အစုများကို single DNS name များတွဲပေးသည်။ Load balancer သည်၊ ထို IP , DNS name များဖြင့် request များကို Pods များဆီသို့ ပို့နိုင်သည်။

Automated rollouts and rollbacks

Kubernetes သည် application ၏ health ကို monitoring လုပ်နေစဉ်အတွင်း instances များကို kill မဖြစ်စေဘဲ၊ application ကို rolls out (သို့) configuration changes များကိုလုပ်ပေးနိုင်သည်။ တစ်ခုခုမှားယွင်းခဲ့မှုများရှိပါက kubernetes သည် rollback change ကို ပြန်လည်လုပ်ပေးနိုင်သည်။ ဤကဲ့သို့ တိုးတက်လာသော Developing solutions များသည် ကြီးထွားလာနေသောယနေ့ echosystem များအတွက် အကျိုးဖြစ်ထွန်းမှုများစွာကို ပေးစွမ်းနိုင်ပါသည်။

Secret and configuration management

Deploy, update secrets နဲ့ application configuration များပြုလုပ်ရာတွင် container image ကိုပြန်လည် ပြုပြင်စရာမလိုတော့ခြင်းနှင့် stack configuration တွင်ရှိသော secrets များကို exposing လုပ်ရခြင်းများမလိုတော့ပါ။

Storage orchestration

Kubernetes သည် local storage ဖြစ်စေ၊ external cloud providers မှဖြစ်စေ၊ distributed storage, network storage ဖြစ်စေ၊ ရွေးချယ်လိုက်သော storage system ကို automatically mount (တပ်ဆင်)ပေးနိုင်သည်။

Kubernetes architecture

Kubernetes တွင် အဓိက components နှစ်ခုရှိသည်၊ တစ်ခု(သို့) တစ်ခုထက်ပိုသော Master Node နဲ့ တစ်ခု(သို့) တစ်ခုထက်ပိုသော Worker Node (minion)တို့ဖြစ်သည်။

Kubernetes Cluster

Master Nodes

Control plane components များသည် Kubernetes cluster အတွက် Global decision များကို လုပ်ဆောင်‌ပေးသည်။ Control plane components များသည် cluster အတွင်းရှိ မည်သည့် Nodeတွင်မဆို run နိုင်သော်လည်း၊ ရှုပ်ထွေးမှုမရှိစေရန် control plane များကို Node တစ်လုံးထဲတွင်သာ စုစည်းပြီး ထားသည်။ ထို components များကို run ပေးသော Nodeကို Masterဟုခေါ်သည်။ Kubernetes cluster ကို communicate လုပ်ဆောင်ရန် control plane ဆီသို့ Command Line Interface (CLI) tool, Web UI သို့ API တို့ဖြင့် requests များပို့ဆောင်ပေးသည်။

Control Plane Components များမှာ —

Kube API server

Master Node ပေါ်ရှိဗဟိုထိန်းချုပ်‌‌‌မှုကို လုပ်ဆောင်ပေးသည့် component တစ်ခုဖြစ်သည်။ အလုံးစုံသော Administrative tasks များ၏ လုပ်ဆောင်မှုများအားလုံးတွင် Kube API server သည် Gateway သဖွယ်ဆောင်ရွက်ပေးသည်။ Kube API Server သည် REST services ကိုအသုံးပြုသည်။ Kube API Server သည် Scaling လုပ်ငန်းစဥ်များအတွက် Horizontally Scale လုပ်ဆောင်ရန် Designed ဆွဲထားသည်။

Etcd

Etcd သည် Kubernetes clusters ၏ အရေးကြီးသည့် configuration information များကို key-value များအဖြစ်သိမ်းပေးထားသည်။ Etcd သည် Master Cluster များအကြား Distributed ထားသည့် Persistent Storage ဖြစ်သည်။

Kube scheduler

Kube scheduler သည် pods များကို မည်သည့် node ပေါ် တွင် run ရမည်ကို nodes များ၏ resource capacity စွမ်းဆောင်နိုင်မှု(သို့) node ပေါ်တွင် resourse utilization များ၏ balance ရှိမှုတို့အပေါ်တွင် ‌ ဆုံးဖြတ်ပေးသည်။

Kube Controller Manager

Controller-manager သည် Kubernetes cluster state ကို regulate လုပ်ပေးသည်။ Controller များသည် logically အရ သီးခြားစီဖြစ်သော process များအဖြစ် run သော် လည်း single binary များအဖြစ်ပေါင်းကာ single process များအဖြစ် run သည်။

Kube Controller Manager အမျိုးအစားအချို့မှာ —

၁. Node Controller — nodes များ down သွားသည့်အခါ၊ noticing နဲ responding ကို လုပ်ဆောင်သည်။

၂. Job controller — Pods နဲ့သက်ဆိုင်သောလုပ်ငန်းဆောင်တာများပြီးသည်အထိ လုပ်ဆောင်သည်။

၃- Endpoints controller — Endpoints objects များကို ဖော်ပြပေးသည်။ Services နဲ့ Pods စသည်များကို ချိတ်ဆက်ပေးသည်။

၄. Service Account & Token Controllers — Namespaces အသစ်များအတွက် default accounts နှင့် API access tokens များကိုပြုလုပ်သည်။

Cloud Controller Manager

Cloud Provider ၏ API နဲ့ Kubernetes Cluster ကို ချိတ်ပေးသည်။ Cloud controller manager သည် cloud provider နှင့်သက်ဆိုင်သော Controller များကိုသာ run သည်။ Cloud Controller သည်လည်း single process များအဖြစ် run သည်။

Cloud provider dependencies ရှိသော controller များမှာ-

၁. Node controller — Nodesများ၏ အခြေအနေများကို စစ်ဆေးပေးသည်။

၂. Route controller — Cloud Infrastructure များအတွက် route များကို တည်ဆောက်ပေးသည်။

၃. Service Controller — Cloud provider သည် Loadbalancers စသည့် cloud infrastructure components များကို ဖန်တီးခြင်း၊ အဆင့်မြင့်ခြင်း၊ ဖျက်ခြင်းများအတွက်သုံးသည်။

Worker Nodes (Minion)

Worker Nodes ၏ Components များမှာ

Kubelet

Kubelet သည် Agent အဖြစ် nodes များတွင် run ပြီး၊ Master node ၏ control plane components များနဲ့ communicates လုပ်ဆောင်ပေးသည်။ Node ၏ ‌pod health, node health စသော activities များကို apiserver ဆီသို့ periodically reports များကိုပို့ပေးသည်။ Kubelet သည် Container Runtime ကိုချိတ်ဆက်ပြီး container များကို run ပေးသည်။

Kube proxy

Kube proxy သည် Nodes များ၏ network rules များကိုထိန်းချုပ်စီမံပေးသည်။ Request များကို Forward လုပ်ပေးသည်။ kube-proxy သည် proxy mode သုံးမျိုးကို support လုပ်သည်။ userspace proxy mode(old), iptables proxy mode (NAT) နဲ့ IPVS proxy mode (LB)တို့ဖြစ်သည်။

Container runtime

Kubernetes သည် Orchestration engine ဖြစ်သောကြောင့် Container များကို တိုက်ရိုက်စီမံရန်၊ Continer runtime ကို သုံးသည်။ Container runtime သည် Containers များ run ရန်အတွက်လုပ်ဆောင်ပေးသည်။ တခြား container runtime များမှာ — Docker, CRI-O, containerd, frakti, lxd.

Worker Node Components: Addons

Addons များသည် 3rd-party pods and services များမှ ရယူအသုံးပြုရသည့်၊ cluster features နဲ့ functions များဖြစ်သည်။

DNS — Kubernetes objects နဲ့ resources များအတွက် DNS records များကို သတ်မှတ်ပေးသည့် DNS server ဖြစ်သည်။

Dashboard — cluster management များအတွက် Web-based user interface ဖြစ်သည်။

Monitoring — Container ၏ cluster-level metrics များကို စုစည်းပြီး၊ Center data store တွင် သိမ်းဆည်ပေးသည်။

Logging — Container ၏ cluster-level logs များကို စုစည်းပြီး၊ Analysis လုပ်ရန် Center log store တွင် သိမ်းဆည်ပေးသည်။

Kubernetes Resources

Kubernetes Objects

Kubernetes system တွင် object များစွာပါ၀င်သည်။ K8s ၏ objects များမှာ- Pods, Deployments, Namespaces, Services, Volume etc.

Namespaces(ns)

Kubernetes ၏ namespaces သည် multiple virtual clusters များအဖြစ် အသုံးပြုစေနိုင်သည်။ မတူညီသော namespace များရှိ objects များသည် တစ်ခုနဲ့တစ်ခု သီးခြားဖြစ်သော Environment များကိုရရှိစေသည်။ Namespace သည် တူညီသော cluster တစ်ခုကို sharing သုံးနေရသော Team များနဲ့ projects များအတွက်သုံးခြင်းဖြင့် name conflits များမဖြစ်စေနိုင်တော့ပါ။ Kubernetes တွင် Default namespaces သုံးခုရှိသည်။

Kube-system namespace သည် Kubernetes systemမှ objects များကို Modify လုပ်သည့်အခါသုံးသည်။ System process များဖြစ်သည်။

Kube-public namespacse သည် k8s v1.6 မှစတင်ပြီး မိတ်ဆက်ပေးခဲ့သည်။ signed cluster location information ကို kube-public တွင်ထည့်သွင်းထားသောကြောင့် အဆိုပါ information များကို authenticated/unauthenticated users များမှ မြင်နိုင်သည်။

Default namespace တွင် ‌သီးသန့် namespaces မသတ်မှတ်ထားသော objects များတည်ရှိသည်။ Small projects များအတွက် Default ကိုသုံးသင့်သော်လည်း၊ Big projects များနဲ့ Different Team များအတွက် Default ကိုမသုံးဘဲ၊ Namespace အသစ်များကို create လုပ်သင့်သည်။

Kubernetes object’s configuration

Kubernetes objects များ၏ configuration များကို YAML format ဖြင့်ရေးသားနိုင်သည်။ Object configuration တွင် အခြေခံအားဖြင့် အပိုင်း၄ ခုရှိသည်။

apiVersion:

apiVersion section တွင် API Server ကိုဆက်သွယ်ရန် အသုံးပြုမည့် api version ကိုထည့်သွင်းပေးရသည်။

Kind:

Kind section တွင် object ၏ type ကို ဖော် ပြပေးရသည်။ Type အမျိုးအစားအချို့မှာ -Pod, Service, Replicaset, Deployment.

Match for api version and Kind of k8s

Metadata:

Metadata တွင် Object ၏ basic information များကိုဖော်ပြပေးရသည်။ Metadata အချို့မှာ — name, label, namespace.

Spec:

Spec section တွင် Deployment object အတွက်လိုအပ်သော Desired stateများကိုဖော် ပြပေးရသည်။

Pod (po)

Pod သည် kubernetes ၏ အသေးငယ်ဆုံး နဲ့ အရိုးရှင်းဆုံး object တစ်ခုဖြစ်သည်။ Deployment ၏ unit တစ်ခုဖြစ်သည်။ Pod အတွင်း container အပြင် helper များလည်းရှိနိုင်သည်။ ထို့အပြင် Pod တစ်ခုတွင် multiple container များကို run နိုင်သည်။ သို့သော်လည်း ပုံမှန်အားဖြင့် pod တစ်ခုတွင် container တစ်ခုကိုသာသုံးသင့်သည်။ အကြောင်းမှာ Pod အတွင်း container များသည် တူညီသော Namespaceနဲ့ Networkspace တစ်ခုအတွင်းအလုပ်လုပ်သည်။ Pod တစ်ခုအတွင်း multi container run လျင် Port conflit မဖြစ်အောင် သတိထားစရာရှိသည်။ Pod ၏ port ကို targetPort ဟုခေါ်သည်။ Container သည် crash ဖြစ်ခြင်းနဲ့ Node ၏ resource များသည် run-out ဖြစ်ခဲ့လျှင် pod သည်လည်း ပျက်စီးသွားသည်။ Pod ကိုယ်တိုင်သည် Selfhealing မလုပ်နိုင်ပါ။

အောက်တွင် Pod object’s configuration ကို YAML format ဖြင့်ဖော်ပြထားသည်။

Spec: block တွင် ဖော်ပြထားသည့် desired state ဖြစ်သော nginx version 1.15.11 image ကို dockhub မှ ရယူပေးမည်ဖြစ်သည်။

Labels

Labels ဖြင့် object များကို သတ်မှတ်ပြီး၊ ပြန်လည်အသုံးပြုလိုသည့်အခါ labels ဖြင့် ရွေးချယ်နိုင်သည်။ Labels တွင် key-value pairs ဖြင့် သတ်မှတ်သည်။ Label သည် unique name မဟုတ်ပါ၊ controllers သည် label ကိုသုံး၍ object resources များကို logically group အလိုက်ရွေးချယ်နိုင်သည်။

Label Selectors

Label ဖြင့်သတ်မှတ်ထားသော object အစုကို Label Selectors ကိုသုံး၍ ရွေးချယ်ရသည်။ K8s သည် selectors နှစ်မျိုးကို ထောက်ပံ့သည်။

Equality-Base Selectors

Equality-Base Selectors ဖြင့် labels ရှိ keys-values တန်ဖိုးပေါ် မူတည်ပြီး၊ objects များကိုရွေးချယ်သည်။ =, ==, != Operators သုံးခုကိုသုံးနိုင်သည်။

environment = production

အထက်ပါ ဥပမာတွင် key ဖြစ်သော environment နဲ့လည်းကိုက်ညီပြီး value ဖြစ်သော production နဲ့လည်းကိုက်ညီသော resources များကိုရွေးချယ်မည်ဖြစ်သည်။

Tier != frontend

key ဖြစ်သော Tier နဲ့ကိုက်ညီပီး၊ value သည် frontend မဟုတ်သည့် labels များကိုရွေးချယ်မည်ဖြစ်သည်။

Set-Based Selector

Set-Based Selector သည် labels ရှိ သတ်မှတ်ထားသော Values အပေါ် တွင်မူတည်ပြီး objects များကိုရွေးချယ်သည်။ in, notin, exists စသည့် Operators များကိုသုံးနိုင်သည်။

environment in (production, qa)

Key ဖြစ်သော environment ရှိ production သို့ qa ကိုရွေးချယ်မည်ဖြစ်သည်။

Tier notin (frontend, backend)

Key ဖြစ်သော tier ကိုမရွေးချယ်ဘဲ၊ values ဖြစ်သော frontend, backend စသော labels များကို ရွေးချယ်မည်ဖြစ်သည်။

Partition

Key ဖြစ်သော partition နဲ့ကိုက်ညီသော labels အားလုံးကို ရွေးချယ်သည်။ value ပေါ် တွင်မမူတည်။

!partition

Key ဖြစ်သော partition မဟုတ်သော labels များအားလုံးကိုရွေးချယ်သည်။ value ပေါ် တွင်မမူတည်။

Deployments(Deploy)

Deployments Objects သည် controller manager ၏ အစိတ်အပိုင်းတစ်ခုဖြစ်သည်။ Pod နဲ့ ReplicaSet ကို declarative update လုပ်ပေးသည်။ Deployment Controller သည် actual state ကို desired state များအတိုင်းဆောင်ရွက်ပေးသည်။ application update နဲ့ rollbacks ပြန်လုပ်ခြင်းများ၊ rollouts လုပ်ပြီး rollbacks ပြန်လုပ်ခြင်းများကို ဆောင်ရွက်နိုင်သည်။ Deployments controller သည် ReplicaSets ကို တိုက်ရိုက် manage လုပ်ပြီး pods များကို scaling လုပ်ပေးနိုင်သည်။

ReplicationController(RC)

ReplicationController သည် ‌desired state ကို နှိုင်းယှဥ်ပြီး၊ သတ်မှတ်အချိန်အတွင်း သတ်မှတ်ထားသော POD အရေအတွက်ကို run နေစေရန်လုပ်ဆောင်သည်။ Pod ၏ lifecycle ကို စီမံရန်အတွက် Deployment ၏ replicaSet controller သုံးခြင်းသည် default recommended ဖြစ်သည်။

ReplicaSet(RS)

ReplicaSet သည် ReplicationController ၏ next-generation ဖြစ်သည်။ ReplicaSets သည် selectors ၏ equality-base and set-base နှစ်ခုလုံးကို support ပေးသည်။ ReplicationControlers သည် equality-base ကိုသာ support ပေးထားသည်။

Job

Job သည် Pod များကို creates လုပ်ခြင်း၊ Pods အတွင်း ရှိ task ၊ app function၊ batch process များစသည့်လုပ်ငန်းဆောင်တာများကို ပြီးမြောက်အောင်ဆောင်ရွက်ပေးသည်။

CronJob

Job များကို တစ်ကြိမ် (သို့) periodicallyအကြိမ်ကြိမ် run စေလိုသော job များကို Schedule ဖြင့် run နိုင်သည်။

DaemonSet(ds)

ReplicationController နဲ့ ReplicaSet တို့သည် Pod များကို Deploy လုပ်ရာတွင် cluster အတွင်းရှိ node များပေါ်တွင် randomly lunch လုပ်သောကြောင့် Node တစ်ခုတွင် pod နှစ်ခုသုံးခု run နေနိုင်သည်။

RC, RS တို့နှင့်မတူသည်မှာ DaemonSet သည် pod တစ်ခုခြင်းစီကို cluster အတွင်းရှိ node တစ်ခုစီပေါ်တွင် တိတိကျကျ pod per node Lunches & maintains ကိုလုပ်ပေးနိုင်သည်။ Pod များကို system-level လုပ်ဆောင်ချက်များဖြစ်သော log collector နဲ့ resource monitoring များကို Node များပေါ်တွင်လုပ်လိုသောအခါ DaemonSets ကိုသုံးနိင်ပါသည်။

StatefulSet(sts)

StatefulSet သည် pods များကို stable identity ဖြင့် run ပေးနိုင်သည်။ Pod တစ်လုံးသည် restart ဖြစ်သွားလျှင် pod ၏ identity ဖြစ်သော name, ip များသည် အသစ်ဖြင့်ပြန်တက်လာသည့် stateless သဘောတရားရှိသည်။ StatefulSet သည် statefull state လိုအပ်သော pod များအတွက် persistent identity များကို ထောက်ပံ့သည်။ Statefulset ကို statefull ‌အခြေအနေကို လိုအပ်သော Application နဲ့ Distributed Systems များအတွက်သုံးသည်။

Services

Service

Service သည် logical အရချိတ်ထားသော pods group တို့ကို ဆက်သွယ်ရန် access တစ်ခုကိုပြုလုပ်ပေးသည်။ Micro-services များအကြား communication လုပ်ပေးနိုင်သည်။ Protocol အနေဖြင့် TCP/UDP ကို လက်ရှိသုံးသည်။ DNS Name, Consistent IP address နဲ port ကိုထောက်ပံ့သည်။ Service type များမှာ —

Cluster IP

Cluster IP သည် default service type ဖြစ်သည်။ Cluster IP သည် Internal Virtual IP address တစ်ခုဖြစ်သည်။ Ip address သည် service lifecycle အတွင်း persistent ဖြစ်သည်။ ClusterIP ဖြင့် Cluster အတွင်းရှိ cluster’s nodes များအချင်းချင်းဆက်သွယ်နိုင်သည်။

NodePort

Kubernetes hosts ၏ ports အဖြစ်သုံးသည်။ NodePort အတွက် သီးသန့် port number မသတ်မှတ်ထားလျှင် Kubernetes သည် port range 30000–32767 အတွင်း randomly ရွေးချယ်ပေးသည်။ NodePort ကို Clusterအတွင်း ClusterIP ဖြင့်ချိတ်ဆက်နိုင်သည်။

Loadbalancer

Public cloud solution များအတွက်သုံးသည်။ External traffic များကို backends pods များဆီသို့ပို့ပေးသည်။

ExternalIP

ExternalIP သည် kubernetes ၏ managed အောက်တွင်မရှိပါ။ Cluster administrator သည် ExternalIP address ကို node တစ်ခုနဲ့ Route configured တွဲပေးခြင်းဖြစ်သည်။

ExternalName

Cluster ပြင်ပမှ service တစ်ခုနဲ့ချိတ်နိုင်ရန် သတ်မှတ်ထားသော DNS level CNAME record ဖြစ်သည်။

EndPoints(ep)

Endpoint Controller သည် endpoints များ၏ list ကိုဖော်ပြပေးသည်။ Endpoint ဆိုသည်မှာ cluster အတွင်း run နေသော internal pod များနဲ့ external IP များလည်း ဖြစ်နိုင်သည်။

Internal cluster အတွင်း သတ်မှတ်ထားသော label များဖြင့် endpoints များကို kubernetsသည် automatically create သတ်မှတ်ပေးသည်။

External IP များသည် label မရှိသော cluster ပြင်ပရှိ endpoints များဖြစ်သည်။ kubernetes သည် external endpoints list ကို auto မသတ်မှတ်ပေးပါ။ ထို external services များဖြစ်သည့် ပြင်ပexternal ရှိdb server ကဲ့သို့သော server များကိုချိတ်ဆက်လိုသောအခါ၊ မတူညီသော namespace များရှိ service များacessလုပ်လိုသည့်အခါ၊ Kubernetes ရှိ workloads များကို အခြား sources များသို့ migrating လုပ်လိုသောအခါ ထို external endpoint များကို manual သတ်မှတ်နိုင်သည်။

EndpointSlices

Endpoint ကဲ့သို့ပင် multiple resources ရှိ endpoints များကို သတ်မှတ်နိုင်သည်။EndpointSlices သည် cluster အတွင်းရှိ endpoints list များကို‌ဖော်ပြပေးသည်။ EndpointSlices သည် API resources ဖြစ်ပြီး၊ scalable ပိုမိုကောင်းမွန်သည်။ EndpointSlices သည် endpoints 100 ပြည့်တိုင်း၊ နောက်ထပ် EndpointSlices ကို created လုပ်ကာ နောက်ထပ် endpoints များကို သိမ်းသည်။ Max 1000 အထိ သတ်မှတ်နိုင်သည်။

Ingress(ing)

Ingress သည် Kubernetes cluster ကို access လုပ်နိုင်ရန် inbound connection များကို ဆုံးဖြတ်ပေးသည့် Rules ဖြစ်သည်။ User သည် Service နှင့်တိုက်ရိုက်မထိတွေ့ပဲ user ၏ request များသည် ingress မှတဆင့် service ဆီကို forward လုပ်ပေးသည်။ Ingress controller သည် service နဲ့ချိတ်ဆက်ရန် layer7 http/https loadbalancer ကို configures လုပ်ထားပြီး၊ အခြား

  • TLS (Transport Layer Security)
  • Name-based virtual hosting
  • Fanout routing
  • Loadbalancing
  • Custom rules များကိုလည်း ထောက်ပံ့သည်။

Headless Service

Proxy, LB တို့ကို မသုံးဘဲ Client တစ်ခုသည် တိတိကျကျ pod တစ်ခုကို ချိတ်ဆက်လိုသောအခါ (သို့) Pod တစ်ခုသည် တိတိကျကျ pod တစ်ခုကိုတိုက်ရိုက်ချိတ်ဆက်လိုသောအခါသုံးသည်။

Config

ConfigMaps(cm)

ConfigMap သည် key-value ပုံစံဖြင့် configraton data များကို store လုပ်သည်။ ConfigMaps တွင်1MB ပမာဏ ရှိသော data ကိုသိမ်းနိုင်သည်။ ConfigMap ကို Pod အတွင်းရှိ container အတွက် configuration data များ ထိန်းသိမ်းပြုပြင်ရန်အတွက်သုံးနိုင်သည်။ ConfigMap ကိုအသုံးပြုရန် အတွက် —

  1. Container ၏ configuration တွင် ပြုပြင်/ထည့်သွင်းလိုသည့် Enironment variable များ၏ value များကို configMap တွင် ရေးထားရမည်။

2. Command-line argument အသုံးပြုခြင်း —

Container အတွင်း run လိုသော Env variable vale များကို command-line ‌[arguments] များဖြင့်ပြင်ဆင်နိုင်သည်။ command-line [arg] ဖြင့် short variable value အနည်းငယ်သာပြင်နိုင်သည်။ Config file တစ်ခုလုံးကို အသုံးပြုလိုပါက ConfigMap volume ကို အသုံးပြုနိုင်သည်။

3. ConfigMap Volume ကိုအသုံးပြုခြင်း —

Development လုပ်မည့် pod configuration file တွင် configMap ရှိသော location ကို mount ပေးရမည်။ Volume ကိုသုံးခြင်းဖြင့် container process သည် ConfigMap ကို file တစ်ခုအဖြစ်အသုံးပြုစေနိုင်သည်။

Secrets

ConfigMaps ကဲ့သို့ပင် အသုံးပြုရပြီး၊ password, ssh key or OAuh token စသည့်အရေးကြီးသော data များအတွက်သုံးသည်။ Secret တွင် 1MB ပမာဏ ရှိသော data ကိုသာသိမ်းနိုင်သည်။ Secret သည် default stored အနေဖြင့် ETCD တွင် unencrypted base64-encoded strings အနေဖြင့်သိမ်းသည်။

Volumes

Container တစ်လုံး restart ဖြစ်လျှင် container ရှိ data များသည်လည်းပျက်စီးသွားသည်။ ထို့ကြောင့် kubernetes သည် Volumes များကိုသုံးသည်။ Volume သည် Pod ၏ component တစ်ခုဖြစ်သည်။ Volume တစ်ခုကို Pod အတွင်းရှိ containers များသည် mount ကာ access လုပ်နိုင်ကြသည်။ Volume သည်လည်း pod ၏ lifetime တွင်မှီခိုသည်။ ထို့ကြောင့် Volume Type ကို သုံးခြင်းအားဖြင့် local storage (သို့) Cloud storage များကိုချိတ်ဆက်နိုင်သည်။

Volumes Types သည် Directory, Size, content, default access modes စသည့်အချက်များကို ဆုံးဖြတ်ပေးသည်။ Kubernetes သည် volume type များစွာကို support လုပ်သည်။Volume Type အချို့မှာ — emptyDir, hostPath, gcePersistentDisk, awsElasticBlockStore, azureDisk, azureFile, cephfs, nfs, iscsi, secret, configMap, persitentVolumeClaim.

PersistentVolume(pv)

IT environment တွင် storage/system administrator များသည် storage ကို manage လုပ်ပေးကြသည်။ End user သည် storage ကို အသုံးပြုရန် ကိုယ်တိုင်တည်ဆောက်ယူစရာမလိုလဲ administrator မှ ပေးလိုက်သော instruction များတိုင်း လွယ်လင့်တကူအသုံးပြုနိုင်သည်။

Containerzed နယ်ပယ်တွင်လည်း တူညီသောချဥ်းကပ်မှုမျိုးကဲ့သို့လုပ်ဆောင်နိုင်သော်လည်း၊ ကွဲပြားသော Volumes Types များကို support ပေးရန် စိန်ခေါ်မှုရှိလာသည်။ ထို့အတွက် kubernetes တွင် Users နဲ့ Administrators များသည် API ကို အသုံးပြု၍ PV ကို ချိတ်ဆက်အသုံးပြုခြင်း၊ manage ပြုလုပ်ခြင်းများကိုပြုလုပ်နိုင်သည်။

Volume ကို manage လုပ်ရန် PersistentVolume API resource type ကိုအသုံးပြုပြီး၊ volume ကို အသုံးပြုရန် PersistentVolumeClaim API resource type ကိုသုံးသည်။

Persistent volume တွင် storage နည်းပညာမျိုးစုံကို ကိုင်တွယ်နိုင်သည်။ Storage များသည် Local storage, network-attached storage, cloud storage (သို့) distributed storage စသော solution များဖြစ်နိုင်သည်။

Persistent Volume ကို cluster administrator မှ ကြိုတင်သတ်မှတ်ပေးထားရသည်။Persistent Volume ကို dynamically အနေဖြင့်လည်း StorageClass (SC) ကိုအခြေခံ၍ကြိုတင်သတ်မှတ်နိုင်သည်။ StorageClass(SC) တွင် PersistentVolume တစ်ခုကို createလုပ်ရန်လိုအပ်သော ကြိုတင်သတ်မှတ်ထားသည့် parameters တန်ဖိုး တို့ပါ၀င်ပါသည်။

PersistentVolmeClaims(pvc)

Userသည် အသုံးပြုလိုသော storage တစ်ခုအတွက်၊ volume resource ၏ type, Access mode, size တို့ပေါ်အခြေခံပြီး persistent Volume(pv) ကို PersistenVolumeClaim (PVC) ဖြင့် request ပေးပို့သည်။ သတ်မှတ်ချက်နှင့်သင့်တော်သည့် PV ကိုရလျှင်၊ Requested PV ကို PVC သို့ bound တွဲပေးသည်။

Access mode သုံးမျိုးမှာ —

  • ReadWriteOnce ( node တစ်ခုတည်းမှ r/w လုပ်ရန်)
  • ReadOnlyMany ( node များမှ r-only လုပ်ရန်)
  • ReadWriteMany ( node များမှ r/w လုပ်ရန်)

Container Storage Interface(CSI) — မတူညီသော container orchestrator များတွင် အလုပ်လုပ်နိုင်ရန် Design ဆွဲထားသော volume interface များအတွက် standard တစ်ခုဖြစ်သည်။

Container orchestrators များသည် external storage volumes များကို အသုံးပြုနိုင်ရန် ကိုယ်ပိုင် နည်းလမ်းများစွာကို အသုံးပြုကြသည်။ ထို့ကြောင့် မတူညီသော volume များကို ကွဲပြားသော orchestrators များတွင် အသုံးချနိုင်ရန် စိန်ခေါ်မှုတစ်ခုဖြစ်လာသည်။ Storage Vendor များနဲ့ Orchestrators နယ်ပယ်များမှ ကျွမ်းကျင်သူများသည် standard volume interface တစ်ခုပြုရန်လုပ်ဆောင်လာကြသည်။ ထိုသို့လုပ်ဆောင်လာမှုကြောင့် မတူညီသော orchestrator များတွင် အသုံးပြုနိုင်သည်ံ့ volume plugin ကို CSI standard ကိုအခြေခံ၍တည်ဆောက်ထားသည်။

Cloud Native Computing Foundation (CNCF) အကြောင်း

CNF သည် projects ပေါင်းများစွာကိုလည်း ဆက်လက်လုပ်ကိုင်ဆောင်ရွက်လျှက်ရှိသည်။ တချို့ အသုံးနည်းသည့်project များကိုလည်း archived (ပြန်သိမ်း)ထားသည်များလည်းရှိသည်။ Projects များကိုလက်ရှိရောက်ရှိနေသော projects၏အခြေအနေများအပေါ် မူတည်ပြီး — Sandbox, Incubating နဲ့ Graduate ဟူ၍ခွဲခြားထားသည်။

Graduated projects အချို့မှာ —

Kubernetes for container orchestration
Prometheus for monitoring,
Fluentd for logging
Harbor for registry
Helm for package management

Incubating projects များ၊ Sandbox Projects များနဲ့ Archived Projectကိုလည်း cncf.io ၏စာမျက်နှာတွင် လေ့လာနိုင်ပါသည်။

နိဂုံးချုပ်

နောက်ဆုံးအထိဖတ်ပေးတဲ့အတွက် ကျေးဇူးတင်ပါတယ်။ အ‌ကြောင်းအရာအများစုကို တိုက်ရိုက်ဘာသာပြန်ထားသော်လည်း၊တချို့ကိုသင့်တော်သလိုပြန်ရေးထားပါသည်။ အကျိုးအမြတ်အတွက်မဟုတ်ဘဲ ‌ပညာရေးအတွက်အထောက်အကူဖြစ်စေရန်သာရည်ရွယ်ပါသည်။ အမှားများပါပါက ထောက်ပြပေးဖို့ တောင်းဆိုလိုပါတယ်။

ယခုဖော်ပြထားသော Kubernetes အကြောင်းအရာများသည် kubernetes ကို စတင်လေ့လာလိုသူများအတွက်အထောက်အကူပြုနိုင်မည်ဟု ယုံကြည်ပါသည်။ သို့သော်လည်း အ‌သေးစိတ်လေ့လာစရာများစွာကျန်ရှိနေပါသည်။ ထပ်မံလေ့လာနိုင်ရန်လည်း kubernetes.io ၏ စာများနှာတွင် Documents များ၀င်ဖတ်ခြင်း၊ tutorials များကိုလိုက်လုပ်ခြင်းဖြင့် အသိပညာနှင့် ကျွမ်းကျင်မှုများတိုးတက်ပြီး၊ ရည်မှန်းထားသော အောင်မြင်မှုများကိုရနိုင်ကြပါစေ။

Online Sources:

  • Kubernetes — kubernetes.io
  • Introduction to Kubernetes — learning.edx.org
  • Kubernetes in actions — Marko Lukša

--

--

suum (RHCE| CC-ISC2| NSE3| AZ-900)

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