Kubernetes Basics
Msingi wa Kubernetes
Mwandishi halisi wa ukurasa huu ni Jorge (soma chapisho lake la asili hapa)
Usanifu & Msingi
Kubernetes Inafanya Nini?
Inaruhusu kukimbia chombo/au vyombo vya kontena katika injini ya kontena.
Ratiba inaruhusu vyombo kufanya kazi kwa ufanisi.
Kuweka vyombo hai.
Inaruhusu mawasiliano ya vyombo.
Inaruhusu mbinu za kupeleka.
Kusimamia kiasi kikubwa cha habari.
Usanifu
Node: mfumo wa uendeshaji na podi au podi.
Pod: Kifungashio cha kontena au kontena nyingi. Podi inapaswa kuwa na maombi moja tu (kwa hivyo kawaida, podi inaendesha kontena 1 tu). Podi ni njia ambayo kubernetes inaondoa teknolojia ya kontena inayofanya kazi.
Huduma: Kila podi ina anwani ya IP ya ndani kutoka kwa safu ya ndani ya node. Walakini, inaweza pia kufunuliwa kupitia huduma. Huduma pia ina anwani ya IP na lengo lake ni kudumisha mawasiliano kati ya podi ili ikiwa moja inakufa, mbadala mpya (na anwani ya ndani tofauti) itapatikana ikiwa inafunuliwa katika anwani ile ile ya huduma. Inaweza kusanidiwa kama ndani au nje. Huduma pia hufanya kazi kama mizani ya mzigo wakati podi 2 zimeunganishwa kwenye huduma ile ile. Wakati huduma inapoundwa unaweza kupata vituo vya mwisho vya kila huduma inayotumika
kubectl get endpoints
Kubelet: Wakala wa nodi wa msingi. Sehemu ambayo inaanzisha mawasiliano kati ya nodi na kubectl, na inaweza kuendesha podi tu (kupitia seva ya API). Kubelet haisimamii kontena ambazo hazikuundwa na Kubernetes.
Kube-proxy: ni huduma inayohusika na mawasiliano (huduma) kati ya apiserver na nodi. Msingi ni IPtables kwa nodi. Watumiaji wengi wenye uzoefu wanaweza kusakinisha kube-proxies zingine kutoka kwa wauzaji wengine.
Kontena ya Sidecar: Kontena za Sidecar ni kontena ambazo zinapaswa kuendeshwa pamoja na kontena kuu katika podi. Mtindo huu wa sidecar unapanua na kuboresha utendaji wa kontena za sasa bila kuzibadilisha. Leo, Tunajua kwamba tunatumia teknolojia ya kontena kufunga mahitaji yote ya programu ili iweze kufanya kazi mahali popote. Kontena inafanya kitu kimoja tu na kinafanya kitu hicho vizuri sana.
Mchakato wa Mkuu:
Seva ya API: Ni njia ambayo watumiaji na podi hutumia kuwasiliana na mchakato wa mkuu. Ombi lililothibitishwa tu ndilo linapaswa kuruhusiwa.
Mipangilio: Ratiba inahusiana na kuhakikisha kuwa Podi zinalinganishwa na Nodi ili Kubelet iweze kuziendesha. Ina akili ya kutosha kuamua ni nodi ipi ina rasilimali zaidi zilizopo na kugawa podi mpya kwake. Kumbuka kuwa ratiba huanzisha podi mpya, inawasiliana tu na mchakato wa Kubelet unaofanya kazi ndani ya nodi, ambayo itazindua podi mpya.
Meneja wa Kudhibiti wa Kube: Huchunguza rasilimali kama seti za nakala au upelekaji ili kuhakikisha kuwa, kwa mfano, idadi sahihi ya podi au nodi zinaendesha. Kwa mfano, ikiwa podi inakosekana, itawasiliana na ratiba kuanza mpya. Inadhibiti nakala, alama, na huduma za akaunti kwa API.
etcd: Uhifadhi wa data, thabiti, na usambazaji. Ni hifadhidata ya Kubernetes na uhifadhi wa funguo-na-thamani ambapo inahifadhi hali kamili ya vikundi (kila mabadiliko hurekodiwa hapa). Vipengele kama Ratiba au Meneja wa Kudhibiti hutegemea tarehe hii kujua mabadiliko yaliyotokea (rasilimali zilizopo za nodi, idadi ya podi zinazoendesha...)
Meneja wa Kudhibiti wa Cloud: Ni meneja maalum kwa udhibiti wa mtiririko na programu, yaani: ikiwa una vikundi katika AWS au OpenStack.
Tafadhali kumbuka kwamba kuna nodi kadhaa (zinaendesha podi kadhaa), pia kunaweza kuwa na mchakato wa mkuu kadhaa ambapo upatikanaji wao kwa seva ya Api unagawanywa mzigo na etcd yao kusawazishwa.
Vipimo:
Wakati podi inaunda data ambayo haipaswi kupotea wakati podi inapotea inapaswa kuhifadhiwa kwenye kiasi cha kimwili. Kubernetes inaruhusu kuambatisha kiasi kwa podi ili kuhifadhi data. Kiasi kinaweza kuwa kwenye mashine ya ndani au kwenye uhifadhi wa mbali. Ikiwa unaendesha podi kwenye nodi za kimwili tofauti unapaswa kutumia uhifadhi wa mbali ili podi zote ziweze kufikia.
Mipangilio Mingine:
Ramani ya Mipangilio: Unaweza kusanidi URLs za kufikia huduma. Podi itapata data kutoka hapa kujua jinsi ya kuwasiliana na huduma zingine (podi). Tafadhali kumbuka kuwa hii sio mahali pa kupakia siri!
Siri: Hii ni mahali pa kuhifadhi data za siri kama nywila, funguo za API... zilizoandikwa kwa B64. Podi itaweza kupata data hii kutumia siri inayohitajika.
Upelekaji: Hapa ndipo viungo vinavyotakiwa kuendeshwa na kubernetes vinavyoonyeshwa. Mtumiaji kawaida hatafanya kazi moja kwa moja na podi, podi zinafichwa katika ReplicaSets (idadi ya podi sawa zilizorekebishwa), ambazo hufanywa kupitia upelekaji. Tafadhali kumbuka kuwa upelekaji ni kwa maombi yasiyo na hali. Mipangilio ya chini kwa upelekaji ni jina na picha ya kuendesha.
Seti ya Kustahimilika: Kipengele hiki kimeundwa kwa maombi maalum kama databases ambayo inahitaji kufikia uhifadhi sawa.
Ingress: Hii ni usanidi unaotumiwa ku kufunua maombi kwa umma na URL. Tafadhali kumbuka hii inaweza pia kufanywa kwa kutumia huduma za nje, lakini hii ndio njia sahihi ya kufunua maombi.
Ikiwa unatekeleza Ingress utahitaji kuunda Wakalishi wa Ingress. Mlezi wa Ingress ni podi ambayo itakuwa mwisho wa kupokea maombi na kuchunguza na kuzisawazisha kwa huduma. mlezi wa ingress atatuma ombi kulingana na sheria za ingress zilizosanidiwa. Tafadhali kumbuka kuwa sheria za ingress zinaweza kuelekeza kwa njia tofauti au hata subdomains kwa huduma za ndani za kubernetes.
Mbinu bora ya usalama itakuwa kutumia mizani ya mzigo wa wingu au seva ya proksi kama kituo cha kuingia ili usiwe na sehemu yoyote ya kikundi cha Kubernetes iliyofunuliwa.
Wakati ombi ambalo halilingani na sheria yoyote ya ingress linapokelewa, mlezi wa ingress atalielekeza kwa "Mwisho wa Msingi". Unaweza
eleza
mlezi wa ingress kupata anwani ya kipengele hiki.minikube addons enable ingress
Miundombinu ya PKI - Mamlaka ya Cheti CA:
CA ni mzizi unaotegemewa kwa vyeti vyote ndani ya kikundi.
Inaruhusu vipengele kuthibitisha kwa kila mmoja.
Vyeti vyote vya kikundi vinasainiwa na CA.
ETCd ina cheti chake cha kipekee.
aina:
cheti cha apiserver.
cheti cha kubelet.
cheti cha scheduler.
Hatua za Msingi
Minikube
Minikube inaweza kutumika kufanya vipimo vya haraka kwenye kubernetes bila haja ya kupeleka mazingira kamili ya kubernetes. Itaendesha mchakato wa bwana na nodi kwenye mashine moja. Minikube itatumia virtualbox kuendesha nodi. Angalia hapa jinsi ya kuweka.
Misingi ya Kubectl
Kubectl
ni chombo cha mstari wa amri kwa mizunguko ya kubernetes. Inawasiliana na seva ya Api ya mchakato wa msingi kutekeleza vitendo katika kubernetes au kuomba data.
Dashibodi ya Minikube
Dashibodi inaruhusu kuona kwa urahisi ni nini minikube inaendesha, unaweza kupata URL ya kufikia hapa:
Mifano ya faili za usanidi wa YAML
Kila faili ya usanidi ina sehemu 3: metadata, specification (kile kinachohitaji kuzinduliwa), hali (hali inayotakiwa). Ndani ya maelezo ya faili ya usanidi wa kuzindua unaweza kupata kiolezo kilichoelezwa na muundo mpya wa usanidi unaoelezea picha ya kukimbia:
Mfano wa Kuzindua + Huduma iliyotangazwa katika faili moja ya usanidi (kutoka hapa)
Kwa kuwa huduma kawaida inahusiana na kuzindua moja, ni rahisi kutangaza yote mawili katika faili moja ya usanidi (huduma iliyotangazwa katika usanidi huu inaweza kufikiwa ndani tu):
Mfano wa usanidi wa huduma ya nje
Huduma hii itapatikana kwa njia ya nje (angalia sifa za nodePort
na type: LoadBalancer
):
Hii ni muhimu kwa ajili ya majaribio lakini kwa uzalishaji unapaswa kuwa na huduma za ndani pekee na Ingress kuwezesha programu.
Mfano wa faili ya mpangilio wa Ingress
Hii itaweka wazi programu kwenye http://dashboard.com
.
Mfano wa faili ya usanidi wa siri
Tafadhali angalia jinsi nywila zilivyoandikwa kwa msimbo wa Base64 (ambao si salama!)
Mfano wa ConfigMap
ConfigMap ni usanidi ambao unatolewa kwa makodsi ili wajue jinsi ya kutambua na kupata huduma nyingine. Katika kesi hii, kila kodi itajua kuwa jina mongodb-service
ni anwani ya kodi wanayoweza kuwasiliana nayo (kodi hii itakuwa inatekeleza mongodb):
Kisha, ndani ya mseto wa utekelezaji anwani hii inaweza kutajwa kwa njia ifuatayo ili ipakiwe ndani ya env ya kisanduku:
Mfano wa mpangilio wa kiasi
Unaweza kupata mifano tofauti ya faili za yaml za mpangilio wa uhifadhi katika https://gitlab.com/nanuchi/youtube-tutorial-series/-/tree/master/kubernetes-volumes. Tafadhali kumbuka kuwa kiasi si ndani ya majina ya nafasi
Majina ya Nafasi
Kubernetes inasaidia vijitengo vya kielelezo vingi vinavyoungwa mkono na kikundi cha mwili kimoja. Vijitengo hivi vya kielelezo vinaitwa majina ya nafasi. Hizi zinalenga kutumiwa katika mazingira yenye watumiaji wengi waliotapakaa katika timu nyingi, au miradi. Kwa vikundi vyenye watumiaji kadhaa hadi kumi, hauitaji kuunda au kufikiria majina ya nafasi kabisa. Unapaswa tuanza kutumia majina ya nafasi ili kuwa na udhibiti bora na kuandaa kila sehemu ya programu iliyosakinishwa katika kubernetes.
Majina ya nafasi hutoa eneo la majina. Majina ya rasilimali lazima yawe ya kipekee ndani ya nafasi, lakini sio kati ya majina ya nafasi. Majina ya nafasi haziwezi kuwa ndani ya nyingine na kila rasilimali ya Kubernetes inaweza kuwa katika nafasi moja tu.
Kuna majina 4 ya nafasi kwa chaguo-msingi ikiwa unatumia minikube:
kube-system: Haikusudiwi au kutumika na watumiaji na usiguse. Ni kwa ajili ya mchakato wa kudhibiti na kubectl.
kube-public: Data inayopatikana kwa umma. Ina configmap ambayo ina taarifa za kikundi.
kube-node-lease: Inabainisha upatikanaji wa kifaa.
default: Nafasi ambayo mtumiaji atatumia kuunda rasilimali.
Tafadhali kumbuka kuwa rasilimali nyingi za Kubernetes (k.m. pods, huduma, wakalisha uigaji, na zingine) ziko kwenye majina nafasi fulani. Hata hivyo, rasilimali nyingine kama vile rasilimali za majina nafasi na rasilimali za kiwango cha chini, kama vile nodes na persistenVolumes haziko kwenye jina nafasi. Ili kuona ni rasilimali zipi za Kubernetes ziko na haziko kwenye jina nafasi:
Unaweza kuokoa jina la nafasi kwa amri zote za kubectl zinazofuata katika muktadha huo.
Helm
Helm ni meneja wa pakiti kwa Kubernetes. Inaruhusu kupakia faili za YAML na kuzisambaza kwenye hifadhi za umma na binafsi. Pakiti hizi huitwa Helm Charts.
Siri za Kubernetes
Siri ni kitu ambacho kina data nyeti kama nenosiri, token au ufunguo. Taarifa kama hizo zingine zingeweza kuwekwa kwenye maelezo ya Pod au kwenye picha. Watumiaji wanaweza kuunda Siri na mfumo pia hujenga Siri. Jina la kitu cha Siri lazima liwe jina la subdomain la DNS halali. Soma hapa hati rasmi.
Siri inaweza kuwa vitu kama:
API, funguo za SSH.
Vyeti vya OAuth.
Anwani, Nenosiri (maandishi ya kawaida au b64 + encryption).
Taarifa au maoni.
Kanuni ya uhusiano wa database, mistari… .
Kuna aina tofauti za siri katika Kubernetes
Aina ya Kujengwa | Matumizi |
---|---|
Opaque | data iliyoundwa na mtumiaji (Chaguo-msingi) |
kubernetes.io/service-account-token | tokeni ya akaunti ya huduma |
kubernetes.io/dockercfg | faili iliyosanidishwa ~/.dockercfg |
kubernetes.io/dockerconfigjson | faili iliyosanidishwa ~/.docker/config.json |
kubernetes.io/basic-auth | sifa za uthibitishaji wa msingi |
kubernetes.io/ssh-auth | sifa za uthibitishaji wa SSH |
kubernetes.io/tls | data kwa ajili ya mteja au seva ya TLS |
bootstrap.kubernetes.io/token | data ya tokeni ya bootstrap |
Aina ya Opaque ni ile ya chaguo-msingi, jozi ya kawaida ya funguo-na-thamani iliyoundwa na watumiaji.
Jinsi siri inavyofanya kazi:
Faili ya usanidi ifuatayo inaainisha siri inayoitwa mysecret
na jozi 2 za funguo-na-thamani username: YWRtaW4=
na password: MWYyZDFlMmU2N2Rm
. Pia inaainisha pod inayoitwa secretpod
ambayo itakuwa na username
na password
zilizoainishwa katika mysecret
zilizofichuliwa katika mazingira ya pembejeo SECRET_USERNAME
__ na __ SECRET_PASSWOR
. Pia ita mount siri ya username
ndani ya mysecret
kwenye njia /etc/foo/my-group/my-username
na ruhusa za 0640
.
Siri katika etcd
etcd ni duka la thamani-ufunguo linalofanana na linalopatikana kila wakati linalotumiwa kama duka la nyuma la Kubernetes kwa data zote za kikundi. Hebu tupate ufikivu wa siri zilizohifadhiwa katika etcd:
Utaweza kuona vyeti, funguo na url ziko wapi kwenye FS. Mara utakapovipata, utaweza kuunganisha kwenye etcd.
Baada ya kufanikiwa kuanzisha mawasiliano ungeweza kupata siri:
Kuongeza encryption kwa ETCD
Kwa chaguo-msingi siri zote huhifadhiwa kwa maandishi wazi ndani ya etcd isipokuwa utumie safu ya encryption. Mfano ufuatao unategemea https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/
Baada ya hapo, unahitaji kuweka bendera ya --encryption-provider-config
kwenye kube-apiserver
ili ielekeze kwenye eneo la faili ya usanidi iliyoundwa. Unaweza kuhariri /etc/kubernetes/manifest/kube-apiserver.yaml
na kuongeza mistari ifuatayo:
Endelea kushuka katika volumeMounts:
Endelea chini katika volumeMounts hadi hostPath:
Kuthibitisha kuwa data imefichwa
Data inafichwa wakati inapoandikwa kwenye etcd. Baada ya kuanzisha upya kube-apiserver
yako, siri mpya au iliyosasishwa inapaswa kufichwa wakati inapo-hifadhiwa. Ili kuthibitisha, unaweza kutumia programu ya mstari wa amri ya etcdctl
kupata maudhui ya siri yako.
Unda siri mpya iitwayo
secret1
katika eneo ladefault
:
Kutumia amri ya mstari wa amri ya etcdctl, soma siri hiyo kutoka kwa etcd:
ETCDCTL_API=3 etcdctl get /registry/secrets/default/secret1 [...] | hexdump -C
ambapo [...]
lazima iwe ni hoja za ziada za kuunganisha kwenye seva ya etcd. 3. Thibitisha siri iliyohifadhiwa imeanzishwa na k8s:enc:aescbc:v1:
ambayo inaonyesha kuwa mtoa huduma wa aescbc
ameficha data inayotokana. 4. Hakikisha siri imefichuliwa kwa usahihi wakati inapopatikana kupitia API:
inapaswa kulingana na mykey: bXlkYXRh
, mydata imefichwa, angalia kufichua siri kufichua siri kikamilifu.
Kwa kuwa siri zinafichwa wakati wa kuandika, kufanya sasisho kwenye siri kutaficha yaliyomo:
Vidokezo vya mwisho:
Jaribu usiweke siri kwenye FS, pata kutoka sehemu nyingine.
Angalia https://www.vaultproject.io/ kwa kuongeza ulinzi zaidi kwa siri zako.
Marejeo
Last updated