{"id":3829,"date":"2021-05-04T17:38:29","date_gmt":"2021-05-04T15:38:29","guid":{"rendered":"https:\/\/vm.piszki.pl\/?p=3829"},"modified":"2021-05-04T17:38:38","modified_gmt":"2021-05-04T15:38:38","slug":"cloudstack-kubernetes-plugin","status":"publish","type":"post","link":"https:\/\/vm.piszki.pl\/?p=3829","title":{"rendered":"CloudStack &ndash; Kubernetes plugin"},"content":{"rendered":"<p align=\"justify\">Wi\u0119kszo\u015b\u0107 rozwi\u0105za\u0144 typu IaaS (CloudStack, vSphere, OpenStack, Proxmox itd.), do tej pory skupionych na wirtualnych maszynach, bardzo intensywnie rozwija wsparcie dla konteneryzacji. Wiod\u0105cym standardem jest w tej chwili Kubernetes, wsparcie dla niego znajdziemy i w VMware vSphere (projekt Tanzu) jak i w CloudStack (kubernetes plugin). Podej\u015bcie do konteneryzacji w IaaS jest wsz\u0119dzie mniej wi\u0119cej takie samo, kontenery s\u0105 uruchamiane w lekkich VM a platforma IaaS ma u\u0142atwia\u0107 uruchamianie i zarz\u0105dzanie klastrami. Dzisiaj zajmiemy si\u0119 tym drugim rozwi\u0105zaniem, krok po kroku skonfigurujemy CloudStack i uruchomimy klaster Kubernetes. <a href=\"http:\/\/docs.cloudstack.apache.org\/en\/latest\/plugins\/cloudstack-kubernetes-service.html\">Dokumentacja<\/a> CS dla wersji 4.15 jest do\u015b\u0107 szczeg\u00f3\u0142owa i zawiera aktualne linki do potrzebnych obraz\u00f3w ISO, warto si\u0119 z ni\u0105 zapozna\u0107.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/9BBF8AbW_400x400.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"9BBF8AbW_400x400\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/9BBF8AbW_400x400_thumb.jpg\" alt=\"9BBF8AbW_400x400\" width=\"200\" height=\"200\" border=\"0\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p align=\"justify\">W pierwszym kroku musimy w\u0142\u0105czy\u0107 plugin ustawiaj\u0105c opcj\u0119 cloud.kubernetes.service.enabled na true, nast\u0119pnie restartujemy wszystkie serwery zarz\u0105dcze (cloudstack management i usage). Mo\u017cna te\u017c w\u0142\u0105czy\u0107 registry, ale jest to podstawowa funkcjonalno\u015b\u0107, jesli mamy tak\u0105 mo\u017cliwo\u015b\u0107 to uruchommy na naszym klastrze <a href=\"https:\/\/goharbor.io\/\">Harbor<\/a>, zdecydowanie inna klasa rozwi\u0105zania.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube0\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0_thumb.jpg\" alt=\"kube0\" width=\"1133\" height=\"467\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Jak wida\u0107 na powy\u017cszym rysunku, wpisana zosta\u0142a tak\u017ce nazwa template KVM \u201cK8S-CoreOS\u201d o czym b\u0119dzie ni\u017cej, nie warto te\u017c zmienia\u0107 nazwy domy\u015blnego profilu sieciowego (zostanie on u\u017cyty je\u015bli nie wska\u017cemy sieci), zmiana tej nazwy powoduje b\u0142\u0105d przy starcie klastra. W kolejnym kroku musimy zaimportowa\u0107 plik ISO ze wspieran\u0105 wersj\u0105 kubernetes. Plik ten zawiera odpowiednie obrazy oraz oprogramowanie pozwalaj\u0105ce przy\u015bpieszy\u0107 uruchamianie klastra. Dost\u0119pne obrazy pobieramy z tej strony, na chwil\u0119 obecn\u0105 wspierane s\u0105 nast\u0119puj\u0105ce wersje:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.1.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube0.1\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.1_thumb.jpg\" alt=\"kube0.1\" width=\"459\" height=\"260\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Odpowiedni plik importujemy w sekcji Images \u2013&gt; Kubernetes ISO:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.2.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube0.2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.2_thumb.png\" alt=\"kube0.2\" width=\"678\" height=\"749\" border=\"0\" \/><\/a><\/p>\n<p>Po pobraniu ISO ma status Ready:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.3.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube0.3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.3_thumb.jpg\" alt=\"kube0.3\" width=\"926\" height=\"220\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Nast\u0119pnie pobieramy plik obrazu systemu CoreOS kt\u00f3ry w tej wersji jest wykorzystywany jako lekka VM b\u0119d\u0105ca no\u015bnikiem konteneryzacji, w kolejnych wydaniach CoreOS b\u0119dzie zast\u0105piony przez Debian. Pliki dost\u0119pne s\u0105 pod tym <a href=\"http:\/\/dl.openvm.eu\/cloudstack\/macchinina\/x86_64\/\">adresem<\/a>, template pobieramy, rozpakowujemy i rejestrujemy jako standardowy template systemowy. I na koniec uwaga, je\u015bli chcemy aby standardowy u\u017cytkownik m\u00f3g\u0142 tworzy\u0107 klastry kubernetes, template CoreOS musi mie\u0107 status publiczny.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube0.4\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube0.4_thumb.jpg\" alt=\"kube0.4\" width=\"825\" height=\"533\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">W kolejnym kroku tworzymy sie\u0107 izolowan\u0105 w kt\u00f3rej b\u0119dzie dzia\u0142a\u0142 klaster kubernetes. Mimo \u017ce odpowiedni formularz pozwala wybra\u0107 dowoln\u0105, stworzon\u0105 wcze\u015bniej sie\u0107, nie r\u00f3bmy tego, ca\u0142o\u015b\u0107 zosta\u0142a przygotowana do dzia\u0142ania w sieciach izolowanych. Pojedyncza sie\u0107 obs\u0142uguje jeden klaster, dla wielu klastr\u00f3w potrzebujemy wielu sieci (ka\u017cda konsumuje VLAN).<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube1.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube1\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube1_thumb.jpg\" alt=\"kube1\" width=\"919\" height=\"678\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Sie\u0107 ta dzia\u0142a tak, jak ka\u017cda izolowana sie\u0107 w Cloudstack, mo\u017cemy w niej tworzy\u0107 dodatkowe VM (je\u015bli np. potrzebujemy systemu z kt\u00f3rego b\u0119dziemy zarz\u0105dzali klastrem bardziej nisko poziomowo):<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube2.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube2\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube2_thumb.jpg\" alt=\"kube2\" width=\"915\" height=\"164\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">W ostatnim kroku uruchamiamy nasz klaster kubernetes. Plugin domy\u015blnie uruchamia jeden Master Node i zdefiniowan\u0105 przez nas ilo\u015b\u0107 Worker Node. Mo\u017cliwe jest te\u017c uruchomienie klastra w trybie HA, wtedy tworzone s\u0105 kolejne Worker Node a na VR tworzone s\u0105 odpowiednie regu\u0142y LB. W ramach sieci izolowanej plugin tworzy wszystkie odpowiednie regu\u0142y NAT i FW.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube3.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube3\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube3_thumb.jpg\" alt=\"kube3\" width=\"830\" height=\"699\" border=\"0\" \/><\/a><\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube4.png\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube4\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube4_thumb.png\" alt=\"kube4\" width=\"964\" height=\"153\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Takie klastry mo\u017cna uruchamia\u0107 na dowolnym poziomie, np. zwyk\u0142y u\u017cytkownik mo\u017ce to sobie w\u0142\u0105czy\u0107 w ramach swojego projektu. Wszystkie VM obs\u0142uguj\u0105ce klaster s\u0105 doskonale widoczne i mo\u017cna nimi pojedynczo zarz\u0105dza\u0107.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube5.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border: 0px currentcolor; margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube5\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube5_thumb.jpg\" alt=\"kube5\" width=\"962\" height=\"309\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Wszystkie potrzebne informacje s\u0105 czytelnie podane w zak\u0142adce Access, mo\u017cemy tutaj pobra\u0107 plik kube.conf oraz \u015bci\u0105gn\u0105\u0107 bezpo\u015brednio kubeadm:<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube6.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube6\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube6_thumb.jpg\" alt=\"kube6\" width=\"962\" height=\"553\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Klaster automatycznie uruchamia Kubernetes Dashboard UI, w UI CloudStack mamy podan\u0105 informacj\u0119 jak si\u0119 po\u0142\u0105czy\u0107 do niego:<\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube7.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube7\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube7_thumb.jpg\" alt=\"kube7\" width=\"942\" height=\"373\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\"><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube8.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"margin-right: auto; margin-left: auto; float: none; display: block; background-image: none;\" title=\"kube8\" src=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube8_thumb.jpg\" alt=\"kube8\" width=\"931\" height=\"543\" border=\"0\" \/><\/a><\/p>\n<p align=\"justify\">Jak wida\u0107 ca\u0142o\u015b\u0107 rozwi\u0105zania jest bardzo prosta, w kilku krokach mamy uruchomiony pierwszy klaster kubernetes. Nale\u017cy jedynie pami\u0119ta\u0107, \u017ce ca\u0142o\u015b\u0107 rozwi\u0105zania stoi za wirtualnym routerem, uruchamiaj\u0105c aplikacje wewn\u0105trz klastra pami\u0119tajmy o otwieraniu w\u0142a\u015bciwych port\u00f3w na firewall.<\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube7.jpg\">\u00a0<\/a><\/p>\n<p><a href=\"https:\/\/vm.piszki.pl\/wp-content\/uploads\/2021\/05\/kube8.jpg\">\u00a0<\/a><\/p>\n<div style='text-align:left' class='yasr-auto-insert-visitor'><\/div>","protected":false},"excerpt":{"rendered":"<p>Wi\u0119kszo\u015b\u0107 rozwi\u0105za\u0144 typu IaaS (CloudStack, vSphere, OpenStack, Proxmox itd.), do tej pory skupionych na wirtualnych maszynach, bardzo intensywnie rozwija wsparcie dla konteneryzacji. Wiod\u0105cym standardem jest w tej chwili Kubernetes, wsparcie dla niego znajdziemy i w VMware vSphere (projekt Tanzu) jak &hellip; <a href=\"https:\/\/vm.piszki.pl\/?p=3829\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"yasr_overall_rating":0,"yasr_post_is_review":"","yasr_auto_insert_disabled":"","yasr_review_type":"","footnotes":""},"categories":[6,45],"tags":[116,154,153,108],"class_list":["post-3829","post","type-post","status-publish","format-standard","hentry","category-lab","category-poradniki","tag-cloudstack","tag-harbor","tag-kubernetes","tag-kvm"],"yasr_visitor_votes":{"stars_attributes":{"read_only":false,"span_bottom":false},"number_of_votes":0,"sum_votes":0},"_links":{"self":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3829"}],"collection":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3829"}],"version-history":[{"count":3,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3829\/revisions"}],"predecessor-version":[{"id":3832,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=\/wp\/v2\/posts\/3829\/revisions\/3832"}],"wp:attachment":[{"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vm.piszki.pl\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}