Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

K9'lar Kubernetes kümeleriyle etkileşim için bir terminal kullanıcı arabirimi sağlar. Bu Açık Kaynak projesinin amacı, K8'lerde uygulamalarda gezinmeyi, izlemeyi ve yönetmeyi kolaylaştırmaktır. K9s, Kubernetes'teki değişiklikleri sürekli olarak izler ve izlenen kaynaklarla çalışmak için hızlı komutlar sunar.

Proje Go'da yazılmıştır ve bir buçuk yılı aşkın süredir kullanılmaktadır: ilk taahhüt 1 Şubat 2019'da yapılmıştır. Yazma sırasında, üzerinde 9000'den fazla yıldız var GitHub ve yaklaşık 80 katılımcı. Bakalım k9'lar neler yapabiliyor?

Kurulum ve başlatma

Bu, Docker görüntüsü olarak çalıştırılması en kolay olan bir istemci (Kubernetes kümesiyle ilişkili olarak) uygulamasıdır:

docker run --rm -it -v $KUBECONFIG:/root/.kube/config quay.io/derailed/k9s

Bazı Linux dağıtımları ve diğer işletim sistemleri için ayrıca kuruluma hazır пакеты. Genel olarak, Linux sistemleri için bir ikili dosya kurabilirsiniz:

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

K8s kümesinin kendisi için özel gereksinimler yoktur. İncelemelere bakılırsa uygulama, Kubernetes'in 1.12 gibi eski sürümleriyle de çalışıyor.

Uygulama, standart yapılandırma kullanılarak başlatılır .kube/config - nasıl yaptığına benzer kubectl.

Navigasyon

Varsayılan olarak, bağlam için belirtilen varsayılan ad alanıyla bir pencere açılır. yani sen yazsaydın kubectl config set-context --current --namespace=test, ardından ad alanı açılır test. (Bağlamları/ad alanlarını değiştirmek için aşağıya bakın.)

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

git komut modu ":" tuşuna basılarak yapılır. Bundan sonra, komutları kullanarak k9'ların çalışmasını kontrol edebilirsiniz - örneğin, StatefulSets listesini görüntülemek için (geçerli ad alanında), girebilirsiniz. :sts.

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Diğer bazı Kubernetes kaynakları için:

  • :ns — ad alanları;
  • :deploy — Dağıtımlar;
  • :ing — Girişler;
  • :svc - Hizmetler.

Görüntülemeye uygun kaynak türlerinin tam listesini görüntülemek için bir komut vardır. :aliases.

Geçerli pencerede kısayol tuş kombinasyonlarıyla kullanılabilen komutların listesini görüntülemek de uygundur: bunu yapmak için "?" üzerine tıklamanız yeterlidir.

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Ayrıca k9s'de var Arama modu, "/" girmenin yeterli olduğu yere gitmek için. Bununla, mevcut "pencerenin" içeriği üzerinde bir arama yapılır. Diyelim ki daha önce girdiniz :ns, açık bir ad alanları listeniz var. Çok fazla varsa, uzun süre aşağı kaydırmamak için ad alanlarını içeren pencereye girmek yeterlidir. /mynamespace.

Etiketlere göre aramak için, istediğiniz ad alanındaki tüm bölmeleri seçebilir, ardından örneğin şunu girebilirsiniz: / -l app=whoami. Bu etikete sahip bölmelerin bir listesini alacağız:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Arama, günlükler, YAML bildirimlerini görüntüleme ve describe kaynaklar için - bu özellikler hakkında daha fazla ayrıntı için aşağıya bakın.

Genel gezinme akışı nasıl görünüyor?

komutu ile :ctx bir bağlam seçebilirsiniz:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Bir ad alanı seçmek için, daha önce bahsedilen komut vardır. :nsve ardından istediğiniz alan için aramayı kullanabilirsiniz: /test.

Şimdi ilgilendiğimiz kaynağı seçersek (örneğin, aynı StatefulSet), bunun için ilgili bilgi görünecektir: onlar hakkında kısa bilgilerle kaç bölme çalışıyor.

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Yalnızca bölmeler ilgi çekici olabilir - o zaman girmek yeterlidir :pod. ConfigMaps durumunda (:cm - bu kaynakların listesi için), ilgilenilen nesneyi seçebilir ve "u" üzerine tıklayabilirsiniz, ardından K9'lar size onu özellikle kimin kullandığını söyleyecektir (bu CM).

