
ofron një ndërfaqe terminali për të ndërvepruar me klasterët Kubernetes. Qëllimi i këtij projekti Open Source është të lehtësojë navigimin e duhur në aplikacionet në K8s, monitorimin e tyre dhe menaxhimin e tyre. K9s vazhdimisht ndjek ndryshimet në Kubernetes dhe ofron komanda të shpejta për punën me burimet që po monitorohen.
Projekti është shkruar në Go, ka ekzistuar për më shumë se një ka mbi një vit e gjysmë: komiti i parë është bërë më 1 shkurt 2019. Në momentin e shkruar të këtij artikulli, numërohen mbi 9000 yje në dhe rreth 80 kontribues. Le të shohim çfarë di të bëjë k9s?
Instalimi dhe nisja
Ky është një aplikacion klient (në lidhje me klasterin Kubernetes), i cili më lehtë mund të nisët si një imazh Docker:
docker run --rm -it -v $KUBECONFIG: /root/.kube/config quay.io /derailed/k9sPër disa distribucione Linux dhe sisteme të tjera operuese, gjithashtu ka diçka të gatshme për instalim. Në përgjithësi për sistemet Linux mund të instaloni skedarin binar:
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/binNuk ka ndonjë kërkesë specifike për vetë klasterin K8s. Sipas komenteve, aplikacioni punon gjithashtu me versione kaq të vjetra të Kubernetes si 1.12.
Aplikacioni niset duke përdorur konfigurimin standard .kube/config - ashtu siç bën kubectl.
Navigim
Në mënyrë të paracaktuar, hapet një dritare me hapësirën emërore standarde që është specifikuar për kontekstin. Kështu, nëse keni shkruar kubectl config set-context --current --namespace=test, atëherë hapet hapësira emërore test. (Për ndërrimin e konteksteve / hapësirave emërore shih më poshtë.)

Kalim nĂ« modin e komandave ndodhi duke shtypur â:â. Pas kĂ«saj, mund tĂ« menaxhoni punĂ«n e k9s me komandat â pĂ«r shembull, pĂ«r tĂ« parĂ« listĂ«n e StatefulSets (nĂ« hapĂ«sirĂ«n aktuale emĂ«rore) mund tĂ« shkruani :sts.
![]()
Për disa burime të tjera Kubernetes:
-
:ns- Hapësirat emërore; -
:deploy- Instalimet; -
:ing- Ingresset; -
:svc- Shërbimet.
Për të shfaqur listën e plotë të llojeve të burimeve të disponueshme për t'u parë, ka komandën :aliases.
ĂshtĂ« e dobishme pĂ«r tĂ« parĂ« gjithashtu listĂ«n e komandave tĂ« disponueshme pĂ«r kombinime tĂ« nxehta tĂ« çelĂ«save brenda dritares aktuale: pĂ«r kĂ«tĂ« mjafton tĂ« shtypni "?".

Po ashtu, nĂ« k9s ka njĂ« mod tĂ« kĂ«rkimit, pĂ«r tĂ« kaluar nĂ« tĂ«, Ă«shtĂ« e mjaftueshme tĂ« shkruani â/â. Me tĂ«, bĂ«het kĂ«rkimi nĂ« pĂ«rmbajtjen e âdritaresâ aktuale. Supozoni, nĂ«se mĂ« parĂ« keni shkruar :ns, keni hapur listĂ«n e hapĂ«sirave emĂ«rore. NĂ«se ka shumĂ« prej tyre, atĂ«herĂ« pĂ«r tĂ« mos e zgjatur skrollimin, mjafton tĂ« shkruani nĂ« dritaren me hapĂ«sirat emĂ«rore /mynamespace.
Për të kërkuar sipas etiketave, mund të përzgjidhni të gjitha pod't në hapësirën e nevojshme emrin, e më pas të shkruani, për shembull, / -l app=whoami. Ne do të marim një listë pod'ash me këtë etiketë:
![]()
KĂ«rkimi funksionon nĂ« tĂ« gjitha llojet e dritareve, duke pĂ«rfshirĂ« log-et, shikimin e manifestĂ«ve YAML dhe pĂ«rshkruaj pĂ«r burimet â pĂ«r detaje mbi kĂ«to mundĂ«si shihni mĂ« poshtĂ«.
Si duket në përgjithësi sekuenca e veprimeve për navigimin?
Me anë të komandës :ctx mund të zgjidhni kontekstin:

