Kuweka kontena moja ni rahisi. Kuweka kumi inawezekana. Lakini mara tu unapokuwa unatumia mamia ya kontena kwenye mashine mamia, usimamizi wa kienyeji unacha kuwa mgumu na kuanza kuwa hali isiyowezekana. Unapoteza ufuatiliaji wa kontena gani lipo wapi. Seva inakufa, na programu yako inatoweka mpaka mtu amka kuwasha tena. Ongezeko la ghafla la trafiki linazidi uwezo wa mfumo wako kabla hujaweza kuanzisha mifano (instances) mipya. Hapa ndipo Kubernetes inapoingia mchakato. Si chombo kingine tu cha DevOps. Ni tabaka la usimamizi (orchestration layer) linalochukulia usimamizi wa kontena kama tatizo la udhibiti badala ya zoezi la uandishi wa skripti (scripting).

Kwa Nini Skripti Hatimaye Hufeli

Timu nyingi huanza na shell scripts au otomatiki ya msingi. Huandika amri za kuvuta picha (pull images), kuanzisha kontena, kufuatilia logi, na kuwasha upya michakato iliyofeli. Mtindo huo unafanya kazi kwa uthibitisho wa dhana (proof of concept). Unaporomoka chini ya mzigo wa ulimwengu halisi. Microservices huwasiliana zenyewe kupitia host tofauti, zinategemea vigezo maalum vya mazingira (environment variables), zinahitaji hifadhi ya kudumu (persistent storage) inayostahimili kuwashwa upya kwa kontena, na zinatarajia mtandao thabiti kati ya matoleo tofauti. Skripti haiwezi kupanga upya mzigo wa kazi (workload) kiotomatiki wakati mashine ya kidijitali (virtual machine) inapopotea. Haiwezi kusambaza trafiki ya mtandao miongoni mwa mifano (instances) iliyo sawa huku ikiepuka zile zilizokwama kwenye mzunguko wa hitilafu (crash loop). Kubernetes inatatua hili kwa kuifanya klasta (cluster) yenyewe iwe na jukumu la maamuzi hayo. Unaelezea unachotaka, na mfumo unatekeleza hali hiyo mfululizo.

Mambo Matatu Yanayokupa

Kubernetes inatoa uwezo mkuu mitatu inayobadilisha usimamizi wa dharura wa kienyeji (manual firefighting) kuwa uaminifu wa kiotomatiki.

Upatikanaji wa juu (High availability) inamaanisha programu zako zinabaki hewani hata sehemu za miundombinu yako inapofeli. Ikiwa kontena litafeli, Kubernetes linalibadilisha ndani ya sekunde chache. Ikiwa node ya mfanyakazi (worker node) nzima itazimika, mpangaji (scheduler) utagundua kukosekana kwa mawasiliano (heartbeat) na kuhamisha mizigo ya kazi iliyoathiriwa kwenda kwenye mashine zilizo sawa mahali pengine kwenye klasta. Mfumo unadhibiti mara kwa mara hali unayotaka, ukirekebisha upotofu bila kuingiliwa na binadamu.

Uwezo wa kukua (Scalability) inamaanisha programu zako zinakua pamoja na watumiaji wako. Badala ya kuandaa seva ishirini ili tu kuhimili ongezeko la trafiki la saa mbili, unaweka vipimo muhimu, kama matumizi ya CPU au ucheleweshaji wa maombi (request latency), na kuacha klasta iongeze mifano zaidi ya kontena wakati viwango vinapovukwa. Mahitaji yanapopungua, idadi ya nakala (replica count) inapungua tena. Unalipia unachohitaji, wakati unapohitaji.

Urejeshaji wa majanga (Disaster recovery) inamaanisha data na mipangilio yako hurudi baada ya hitilafu. Kubernetes huhifadhi hali nzima ya klasta kwenye hifadhi ya funguo-na-thamani (key-value store) iliyosambazwa. Ikiwa hitilafu kubwa itafuta node za wafanyakazi au hata sehemu ya tabaka la udhibiti (control plane), hali hiyo iliyohifadhiwa inaruhusu mfumo kujenga upya mizigo yako ya kazi vilevile ilivyosanidiwa. Data yako hurudi kwa sababu msimamizi (orchestrator) anakumbuka jinsi ilivyopaswa kuwa.

Mpangilio: Ubongo na Misuli

Klasta ya Kubernetes ina majukumu mawili ya msingi ambayo mswada huu unauelezea kama ubongo na misuli, na mfano huo unafaa sana katika vitendo.

Master Node ndio ubongo. Haendeshi programu zako zinazohudumia wateja. Badala yake, inahifadhi vipengele vya control plane ambavyo hupanga kazi, husimamia hali ya klasta, na kujibu mabadiliko. Unapotoa amri au kuwasilisha faili ya usanidi, master node huamua mizigo ya kazi inapaswa kuwa wapi, ikiwa ni salama, na nini cha kufanya ikiwa si salama.

Worker Nodes ndio misuli. Kila mfanyakazi huendesha wakala mwepesi (lightweight agent) unaowasiliana na master na unatumia container runtime kutekeleza pods halisi. Node hizi ndipo kodi yako ya programu inapotumia CPU na kumbukumbu. Ongeza worker nodes zaidi, na klasta yako inapata uwezo zaidi. Ongeza master nodes zaidi zilizosanidiwa kwa ajili ya ziada (redundancy), na control plane yako inakuwa thabiti dhidi ya hitilafu za vifaa (hardware failures).

