Virtu\u00e1lnom d\u00e1tovom centre<\/a> od Websupportu.<\/p>\n\n\n\nV tomto diele si uk\u00e1\u017eeme, ako syst\u00e9m Kubernetes zdiela \u00fadaje medzi kontajnermi jedn\u00e9ho podu (emptyDir), a tie\u017e ako uklad\u00e1 \u00fadaje, o ktor\u00e9 nechceme pr\u00eds\u0165, ke\u010f sa pod ukon\u010d\u00ed (hostPath).<\/p>\n\n\n\n
Ma\u017eeme nepotrebn\u00e9 slu\u017eby a nasadenia<\/h2>\n\n\n\n Pred t\u00fdm, ako budeme pokra\u010dova\u0165, vyma\u017eeme nepotrebn\u00e9 slu\u017eby (services) a nasadenia (deployments), aby sme Kubernetes Cluster zbyto\u010dne neza\u0165azovali. Najsk\u00f4r vyp\u00ed\u0161eme zoznam spusten\u00fdch slu\u017eieb (prv\u00fd riadok) a akt\u00edvnych nasaden\u00ed (druh\u00fd riadok) na VPS master<\/code>:<\/p>\n\n\n\nkubectl get services<\/code><\/pre>\n\n\n\nkubectl get deployments<\/code><\/pre>\n\n\n\nPotom nepotrebn\u00e9 slu\u017eby (prv\u00fd riadok) a nasadenia (druh\u00fd riadok) na VPS master<\/code> zma\u017eeme (tu je nepotrebn\u00e1 slu\u017eba nazvan\u00e1 nginx-service<\/code> a nepotrebn\u00e9 nasadenie nginx-deployment<\/code>):<\/p>\n\n\n\nkubectl delete service nginx-service<\/code><\/pre>\n\n\n\nkubectl delete deployment nginx-deployment<\/code><\/pre>\n\n\n\nNasadzujeme pod s \u00falo\u017eiskom<\/h2>\n\n\n\n Syst\u00e9m Kubernetes pracuje s viacer\u00fdmi mechanizmami, v\u010faka ktor\u00fdm dok\u00e1\u017ee vytvori\u0165 a pou\u017ei\u0165 \u00falo\u017eisko (storage) mimo samotn\u00e9ho podu. V tomto n\u00e1vode predstav\u00edme dva z nich:<\/p>\n\n\n\n
emptyDir<\/strong> – tento mechanizmus vytvor\u00ed prie\u010dinok a\u017e ke\u010f sa pod nasad\u00ed na nod a existuje iba dovtedy, pokia\u013e existuje aj pod. Ide teda o do\u010dasn\u00e9 intern\u00e9 \u00falo\u017eisko, ke\u010f\u017ee spolu s vymazan\u00edm podu sa vyma\u017ee aj takto vytvoren\u00e9 \u00falo\u017eisko.<\/li>hostPath<\/strong> – tento mechanizmus pripoj\u00ed s\u00fabor alebo prie\u010dinok k syst\u00e9mu s\u00faborov podu, pri\u010dom takto vytvoren\u00e9 extern\u00e9 \u00falo\u017eisko sa zachov\u00e1 aj po ukon\u010den\u00ed podu na syst\u00e9me s\u00faborov nodu.<\/li><\/ul>\n\n\n\nMechanizmus emptyDir<\/h3>\n\n\n\n Mechanizmus na pripojenie intern\u00e9ho \u00falo\u017eiska emptyDir<\/strong> vytvor\u00ed \u00falo\u017eisko iba vo vn\u00fatri kontajnera. Spolu s odstr\u00e1nen\u00edm podu sa vyma\u017ee aj \u00falo\u017eisko vytvoren\u00e9 mechanizmom emptyDir. V\u0161etky kontajneri nasaden\u00e9 na rovnakom pode zdie\u013eaj\u00fa \u00falo\u017eisko vytvoren\u00e9 mechanizmom emptyDir, a to aj v in\u00fdch prie\u010dinkoch. Toto \u00falo\u017eisko zost\u00e1va zachovan\u00e9 aj po p\u00e1de kontajnera.<\/p>\n\n\n\nVytvor\u00edme s\u00fabor s n\u00e1zvom pod-volume-emptydir.yaml<\/code> (prv\u00fd riadok), do ktor\u00e9ho zap\u00ed\u0161eme defin\u00edciu nasadenia podu (ostatn\u00e9 riadky):<\/p>\n\n\n\nnano ~\/pod-volume-emptydir.yaml<\/code><\/pre>\n\n\n\napiVersion: v1\nkind: Pod\nmetadata:\n name: pod-volume-emptydir\nspec:\n containers:\n - image: nginx\n name: container-volume-emptydir\n volumeMounts:\n - mountPath: \/opt\/container-emptydir\n name: volume-emptydir\n volumes:\n - name: volume-emptydir\n emptyDir: {}<\/code><\/pre>\n\n\n\nVlo\u017e\u00edme skop\u00edrovan\u00fd obsah, ulo\u017e\u00edme pomocou kl\u00e1vesovej skratky Ctrl + X<\/code> a n\u00e1sledne stla\u010den\u00edm kl\u00e1vesu y<\/code> a potvrden\u00edm kl\u00e1vesom Enter<\/code>.<\/p>\n\n\n\nPod nasad\u00edme z vy\u0161\u0161ie vytvoren\u00e9ho konfigura\u010dn\u00e9ho s\u00faboru:<\/p>\n\n\n\n
kubectl create -f ~\/pod-volume-emptydir.yaml<\/code><\/pre>\n\n\n\nZist\u00edme, \u017ee vy\u0161\u0161ie spusten\u00fd pod s n\u00e1zvom pod-volume-emptydir<\/code> sa nasadil na nod worker-1<\/code> (prv\u00fd riadok) a \u017ee pripojenie extern\u00e9ho \u00falo\u017eiska prebehlo spr\u00e1vne (druh\u00fd riadok):<\/p>\n\n\n\nkubectl get pods -o wide<\/code><\/pre>\n\n\n\nkubectl describe pod pod-volume-emptydir<\/code><\/pre>\n\n\n\nZ nodu master<\/code> sa prihl\u00e1sime do kontajnera podu s n\u00e1zvom pod-volume-emptydir<\/code>, ktor\u00fd bol nasaden\u00fd na nod worker-1<\/code>, aby sme overili, \u017ee prie\u010dinok \/opt\/container-emptydir<\/code> existuje:<\/p>\n\n\n\nkubectl exec -it pod-volume-emptydir -- \/bin\/bash<\/code><\/pre>\n\n\n\nls \/opt<\/code><\/pre>\n\n\n\nVyma\u017eeme vy\u0161\u0161ie \u0161pecifikovan\u00e9 nasadenie podu a s n\u00edm aj \u00falo\u017eisko vytvoren\u00e9 mechanizmom emptyDir:<\/p>\n\n\n\n
kubectl delete -f ~\/pod-volume-emptydir.yaml<\/code><\/pre>\n\n\n\nMechanizmus hostPath<\/h3>\n\n\n\n Mechanizmus na pripojenie extern\u00e9ho \u00falo\u017eiska hostPath<\/strong> si nastav\u00edme v textovom konfigura\u010dnom s\u00fabore vo form\u00e1te YAML. Vytvor\u00edme s\u00fabor s n\u00e1zvom pod-volume-hostpath.yaml<\/code> (prv\u00fd riadok), do ktor\u00e9ho zap\u00ed\u0161eme defin\u00edciu nasadenia podu (ostatn\u00e9 riadky):<\/p>\n\n\n\nnano ~\/pod-volume-hostpath.yaml<\/code><\/pre>\n\n\n\napiVersion: v1\nkind: Pod\nmetadata:\n name: pod-volume-hostpath\nspec:\n containers:\n - image: nginx\n name: container-volume-hostpath\n volumeMounts:\n - mountPath: \/opt\/container-dir\n name: volume-hostpath\n volumes:\n - name: volume-hostpath\n hostPath:\n path: \/host-dir\n type: DirectoryOrCreate<\/code><\/pre>\n\n\n\nVlo\u017e\u00edme skop\u00edrovan\u00fd obsah, ulo\u017e\u00edme pomocou kl\u00e1vesovej skratky Ctrl + X<\/code> a n\u00e1sledne stla\u010den\u00edm kl\u00e1vesu y<\/code> a potvrden\u00edm kl\u00e1vesom Enter<\/code>.<\/p>\n\n\n\nV \u010dasti spec.containers.volumeMounts.mountPath<\/code> ur\u010dujeme cestu k prie\u010dinku, ktor\u00fd sa m\u00e1 pou\u017ei\u0165 v kontajneri podu. V \u010dasti spec.volumes.hostPath.path<\/code> zase \u0161pecifikujeme cestu k prie\u010dinku, ktor\u00fd existuje na worker nodoch (tu worker-1<\/code> a\/alebo worker-2<\/code>). V\u010faka DirectoryOrCreate<\/code> sa neexistuj\u00face prie\u010dinky automaticky vytvoria.<\/p>\n\n\n\nPod nasad\u00edme z vy\u0161\u0161ie vytvoren\u00e9ho konfigura\u010dn\u00e9ho s\u00faboru:<\/p>\n\n\n\n
kubectl create -f ~\/pod-volume-hostpath.yaml<\/code><\/pre>\n\n\n\nZist\u00edme, \u017ee vy\u0161\u0161ie spusten\u00fd pod s n\u00e1zvom pod-volume-hostpath<\/code> sa nasadil na nod worker-1<\/code> (prv\u00fd riadok) a \u017ee pripojenie extern\u00e9ho \u00falo\u017eiska prebehlo spr\u00e1vne (druh\u00fd riadok):<\/p>\n\n\n\nkubectl get pods -o wide<\/code><\/pre>\n\n\n\nkubectl describe pod pod-volume-hostpath <\/code><\/pre>\n\n\n\nPrihl\u00e1sime sa cez SSH na nod worker-1<\/code> (prv\u00fd riadok), aby sme overili, \u017ee prie\u010dinok \/host-dir<\/code> existuje (druh\u00fd riadok), \u010di\u017ee bol automaticky vytvoren\u00fd:<\/p>\n\n\n\nssh pouzivatel@worker-1<\/code><\/pre>\n\n\n\nls \/<\/code><\/pre>\n\n\n\nRovnako sa z nodu master<\/code> prihl\u00e1sime do kontajnera podu s n\u00e1zvom pod-volume-hostpath<\/code>, ktor\u00fd bol nasaden\u00fd na nod worker-1<\/code>, aby sme overili, \u017ee existuje aj prie\u010dinok \/opt\/container-dir<\/code> vytvoren\u00fd v kontajneri s n\u00e1zvom container-volume-hostpath<\/code>:<\/p>\n\n\n\nkubectl exec -it pod-volume-hostpath -- \/bin\/bash<\/code><\/pre>\n\n\n\nls \/opt<\/code><\/pre>\n\n\n\nOba prie\u010dinky existuj\u00fa a teraz e\u0161te over\u00edme, \u010di sa s\u00fabor vytvoren\u00fd v prie\u010dinku \/host-dir<\/code> zobraz\u00ed aj v prie\u010dinku \/opt\/container-dir<\/code>. V prie\u010dinku \/host-dir<\/code> vytvor\u00edme s\u00fabor test.txt<\/code>, ktor\u00fd by sa mal zobrazi\u0165 aj v prie\u010dinku kontajnera. Na node worker-1 teda spust\u00edme pr\u00edkaz:<\/p>\n\n\n\nsudo touch \/host-dir\/test.txt<\/code><\/pre>\n\n\n\nRovnak\u00fd s\u00fabor sa zobraz\u00ed aj v kontajneri podu s n\u00e1zvom pod-volume-hostpath<\/code> v prie\u010dinku \/opt\/container-dir<\/code>, \u010do si over\u00edme pr\u00edkazom v kontajneri:<\/p>\n\n\n\nls \/opt\/container-dir<\/code><\/pre>\n\n\n\nVyma\u017eeme vy\u0161\u0161ie \u0161pecifikovan\u00e9 nasadenie podu:<\/p>\n\n\n\n
kubectl delete -f ~\/pod-volume-hostpath.yaml<\/code><\/pre>\n\n\n\nZist\u00edme, \u017ee aj po vymazan\u00ed podu pod-volume-hostpath<\/code> ostal obsah prie\u010dinka \/host-dir<\/code> na node worker-1<\/code> zachovan\u00fd. Na node worker-1<\/code> spust\u00edme pr\u00edkaz:<\/p>\n\n\n\nls \/host-dir<\/code><\/pre>\n\n\n\nH\u013ead\u00e1te mana\u017eovan\u00fd Kubernetes? Vyu\u017eite slu\u017eby na\u0161ich sk\u00fasen\u00fdch profesion\u00e1lov na cloud native – radi v\u00e1m priprav\u00edme rie\u0161nie na mieru<\/a>.<\/p>\n\n\n\nZhrnutie<\/h2>\n\n\n\n V \u0161iestom diele sme uk\u00e1zali, ako k podu pripoji\u0165 intern\u00e9 \u00falo\u017eisko (storage) pomocou mechanizmu emptyDir, ktor\u00e9ho obsah zost\u00e1va zachovan\u00fd, pokia\u013e pod nevyma\u017eeme. Extern\u00e9 \u00falo\u017eisko zo syst\u00e9mu s\u00faborov nodu sme ku kontajneru pripojili pomocou mechanizmu hostPath, pri\u010dom sme si overili, \u017ee aj po vymazan\u00ed nasaden\u00e9ho podu obsah pripojen\u00e9ho prie\u010dinka zostal zachovan\u00fd.<\/p>\n","protected":false},"excerpt":{"rendered":"
V piatom diele sme predstavili \u010fal\u0161\u00ed sp\u00f4sob obmedzenia nasadenia podov iba na ur\u010dit\u00e9 nody. Zatia\u013e\u010do pomocou sady pravidiel Node Affinity obmedzujeme nasadenie podov ozna\u010den\u00edm nodov pomocou \u0161t\u00edtkov (Labels), v r\u00e1mci druhej mo\u017enosti ozna\u010dujeme nody pomocou Taint. V oboch pr\u00edpadoch v\u0161ak dosiahneme podobn\u00fd efekt a je na zv\u00e1\u017een\u00ed, ktor\u00fd sp\u00f4sob pri…<\/p>\n","protected":false},"author":28,"template":"","format":"standard","meta":{"footnotes":""},"ht-kb-category":[468],"ht-kb-tag":[336,474,396,471,330,339,381,198,192],"class_list":["post-22717","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-kubernetes","ht_kb_tag-cli","ht_kb_tag-cloud-native","ht_kb_tag-kontajnery","ht_kb_tag-kubernetes","ht_kb_tag-linux","ht_kb_tag-open-source","ht_kb_tag-server","ht_kb_tag-ubuntu","ht_kb_tag-vdc"],"yoast_head":"\n
Kubernetes - 6. Storage pomocou emptyDir a hostPath - Websupport centrum podpory<\/title>\n \n \n \n \n \n \n \n \n \n \n \n\t \n