У всех нас есть лай­фха­ки и инс­тру­мен­ты, уско­ряющие работу с опре­делен­ными задача­ми и сис­темами. У девоп­сов и адми­нис­тра­торов обла­ков таких инс­тру­мен­тов дол­жно быть едва ли не боль­ше всех, потому что сер­висов, с которы­ми работать, — мно­го, а тер­минал один. В этой статье я делюсь сво­им опы­том работы с облачны­ми сис­темами и решени­ем мел­ких задач, которые воз­ника­ют каж­дый день.
 

ZSH

Нач­нем с самого час­то исполь­зуемо­го инс­тру­мен­та — интер­пре­тато­ра коман­дной стро­ки. Я исполь­зую zsh — из‑за пла­гинов, тем и воз­можнос­тей авто­допол­нения. Авто­допол­нение из исто­рии силь­но сок­раща­ет вре­мя набора команд, а пла­гины еще боль­ше рас­ширя­ют авто­допол­нение, обес­печива­ют под­свет­ку син­такси­са, добав­ляют полез­ные али­асы.

Два наибо­лее полез­ных пла­гина:

  • git — отоб­ража­ет вет­ки/ком­миты/репози­тории. Наг­лядно вид­но, в каком репози­тории находишь­ся, ини­циали­зиро­ван ли он, какая вет­ка, ком­мит, син­хро­низи­рова­но ли с уда­лен­ным репози­тори­ем и про­чее;
  • zsh-syntax-highlighting — под­свет­ка син­такси­са в кон­соли. Удоб­но при написа­нии и отладке скрип­тов.
Подсветка веток в Git
Под­свет­ка веток в Git

Так­же рекомен­дую уста­новить пла­гины для каж­доднев­но исполь­зуемых инс­тру­мен­тов: AWS, Docker, brew, knife, node, encode64, kubectl, osx, Python, pip. Прак­тичес­ки все добав­ляют под­сказ­ки по табу, что уже очень полез­но, некото­рые по это­му же табу сту­чат­ся в API сер­висов и пред­лага­ют рас­ширен­ное авто­допол­нение, а не толь­ко воз­можные коман­ды.

Пла­гины AWS и kubectl дела­ют еще одну важ­ную вещь — всег­да показы­вают кон­текст/про­филь, в котором работа­ешь, и силь­но сни­жают шан­сы оши­бить­ся и вки­нуть какую‑нибудь опас­ную коман­ду не в тот тер­минал. Плюс, к при­меру, рас­ширение для ама­зона уме­ет счи­тывать наз­начен­ные про­филям цве­та, и, если будешь работать в про­де, мож­но под­кра­сить про­филь ярко‑крас­ным, что­бы точ­но понимать, где выпол­няет­ся коман­да.

Подсветка профиля AWS
Под­свет­ка про­филя AWS
Подсветка профиля kubectl
Под­свет­ка про­филя kubectl

Хо­рошая тема: powerlevel10k, гиб­кая, кра­сивая, информа­тив­ная, мож­но нас­тро­ить по вку­су очень мно­го вещей. Осо­бен­но удо­бен сквош исполнен­ных команд пос­ле выпол­нения, что­бы не засорять экран.

Пла­гины, как и темы, уста­новить доволь­но прос­то. Если замора­чивать­ся — для это­го есть пла­гин/пакет‑менед­жеры для zsh вро­де antigen или Zinit. Но в целом уста­нов­ка сво­дит­ся к git clone и запус­ку скрип­та, который сам все нас­тро­ит. Для поис­ка пла­гинов луч­ше все­го исполь­зовать под­борки на GitHub вро­де awesome-zsh-plugins.

 

Screen и tmux

Screen — это эму­лятор (а точ­нее, муль­тип­лексор) тер­миналь­ных сес­сий VT100. Но обыч­но его исполь­зуют как спо­соб безопас­но выпол­нить коман­ды через SSH на слу­чай пре­рыва­ния соеди­нения.