Për të zgjedhur hapësirën e emrave tashmë ekziston komanda e përmendur më parë :ns, pastaj mund të përdorni kërkimin për hapësirën e duhur: /test.
Nëse tani zgjidhni burimin që na intereson (për shembull, StatefulSet e njëjtë), informacione për të do të shfaqen: sa pod-e janë të hapura me një përmbledhje të shkurtër për to.
![]()
Mund tĂ« jenĂ« tĂ« interesuar vetĂ«m pod-Ă«t â atĂ«herĂ« mjafton tĂ« shkruani :pod. NĂ« rastin e ConfigMap'ave (:cm â pĂ«r listĂ«n e kĂ«tyre burimeve) mund tĂ« zgjidhni objektin e interesuar dhe tĂ« klikoni 'u', pas sĂ« cilĂ«s K9s do t'ju tregojĂ« se kush konkretisht e pĂ«rdor atĂ« (kĂ«to CM).
NjĂ« tipar tjetĂ«r i kĂ«ndshĂ«m pĂ«r shikimin e burimeve Ă«shtĂ« ârentgeniâ (pamja XRay). Ky mod Ă«shtĂ« i aktivizuar nga komanda :xray RESOURCE dhe... mĂ« e lehtĂ« Ă«shtĂ« tĂ« tregosh si funksionon, sesa tĂ« shpjegosh. KĂ«tu Ă«shtĂ« njĂ« ilustruar pĂ«r StatefulSets:

(Ădo nga kĂ«to burime mund tĂ« redaktohet, tĂ« ndryshohet, tĂ« bĂ«het pĂ«rshkruaj.)
Ja një shembull i Deployment me Ingress:

Puna me burimet
Për çdo burim mund të merrni informacion në YAML ose të tijën përshkruaj duke klikuar në kombinimet përkatëse të kyçjeve ('y' dhe 'd' përkatësisht). Operacione bazë, sigurisht, ka edhe më shumë: lista e tyre dhe kombinimet e kyçjeve janë gjithmonë në pamje falë 'kepit' të lehtë në ndërfaqe (fshihet duke klikuar Ctrl + e).

Kur redaktoni çdo burim ('e' pas përzgjedhjes së tij) hapet një redaktues teksti, i përcaktuar në variablat e ambientit (eksporto EDITOR=vim).
Ja si duket përshkrimi i detajuar i burimit (përshkruaj):

Ky dalje (apo dalje e shikimit të manifestit YAML të burimit) mund të ruhet me ndihmën e kombinimit të zakonshëm të kyçjeve Ctrl + s. Do të dihet ku do të ruhet nga mesazhi i K9s:
Log /tmp/k9s-screens-root/kubernetes/Describe-1601244920104133900.yml ruajtur me sukses! Nga skedarët e krijuar si kopje rezervë mund të rikuperoni burime, pas heqjes së etiketave dhe anotacioneve sistemike. Për këtë do të duhet të kaloni në direktorinë me to (:dir /tmp), pastaj të zgjidhni skedarin e nevojshëm dhe ta aplikoni aplikoni.
Në çdo moment, mund të riktheheni në ReplicaSet-in e kaluar nëse ka probleme me të tanishmin. Për këtë, duhet të zgjidhni RS-in e nevojshëm (:rs nga lista e tyre):

⊠dhe të kryeni ri-kthimin me Ctrl + l. Duhet të marrim një njoftim se gjithçka shkoi mirë:
k9s/whoami-5cfbdbb469 u rikthye me suksesDhe për të shkallëzuar replikat, mjafton të shtypni "s" (scale) dhe të zgjidhni numrin e duhur të instancave:

Në çdo kontenier mund të hysh përmes shell: për këtë, kaloni te pod-i i nevojshëm, shtypni "s" (shell) dhe zgjidhni kontenerin.
Mundësi të tjera
Sigurisht, mbështetet gjithashtu shqyrtimi i logëve ("l" për burimin e zgjedhur). Dhe për të parë logët e reja, nuk është e nevojshme të shtypni vazhdimisht Enter: mjafton të bëni markim ("m"), pas së cilës do të ndiqni vetëm mesazhet e reja.

Po ashtu, në këtë dritare mund të zgjidhni një interval kohor për shfaqjen e logëve:
- çelĂ«si "1" â pĂ«r 1 minutĂ«;
- "2" â 5 minuta;
- "3" â 15 minuta;
- "4" â 30 minuta;
- "5" â 1 orĂ«;
- «0» â pĂ«r gjithĂ« kohĂ«zgjatjen e pod'it.
Një mënyrë e veçantë e punës është Pulse (komanda :pulse) e cila tregon informacion të përgjithshëm për Kubernetes-n:

Në të mund të shihni numrin e burimeve dhe gjendjen e tyre ( ato me ngjyrë të gjelbër tregojnë statusin Running).
Një funksion tjetër interesant i K9s quhet Popeye. Ai kontrollon të gjitha burimet për kritere të caktuara korrektësie dhe jep "vlerësimin" me shpjegime. Për shembull, mund të shihni se mungojnë kufij ose limitet, ose ndonjë kontenier mund të ekzekutohet nën root...

Ekziston mbështetje bazë për Helm. Për shembull, kështu mund të shihni lëshimet e vendosura në klaster:
:helm all # të gjitha
:helm $namespace # në hapësirën e veçantë të emrit
Benchmark
NĂ« K9s e kanĂ« integruar madje â kjo Ă«shtĂ« njĂ« gjenerator i thjeshtĂ« ngarkese pĂ«r serverin HTTP, alternativĂ« ndaj mĂ« tĂ« njohurit ab (ApacheBench).
Për ta aktivizuar atë, kërkohet aktivizimi i port-forward në pod. Për këtë, zgjedhim pod-in dhe shtypim Shift + f, kalojmë në nënmenunë port-forward me aliasin "pf".

