Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes
K9s zapewnia terminalowy interfejs użytkownika do interakcji z klastrami Kubernetes. Celem tego projektu Open Source jest ułatwienie nawigacji, monitorowania i zarządzania aplikacjami w K8s. K9s stale monitoruje zmiany w Kubernetes i oferuje szybkie polecenia do pracy z monitorowanymi zasobami.
Projekt jest napisany w Go i istnieje od ponad półtora roku: pierwszy commit został wykonany 1 lutego 2019 roku. W chwili pisania tego tekstu jest ponad 9000 gwiazdek GitHub i około 80 współtwórców. Zobaczmy, co potrafi k9s?
Instalacja i uruchomienie
Jest to aplikacja kliencka (w odniesieniu do klastra Kubernetes), którą najłatwiej uruchomić jako obraz Dockera:
docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s
W przypadku niektórych dystrybucji Linuksa i innych systemów operacyjnych dostępne są również gotowe do instalacji pakiety. Ogólnie rzecz biorąc, w systemach Linux można zainstalować plik binarny:
Nie ma szczególnych wymagań dla samego klastra K8s. Sądząc po recenzjach, aplikacja działa również ze starszymi wersjami Kubernetes, takimi jak 1.12.
Aplikacja jest uruchamiana przy użyciu standardowej konfiguracji .kube/config - podobnie jak to robi kubectl.
Nawigacja
Domyślnie otwierane jest okno z domyślną przestrzenią nazw określoną dla kontekstu. To znaczy, jeśli napisałeś kubectl config set-context --current --namespace=test, wtedy otworzy się przestrzeń nazw test. (Zobacz poniżej, jak zmieniać konteksty/przestrzenie nazw).
Iść do tryb poleceń odbywa się poprzez naciśnięcie „:”. Następnie możesz sterować działaniem k9s za pomocą poleceń - na przykład, aby wyświetlić listę StatefulSets (w bieżącej przestrzeni nazw), możesz wpisać :sts.
Niektóre inne zasoby Kubernetes:
:ns — przestrzenie nazw;
:deploy — rozmieszczenia;
:ing — Ingresy;
:svc — Usługi.
Aby wyświetlić pełną listę typów zasobów dostępnych do przeglądania, istnieje polecenie :aliases.
Wygodne jest również przeglądanie listy poleceń dostępnych za pomocą kombinacji klawiszy skrótu w bieżącym oknie: aby to zrobić, wystarczy kliknąć „?”.
Również w k9s jest tryb szukania, aby przejść do którego wystarczy wpisać „/”. Za jego pomocą przeprowadzane jest wyszukiwanie zawartości bieżącego „okna”. Powiedzmy, że wcześniej wszedłeś :ns, masz otwartą listę przestrzeni nazw. Jeśli jest ich za dużo, to żeby długo nie przewijać w dół, wystarczy wejść w okno z przestrzeniami nazw /mynamespace.
Aby wyszukiwać według etykiet, możesz wybrać wszystkie pody w żądanej przestrzeni nazw, a następnie wpisać np. / -l app=whoami. Otrzymamy listę podów z tą etykietą:
Wyszukiwanie działa we wszystkich rodzajach okien, w tym w dziennikach, przeglądaniu manifestów YAML i describe w celu uzyskania zasobów — patrz poniżej, aby uzyskać więcej informacji na temat tych funkcji.
Jak wygląda ogólny przebieg nawigacji?
Z poleceniem :ctx możesz wybrać kontekst:
Aby wybrać przestrzeń nazw, istnieje już wspomniane polecenie :ns, a następnie możesz skorzystać z wyszukiwania żądanej przestrzeni: /test.
Jeśli teraz wybierzemy interesujący nas zasób (na przykład ten sam StatefulSet), pojawią się dla niego odpowiednie informacje: ile podów jest uruchomionych wraz z krótką informacją o nich.
Interesować mogą tylko strąki - wtedy wystarczy wejść :pod. W przypadku ConfigMaps (:cm - aby wyświetlić listę tych zasobów), możesz wybrać przedmiot zainteresowania i kliknąć „u”, po czym K9s powie ci, kto konkretnie go używa (ten CM).
Kolejną przydatną funkcją do przeglądania zasobów jest ich „rentgen” (widok rentgenowski). Ten tryb jest wywoływany przez polecenie :xray RESOURCE i… łatwiej jest pokazać, jak to działa, niż tłumaczyć. Oto ilustracja dla StatefulSets:
(Każdy z tych zasobów można edytować, zmieniać, tworzyć describe.)
A oto wdrożenie z Ingress:
Praca z zasobami
Możesz uzyskać informacje o każdym zasobie w YAML lub jego describe poprzez naciśnięcie odpowiednich skrótów klawiaturowych (odpowiednio „y” i „d”). Oczywiście podstawowych operacji jest jeszcze więcej: ich lista i skróty klawiszowe są zawsze widoczne dzięki wygodnemu „nagłówkowi” w interfejsie (ukrytemu po naciśnięciu Ctrl + e).
Podczas edycji dowolnego zasobu („e” po jego zaznaczeniu) otwierany jest edytor tekstu zdefiniowany w zmiennych środowiskowych (export EDITOR=vim).
A oto jak wygląda szczegółowy opis zasobu (describe):
Te dane wyjściowe (lub dane wyjściowe przeglądania manifestu YAML zasobu) można zapisać za pomocą znanego skrótu klawiaturowego Ctrl + s. Gdzie zostanie zapisany będzie wiadomo z komunikatu K9s:
Możesz także przywrócić zasoby z utworzonych plików kopii zapasowych, po usunięciu etykiet systemowych i adnotacji. Aby to zrobić, musisz przejść z nimi do katalogu (:dir /tmp), a następnie wybierz żądany plik i zastosuj apply.
Nawiasem mówiąc, w dowolnym momencie możesz wrócić do poprzedniego ReplicaSet, jeśli występują problemy z obecnym. W tym celu wybierz żądane RS (:rs dla ich listy):
... i cofnij za pomocą Ctrl + l. Powinniśmy otrzymać powiadomienie, że wszystko poszło dobrze:
k9s/whoami-5cfbdbb469 successfully rolled back
Aby przeskalować repliki, po prostu kliknij „s” (skala) i wybierz żądaną liczbę instancji:
Możesz wejść do dowolnego pojemnika za pomocą powłoki: w tym celu przejdź do żądanej kapsuły, kliknij „s” (powłoka) i wybierz pojemnik.
Inne funkcje
Oczywiście obsługiwane jest również przeglądanie logów ("l" dla wybranego zasobu). A żeby oglądać nowe logi, nie trzeba ciągle naciskać Entera: wystarczy zaznaczyć („m”), a potem już tylko śledzić nowe wiadomości.
Również w tym samym oknie możesz wybrać zakres czasu dla wyjścia logów:
klawisz „1” - przez 1 minutę;
"2 minut;
"3 minut;
"4 minut;
„5” - 1 godzina;
„0” - przez cały okres użytkowania poda.
Specjalny tryb pracy Impuls (polecenie :pulse) pokazuje ogólne informacje o klastrze Kubernetes:
Można w nim zobaczyć ilość zasobów oraz ich status (kolor zielony oznacza te, które posiadają status Running).
Kolejna fajna funkcja K9s nazywa się Popeye. Sprawdza wszystkie zasoby pod kątem określonych kryteriów poprawności i wyświetla wynikową „ocenę” wraz z objaśnieniami. Na przykład możesz zobaczyć, że nie ma wystarczającej liczby próbek lub limitów, a niektóre kontenery mogą działać jako root ...
Istnieje podstawowe wsparcie dla Helm. Na przykład tak możesz zobaczyć wersje wdrożone w klastrze:
:helm all # все
:helm $namespace # в конкретном пространстве имен
Benchmark
Wbudowali nawet w K9 hej to prosty generator obciążenia serwera HTTP, alternatywa dla lepiej znanego ab (ApacheBench).
Aby go włączyć, musisz włączyć przekierowanie portu w pod. Aby to zrobić, wybierz kapsułę i naciśnij Shift + f, przejdź do podmenu przekierowania portu za pomocą aliasu „pf”.
Po wybraniu portu i naciśnięciu Ctrl + b rozpocznie się sam test porównawczy. Wyniki jego pracy są przechowywane w /tmp i są dostępne do późniejszego oglądania w K9s.
Aby zmienić konfigurację testu porównawczego, musisz utworzyć plik $HOME/.k9s/bench-<my_context>.yml (określona dla każdego klastra).
NB: Ważne jest, aby rozszerzenie wszystkich plików YAML w katalogu .k9s było dokładnie .yml (.yaml nie działa prawidłowo).
Przykład konfiguracji:
benchmarks:
defaults:
# Количество потоков
concurrency: 2
# Количество запросов
requests: 1000
containers:
# Настройки для контейнера с бенчмарком
# Контейнер определяется как namespace/pod-name:container-name
default/nginx:nginx:
concurrency: 2
requests: 10000
http:
path: /
method: POST
body:
{"foo":"bar"}
header:
Accept:
- text/html
Content-Type:
- application/json
services:
# Можно проводить бенчмарк на сервисах типа NodePort и LoadBalancer
# Синтаксис: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
Interfejs
Wygląd kolumn dla list zasobów jest modyfikowany poprzez utworzenie pliku $HOME/.k9s/views.yml. Przykład jego zawartości:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
To prawda, że \uXNUMXb\uXNUMXbnie ma wystarczającej liczby kolumn na etykiety, dla których jest kwestia w projekcie.
Sortowanie według kolumn odbywa się za pomocą skrótów klawiaturowych:
Shift + n - według nazwy;
Shift + o - według węzłów;
Shift + i - według adresu IP;
Shift + a - według czasu życia kontenera;
Shift + t - o liczbę ponownych uruchomień;
Shift + r - według stanu gotowości;
Shift + c - według zużycia procesora;
Shift + m - według zużycia pamięci.
Jeśli komuś nie podoba się domyślny schemat kolorów, K9s nawet obsługuje Skórki. Dostępne są gotowe przykłady (7 sztuk). tutaj. Oto przykład jednej z tych skórek (w marynarce wojennej):
Плагины
Wreszcie, wtyczki pozwalają rozszerzyć możliwości K9s. Sam używałem tylko jednego z nich w swojej pracy - kubectl get all -n $namespace.
To wygląda tak. Utwórz plik $HOME/.k9s/plugin.yml z taką zawartością:
plugin:
get-all:
shortCut: g
confirm: false
description: get all
scopes:
- all
command: sh
background: false
args:
- -c
- "kubectl -n $NAMESPACE get all -o wide | less"
Teraz możesz przejść do przestrzeni nazw i nacisnąć „g”, aby wykonać odpowiednie polecenie:
Wśród wtyczek znajdują się np. integracje z kubectl-jq oraz narzędzie do przeglądania logów rufa.
wniosek
Jak na mój gust, K9s okazał się bardzo wygodny w pracy: możesz szybko przyzwyczaić się do szukania wszystkiego, czego potrzebujesz, bez korzystania z niego. kubectl. Byłem zadowolony z widoku logów i ich zapisywania, szybkiej edycji zasobów, ogólnie szybkości pracy*, przydał się tryb Popeye. Na szczególną uwagę zasługuje możliwość tworzenia wtyczek i modyfikowania aplikacji do własnych potrzeb.
* Chociaż przy dużej ilości logów zauważyłem również powolne działanie K9s. W takich momentach narzędzie „zjadło” 2 rdzenie z Intel Xeon E312xx i mogło nawet się zawiesić.
Czego brakuje w tej chwili? Szybki powrót do poprzedniej wersji (nie mówimy o RS) bez wchodzenia do katalogu. Ponadto odzyskiwanie następuje tylko dla tylko zasób: jeśli usuniesz adnotację lub etykietę, będziesz musiał usunąć i przywrócić cały zasób (tutaj musisz przejść do katalogu). Kolejna drobnostka - za mało jest dat na takie zapisane "backupy".