Библиотека девопса | DevOps, SRE, Sysadmin
10.3K subscribers
1.38K photos
71 videos
4 files
2.59K links
Все самое полезное для девопсера в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/25874ec4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/6798b4e4509aba565
Download Telegram
☝️🕒 Увеличение времени сессии SSH

Бывает, что выполнение удаленно запущенной команды может затянуться, а необходимо дождаться ее выполнения (кстати, в этом случае весьма полезным может стать использование screen), или пришлось отвлечься, а сессия SSH в это время отвалилась.

На сервере в конфигурационном файле /etc/ssh/sshd_config прописываем:

TCPKeepAlive yes
ClientAliveInterval 300
ClientAliveCountMax 60

TCPKeepAlive — установлен в «yes», значит сервер будет периодически пинговать клиента, проверяя жив ли он.
ClientAliveInterval — задает интервал пинга для проверки состояния клиента (в секундах). Параметр работает только для протокола версии 2 (Protocol 2).
ClientAliveCountMax — количество пингов клиента.
Таким образом в примере таймаут сессии будет равен 60*300/60 = 300 минут = 5 часов.
После изменения настроек не забудьте перезапустить сервис ssh.

#гайд
17👍9
🤔💩💩Как узнать имя функции из самой функции

#!/bin/bash

deploy() {
# здесь хотим получить "deploy"
}

Для получения имени функции из самой функции, можно воспользоваться переменной ${FUNCNAME[*]}.

Элемент с индексом 0 это имя любой выполняемой функции в данный момент.Элемент с самым большим индексом будет называться main.

deploy() {
echo ${FUNCNAME[0]}
}

💩 Выведет название функции: deploy

Переменная FUNCNAME существует только во время выполнения скрипта. Если самостоятельно задать переменную FUNCNAME, это ничего не даст и все равно выведется эталонное имя функции.

При обращении к массиву без индекса, будет возвращен первый элемент массива текущий функции. Но так же будет содержать все остальные функции в стеке вызова.

Например:

exp1() {
echo ${FUNCNAME}
}

exp2() {
echo ${FUNCNAME[*]}
}

🫡 Первая функция выведет: exp1, а вторая выведет весь массив функции: exp2 main.

Не обязательно указывать индекс, все будет корректно работать и так. Это больше как правила хорошего тона. Как точка с запятой в конце строки, которая не влияет на функционал и никак не интерпретируется.

В zsh это называется funcstack, это тот же массив всех функций скрипта.

deploy() {
echo $funcstack[1]
}


Еще переменная FUNCNAME используется с BASH_LINENO и BASH_SOURCE, об этом можно почитать в официальной документации.


BASH_SOURCE - переменная, содержит путь к исходному файлу оболочки, полезна при отладке и анализе ошибок.

BASH_LINENO - переменная, содержит номер строки на которой произошла ошибка в текущем скрипте.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍9🌚1
🧑‍🎓✍️ Certified Kubernetes Security Specialist — мой опыт сдачи экзамена

Автор материала успешно сдал экзамен на этот сертификат. Его путь был не совсем гладким, и в статье он расскажет все подробности.

CKS самый сложный в линейке практических экзаменов по Kubernetes от CNCF. К сдаче допускаются кандидаты, уже подтвердившие себя в экзамене Certified Kubernetes Administrator.

Основой подготовки кроме доки Kubernetes стали самые популярные по теме ресурсы: https://kodekloud.com/, а также https://killer.sh и https://killercoda.com/.

Также было несколько репозиториев с github, информация в них большей частью устарела, т.к. и версия Kubernetes, и версия экзамена не стоят на месте.

Продолжение истории ищите здесь

#гайд
👍6🔥2
🤔🎯 Топ-10 распространенных проблем с Dockerfile linting

Как залинтить Dockerfile

Можно использовать hadolint. Чтобы залинтить Dockerfile on-demand, следует передать флаг --lint во время сборки, который будет запущен перед сборкой.

Еще вариант — запустить hadolint локально или использовать hadolint Dockerfile linter UI. Чтобы запустить hadolint локально, вы можете либо установить его через brew, либо использовать образ Docker и вставить в него свой Dockerfile.

После того, как разобрались с линтерами переходим к ошибкам, которые найдете тут

#гайд
🔥3👍1
🤔 Очередной #дайджест статей и инструментов по DevOps

🛟 Gitea & Act Runner: First touch — в Gitea появился собственный Github-подобный CI/CD

🛟 AWS Weekly Roundup — re:Post Selections, SNS и SQS FIFO улучшение, multi-VPC ENI

🛟 Fact-Gathering с Event-Driven Ansible для Microsoft Windows ITSM — использование Event-Driven Ansible для обеспечения сбора фактов из событий

🛟 Что такое RUP — что такое RUP, зачем нужен, принципы, структура, преимущества и недостатки

🛟 Отправляем уведомления в определенный топик в чате Telegram — как настроить уведомления в приложении на Python или в Alertmanager, чтобы сообщения приходили в определенный Telegram топик
❤‍🔥17👍12👏2
#вопросы_с_собеседования

Как определить, на каком физическом жёстком диске находится раздел с файловой системой? Как можно идентифицировать этот носитель без выключения сервера?

Посмотреть название блочного устройства нужного можно например с помощью команды:
mount | grep " $(stat -c%m /home) " | awk '{print $1}'

А дальше на основе полученной информации можно выудить фирму, серийный номер и размер диска.
smartctl -a /dev/sda | grep -e «Serial Number» -e «Device Model» -e «Model Family» -e «User Capacity»
👍111🔥1
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
4👍1
🤔😱 Что делать с постепенно растущей нагрузкой при быстром масштабировании? А с ее резким ростом?

Мероприятие состоится 23 ноября в 16:00.

В программе

✏️ Что может пойти не так на начальном этапе масштабирования? В чем плюсы и минусы традиционных подходов к кэшированию?
✏️ Что делать с постепенно растущей нагрузкой? А с резким ростом нагрузки? Как обеспечить доступность и отказоустойчивость сервиса?
✏️ Как избежать чрезмерного разрастания технологического стека при выпуске нового функционала?
✏️ Как на разных этапах масштабирования может помочь Tarantool? И как правильно его приготовить, чтобы добиться максимальной производительности и надежности?

Вебинар будет интересен IT-специалистам в области высоких нагрузок, архитекторам ПО, всем, кому предстоит масштабирование, а также тем, кто любит учиться на чужих ошибках и узнавать про факапы других людей 😉

Регистрация тут

#мероприятие
👍41
👁Помогите «Библиотеке программиста» лучше узнать свою аудиторию

Друзья, мы хотим делать для вас самый лучший контент — и для этого нам нужно узнать вас получше.

Пожалуйста, ответьте на несколько вопросов — это не займет у вас много времени, но поможет нам делать более полезные и интересные посты!
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍2
На каком языке программирования вы пишете больше всего?
Anonymous Poll
41%
Python
11%
Go
7%
Java
3%
JavaScript
1%
TypeScript
3%
C/C++
6%
С#
0%
Kotlin/Swift
3%
PHP
23%
Другой