Kaynakları görüntülemek için başka bir kullanışlı özellik, "x-ray" (Xray görünümü). Bu mod komut tarafından çağrılır. :xray RESOURCE ve ... nasıl çalıştığını göstermek, açıklamaktan daha kolaydır. İşte StatefulSets için bir örnek:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış
(Bu kaynakların her biri düzenlenebilir, değiştirilebilir, describe.)

Ve işte Ingress ile Dağıtım:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Kaynaklarla çalışma

YAML'deki her kaynak veya onun hakkında bilgi alabilirsiniz. describe karşılık gelen klavye kısayollarına (sırasıyla “y” ve “d”) basarak. Tabii ki, daha da temel işlemler var: bunların listesi ve klavye kısayolları, arayüzdeki uygun bir "başlık" sayesinde her zaman görünür durumdadır (Ctrl + e tuşlarına basarak gizlenir).

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Herhangi bir kaynağı düzenlerken (seçiminden sonra "e"), ortam değişkenlerinde tanımlanan metin düzenleyici açılır (export EDITOR=vim).

Ve işte kaynağın ayrıntılı açıklaması şöyle görünüyor (describe):

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Bu çıktı (veya YAML kaynak bildirimini görüntüleme çıktısı), bilinen Ctrl + s klavye kısayolu kullanılarak kaydedilebilir. Nereye kaydedileceği K9s mesajından bilinecektir:

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

Sistem etiketlerini ve ek açıklamaları kaldırdıktan sonra, kaynakları oluşturulan yedekleme dosyalarından da geri yükleyebilirsiniz. Bunu yapmak için, onlarla dizine gitmeniz gerekir (:dir /tmp), ardından istediğiniz dosyayı seçin ve uygulayın apply.

Bu arada, mevcut olanla ilgili sorunlar varsa, istediğiniz zaman önceki ReplicaSet'e geri dönebilirsiniz. Bunu yapmak için istenen RS'yi seçin (:rs onların listesi için):

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

... ve Ctrl + l ile geri alma. Her şeyin yolunda gittiğine dair bir bildirim almalıyız:

k9s/whoami-5cfbdbb469 successfully rolled back

Kopyaları ölçeklendirmek için "s" (ölçek) üzerine tıklamanız ve istediğiniz örnek sayısını seçmeniz yeterlidir:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Kabuğu kullanarak herhangi bir kapsayıcıya girebilirsiniz: bunu yapmak için, istenen bölmeye gidin, "s" (kabuk) üzerine tıklayın ve kabı seçin.

Diğer özellikleri

Elbette günlüklerin görüntülenmesi de desteklenir (seçilen kaynak için "l"). Ve yeni günlükleri izlemek için sürekli olarak Enter tuşuna basmaya gerek yoktur: ("m") işaretlemek ve ardından yalnızca yeni mesajları izlemek yeterlidir.

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Ayrıca aynı pencerede günlüklerin çıktısı için zaman aralığını seçebilirsiniz:

  • "1" tuşu - 1 dakika için;
  • "2 dakika;
  • "3 dakika;
  • "4 dakika;
  • "5" - 1 saat;
  • "0" - bölmenin tüm kullanım ömrü boyunca.

Özel çalışma modu Darbe (komut :pulse), Kubernetes kümesi hakkında genel bilgileri gösterir:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

İçinde kaynakların sayısını ve durumlarını görebilirsiniz (yeşil, duruma sahip olanları gösterir. Running).

K9'ların bir başka harika özelliği de Popeye. Belirli doğruluk kriterleri için tüm kaynakları kontrol eder ve ortaya çıkan "derecelendirmeyi" açıklamalarla birlikte görüntüler. Örneğin, yeterli sample veya limit olmadığını ve bazı container'ların root olarak çalışabildiğini görebilirsiniz...

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Temel Helm desteği var. Örneğin, kümede dağıtılan sürümleri şu şekilde görebilirsiniz:

:helm all # все
:helm $namespace # в конкретном пространстве имен

kıyaslama

K9'larda bile yerleşik hey basit bir HTTP sunucusu yük üreteci, daha iyi bilinen ab'ye (ApacheBench) bir alternatiftir.

