DevOps – Telegram
DevOps
8.47K subscribers
1.46K photos
811 videos
28 files
1.74K links
Docker, Kubernetes, облачные сервисы (AWS, GCP, Azure), Infrastructure as a Code (Terraform, CloudFormation), администрирование Windows и Linux, сети TCP, IP, скрипты (Bash, PowerShell), Ansible, Jenkins, DevSecOps, логирование. По вопросам @evgenycarter
Download Telegram
Certified Kubernetes Security Specialist — мой опыт сдачи экзамена

- отнеситесь серьезно к качеству интернет-соединения. Из РФ ВПН не нужен
- популярные курсы не охватывают экзамен полностью (есть смысл поискать старые дампы на github)
- назначайте первую попытку хотя бы за месяц до окончания времени сдачи экзамена, таким образом, если завалите первую попытку, будет время подготовится ко второй
- за несколько дней пройдите killer.sh, получите выкладку ответов и после прохождения несколько раз пройдите у себя в домашней лабораторной
- обязательно будет задание на анализ поведения, на выбор дают falco и sysdig. Возьмите sysdig, на экзамене он сэкономит время, потренируйтесь в этом перед сдачей

https://habr.com/ru/articles/721136/

#devops #девопс

Подпишись 👉@i_DevOps
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Ускорьте запуск pod'ов, повторно используя слои образов с других узлов с помощью Spegel.

Предположим, что в кластере Kubernetes есть StatefulSet с 20 репликами pod'ов. Если образы, используемые для контейнеров pod'ов, имеют значительный размер, это требует времени для загрузки образов на рабочие узлы. Это значительно замедляет процесс запуска всех pod'ов StatefulSet, так как они запускаются по очереди.

В другом сценарии, допустим, один из рабочих узлов становится неисправным, и pod'ы, работающие на нём, выселяются. Тогда pod'ы переназначаются на другой узел, но им снова нужно загружать образы из контейнерного реестра через интернет, что увеличивает время простоя.

https://medium.com/linux-shots/speed-up-pod-startup-by-re-using-image-layers-from-other-nodes-with-spegel-817f88d40a92

#devops #девопс

Подпишись 👉@i_DevOps
👍3
Основы Docker: контейнеризация, Dockerfile и Docker Compose. Часть 2

Меня зовут Толя, я лидер компетенции Java в Цифровом СИБУРе. Наш прошлый материал о Docker собрал классный фидбэк, поэтому мы решили развить тему и подготовить ещё несколько статей, двигаясь от простого к сложному.

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

https://habr.com/ru/companies/sibur_official/articles/846350/

#devops #девопс

Подпишись 👉@i_DevOps
👍5
Mount — ещё один способ уменьшения размера Docker-образа

Делюсь лайфхаком по уменьшению размеров Docker-образов. Как-то нам попалась на поддержку и развитие CRM-система, написанная на Ruby. Пришли со словами: предыдущий разработчик не передал исходный код, но систему нужно развивать. Я уверен, что по условиям контракта передавали исходный код, но заказчики всегда относятся попустительски: им присылают архив на почту, а они потом стирают старое барахло, чтобы ящик почистить.

Так вот, зайдя на продакшен-сервер, я нашел развернутую платформу, да ещё и с .git папочкой. Ура, у меня были исходники с историей (она потом мне ни разу не понадобилась). Загрузил в нашу репу исходники, поизучал. В ходе контракта нужно было изменить деплой с rsync на контейнеризацию и перетащить все на Alt Linux (или Astra, уже не помню).

Обновили Ruby-пакеты (gems), обновили под них код и написали Dockerfile. Первая сборка была удручающей: образ в 2Гб. Это нормальный размер, если ты собираешь образ с Torch и другой ML-штуковиной, но CRM - нет. В результате дальнейших действий, удалось сократить размер образа до 200Мб.

https://habr.com/ru/articles/851384/

#devops #девопс

Подпишись 👉@i_DevOps
👍8
Какие инструкции есть у Dockerfile?


