Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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:

sudo wget -qO- https://github.com/derailed/k9s/releases/download/v0.22.0/k9s_Linux_x86_64.tar.gz | tar zxvf -  -C /tmp/
sudo mv /tmp/k9s /usr/local/bin

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).

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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.

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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ąć „?”.

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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ą:

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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:

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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.

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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:

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes
(Każdy z tych zasobów można edytować, zmieniać, tworzyć describe.)

A oto wdrożenie z Ingress:

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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).

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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):

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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:

Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml saved successfully!

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):

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

... 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:

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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.

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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:

Przegląd k9s - zaawansowanego interfejsu terminala dla 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 ...

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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”.

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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.

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes
Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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):

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

Плагины

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:

Przegląd k9s - zaawansowanego interfejsu terminala dla Kubernetes

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".

PS

Przeczytaj także na naszym blogu:

Źródło: www.habr.com

Dodaj komentarz