DevOps-им по-взрослому
167 subscribers
79 photos
32 files
58 links
Download Telegram
#cloud, #s3, #linux, #data

🤓 А вы знали, что S3 можно использовать как файловую систему или замену классическим облачным хранилищам? Да-да, это чистая правда!

🫥 S3 это отличное решение для хранения больших данных. Оно дешёвое, надёжное (облачный провайдер обеспечивает сохранность данных за счёт хранения данных в нескольких ДЦ) и имеет простой API. Обычно взаимодействие с ним происходит через SDK, который есть почти на каждом популярном языке программирования. Но в этом посте ЯП использоваться не будут.

S3 уже давно стал стандартом и относится не только к объектному хранилищу, разработанного AWS. Многие облачные провайдеры предоставляют свои сервисы, совместимые с S3, например Yandex Object Storage.

💬 Если вы создали бакет, то можете начать использовать хранилище по его прямому назначению. Например, загрузим некоторые фотографии или видео (1 скриншот, после выпускного их очень много :D )

Но это не совсем удобно. Каждый раз заходить на сайт и загружать нужные файлы ручками...

Давайте примонтируем бакет к устройству! Итак, я уже создал бакет и получил ACCESS_KEY/SECRET_KEY (тык и в документацию). Установим s3fs утилиту, которая позволит нашим планам сбыться, сохраним пару ключей в ~/.passwd-s3fs и сразу же попробуем примонтировать бакет:

sudo apt install s3fs
export ACCESS_KEY=YCAJENkZCs1eLXRWlkUzWcNpE
export SECRET_KEY=YCNVDcOukw3aIFvobPe_qnFOVv-P65EBrxn3x671
echo "$ACCESS_KEY:$SECRET_KEY" > ~/.passwd-s3fs && chmod 600 ~/.passwd-s3fs
s3fs azamat-komaev-file-system /mnt/ -o passwd_file=$HOME/.passwd-s3fs \
-o url=https://storage.yandexcloud.net -o use_path_request_style


👌 Теперь если перейти в /mnt и выполнить ls, то можно увидеть список всех файлов. Но можно не только считывать данные, но и записывать!

🖥 Помимо этого, есть мобильные клиенты, например, я нашёл S3Drive. Можно аналогично файлу при монтировании указать нужные доступы и вы без проблем сможете совершать те же самые действия с мобильного устройства! (скриншот 2 и скриншот 3)

💸 Это всё замечательно, но сколько всё это стоит? Всё просто! Посмотреть правила тарификации можно тут.

Оплата производится за:
Хранение данных: 2,01 рубля/ГБ, 1,07 рублей/ГБ, 0.5350 рублей/ГБ (зависит от класса хранилища)
Операции с данными: за PUT/POST/GET/etc (проверьте таблицу по ссылке сверху)
Исходящий трафик: за ГБ

🤑 При этом у Yandex Object Storage есть жирный Free tier, который позволяет бесплатно использовать 1ГБ хранилища, первые N операции и до 100ГБ исходящего трафика.

Всем добра 😄
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
#kafka, #education

💸 Взял платный практикум по Kafka. Но зачем?

😐 Везде, где используют микросервисы, с огромной вероятностью вам придется иметь дело с Kafka. Для меня данный инструмент является чем-то неизведанным. Я имел ограниченный опыт взаимодействия с ним, нажать кнопку в GUI облака и получить сконфигурированный кластер - на этом всё.

👍 Так не могло продолжаться дальше, и в один момент я решил выйти из зоны комфорта.... Вернее основным поводом стала частота появления в вакансиях на позицию DevOps инженера

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

Перед тем, как приобрести курс, я конечно же попробовал сам... Но сразу же запутался во внутреннем устройстве Kafka. Топики, партиции, фактор репликации... Это всё сводит с ума 😩

Но это было только начало... Люди, имеющие дело с разработкой на Java, знают боль, которая происходит при работе с TLS-сертификатами. Если ваше приложение ходит к защищенным сервисам (например, Sonatype Nexus), то от страдании с keytool и truststore вам не убежать.

🖼️ Kafka написана на Java. Поэтому если вы хотите, чтобы общение кластер-кластер/клиент-кластер было зашифровано, то у вас должно быть два хранилища - Trust store и Key store. В первом хранятся сертификаты, которым мы доверяем, во втором - необходимые для конфигурирования на стороне сервера. И у каждого Kafka-брокера должен быть свой Trust store и Key store...

Конечно, Kafka позволяет использовать разные порты и протоколы путём настройки слушателей. Например:

listeners=SSL://0.0.0.0:9092,PLAINTEXT://192.168.135.1:9093


🧑‍💻 Так для доступа из интернета мы используем защищенное соединение, тогда как из приватной сети (192.168.x.x) - без шифрования. Затем мы можем указать какой протокол использовать для общения между брокерами:

security.inter.broker.protocol=PLAINTEXT


Но погодите... Если мы запускаем кластер из нескольких Kafka-брокеров, то как они тогда будут синхронизировать свое состояние? Тут нам приходит на помощь Zookeeper или модный-молодёжный Kraft.