Pods, Kontena, na Huduma

Ili kufanya kazi na Kubernetes, unahitaji kuelewa istilahi tatu zinazofafanua jinsi programu inavyofungashwa na kufikiwa.

Kontena (Containers) ni vifurushi vinavyounganisha programu yako pamoja na utegemezi (dependencies) wake, maktaba (libraries), na usanidi. Hutenganisha programu na host inayohusika ili iendeshe kwa njia ile ile katika mazingira ya maendeleo (development), majaribio (staging), na uzalishaji (production).

Pods ndizo vitengo vidogo zaidi vinavyoweza kutumika katika Kubernetes. Pod moja huunganisha kontena moja au zaidi zinazohitaji kushiriki rasilimali. Zinashiriki nafasi moja ya mtandao (network namespace) na zinaweza kufikia volyum za hifadhi za ndani (local storage volumes) zinazofanana. Hili ni muhimu: huweki kontena pekee moja kwa moja. Unaweka pod inayolishikilia. Pod pia zimeundwa kuwa za muda mfupi (ephemeral) kwa makusudi. Huundwa, huharibiwa, na kubadilishwa hali zinapobadilika. Muda wake wa kuishi ni wa mabadiliko (dynamic) kwa usanifu wake.

Services zipo kwa sababu pods ni za muda mfupi (transient). Kila mara pod inapozindua upya, ina uwezekano mkubwa wa kupata anwani mpya ya IP ya ndani. Ikiwa sehemu nyingine za programu yako zijaribu kuunganishwa na anwani hizo zinazobadilika moja kwa moja, zitaharibika mara kwa mara. Service inatoa kwa pods zako anwani ya IP isiyobadilika na jina la DNS. Inafanya kazi kama mlango wa mbele thabiti, ikisawazisha mzigo (load-balancing) wa maombi yanayoingia kwenye pods zote zenye afya zinazoendana na kigezo chake (selector). Hii inatenganisha wateja wako na vurugu za mizunguko ya maisha ya kontena moja moja.

Kubernetes kwa Kiwango Kikubwa: Mfano wa Netflix

Netflix hutumia Kubernetes kusimamia mtandao wake wa usambazaji wa maudhui (content delivery network). Miundombinu hii husukuma mitiririko ya video kwa mamilioni ya watazamaji kwa wakati mmoja ulimwenguni kote. Kipindi maarufu kinapozinduliwa na mahitaji yanapoongezeka, kundi (cluster) huongeza node za cache zinazohifadhi vipande vya video karibu na watumiaji. Ikiwa node ya kikanda itafeli, trafiki huongozwa upya kiotomatiki. Matokeo yake ni kwamba filamu zinaendelea kutiririka kwa mamilioni ya watu bila kuhitaji mhandisi kupewa taarifa ya dharura kwa mkono. Msimamizi (orchestrator) hushughulikia ukubwa na hitilafu ili huduma iendelee bila kusimama.

Kuanza: YAML, JSON, na API Server

Kuanza kutumia Kubernetes inamaanisha kuacha mbinu za amri za kubofya (imperative click-ops) na kukumbatia usanidi wa kueleza (declarative configuration). Unaandika unachotaka kwenye faili za YAML au JSON. Maelezo haya (manifests) yanaelezea kila kitu kuanzia picha ya kontena (container image) hadi idadi ya nakala (replicas), bandari zilizofunguliwa (exposed ports), vigezo vya mazingira (environment variables), na sehemu za kuhifadhia (storage mounts). Mara tu faili lako linapokuwa tayari, unalituma kwa API server kwenye master node. Control plane huchukua tamko hilo, hulihifadhi kwenye kanzi data ya hali ya kundi (cluster state database), na kisha huanza kazi ya kufanya uhalisia uendane na maelezo yako. Huambii Kubernetes jinsi hasa ya kufanya kazi yake. Unaiambia matokeo ya mwisho yanapaswa kuwa nini, na yenyewe inatafuta hatua za kufuata.

Hitimisho la Kweli

Kubernetes ina changamoto ya kujifunza. Istilahi zinaonekana kuwa nzito mwanzoni. Kuna sehemu nyingi zinazofanya kazi, na kutatua hitilafu (debugging) katika mfumo uliosambazwa ni vigumu zaidi kiasili kuliko kutatua hitilafu kwenye seva moja. Lakini faida yake ni utulivu wa kiutendaji. Unaacha kusimamia mashine moja moja kila wakati. Unaacha kuomba kwamba skripti zako za kuanza (startup scripts) zifanye kazi wakati wa hitilafu ya saa 9 usiku. Unaanza kusanifu kwa ajili ya hitilafu kwa asili, ukichukulia kuwa node zitafeli, na kuamini msimamizi (orchestrator) kuweka programu yako salama. Mabadiliko hayo ya mtazamo, kutoka kutumaini kuwa hakuna kitakachoharibika hadi kujua kuwa mfumo unaweza kuhimili uharibifu, ndiyo inayofanya juhudi hiyo iwe na thamani.

Chanzo: Kubernetes ni nini? Kubernetes Imefafanuliwa kwa Dakika 15

Jumuiya ya hiari ya kujifunza: GyaanSetu AI kwenye Telegram