FROM Задаёт базовый (родительский) образ.

LABEL. Описывает метаданные. Например — сведения о том, кто создал и поддерживает образ.

ENV Устанавливает постоянные переменные среды.

RUN. Выполняет команду и создаёт слой образа. Используется для установки в контейнер пакетов.

COPY. Копирует в контейнер файлы и директории.

ADD. Копирует файлы и директории в контейнер, может распаковывать локальные .tar-файлы.

CMD Описывает команду с аргументами, которую нужно выполнить когда контейнер будет запущен. Аргументы могут быть переопределены при запуске контейнера. В файле может присутствовать лишь одна инструкция CMD.

WORKDIR. Задаёт рабочую директорию для следующей инструкции.

ARG Задаёт переменные для передачи Docker во время сборки образа.

ENTRYPOINT Предоставляет команду с аргументами для вызова во время выполнения контейнера. Аргументы не переопределяются.

EXPOSE Указывает на необходимость открыть порт.

VOLUME Создаёт точку монтирования для работы с постоянным хранилищем.


#devops #девопс

Подпишись 👉@i_DevOps
👍92
This media is not supported in your browser
VIEW IN TELEGRAM
ContainerSSH

SSH-сервер, запускающий контейнеры в Kubernetes и Docker

https://github.com/ContainerSSH/ContainerSSH

#devops #девопс

Подпишись 👉@i_DevOps
👍3
Представь: суббота, никакой рабочей суеты – только ты и онлайн-воркшоп с практикой в Linux.

За 7 часов ты узнаешь, как самостоятельно развернуть облачное хранилище на базе NextCloud и настроить его под отказоустойчивость и безопасность. А рядом будут менторы из K2 Cloud, чтобы ответить на все вопросы.

Переходи по ссылке и успевай зарегистрироваться до 21-го октября
👎1
Чем отличается CMD от ENTRYPOINT в Dockerfile?

Инструкции CMD и ENTRYPOINT выполняются в момент запуска контейнера, тольо инструкция CMD позволяет переопределить передаваемые команде аргументы.

Пример 1. CMD: Опишем сборку образа в Dockerfile.
FROM alpine
CMD ["ping", "8.8.8.8"]



В инструкцию CMD передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
$ docker run test
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=43 time=32.976 ms
64 bytes from 8.8.8.8: seq=1 ttl=43 time=31.998 ms
64 bytes from 8.8.8.8: seq=2 ttl=43 time=31.843 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 31.708/33.316/36.823 ms



Теперь передадим 2 новых аргумента для запуска контейнера.
$ docker run test traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 46 byte packets
1 172.17.0.1 (172.17.0.1) 0.017 ms 0.016 ms 0.009 ms
2 192.168.168.1 (192.168.168.1) 0.996 ms 1.553 ms 2.069 ms
3 * * *
4 lag-2-435.bgw01.samara.ertelecom.ru (85.113.62.125) 1.454 ms 1.427 ms 1.984 ms
5 172.68.8.3 (172.68.8.3) 19.685 ms 15.722 ms 15.565 ms
6 172.68.8.2 (172.68.8.2) 15.846 ms 22.696 ms 35.093 ms
7 one.one.one.one (1.1.1.1) 17.439 ms 17.670 ms 24.202 ms


ping заменен на traceroute, IP адрес заменен на 1.1.1.1.


Пример 2. ENTRYPOINT: Опишем сборку образа в Dockerfile.
FROM alpine
ENTRYPOINT ["ping", "8.8.8.8"]



В инструкцию ENTRYPOINT передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
$ docker run test2
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=43 time=36.189 ms
64 bytes from 8.8.8.8: seq=1 ttl=43 time=44.120 ms
64 bytes from 8.8.8.8: seq=2 ttl=43 time=44.584 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 36.189/41.631/44.584 ms



Теперь передадим изменим один из аргументов для запуска контейнера.