😐 Если мы используем Zookeeper, то нам необходимо развернуть в нашем контуре отдельный компонент, при этом их количество советуют приводить к количеству брокеров. А это ведёт к тому, что этот компонент нужно поддерживать, мониторить и дополнительно производить конфигурацию на стороне брокеров.

Поэтому Zookeeper был помечен Deprecated, и в новых версиях Kafka советуют использовать KRaft. Он позволяет хранить всю информацию о кластере в самих брокерах. В кластере путём голосования выбирается лидер. Затем Follower'ы реплицируют данные с лидера. Подробнее читайте тут.

🔜 Что дальше? Раздел администрирования я почти завершил, дальше - использование на стороне разработки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#linux

🤬 Забыли пароль от root? Не проблема!

Не думал, что столкнусь с этим, но это случилось. Две недели назад я ставил Kubernetes 🖼️ кластер через VirtualBox, в качестве ОС использовался Debian 👩‍💻. И вот я захотел вернуться к кластеру, но не тут то было.... Я перепробовал пароли, которые обычно ставлю на локальные машины (admin, 1234, etc), но ничего из этого не подошло. Благо я настроил доступ по SSH-ключу, но sudo без пароля не работает. 🤡

Т.к виртуальный диск не зашифрован, то сбросить пароль можно с помощью утилиты System Rescue.

Можно сделать загрузочную флешку, если ОС у вас поставлена на ПК. Так как мне нужно восстановить доступ к ВМ, то делать буду через VirtualBox.

(1) Зайдем в настройки ВМ -> Storage -> Controller: IDE. Тут снизу нажмем на диск, а затем на "Choose a virtual optical disk". Укажем iso образ. Затем перейдем в раздел System и поменяем Boot order (2). 🤓

Загрузимся и увидим командую оболочку. Получим список всех разделов и смонтируем тот, где хранится ОС. Сменим корневую директорию и выполним passwd (3). DONE!

fdisk -l
mount /dev/sda1 /mnt
arch-chroot /mnt
passwd azamat


Снова сменим порядок загрузки и попробуем ввести новый пароль (3). DONE! 😮
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤‍🔥1🔥1
#k8s, #gitops, #helm, #argocd

🖼️ Наведите порядок в ваших репозиториях с Kubernetes 🖼️ манифестами с GitOps подходом!

🤓 Про деплой собственных приложении я писал ранее на Хабре. Изначально это были просто YAML манифесты, затем я написал собственный Helm-чарт 🖼️, сейчас - перевожу всё в kustomize.

🤔 Но помимо сервисов, которые пишут разработчики, в кластер нужно деплоить сторонние приложения: базы данных, брокеры, системы мониторинга и логирования.

⚠️ В таком случае я всегда создавал репозитории, где по разным директориям были разбросаны yaml манифесты, bash скрипты для деплоя Helm-чартов и прочее. Спустя небольшое количество времени такой репозитории превращается в свалку, а когда нужно что-то изменить, то это приводит к сложностям.

Про GitOps я слышал достаточно часто: сначала в чатах, а затем на собеседованиях. Я думал, что в текущих масштабах такой подход не нужен - справлюсь своими руками. Но я все же решил попробовать и.... мне понравилось!

ArgoCD - это инструмент, позволяющий поддерживать состояние Kubernetes кластера в соответствии с содержимым Git-репозитория. Таким образом тулза сама отслеживает изменения в коде и применяет их в один или несколько кластеров.

ArgoCD поддерживает стандартные yaml манифесты, Helm-чарты и kustomize. Помимо этого, он позволяет создавать сущности Application, с помощью которых можно гибко управлять различными настройками.

✍️ Советую изначально использовать паттерн App-of-Apps. Таким образом, вы можете создать корневое приложение, которое будет само управлять другими "дочерними" приложениями. Плюс - вы получите красивые схемы в UI =)

😐 Я столкнулся с тем, что ресурсы уже были развернуты. Как действовать в таком случае?

Изначально советую выключить prune и selfHeal опции, чтобы избежать непоправимых последствии. prune: false не позволит ArgoCD удалять ресурсы куба, тогда как selfHeal: false автоматически приводить кластер в описанное состояние.

Если вы хотите отдать yaml манифесты ArgoCD, то ничего делать не нужно - ArgoCD после процесса синхронизации поймет, что ресурс с таким названием в таком неймспейсе развернут и трогать его не будет.

👍 С хелмом дела обстоят иначе. Я ставил все чарты командой helm install, тогда как ArgoCD использует helm template | kubectl apply -f -. Я не знал как поведет себя ArgoCD в таком случае, а у меня не было желания переустанавливать все чарты. Но оказалось всё просто: ArgoCD сам подхватил ресурсы релизов. Чтобы полностью вывести ресурсы из управления helm, необходимо удалить секреты, которые создаются для каждого релиза и имеют Type: helm.sh/release.v1.