Pas zgjedhjes së portit dhe shtypjes së Ctrl + b, do të nisë vetë benchmark-u. Rezultatet e tij ruhen në /tmp dhe janë të disponueshme për shqyrtim në K9s.


Për të ndryshuar konfigurimin e benchmark-ut, duhet të krijoni një skedar $HOME/.k9s/bench-.yml (definohet për çdo klaster).
NB: ĂshtĂ« e rĂ«ndĂ«sishme qĂ« tĂ« gjitha skedarĂ«t YAML nĂ« direktorinĂ« .k9s tĂ« kenĂ« pikĂ«risht .yml (.yaml (nuk funksionon siç duhet).
Shembulli i konfigurimit:
benchmarks:
defaults:
# Numri i proceseve
concurrency: 2
# Numri i kërkesave
requests: 1000
containers:
# Cilësimet për konteinerin e benchmark
# Konteineri përcaktohet si 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:
# Mund të kryeni benchmark në shërbimet e tipit NodePort dhe LoadBalancer
# Sintaksa: namespace/service-name
default/nginx:
concurrency: 5
requests: 500
http:
method: GET
path: /auth
auth:
user: flant
password: s3cr3tp455w0rd
Ndërfaqja
Pamja e kolonave për listat e burimeve modifikohet duke krijuar një skedar $HOME/.k9s/views.yml. Shembulli i përmbajtjes së tij:
k9s:
views:
v1/pods:
columns:
- AGE
- NAMESPACE
- NAME
- IP
- NODE
- STATUS
- READY
v1/services:
columns:
- AGE
- NAMESPACE
- NAME
- TYPE
- CLUSTER-IP
E vërteta, i mungon kolonë për etiketat, për çka ka .
Sortimi sipas kolonave arrihet me kombinime të tasteve:
- Shift + n â sipas emrit;
- Shift + o â sipas nyjave;
- Shift + i â sipas IP;
- Shift + a â sipas kohĂ«zgjatjes sĂ« kontejnerit;
- Shift + t â sipas numrit tĂ« ribrikimeve;
- Shift + r â sipas statusit tĂ« gatishmĂ«risĂ«;
- Shift + c â sipas konsumit tĂ« CPU;
- Shift + m â sipas konsumit tĂ« memories.
Nëse dikujt nuk i pëlqen dizajni i paracaktuar, në K9s mbështeten madje . Shembuj të gatshëm (7 në total) janë në dispozicion . Ja një shembull i një prej këtyre temave (in the navy):

Plugins
Finally, lejojnĂ« zgjerimin e mundĂ«sive tĂ« K9s. UnĂ« nĂ« praktikĂ« kam pĂ«rdorur vetĂ«m njĂ« prej tyre â kubectl get all -n $namespace.
Duket kështu. Krijojmë një skedar $HOME/.k9s/plugin.yml me këtë përmbajtje:
plugin:
get-all:
shortCut: g
confirm: false
description: merr të gjithë
scopes:
- all
command: sh
background: false
args:
- -c
- "kubectl -n $NAMESPACE merr të gjithë -o gjerë | less"Tani mund të kalosh në hapësirën e emrit dhe të shtypësh "g" për të ekzekutuar me komandën përkatëse:

Ndër pluginët ka, për shembull, integrime me kubectl-jq dhe mjetin për shikimin e logeve .
Përfundim
Në mendimin tim, K9s ishte shumë e përshtatshme për punë: u mësova mjaft shpejt të gjej gjithçka të nevojshme pa përdorimin e kubectl. Më pëlqeu shikimi dhe ruajtja e logeve, redaktimi i shpejtë i burimeve, shpejtësia e përgjithshme e punës*, doli të ishte i dobishëm funksioni Popeye. Vlera e veçantë janë mundësitë për të krijuar pluginë dhe për të modifikuar aplikacionin sipas nevojave të mia.
* Megjithëse kur ka një volum të madh logesh kam vënë re gjithashtu një punë të ngadaltë të K9s. Në ato momente, utilita "therte" 2 bërthama nga Intel Xeon E312xx dhe madje mund të ngadalësohej.
ĂfarĂ« i mungon nĂ« kĂ«tĂ« moment? NjĂ« rikthim tĂ« shpejtĂ« nĂ« versionin e mĂ«parshĂ«m (nuk flasim pĂ«r RS) pa kaluar nĂ« direktorinĂ«. PĂ«r mĂ« tepĂ«r, rikuperimi ndodh vetĂ«m pĂ«r tĂ« gjithĂ« resurset: nĂ«se keni fshirĂ« njĂ« annotim ose njĂ« etiketĂ«, do tĂ« duhet tĂ« fshini dhe tĂ« rikuperoni tĂ« gjithĂ« burimin (kĂ«tu do tĂ« jetĂ« e nevojshme tĂ« kaloni nĂ« direktorinĂ«). NjĂ« detaj tjetĂ«r â mungon data e atyre "backup-ev" tĂ« ruajtur.
P.S.
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «».
Burimi: habr.com