$ docker run test2 ping 1.1.1.1
BusyBox v1.31.1 () multi-call binary.

Usage: ping [OPTIONS] HOST

Send ICMP ECHO_REQUEST packets to network hosts

-4,-6 Force IP or IPv6 name resolution
-c CNT Send only CNT pings
-s SIZE Send SIZE data bytes in packets (default 56)
-i SECS Interval
-A Ping as soon as reply is recevied
-t TTL Set TTL
-I IFACE/IP Source interface or IP address
-W SEC Seconds to wait for the first response (default 10)
(after all -c CNT packets are sent)
-w SEC Seconds until ping exits (default:infinite)
(can exit earlier with -c CNT)
-q Quiet, only display output at start
and when finished
-p HEXBYTE Pattern to use for payload



Как видим, аргумент передать контейнеру нельзя.

#devops #девопс

Подпишись 👉@i_DevOps
👍123🔥3🤔1
Что такое эфемерные контейнеры?

Эфемерные контейнеры стали бета-функцией в Kubernetes v1.23 и теперь включены по умолчанию. Эфемерные контейнеры предназначены для транзитных задач, когда вам нужно временно подключить дополнительный контейнер к существующему поду. Это идеально подходит для отладочных операций, когда вы хотите проверить поды, не затрагивая живые экземпляры контейнеров.

https://kubernetes.io/docs/concepts/workloads/pods/ephemeral-containers/

https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#ephemeral-container

#devops #девопс

Подпишись 👉@i_DevOps
👍6
Чем отличается COPY от ADD в Dockerfile?

Инструкция COPY копируют файлы и директории с хостовой машины внутрь контейнера, инструкция ADD копирует файлы и директории с хостовой машины внутрь контейнера и может распаковывать .tar архивы.

#devops #девопс

Подпишись 👉@i_DevOps
👍101
KubeSkoop

KubeSkoop — это инструмент диагностики сетей Kubernetes для различных CNI плагинов и провайдеров IAAS. KubeSkoop автоматически строит граф сетевого трафика Pod в кластере Kubernetes, осуществляет мониторинг и анализ критических путей ядра с помощью eBPF, чтобы решать большинство сетевых проблем кластера Kubernetes.

https://github.com/alibaba/kubeskoop

#devops #девопс

Подпишись 👉@i_DevOps
3
Molecule

Проект Molecule предназначен для помощи в разработке и тестировании ролей Ansible.

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

Molecule поощряет подход, который приводит к последовательному развитию ролей, которые хорошо написаны, легко понимаются и поддерживаются.

https://github.com/ansible/molecule

#devops #девопс

Подпишись 👉@i_DevOps
👍3
Как определить состояние контейнера Docker?


1. Проверить статус всех контейнеров:

docker ps -a

Эта команда выводит список всех контейнеров, их идентификаторы, имена, статус и время работы. В колонке "STATUS" можно увидеть текущее состояние контейнера, например:
- Up X hours — контейнер работает.
- Exited (code) — контейнер завершил работу с определённым кодом выхода.

2. Проверить состояние конкретного контейнера:
Используйте команду docker inspect, чтобы получить подробную информацию о состоянии контейнера:

docker inspect <container_id>

Эта команда выводит всю информацию о контейнере, включая статус, ошибки, время работы и другие параметры. Для удобства можно использовать фильтрацию JSON-вывода, например:

docker inspect -f '{{.State.Status}}' <container_id>

Возможные статусы:
- running — контейнер запущен.
- exited — контейнер завершил работу.
- paused — контейнер приостановлен.
- restarting — контейнер перезапускается.

3. Проверить логи контейнера:
Чтобы увидеть последние действия контейнера, можно просмотреть его логи:

docker logs <container_id>

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

#devops #девопс

Подпишись 👉@i_DevOps
👍6
Топ 4 лучших типа сервисов Kubernetes в одной диаграмме.

🔹 ClusterIP
ClusterIP - это стандартный и наиболее распространенный тип службы. Kubernetes назначает сервису ClusterIP внутренний IP-адрес кластера. Это делает службу доступной только в пределах кластера.