Etkinleştirmek için bölmede bağlantı noktası iletmeyi etkinleştirmeniz gerekir. Bunu yapmak için bölmeyi seçin ve Shift + f tuşlarına basın, "pf" takma adını kullanarak bağlantı noktası iletme alt menüsüne gidin.

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Bağlantı noktasını seçtikten ve Ctrl + b'ye bastıktan sonra, kıyaslamanın kendisi başlayacaktır. Çalışmalarının sonuçları depolanır. /tmp ve daha sonra K9'larda görüntülenebilir.

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış
Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Kıyaslama yapılandırmasını değiştirmek için bir dosya oluşturmanız gerekir. $HOME/.k9s/bench-<my_context>.yml (her küme için belirlenir).

Not: Bir dizindeki tüm YAML dosyalarının uzantısının .k9s tam olarak öyleydi .yml (.yaml düzgün çalışmıyor).

Yapılandırma örneği:

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

Arayüz.

Kaynak listeleri için sütunların görünümü, bir dosya oluşturularak değiştirilir. $HOME/.k9s/views.yml. İçeriğine bir örnek:

k9s:
 views:
   v1/pods:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - IP
       - NODE
       - STATUS
       - READY
   v1/services:
     columns:
       - AGE
       - NAMESPACE
       - NAME
       - TYPE
       - CLUSTER-IP

Doğru, etiketler için yeterli sütun yok. projedeki sorun.

Sütunlara göre sıralama, klavye kısayollarıyla gerçekleştirilir:

  • Shift + n - ada göre;
  • Shift + o - düğümlere göre;
  • Shift + i - IP'ye göre;
  • Shift + a - kabın kullanım ömrüne göre;
  • Shift + t - yeniden başlatma sayısına göre;
  • Shift + r - hazırlık durumuna göre;
  • Shift + c - CPU tüketimine göre;
  • Shift + m - bellek tüketimine göre.

Birisi varsayılan renk düzenini beğenmezse, K9s bile destekler deriler. Hazır örnekler (7 adet) mevcuttur burada. İşte bu derilerden birine bir örnek (donanmada):

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Eklentiler

Son olarak, eklentiler K9'ların yeteneklerini genişletmenize izin verir. Ben kendim işimde bunlardan sadece birini kullandım - kubectl get all -n $namespace.

Bu gibi görünüyor. dosya oluştur $HOME/.k9s/plugin.yml bunun gibi içerikle:

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"

Artık ad alanına gidebilir ve ilgili komutla yürütmek için "g" tuşuna basabilirsiniz:

Kubernetes için gelişmiş bir terminal arabirimi olan k9s'ye genel bakış

Eklentiler arasında, örneğin, kubectl-jq ile entegrasyonlar ve günlükleri görüntülemek için bir yardımcı program vardır. star.

Sonuç

Benim zevkime göre, K9'larla çalışmanın çok uygun olduğu ortaya çıktı: ihtiyacınız olan her şeyi kullanmadan aramaya çabucak alışabilirsiniz. kubectl. Günlüklerin görünümünden ve kaydedilmesinden, kaynakların hızlı düzenlenmesinden, genel olarak iş hızından * memnun kaldım, Temel Reis modunun faydalı olduğu ortaya çıktı. Özel bir söz, eklentiler oluşturma ve uygulamayı ihtiyaçlarınıza göre değiştirme yeteneğidir.

* Bununla birlikte, büyük hacimli günlüklerle K9'ların yavaş çalıştığını da fark ettim. Böyle anlarda, yardımcı program Intel Xeon E2xx'ten 312 çekirdeği "yedi" ve hatta donabilirdi.

Şu anda eksik olan nedir? Dizine gitmeden önceki sürüme hızlı geri dönüş (RS'den bahsetmiyoruz). Ayrıca, kurtarma yalnızca sadece kaynak: Bir açıklamayı veya etiketi silerseniz, tüm kaynağı silmeniz ve geri yüklemeniz gerekir (dizine gitmeniz gereken yer burasıdır). Başka bir önemsiz şey - bu tür kaydedilmiş "yedeklemeler" için yeterli tarih yok.

PS

Blogumuzda da okuyun:

Kaynak: habr.com

Yorum ekle