Większość rozwiązań typu IaaS (CloudStack, vSphere, OpenStack, Proxmox itd.), do tej pory skupionych na wirtualnych maszynach, bardzo intensywnie rozwija wsparcie dla konteneryzacji. Wiodącym standardem jest w tej chwili Kubernetes, wsparcie dla niego znajdziemy i w VMware vSphere (projekt Tanzu) jak i w CloudStack (kubernetes plugin). Podejście do konteneryzacji w IaaS jest wszędzie mniej więcej takie samo, kontenery są uruchamiane w lekkich VM a platforma IaaS ma ułatwiać uruchamianie i zarządzanie klastrami. Dzisiaj zajmiemy się tym drugim rozwiązaniem, krok po kroku skonfigurujemy CloudStack i uruchomimy klaster Kubernetes. Dokumentacja CS dla wersji 4.15 jest dość szczegółowa i zawiera aktualne linki do potrzebnych obrazów ISO, warto się z nią zapoznać.
W pierwszym kroku musimy włączyć plugin ustawiając opcję cloud.kubernetes.service.enabled na true, następnie restartujemy wszystkie serwery zarządcze (cloudstack management i usage). Można też włączyć registry, ale jest to podstawowa funkcjonalność, jesli mamy taką możliwość to uruchommy na naszym klastrze Harbor, zdecydowanie inna klasa rozwiązania.
Jak widać na powyższym rysunku, wpisana została także nazwa template KVM “K8S-CoreOS” o czym będzie niżej, nie warto też zmieniać nazwy domyślnego profilu sieciowego (zostanie on użyty jeśli nie wskażemy sieci), zmiana tej nazwy powoduje błąd przy starcie klastra. W kolejnym kroku musimy zaimportować plik ISO ze wspieraną wersją kubernetes. Plik ten zawiera odpowiednie obrazy oraz oprogramowanie pozwalające przyśpieszyć uruchamianie klastra. Dostępne obrazy pobieramy z tej strony, na chwilę obecną wspierane są następujące wersje:
Odpowiedni plik importujemy w sekcji Images –> Kubernetes ISO:
Po pobraniu ISO ma status Ready:
Następnie pobieramy plik obrazu systemu CoreOS który w tej wersji jest wykorzystywany jako lekka VM będąca nośnikiem konteneryzacji, w kolejnych wydaniach CoreOS będzie zastąpiony przez Debian. Pliki dostępne są pod tym adresem, template pobieramy, rozpakowujemy i rejestrujemy jako standardowy template systemowy. I na koniec uwaga, jeśli chcemy aby standardowy użytkownik mógł tworzyć klastry kubernetes, template CoreOS musi mieć status publiczny.
W kolejnym kroku tworzymy sieć izolowaną w której będzie działał klaster kubernetes. Mimo że odpowiedni formularz pozwala wybrać dowolną, stworzoną wcześniej sieć, nie róbmy tego, całość została przygotowana do działania w sieciach izolowanych. Pojedyncza sieć obsługuje jeden klaster, dla wielu klastrów potrzebujemy wielu sieci (każda konsumuje VLAN).
Sieć ta działa tak, jak każda izolowana sieć w Cloudstack, możemy w niej tworzyć dodatkowe VM (jeśli np. potrzebujemy systemu z którego będziemy zarządzali klastrem bardziej nisko poziomowo):
W ostatnim kroku uruchamiamy nasz klaster kubernetes. Plugin domyślnie uruchamia jeden Master Node i zdefiniowaną przez nas ilość Worker Node. Możliwe jest też uruchomienie klastra w trybie HA, wtedy tworzone są kolejne Worker Node a na VR tworzone są odpowiednie reguły LB. W ramach sieci izolowanej plugin tworzy wszystkie odpowiednie reguły NAT i FW.
Takie klastry można uruchamiać na dowolnym poziomie, np. zwykły użytkownik może to sobie włączyć w ramach swojego projektu. Wszystkie VM obsługujące klaster są doskonale widoczne i można nimi pojedynczo zarządzać.
Wszystkie potrzebne informacje są czytelnie podane w zakładce Access, możemy tutaj pobrać plik kube.conf oraz ściągnąć bezpośrednio kubeadm:
Klaster automatycznie uruchamia Kubernetes Dashboard UI, w UI CloudStack mamy podaną informację jak się połączyć do niego:
Jak widać całość rozwiązania jest bardzo prosta, w kilku krokach mamy uruchomiony pierwszy klaster kubernetes. Należy jedynie pamiętać, że całość rozwiązania stoi za wirtualnym routerem, uruchamiając aplikacje wewnątrz klastra pamiętajmy o otwieraniu właściwych portów na firewall.