🔹 NodePort
Это позволяет вывести сервис за пределы кластера, добавив общекластерный порт поверх ClusterIP. Мы можем запросить сервис по NodeIP:NodePort.

🔹 LoadBalancer
Этот способ раскрывает сервис извне, используя балансировщик нагрузки облачного провайдера.

🔹 ExternalName
Сопоставляет службу с доменным именем. Обычно это используется для создания службы в Kubernetes для представления внешней базы данных.

#devops #девопс

Подпишись 👉@i_DevOps
👍10
Устранение проблем с отсутствующими логами Kubernetes в Elasticsearch

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

Я исследовал случай отсутствующих логов Kubernetes в Elasticsearch, который в моем случае агрегирует логи для подов Kubernetes. У меня стандартная настройка Elasticsearch и Fluentd, и время от времени в Elasticsearch появляется пропуск, когда в течение нескольких секунд нет логов.

https://povilasv.me/troubleshooting-missing-kubernetes-logs-in-elasticsearch/

#devops #девопс

Подпишись 👉@i_DevOps
👍4
Технологический стек Netflix - CI/CD Pipeline


Эта статья основана на материалах многих инженерных блогов Netflix и проектов с открытым исходным кодом.

Планирование: Netflix Engineering использует JIRA для планирования и Confluence для документирования.

Код: Java - основной язык программирования для сервисов бэкенда, другие языки используются для различных задач.

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

Упаковка: Пакет и зависимости упаковываются в машинный образ Amazon (AMI) для выпуска.

Тестирование: Тестирование подчеркивает ориентацию продакшен-культуры на создание хаос-инструментов.

Развертывание: Для развертывания Netflix использует самостоятельно созданный Spinnaker.

Мониторинг: Метрики мониторинга централизованы в Atlas, а для выявления аномалий используется Kayenta.

Отчет об инцидентах: Инциденты рассылаются в соответствии с приоритетом, а для их обработки используется PagerDuty.

#devops #девопс

Подпишись 👉@i_DevOps
👍6
Полный рабочий процесс CI/CD с Skaffold для вашего приложения

Современный способ построения полного рабочего процесса от локального до продакшена с помощью Skaffold и Gitlab на кластере Kubernetes для снижения когнитивной нагрузки и операционной сложности в стеках приложений.

(Часть I)
https://blog.equationlabs.io/cicd-workflow-with-skaffold-for-your-application-part-i

(Часть II)
https://blog.equationlabs.io/how-to-build-a-cicd-workflow-with-skaffold-for-your-application-part-ii

(Часть III)
https://blog.equationlabs.io/how-to-build-a-cicd-workflow-with-skaffold-for-your-application-part-iii


#devops #девопс

Подпишись 👉@i_DevOps
👍1
Brain board

Визуальный редактор для terraform.
Создавайте свою облачную инфраструктуру без особых усилий с помощью вебморды

https://www.brainboard.co/

#devops #девопс

Подпишись 👉@i_DevOps
👍2
Kargo

Это платформа следующего поколения для организации непрерывной доставки и оркестрации жизненного цикла приложений для Kubernetes. Она основывается на принципах GitOps и интегрируется с существующими технологиями, такими как Argo CD, чтобы упростить и автоматизировать поэтапный выпуск изменений на различных этапах жизненного цикла приложения.

https://github.com/akuity/kargo

#devops #девопс

Подпишись 👉@i_DevOps
👍7
5 вариантов генерации конфигурационных файлов Shell-скриптами

Подготовка конфигурационных файлов из шаблонов — весьма распространённая задача системного администрирования. Решать её можно разными способами, каждый из которых хорош по-своему, здесь же мы рассмотрим, как это сделать с помощью Shell-скриптов.

https://habr.com/ru/companies/ruvds/articles/843048/

#devops #девопс

Подпишись 👉@i_DevOps
👍3