Для паттерна App-For-Apps вы можете использовать настройки directory.recurse и directory.include. ArgoCD не предлагает вам определенную структуру папок, вы сами можете её организовать как вам удобно.

Я сделал приложения для каждого компонента кластера: как для Helm-чартов, так и для YAML манифестов. Все приложения описаны в файлах app.yaml, которые находятся в разных уровнях вложенности. Поэтому в directory.include я указал находить все подобные файлы и применять их:

  directory:
recurse: true
jsonnet: {}
include: '**/app.yaml'


Для приложении, которые используют YAML-манифесты, я задавал в качестве источников пути до этих самых манифестов:

    - path: apps/kafka/cluster
repoURL: https://github.com/AzamatKomaev/argocd-example.git
targetRevision: HEAD
- path: apps/kafka/topics
repoURL: https://github.com/AzamatKomaev/argocd-example.git
targetRevision: HEAD
- path: apps/kafka/users
repoURL: https://github.com/AzamatKomaev/argocd-example.git
targetRevision: HEAD


🙂 Так, получалась следующая связь:
root-app -> kafka -> plain YAML manifests
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Заказал я себе тут мастер+воркер узел для self-managed kubernetes. Но после вскрытия пришло так же осознание, что существует micro HDMI разъем (второй скрин) 🤡

Теперь ждём переходник 😭
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Done 😎

Возникли непредвиденные проблемы при установке Ubuntu Desktop, поэтому довольствуемся Raspberry Pi OS (ну или просто Linux Debian)
❤‍🔥3
Буквально YAML-разработчик 💀
Please open Telegram to view this post
VIEW IN TELEGRAM
16😁3👍1
DevOps-им по-взрослому
Photo
😮 Я купил Б/У ноутбук на АВИТО. Он пришел, так ещё и запустился!

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

😎 Знакомьтесь, Lenovo ThinkPad P14s Gen 2. Хоть он и является ровесником моего предыдущего ноутбука (тоже леново, но IdeaPad), но у нового есть ряд преимуществ:

- Конечно же более мощные ресурсы: процессор Intel Core i7-1185G7 (против Intel Core i3-1005G1), дискретная видеокарта (хоть и не такая мощная), 48Gi оперативной памяти против 12Gi у IdeaPad.
- IPS-матрица против TN-матрицы. Экран стал более ярким и четким. При повороте ноутбука качество картинки почти не меняется. Достаточно весомо!
- Вес. Классические ThinkPad-ы весят 1.2кг-1.3кг. Тут же 1.5кг (за счет более мощных ресурсов), на 300 грамм меньше, чем у моего предыдущего ноутбука. Таскать ноутбук в руках/портфеле стало намного удобнее.
- Автономность. Заряда ThinkPad при стандартной девопсерской работе (несколько окон с терминалом, браузером и запущенными контейнерами) хватает до 5 часов, тогда как IdeaPad уже умирал через полтора. С другой стороны зарядка - теперь это более быстрый Type-C.
- Остальные плюшки по типу более приятной клавиатуры, входу по отпечатку пальца и подсветки клавиатуры. За последнее зачет!


😡 Ноутбук потерял в размере экрана (14 пикселей против 15.6). Но оно того стоит - ноутбук стало легче таскать с собой. Еще изменился цвет: на черном стали видны потертости и следы от пальцев. Не так критично.

ThinkPad пришел уже с установленной Windows 11?, прыщом TrackPoint-ом и финской раскладкой (сразу уточнил у продавца, мне вполне ок осетинская буква АЕ и знак пустого множества). Это конечно замечательно, но через полчаса основной диск уже был разделен для установки дистрибутива Linux. Я около трёх лет использовал Linux Mint в качестве основной ОС, но захотелось чего-то нового... Ну что же, Manjaro!

🔴 Но нет, после успешной установки ОС, BIOS наотрез не захотел видеть загрузчик GRUB. "Окей" - решил я и установил Fedora. Безуспешно =(

Третьей попыткой поставил Ubuntu, биос снова не видит вторую ОС! На старый ноутбук я сначала ставил Linux, а затем уже Windows - по такой схеме все работало идеально. Тут же - наоборот. Подозрения пали на загрузчик Windows и да, пару команд в CMD позволили биосу наконец-то увидеть GRUB!

🧑‍💻 К клавиатуре я уже привык, но есть пара "нюансов". Во-первых, пропал NumPad, а именно кнопки для управления медиаплеером. Я очень часто слушаю музыку в фоне, поэтому всегда пользуюсь этими тремя кнопками. На ThinkPad я сначала использовал функции наушников, но затем настроил комбинацию Alt+(Home, End, Delete) для замены кнопок медиаплеера. Во-вторых, расположение Fn и Ctrl. Тут уже сложнее, так как их я довольно часто использую при редактировании кода.

👍 Я использую ноутбук уже 4 день и опыт весьма положителен. Работаем дальше (с)

А стоимость: 57.000
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63🔥1
Мой уровень познания художественной литературы 👍
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4👍3🐳2