К при­меру, ты запус­каешь «дол­гоиг­рающую» коман­ду вро­де apt-get upgrade и в этот момент соеди­нение с сер­вером обры­вает­ся. В ито­ге дочер­ний про­цесс apt-get-сес­сии SSH уми­рает и про­цесс обновле­ния пакетов оста­нав­лива­ется. Что­бы это­го не про­изош­ло, прос­то запус­ти screen и уже в нем запус­кай все нуж­ные коман­ды. Теперь, если соеди­нение обор­вется, родитель­ский про­цесс screen оста­нет­ся жив и не толь­ко поз­волит коман­де кор­рек­тно завер­шить­ся, но и поз­волит заново под­клю­чить­ся к сущес­тву­ющей сес­сии, при­чем неваж­но, с какого устрой­ства.

Screen позволяет запускать множество терминалов в рамках одной SSH-сессии
Screen поз­воля­ет запус­кать мно­жес­тво тер­миналов в рам­ках одной SSH-сес­сии

У Screen есть более сов­ремен­ная аль­тер­натива под наз­вани­ем tmux. Ее раз­работа­ли пар­ни из OpenBSD, и в целом она отли­чает­ся более высокой про­изво­дитель­ностью и наличи­ем раз­личных сов­ремен­ных плю­шек, вро­де под­дер­жки пла­гинов. Сра­зу рекомен­дую уста­новить пла­гин tmux-resurrect, поз­воля­ющий сох­ранить текущий набор откры­тых в tmux тер­миналов в файл и вос­ста­новить его, ког­да понадо­бит­ся выпол­нить схо­жую задачу.

 

JQ

Вза­имо­дей­ствие с вебом и облачны­ми инфраструк­турами по боль­шей час­ти идет в фор­мате JSON. Kubectl и мно­гие дру­гие инс­тру­мен­ты так­же уме­ют выводить дан­ные в JSON. Поэто­му нам нужен JSON-про­цес­сор, и луч­ший из них — это jq. Очень удоб­ный инс­тру­мент с раз­витым син­такси­сом и дос­таточ­ной гиб­костью, что­бы писать слож­ные вло­жен­ные зап­росы и усло­вия.

В man json мож­но най­ти пол­ную докумен­тацию с хороши­ми при­мера­ми исполь­зования, да и в целом инс­тру­мент нас­толь­ко популя­рен, что при­меры есть прак­тичес­ки для любой задачи. Далее нес­коль­ко при­меров работы с Kubernetes.

Пос­мотреть выс­тавлен­ные перемен­ные окру­жения в кон­тей­нерах:

$ kubectl get pods --all-namespaces -o json | jq '.items[].spec.containers[].env[]?'

По­иск пов­режден­ных деп­лой­мен­тов:

$ kubectl get --raw=/apis/apps/v1/deployments | jq '.items[] | {name: .metadata.name, replicas: .status.replicas, available: (.status.availableReplicas // 0), unavailable: (.status.unavailableReplicas // 0)} | select (.unavailable > 0)'

Быс­тро пос­мотреть, какие обра­зы дос­тупны на нодах (час­то помога­ет при проб­леме с кеширо­вани­ем и ска­чива­нием обра­зов новых вер­сий):

$ kubectl get nodes -o json | jq '.items[] | .status .images[]'`

Схо­же с пре­дыду­щей, вари­ант быс­тро­го прос­мотра дос­тупных ресур­сов на нодах, удоб­но поль­зовать­ся в связ­ке со скрип­тами:

$ kubectl get nodes -o json | jq '.items[] | .status .allocatable'
 

K9S и K8S Lens

K9s — кон­соль­ный менед­жер для Kubernetes. Лег­кий, быс­трый, под­держи­вает все спо­собы авто­риза­ции в кубере, вклю­чая SSO и aws-iam-auth. Поз­воля­ет быс­тро и наг­лядно переме­щать­ся по клас­теру, редак­тировать манифес­ты и ресур­сы, заходить в кон­тей­неры, смот­реть заг­рузку ресур­сов.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Оставить мнение