Какие есть best practices для написания Dockerfile?
1. Запускать только один процесс на контейнер.
2. Стараться объединять несколько команд RUN в одну для уменьшения количества слоёв образа.
3. Частоизменяемые слои образа необходимо располагать ниже по уровню, чтобы ускорить процесс сборки, т.к. при изменении верхнего слоя, все нижеследующие слои будут пересобираться.
4. Указывать явные версии образов в инструкции FROM, чтобы избежать случая, когда выйдет новая версия образа с тегом latest.
5. При установке пакетов указывать версии пакетов.
6. Очищать кеш пакетного менеджера и удалять ненужные файлы после выполненной инструкции.
7. Использовать multistage build для сборки артифакта в одном контейнере и размещении его в другом.
Библиотека собеса по DevOps
2. Стараться объединять несколько команд RUN в одну для уменьшения количества слоёв образа.
3. Частоизменяемые слои образа необходимо располагать ниже по уровню, чтобы ускорить процесс сборки, т.к. при изменении верхнего слоя, все нижеследующие слои будут пересобираться.
4. Указывать явные версии образов в инструкции FROM, чтобы избежать случая, когда выйдет новая версия образа с тегом latest.
5. При установке пакетов указывать версии пакетов.
6. Очищать кеш пакетного менеджера и удалять ненужные файлы после выполненной инструкции.
7. Использовать multistage build для сборки артифакта в одном контейнере и размещении его в другом.
Библиотека собеса по DevOps
В чем разница между SQL и NoSQL?
Основное отличие состоит в том, что базы данных SQL структурированы (данные хранятся в виде таблиц со строками и столбцами — как таблица электронной таблицы Excel), тогда как базы данных NoSQL неструктурированы, и хранение данных может варьироваться в зависимости от того, как настроена база данных NoSQL. Например, пары ключ-значение, документо-ориентированная и т. д.
Библиотека собеса по DevOps
Библиотека собеса по DevOps
Опишите процесс масштабирования контейнеров Docker
Контейнеры могут быть масштабированы с использованием команды docker-compose scale. Процесс масштабирования такой — масштабируем контейнер и запускаем n экземпляров:
$ docker-compose --file docker-compose-run-srvr.yml scale =
В вышеприведенном примере имя сервиса задается в файле docker-compose-run-srvr.yml, а также запускается n копий контейнеров, где n — любое целое положительное число.
После масштабирования контейнера для проверки можно использовать такую команду:
$ docker ps -a
Библиотека собеса по DevOps
$ docker-compose --file docker-compose-run-srvr.yml scale =
В вышеприведенном примере имя сервиса задается в файле docker-compose-run-srvr.yml, а также запускается n копий контейнеров, где n — любое целое положительное число.
После масштабирования контейнера для проверки можно использовать такую команду:
$ docker ps -a
Библиотека собеса по DevOps
Что такое CRI?
CRI означает интерфейс выполнения контейнера. Это спецификация, описывающая определенный уровень абстракции, позволяющая унифицированно использовать различные версии программного обеспечения для работы с контейнерами, такими как Containerd или CRI-O.
Библиотека собеса по DevOps
Библиотека собеса по DevOps
Каким образом мы можем управлять вычислительными ресурсами в k8s?
Для эффективного управления ресурсами в кластере k8s используются resources requests / limits. Они могут быть настроены для CPU, памяти и, в последних версиях k8s, для GPU.
Requests используются для определения типичного потребления ресурсов нашим приложением. На основе этих данных Kubernetes scheduler выбирает ноды для запуска PODов (сумма всех request'ов контейнеров во всех PODах не должна превышать доступные ресурсы на ноде).
Limits служат как механизм предотвращения, ограничивая потребление ресурсов контейнером в PODе. При превышении лимита процессорного времени применяется thermal throttling, а при превышении лимита памяти — механизм OOM.
Модель, при которой requests меньше limits, называется burstable QoS, а когда requests равны limits — guaranteed QoS.
Кроме того, можно установить квоты ресурсов на namespace (CPU, память, количество запущенных PODов, размер диска persistent volume) и указать требования к resources requests на PODах в namespace с помощью limit ranges.
Для управления ресурсами приложений также можно использовать автоскейлеры. В k8s доступны HPA (horizontal pod autoscaler), который регулирует количество PODов в зависимости от потребления CPU и/или памяти, и VPA (vertical pod autoscaler), который управляет resources requests / limits.
Существуют также реализации автоскейлеров, которые могут использовать внешние метрики (например, длину очереди), такие как carpenter или KEDA. В облачном окружении можно использовать cluster autoscaler для добавления или удаления нод в зависимости от общей загрузки кластера.
Библиотека собеса по DevOps
Requests используются для определения типичного потребления ресурсов нашим приложением. На основе этих данных Kubernetes scheduler выбирает ноды для запуска PODов (сумма всех request'ов контейнеров во всех PODах не должна превышать доступные ресурсы на ноде).
Limits служат как механизм предотвращения, ограничивая потребление ресурсов контейнером в PODе. При превышении лимита процессорного времени применяется thermal throttling, а при превышении лимита памяти — механизм OOM.
Модель, при которой requests меньше limits, называется burstable QoS, а когда requests равны limits — guaranteed QoS.
Кроме того, можно установить квоты ресурсов на namespace (CPU, память, количество запущенных PODов, размер диска persistent volume) и указать требования к resources requests на PODах в namespace с помощью limit ranges.
Для управления ресурсами приложений также можно использовать автоскейлеры. В k8s доступны HPA (horizontal pod autoscaler), который регулирует количество PODов в зависимости от потребления CPU и/или памяти, и VPA (vertical pod autoscaler), который управляет resources requests / limits.
Существуют также реализации автоскейлеров, которые могут использовать внешние метрики (например, длину очереди), такие как carpenter или KEDA. В облачном окружении можно использовать cluster autoscaler для добавления или удаления нод в зависимости от общей загрузки кластера.
Библиотека собеса по DevOps
👍1
🔎 Собес сам себя не пройдет
Ты готов к собеседованию? А если проверю?
Залетай к нам и забирай курсы со скидкой 40%. Только до конца октября можно узнать много нового и отточить навыки.
🎯 Забирай курсы:
🐍 python для разработчиков;
🧮 алгоритмы и структуры данных;
📝 архитектуры и шаблоны проектирования;
🧩 основы IT для новичков.
⚡️ Не упусти скидку и получи долгожданный оффер!
Ты готов к собеседованию? А если проверю?
Залетай к нам и забирай курсы со скидкой 40%. Только до конца октября можно узнать много нового и отточить навыки.
🎯 Забирай курсы:
🐍 python для разработчиков;
🧮 алгоритмы и структуры данных;
📝 архитектуры и шаблоны проектирования;
🧩 основы IT для новичков.
⚡️ Не упусти скидку и получи долгожданный оффер!
В чём разница между SLI, SLO и SLA?
SLI — измеримая метрика качества (например, доля успешных запросов). SLO — целевое значение этой метрики за период (например, 99.9% за 30 дней). SLA — юридически значимое обещание клиенту на основе SLO, с оговорёнными санкциями/кредитами. Ошибочный бюджет = 100% − SLO и используется для контроля темпа релизов.
Библиотека собеса по DevOps
Библиотека собеса по DevOps
👍1😢1
Как обеспечить нулевой простой сервиса в Kubernetes во время деплоя и обновления нод?
Держите ≥3 реплики на зону и включите readinessProbe, делайте RollingUpdate с maxUnavailable: 0 и maxSurge: 1, задайте PDB с minAvailable и убедитесь, что HPA.minReplicas ≥ minAvailable. Для плавного отключения трафика используйте lifecycle.preStop и достаточно большой terminationGracePeriodSeconds. Размещайте поды по зонам через anti-affinity/topologySpreadConstraints. Ноды обновляйте через kubectl drain, чтобы эвикшены уважали PDB; для стейтфул-нагрузки — StatefulSet и кворум/репликацию на уровне хранилища.
Библиотека собеса по DevOps
Библиотека собеса по DevOps
👍1