Jak korzystać z interfejsu wiersza poleceń dla klastrów Kubernetes w NSIS OpenStack Magnum
W tym artykule użyjesz interfejsu wiersza poleceń (CLI), aby przyspieszyć testowanie i tworzenie klastrów Kubernetes na serwerach OpenStack Magnum.
Co zostanie omówione?
Zalety korzystania z CLI w porównaniu z interfejsem graficznym Horizon
Debugowanie poleceń OpenStack i Magnum
Jak utworzyć nowy szablon klastra Kubernetes przy użyciu interfejsu CLI?
Jak utworzyć nowy klaster Kubernetes przy użyciu interfejsu CLI?
Powody, dla których klaster może nie zostać utworzony
Polecenia CLI służące do usuwania klastra
Wymagania wstępne
Nr 1 Hosting
Wymagane jest konto hostingowe NSIS z interfejsem Horizon https://horizon.cloudferro.com.
Nr 2 Klucze prywatne i publiczne
Para kluczy SSH utworzona w pulpicie nawigacyjnym OpenStack. Aby ją utworzyć, postępuj zgodnie z artykułem Jak utworzyć parę kluczy w OpenStack Dashboard na NSIS Cloud. Zostanie utworzona para kluczy o nazwie sshkey, której będzie można używać również w tym samouczku.
Nr 3 Struktura poleceń klienta OpenStack
Instrukcję dla poleceń OpenStackClient można znaleźć tutaj: Command Structure Xena version.
Nr 4 Lista poleceń klienta OpenStack
Wszystkie polecenia obsługiwane przez wersję Xena OpenStackClient są przedstawione na stronie Xena Command List.
Nr 5 Dokumentacja dla klienta Magnum
Wszystkie polecenia obsługiwane przez wersję Xena MagnumClient znajdują się na stronie Magnum User Guide.
Nr 6 Jak zainstalować klientów OpenStack i Magnum
Krok, który bezpośrednio poprzedza ten artykuł to Jak zainstalować klientów OpenStack i Magnum dla interfejsu wiersza poleceń w NSIS Horizon?.
W tym przewodniku została przeprowadzona instalacja CLI, a w tym samouczku użyjesz go do pracy z Kubernetes na OpenStack Magnum.
Nr 7 Automatyczne naprawianie klastrów Kubernetes
Aby dowiedzieć się więcej o automatycznym naprawianiu klastrów Kubernetes, postępuj zgodnie z oficjalnym artykułem What is Magnum Autohealer?.
Zalety korzystania z interfejsu CLI
Z interfejsu CLI i Horizon można korzystać zamiennie, ale istnieją co najmniej trzy zalety korzystania z CLI.
Reproduce Commands Through Cut & Paste
Polecenie wyświetlające listę flavorów w systemie jest następujące:
openstack flavor list
Jeśli masz ten wiersz zapisany w edytorze tekstu, możesz go odtwarzać do woli. W przeciwieństwie do tego, aby uzyskać listę flavorów za pomocą Horizon, należy kliknąć na ekranie serię przycisków
Compute => Instances => Launch instance => Flavor
i dopiero wtedy zostanie wyświetlona lista flavorów do wyboru:
Dodatkową zaletą jest to, że przechowywanie poleceń w edytorze tekstu automatycznie tworzy dokumentację dla serwera i klastra.
Polecenia CLI mogą być automatyzowane
Można skorzystać z dostępnej automatyzacji. Wynikiem poniższego polecenia w Ubuntu jest adres url do komunikacji kubectl z klastrem Kubernetes:
Poniżej przedstawiono dwa polecenia połączone w jedno:
KUBERNETES_URL=$(openstack coe cluster show k8s-cluster
| awk '/ api_address /{print $4}')
Wynik pierwszego polecenia
openstack coe cluster show k8s-cluster
to seria wierszy rozpoczynająca się od nazwy parametru, po której następuje jego rzeczywista wartość.
Druga instrukcja, na prawo od symbolu | polecenia
awk '/ api_address /{print $4}')
wyszukuje wiersz zaczynający się od api_address i wyodrębnia jej wartość https://46.60.20.46:6443. Końcowy wynik jest eksportowany do zmiennej systemowej KUBERNETES_URL, dzięki czemu jest automatycznie konfigurowany do użycia przez polecenie klastra Kubernetes kubectl podczas uzyskiwania dostępu do chmury.
CLI zapewnia dostęp do wszystkich istniejących parametrów OpenStack i Magnum
Polecenia CLI oferują dostęp do większego zestawu parametrów niż te dostępne w Horizon. Na przykład w Horizon domyślny dozwolony czas na utworzenie klastra wynosi 60 minut, podczas gdy w CLI można ustawić go na inne wybrane wartości.
Debugowanie poleceń OpenStack i Magnum
Aby zobaczyć, co faktycznie dzieje się w tle podczas wykonywania poleceń klienta, dodaj parametr –debug:
openstack coe cluster list --debug
Dane wyjściowe będą zajmowały kilka ekranów i będą zawierały wywołania internetowe GET i POST z dziesiątkami parametrów wyświetlanych na ekranie. Dane wyjściowe są zbyt obszerne, aby je tutaj odtworzyć.
Jak wprowadzać polecenia OpenStack
Informacja
W następującym przypadku jet użyta następująca wersja obrazu fedory fedora-coreos-34.20210904.3.0. Ze względu na aktualizację systemu ta wwartość może ulec zmianie, na przykład któraś z tych wartości fedora-coreos-35 lub fedora-coreos-33.20210426.3.0. Uzyj Dashboard Horizon i tam przejdź Compute-> Image żeby zobaczyć obecnie dostępne obrazy fedory i zmienić w konfiguracji jeśli jest potrzeba.
Istnieje kilka sposobów zapisywania i wprowadzania poleceń Openstack do interfejsu wiersza poleceń terminala.
Jednym ze sposobów jest wpisanie polecenia openstack i naciśnięcie Enter na klawiaturze. Następuje wtedy przejście w tryb wiersza poleceń openstack i możesz wprowadzać kolejno wiersze z różnymi parametrami openstack. Ten sposób jest przeznaczony wyłącznie do ręcznego wprowadzania danych i jest trudny do zautomatyzowania.
Wpisz quit i naciśnij Enter na klawiaturze, aby opuścić ten tryb.
Zwykłym sposobem wprowadzania parametrów openstack jest jeden długi wiersz. Pozostaw spacje między parametrami, ale wprowadź wartości etykiet bez spacji między nimi. Przykładem może być:
Podziały wierszy i spacje muszą być w tym przypadku usuwane ręcznie.
Bardziej eleganckim sposobem jest użycie ukośnik wsteczny (** **) w tekście wiersza. Znak po ukośniku wstecznym nie będzie uwzględniany, więc jeśli wprowadzisz go na samym końcu wiersza, znak końca wiersza zostanie ominięty, a pierwszy i drugi wiersz będą traktowane jako jeden ciągły wiersz. To jest dokładnie to, czego chcesz, więc w tym podejściu wiersz wejściowy mógłby wyglądać tak:
openstack coe cluster template create kubecluster \
--image "fedora-coreos-34.20210904.3.0" \
--external-network external \
--master-flavor eo1.large \
--flavor eo1.large \
--docker-volume-size 50 \
--network-driver calico \
--docker-storage-driver overlay2 \
--master-lb-enabled \
--volume-driver cinder \
--labels boot_volume_type=,boot_volume_size=50,kube_tag=v1.18.2,availability_zone=nova \
--coe kubernetes -f value -c uuid
Koniec każdego wiersza jest poprzedzony ukośnikiem wstecznym, więc wszystkie te wiersze pojawiają się jako jeden (długi) wiersz w skanerze wiersza poleceń terminala. Mimo to podczas kopiowania i wklejania tego kodu do wiersza terminala należy uważać na następującą sytuację:
Jeśli spacje występują na początku każdego wiersza, będzie to stanowić problem. Wyeliminuj je w dowolnym edytorze tekstu – usuń je ręcznie lub za pomocą funkcji znajdź zastąp. To, co musisz uzyskać w edytorze tekstu ma postać:
Teraz możesz go skopiować i wkleić do wiersza poleceń terminala:
Zauważ, że wiersz z etykietami może stać się długi, a jego prawa część może nie być widoczna na ekranie. Użyj znaku ** i nowego wiersza, aby podzielić długi wiersz **–labels na kilka krótszych:
Naciśnięcie klawisza Enter na klawiaturze aktywuje całe polecenie i jest ono akceptowane przez system, co widać w wierszu poniżej polecenia.
Ostrzeżenie
Jeśli jesteś nowy w Kubernetesie, prosimy na początku tworząyc klastry z udostępnionych przez nas templatek klastrów. Kiedy zbierzesz większe doświadczenie, możesz tworzyć własne templatki klastrów. Poniżej widać jak można to zrobić używając CLI.
Polecenie OpenStack służące do tworzenia klastra
W tym kroku można utworzyć nowy klaster przy użyciu domyślnego szablonu klastra lub dowolnego z już utworzonych szablonów.
openstack coe cluster create -h
aby zobaczyć parametry. Podaj wszystkie lub prawie wszystkie wymagane parametry.
usage: openstack coe cluster create
[-h]
--cluster-template <cluster-template>
[--discovery-url <discovery-url>]
[--docker-volume-size <docker-volume-size>]
[--labels <KEY1=VALUE1,KEY2=VALUE2;KEY3=VALUE3...>]
[--keypair <keypair>]
[--master-count <master-count>]
[--node-count <node-count>]
[--timeout <timeout>]
[--master-flavor <master-flavor>]
[--flavor <flavor>]
<name>
Oto jak może wyglądać jedno z takich poleceń:
openstack coe cluster create
--cluster-template k8s-stable-1.23.5
--docker-volume-size 50
--labels eodata_access_enabled=false,floating-ip-enabled=true,
--merge-labels
--keypair sshkey
--master-count 3
--node-count 2
--timeout 190
--master-flavor eo1.large
--flavor eo1.large
newcluster
Ostrzeżenie
Podczas korzystania z przykładowego domyślnego szablonu klastra k8s-stable-1.23.5 nie ma potrzeby określania etykiety master-lb-enabled=true, ponieważ główny load balancer zawsze będzie tworzony z domyślnym szablonem klastra. Jedynym sposobem, aby nie utworzyć głównego load balancera za pomocą domyślnego szablonu jest określenie flagi -master-lb-disabled. Ponownie, użycie master-lb-enabled=false z -merge-labels zastosowanym później, również nie zadziała, czyli nie zapobiegnie utworzeniu głównego load balancera.
Oto kilka specjalnych etykiet, których funkcjonalność jest dostępna tylko przez CLI, a nie przez Horizon.
Jak prawidłowo utworzyć klaster z włączonym automatycznym naprawianiem
Informacja
Sekcja Wymaganie wstępne nr 6 objaśnia, jak włączyć interfejs wiersza poleceń na serwerze w chmurze. Wymaganie wstępne nr 7 zapewni formalne wprowadzenie do pojęcia automatycznego naprawiania klastrów Kubernetes zaimplementowanego w OpenStack Magnum.
Jedynym sposobem na włączenie automatycznego naprawiania i jednoczesne zagwarantowanie, że klaster zostanie utworzony normalnie, jest ustawienie następującej etykiety:
auto_healing_enabled=True
Ostrzeżenie
Nie dołączaj powyższej etykiety, jeśli chcesz utworzyć klaster, który nie obsługuje automatycznego naprawiania.
Poniżej znajduje się wariant polecenia CLI do generowania klastra. Będzie on używać dla flavorów wartości średnich zamiast dużych , będzie mieć tylko jeden master node i worker node oraz będzie miał włączone automatyczne naprawianie itp.
openstack coe cluster create –cluster-template k8s-stable-1.23.5 –labels floating-ip-enabled=true,master-lb-enabled=true,auto_healing_enabled=true –merge-labels –keypair sshkey –master-count 1 –node-count 1 –master-flavor eo1.medium –flavor eo1.medium newcluster
Wykonaj polecenie utworzenia klastra
Skopiuj i wklej powyższe polecenie do terminala, w którym są aktywne klienty OpenStack i Magnum:
Jak sprawdzić status klastra
Polecenie wyświetlające stan klastrów to
openstack coe cluster list
Klaster newcluster ma status CREATE_IN_PROGRESS, czyli jest tworzony w tle. Powtórz polecenie po minucie lub dwóch i zobacz najnowszy status, który teraz ma wartość CREATE_FAILED. Aby sprawdzić przyczynę zatrzymania tworzenia klastra, przejdź do interfejsu Horizon, wyświetl listę klastrów i kliknij nazwę newcluster.
W sekcji Stack znajduje się następujący komunikat:
Resource CREATE failed: OverQuotaClient: resources.secgroup_kube_master: Quota exceeded for resources:
['security_group_rule']. Neutron server returns request_ids: ['req-1aff5045-db64-4075-81df-80611db8cb6c']
Przekroczono limit dla reguł grupy zabezpieczeń. Aby to sprawdzić, wykonaj następujące polecenie:
openstack quota show --default
Wynik może być zbyt zawiły w normalnym oknie terminala, więc w tym przypadku więcej informacji będzie dostępnych w interfejsie Horizon:
Kolory czerwony i pomarańczowy oznaczają że niewiele lub wogóle nie możemy tworzyć danego zasobu. Trzeba albo poprosić pomoc techniczną o zwiększenie limitów, albo usunąć instancje i klastry, które je przekroczyły.
Informacja
Przedstawienie sposobu usuwania elementów za pomocą interfejsu Horizon wykracza poza zakres tego artykułu. Przed utworzeniem nowego klastra upewnij się, że quoty są dostępne.
Niepowodzenie utworzenia klastra
Istnieje wiele powodów, dla których klaster może nie zostać utworzony. Być może stan quot systemowych nie jest optymalny albo istnieje rozbieżność między parametrami klastra a parametrami w pozostałej części chmury. Na przykład, jeśli oprzesz tworzenie klastra na domyślnym szablonie klastra, użyje on dystrybucji Fedora i będzie wymagał 10GiB pamięci. Może to kolidować z parametrem –docker-volume-size, jeśli jego ustawiona wartość jest większa niż 10GiB.
Flavory dla masterów i worker node’ów to eo1a.large, a jeśli chcesz mieć większe, dla obrazów Docker, zwiększ rozmiar –master-flavor.
Cała chmura może być przeciążona i tworzenie klastra może trwać dłużej niż domyślne 60 minut. W takich przypadkach należy ustawić parametr –timeout na 120 lub 180 minut.
Jeśli proces tworzenia nie powiódł się przed ustawionym czasem:
przejrzyj quoty systemowe
usuń uszkodzone klastry
ponownie przejrzyj quoty systemowe
zmień parametry i
uruchom ponownie polecenie utworzenia klastra.
Polecenia CLI służące do usuwania klastra
Jeśli utworzenie klastra nie powiodło się, nadal zajmuje on zasoby systemowe. Usuń niesprawny klaster poleceniem takim jak:
openstack coe cluster delete
Wyświetl listę klastrów, najpierw zobaczysz, że status klastra to DELETE_IN_PROGRESS, a po chwili newcluster zniknie.
Teraz spróbuj usunąć klaster largecluster. Istnieją dwa klastry, więc wpisanie polecenia takiego jak
openstack coe cluster delete largecluster
nie zostanie zaakceptowana. Zamiast nazwy należy wprowadzić wartość uuid:
openstack coe cluster delete e80c5815-d20b-4a2b-8588-49cf7a7e1aad
Ponownie żądanie zostanie zaakceptowane, a po minucie lub dwóch wskazany klaster zniknie.
Teraz jest tylko jeden largecluster, więc to polecenie zadziała:
openstack coe cluster delete largecluster
Usunięcie klastrów, które nie zostały poprawnie utworzone, zwolniło znaczną ilość zasobów systemowych. Nie ma już quot oznaczonych kolorem pomarańczowym i czerwonym:
W tym kroku udało się usunąć klastry, których tworzenie zostało przedwcześnie zatrzymane. Umożliwia to utworzenie kolejnego klastra w nieco innych warunkach.
Co można zrobić dalej?
W tym samouczku użyto poleceń CLI do generowania szablonów klastrów, a także samych klastrów. Ponadto, jeśli proces tworzenia klastra nie powiódł się, wiadomo, jak zwolnić zasoby systemowe i spróbować ponownie.
OpenStack i Magnum wykonały za ciebie ciężką pracę, umożliwiając utworzenie w pełni funkcjonalnych klastrów Kubernetes za pomocą zaledwie kilku poleceń CLI. Następnym krokiem jest rozpoczęcie bezpośredniej pracy z klastrami Kubernetes. Oznacza to zainstalowanie polecenia kubectl zgodnie z artykułem Jak uzyskać dostęp do klastra Kubernetes po wdrożeniu przy użyciu Kubectl na NSIS OpenStack Magnum? i użycie go do zainstalowania aplikacji, które chcemy uruchomić na klastrach Kubernetes.