Лайфхаки для DevOps: ZSH, Screen и tmux, JQ | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 27.11 Забрать скидку! →
Выбрать курс

Лайфхаки для DevOps: ZSH, Screen и tmux, JQ

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

ZSH

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

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

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

Подсветка веток в GitПод­свет­ка веток в Git:

git_branch_1-1801-961bdc.jpg

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

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

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

aws_profile_1-1801-16659b.jpg

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

kubectl_1-1801-8df0d6.jpg

Хо­рошая тема: 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_1-1801-477c25.jpg

У 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'

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 27.11 →