DevOps | Вопросы собесов
5.32K subscribers
29 photos
959 links
Download Telegram
Что такое мониторинг какие инструменты можно использовать ?
Спросят с вероятностью 26%

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

Виды:

1️⃣Мониторинг производительности: Отслеживание ресурсов системы, таких как CPU, память, дисковое пространство и сетевое использование.
2️⃣Мониторинг доступности: Проверка того, доступны ли системы и сервисы для использования.
3️⃣Мониторинг сети: Анализ трафика и производительности сети для выявления узких мест или атак.
4️⃣Мониторинг безопасности: Отслеживание необычных или подозрительных активностей, которые могут указывать на безопасностные инциденты.
5️⃣Мониторинг приложений: Сбор метрик и логов приложений для анализа их работы и оптимизации.

Инструменты мониторинга
Позволяют решать различные задачи в зависимости от нужд организации:

1️⃣Nagios: Классическое решение для мониторинга сетей, серверов и приложений. Предлагает глубокие возможности настройки и широкую экосистему плагинов.
2️⃣Zabbix: Открытое программное обеспечение для мониторинга всех типов IT-компонентов, включая сети, серверы, виртуальные машины и облачные услуги.
3️⃣Prometheus: Сильный инструмент, часто используемый в контейнеризированных и оркестрированных средах, таких как Kubernetes. Особенно эффективен для мониторинга временных рядов.
4️⃣Grafana: Платформа для визуализации и аналитики, которая часто используется совместно с Prometheus для создания информативных дашбордов.
5️⃣Splunk: Премиум-решение для мониторинга и анализа больших данных. Особенно хорошо подходит для сбора и анализа логов.
6️⃣Elastic Stack (ELK): Набор из Elasticsearch, Logstash и Kibana, используемый для поиска, анализа и визуализации данных, особенно логов.
7️⃣Datadog: Облачный сервис, который предоставляет широкие возможности мониторинга и аналитики для больших и разнообразных IT-инфраструктур.

Выбор инструмента
Для мониторинга важно учитывать следующие аспекты:
Масштаб и разнообразие инфраструктуры: Некоторые инструменты лучше подходят для больших, распределённых сетей, в то время как другие оптимизированы для меньших сред.
Сложность и настройка: Некоторые системы требуют глубоких знаний и подробной настройки, другие предлагают больше готовых решений.
Цена: Решения могут быть как полностью бесплатными (открытый исходный код), так и предлагать сложные платные модели подписки.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🔥9👍2
Что такое pod ?
Спросят с вероятностью 26%

под (Pod) — это наименьшая и базовая единица развертывания, которая создается и управляется на платформе. Под представляет собой группу одного или нескольких контейнеров (таких как Docker контейнеры), которые разделяют хранилище, сетевые ресурсы, и спецификацию о том, как запускать контейнеры. Контейнеры в одном поде всегда размещаются вместе на одном рабочем узле (Node), запускаются в одном и том же сетевом пространстве, что означает, что они могут эффективно общаться друг с другом по локальной сети.

Особенности:

Совместное использование ресурсов: Контейнеры в одном поде могут делить между собой локальные диски и могут обращаться друг к другу через localhost. Это позволяет им взаимодействовать как отдельные процессы в одной системе.
Управление жизненным циклом: Является временной сущностью, что означает, что он создается и уничтожается в процессе работы приложений в рамках Kubernetes для поддержания желаемого состояния. Если под умирает, он не восстанавливается самостоятельно, за исключением случаев, когда он управляется контроллерами высшего уровня, такими как ReplicaSet или Deployment.
Атомарность: Рассматриваются как одна атомарная единица на платформе Kubernetes, что означает, что они создаются и удаляются целиком. Все контейнеры внутри пода запускаются вместе и останавливаются вместе.

Вот пример простого описания пода в YAML формате:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: myapp:1.0
ports:
- containerPort: 80


В этом примере определён под с одним контейнером, который использует образ myapp:1.0. Под также настраивает контейнер для прослушивания на порту 80.

Использование подов

Можно использовать для самых разных целей, от простых одноконтейнерных приложений до более сложных многоуровневых приложений, которые требуют тесного взаимодействия между контейнерами, например:

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

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
11👍4🔥4
Что такое Prometheus ?
Спросят с вероятностью 13%

Prometheus — это открытая система мониторинга и оповещения, созданная в основном для надежного мониторинга и анализа производительности в режиме реального времени. Она была разработана в компании SoundCloud в 2012 году и с тех пор стала частью Cloud Native Computing Foundation (CNCF), наряду с Kubernetes и другими инструментами.

Основные особенности:

1️⃣Модель данных: Хранит данные временных рядов в памяти и на локальном диске. Каждый временной ряд идентифицируется меткой (label), что позволяет управлять сложными данными очень гибко.

2️⃣Язык запросов: Имеет собственный мощный язык запросов, PromQL (Prometheus Query Language), который позволяет проводить детальный анализ временных рядов, например, вычислять средние значения, минимумы, максимумы и т.д.

3️⃣Ненадежные агенты сбора данных: Активно скребет (scrapes) метрики с настроенных HTTP эндпоинтов, которые экспортируют метрики. Это означает, что, даже если узел временно выходит из строя, другие узлы продолжат работу, не требуя централизованного узла сбора.

4️⃣Сервис открытия: Может динамически обнаруживать сервисы для мониторинга, используя интеграцию с системами обслуживания, такими как Kubernetes, AWS, Azure, Google Cloud и другие.

5️⃣Поддержка различных графических и табличных панелей: Хотя он имеет встроенную поддержку базового веб-интерфейса для визуализации данных, он также может интегрироваться с внешними системами визуализации, такими как Grafana, для создания более сложных и информативных дашбордов.

6️⃣Оповещения: Система Alertmanager в Prometheus управляет оповещениями, которые могут быть настроены для отправки уведомлений через различные каналы, включая email, Slack и другие.
global:
scrape_interval: 15s

scrape_configs:
- job_name: 'example-app'
static_configs:
- targets: ['localhost:9090']


В этом примере scrape_interval глобально устанавливает частоту сбора метрик для всех заданий, а job_name и targets конкретизируют, что Prometheus должен собирать метрики с локального приложения, доступного по адресу localhost:9090.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍12
Что такое неймспейс ?
Спросят с вероятностью 26%

неймспейс (namespace) — это механизм для изоляции группы ресурсов внутри одного кластера. Неймспейсы предоставляют область, в рамках которой ресурсы могут существовать, управляться и работать, не взаимодействуя с ресурсами других неймспейсов. Это позволяет разделять ресурсы между несколькими пользователями, проектами или командами в пределах одного кластера.

Основные функции:

1️⃣Организационная изоляция: Позволяют разделять кластер на логически изолированные разделы, что упрощает управление ресурсами, особенно в больших организациях, где множество команд могут работать независимо друг от друга.

2️⃣Квоты ресурсов: Администраторы кластера могут назначать квоты на использование ресурсов (например, CPU и память) для каждого неймспейса, тем самым контролируя, чтобы один проект или команда не использовали чрезмерное количество ресурсов.

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

Пример:

По умолчанию существуют несколько неймспейсов:


default: Для ресурсов, которые не были назначены в другой неймспейс.
kube-system: Для ресурсов, созданных самим Kubernetes и его компонентами.
kube-public: Общедоступный неймспейс, ресурсы которого видны всем пользователям.

Можно создать и использовать для разделения ресурсов в рамках различных сред или фаз разработки, например:

Development: Для разработки и тестирования изменений.
Staging: Для финальных тестов перед выпуском в продакцию.
Production: Для рабочих, продуктивных приложений.

Создание:

Можно с помощью YAML-файла или команды kubectl. Пример создания неймспейса с использованием kubectl:
kubectl create namespace my-namespace


Пример YAML-файла для создания неймспейса:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace


Этот файл можно применить с помощью команды:
kubectl apply -f my-namespace.yaml


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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍61
Какие есть виды сервисов Kubernetes ?
Спросят с вероятностью 13%

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

1️⃣ClusterIP
Это тип сервиса по умолчанию. Сервис этого типа делает доступным набор подов внутри кластера на определённом IP-адресе, который доступен только внутри кластера.
Использование: Идеален для внутренней связи между подами внутри кластера, например, для обеспечения взаимодействия между бэкендом и фронтендом.

2️⃣NodePort
Позволяет доступ к сервису с любого узла кластера по статическому порту (NodePort), который находится в определённом диапазоне (по умолчанию 30000-32767). Сервис NodePort автоматически создаёт сервис ClusterIP, к которому и привязывается.
Использование: Подходит для сценариев, когда нужен прямой доступ к сервисам из внешней среды, например, для отладки или когда нет возможности использовать более сложные механизмы (как LoadBalancer или Ingress).

3️⃣LoadBalancer
Сервис этого типа используется для автоматического проброса трафика с внешнего балансировщика нагрузки (предоставляемого облачным провайдером, например, AWS ELB, Google Cloud Load Balancer) к конкретному сервису внутри кластера.
Использование: Часто используется для распределения входящего интернет-трафика на приложения, работающие в кластере, предоставляя простой и эффективный способ публичного доступа к сервисам.

4️⃣ExternalName
Сервис этого типа создаёт простой алиас к внешнему домену (DNS) без проксирования трафика через внутреннюю инфраструктуру.
Использование: Это полезно для интеграции сервисов, которые управляются вне текущего кластера Kubernetes, например, для ссылки на базу данных или внешний API, который управляется не через Kubernetes.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
protocol: TCP
selector:
app: my-app


Этот пример создаёт LoadBalancer сервис, который направляет трафик с порта 80 на любом поде, который соответствует селектору app: my-app, на порт 8080 подов.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍121😁1
Что такое helm, helm charts ?
Спросят с вероятностью 26%

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

Основные компоненты

1️⃣Helm Client (CLI): Инструмент командной строки, который предоставляет пользователю интерфейс для взаимодействия с Helm chart'ами, управления ими и взаимодействия с Helm server (Tiller, до версии 3 Helm).

2️⃣Helm Charts: Это пакеты в Helm, которые содержат всю необходимую информацию для установки и управления Kubernetes приложением. Чарты могут включать описание ресурсов Kubernetes, таких как поды, сервисы, объемы и другие, а также файлы для конфигурации этих ресурсов.

3️⃣Chart Repository: Хранилище, где разработчики и пользователи могут делиться своими Helm charts. Это может быть общедоступное или частное хранилище. Популярные репозитории включают официальное хранилище Helm и частные репозитории на основе HTTP серверов, которые хранят индекс файлы и пакеты.

Что это такое?

Helm Chart — это пакет (похожий на .deb или .rpm пакеты в Linux), который содержит все необходимые инструкции и определения ресурсов для установки и управления Kubernetes приложениями. Chart организует свои файлы в специфическую структуру каталогов, которая включает:

Chart.yaml: Описание чарта с базовой информацией о пакете.
values.yaml: Файл с переменными, которые конфигурируют Kubernetes ресурсы.
templates/: Каталог, содержащий шаблоны ресурсов Kubernetes, которые генерируются в действительные манифесты Kubernetes с помощью переданных значений.
templates/NOTES.txt: Файл, который может быть отображен после установки чарта, содержащий дополнительную информацию о приложении.
charts/: Директория для вложенных чартов, которые используются как зависимости.
crds/: Для определений Custom Resource Definitions, которые должны быть установлены в кластере.

Для установки приложения с помощью Helm, пользователь может выполнить следующие шаги:

1️⃣Добавление репозитория (если это необходимо):
      helm repo add bitnami https://charts.bitnami.com/bitnami


2️⃣Обновление списка чартов для получения последних версий:
      helm repo update


3️⃣Установка чарта:
      helm install my-release bitnami/nginx


Эта команда установит nginx, используя чарт из репозитория Bitnami под именем "my-release" в вашем Kubernetes кластере.

Helm и Helm Charts предоставляют мощный, гибкий и удобный способ управления приложениями, позволяя разработчикам и администраторам оптимизировать и автоматизировать процессы развертывания и управления. Helm упрощает управление сложными зависимостями и конфигурациями, делая Kubernetes более доступным для пользователей различного уровня.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍13🔥21
Какие есть экспортеры в Prometheus ?
Спросят с вероятностью 13%

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

Некоторые популярные экспортеры:

1️⃣Node Exporter:
Использование: Собирает информацию о работе операционной системы и аппаратном обеспечении, включая CPU, память, дисковое пространство, I/O, сетевые статистики и множество других метрик системного уровня.

2️⃣cAdvisor (Container Advisor):
Использование: Предоставляет информацию о производительности и использовании ресурсов контейнеров, запущенных на хосте.

3️⃣Blackbox Exporter:
Использование: Позволяет проводить мониторинг сетевых услуг без доступа к их внутреннему состоянию, исполняя проверки через внешние запросы (например, HTTP, HTTPS, DNS, TCP и ICMP).

4️⃣MySQL Exporter:
Использование: Собирает метрики из MySQL сервера, включая статистику производительности, использование ресурсов, состояние сервера и многое другое.

5️⃣Kube State Metrics:
Использование: Предназначен для генерации метрик из объектов Kubernetes API, таких как деплойменты, поды, сервисы и т.д.

6️⃣Apache Exporter:
Использование: Извлекает статистику из сервера Apache, включая количество запросов в секунду, количество активных соединений, общее количество обработанных запросов и многое другое.

7️⃣PostgreSQL Exporter:
Использование: Собирает метрики из баз данных PostgreSQL, предоставляя информацию о производительности запросов, использовании ресурсов, состоянии репликации и других аспектах работы базы данных.

8️⃣Redis Exporter:
Использование: Экспортирует метрики из Redis, включая использование памяти, статистику команд, состояние репликации и многое другое.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
🔥9👍3
Как должен выглядеть идеальный pipeline CI/CD, что в нём должно быть, что за чем идти ?
Спросят с вероятностью 46%

Идеальный pipeline CI/CD (непрерывная интеграция и непрерывная доставка) должен обеспечивать автоматизацию процессов сборки, тестирования и развертывания приложений с целью ускорения и оптимизации процесса разработки и обеспечения более высокого качества итогового продукта. Вот шаги, которые должны быть включены в идеальный pipeline:

1️⃣Исходный код и контроль версий: Все начинается с системы контроля версий, такой как Git, где разработчики сливают свой код в репозиторий.

2️⃣Автоматическое тестирование изменений кода: Как только код отправлен в репозиторий, CI система автоматически запускает сборку и прогоняет различные тесты (юнит-тесты, интеграционные тесты, тесты безопасности и другие).
      # Пример скрипта для запуска тестов
npm install
npm test


3️⃣Сборка: Если тесты прошли успешно, происходит сборка приложения. Это может включать компиляцию кода, минификацию ассетов, сборку контейнера (Docker).
      # Пример команды сборки Docker-образа
docker build -t my-application .


4️⃣Ручное одобрение: После сборки и перед деплоем на продуктив могут потребоваться ручные проверки, чтобы гарантировать, что все изменения соответствуют требованиям безопасности и бизнес-логики.

5️⃣Развертывание: Автоматическое развертывание в тестовую среду для дополнительного тестирования и валидации, а затем в продуктивную среду. Может использоваться стратегия поэтапного развертывания, канареечное развертывание или синее-зеленое развертывание.
      # Пример скрипта для развертывания
kubectl apply -f deployment.yaml


6️⃣Мониторинг и оповещение: После развертывания важно мониторить работу приложения и получать уведомления о проблемах. Использование таких систем, как Prometheus, Grafana, и alerting систем типа Alertmanager.

7️⃣Откаты: В случае обнаружения ошибок после деплоя важно быстро откатиться к предыдущей версии. Это должно быть также автоматизировано.

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

Идеальный pipeline CI/CD автоматически тестирует, собирает и разворачивает код в продуктив, обеспечивая быструю и безопасную доставку изменений. Это как магический конвейер, который берет код, делает из него работающее приложение и ставит его там, где люди могут его использовать, обеспечивая при этом качество и стабильность.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍24
🤔 Какой инструмент используется для автоматизации развертывания, управления и масштабирования приложений в контейнерах?
Anonymous Quiz
15%
Jenkins
79%
Kubernetes
3%
Git
4%
Puppet
Предположим в компании gitlab CI, а инфраструктура в kubernetes как деплоить приложения ?
Спросят с вероятностью 13%

Для развертывания приложений с использованием GitLab CI/CD, вам нужно настроить несколько компонентов, чтобы автоматизировать процесс. Вот основные шаги для создания эффективного пайплайна CI/CD, который интегрируется с Kubernetes:

Шаг 1: Подготовка Kubernetes кластера

1️⃣Настройте кластер, если он ещё не настроен. Вы можете использовать любую облачную платформу как GCP, AWS, Azure или локальную установку.
2️⃣Настройте роли и разрешения в Kubernetes с помощью Role-Based Access Control (RBAC), чтобы обеспечить GitLab CI доступ к вашему кластеру.

Шаг 2: Настройка GitLab CI/CD

1️⃣Создайте репозиторий в GitLab для вашего приложения, если он ещё не создан.
2️⃣Добавьте файл `.gitlab-ci.yml` в корень вашего репозитория. Этот файл будет содержать конфигурацию пайплайна CI/CD.

Шаг 3: Интеграция с Kubernetes

1️⃣Добавьте учетные данные Kubernetes в GitLab:
В GitLab перейдите в "Settings > CI / CD" и добавьте переменные среды, такие как KUBE_URL (URL вашего кластера Kubernetes), KUBE_TOKEN (токен для аутентификации), KUBE_NAMESPACE (пространство имен, если не используется пространство имен по умолчанию).
Эти переменные будут использоваться пайплайном для взаимодействия с вашим кластером Kubernetes.

2️⃣Настройте Service Account в Kubernetes для GitLab CI с правами достаточными для развертывания приложений и управления ресурсами в указанном namespace.

Шаг 4: Определение пайплайна CI/CD

В файле .gitlab-ci.yml, определите стадии пайплайна, такие как:

Build: Собирает ваш Docker образ.
Test: Выполняет тесты.
Deploy: Развертывает приложение в Kubernetes.
stages:
- build
- test
- deploy

build:
stage: build
script:
- docker build -t my-image:$CI_COMMIT_REF_SLUG .
- docker push my-image:$CI_COMMIT_REF_SLUG

test:
stage: test
script:
- echo "Run tests here"

deploy:
stage: deploy
script:
- kubectl apply -f deployment.yaml
environment:
name: production
only:
- master


В этом примере:
Build собирает Docker образ и отправляет его в репозиторий.
Test выполняет команды тестирования (здесь просто эхо-команда для примера).
Deploy использует kubectl для развертывания приложения в Kubernetes. deployment.yaml должен быть подготовлен и находиться в репозитории.

Шаг 5: Управление секретами

Используйте GitLab Variables или Kubernetes Secrets для управления конфиденциальной информацией, такой как пароли или API ключи.

Шаг 6: Тестирование и развертывание

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

Эти шаги обеспечивают базовую настройку для автоматизации развертывания приложений в Kubernetes с использованием GitLab CI/CD. Вы можете адаптировать и дополнить этот процесс в соответствии с конкретными требованиями вашего проекта.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍18
Когда используется UDP ?
Спросят с вероятностью 13%

Протокол UDP (User Datagram Protocol) — это один из основных транспортных протоколов, используемых в сетях, работающих на основе протокола IP. Является протоколом без установления соединения, что означает, что данные передаются без предварительной проверки доступности получателя и без подтверждения получения данных. Это делает его отличным выбором для определённых видов сетевых приложений и услуг.

Преимущества:

1️⃣Быстрота: Отсутствие необходимости установления соединения и отсутствие механизмов подтверждения получения делают его более быстрым по сравнению с TCP.
2️⃣Эффективность: Низкая нагрузка на протокол благодаря минимальным заголовкам и отсутствию контроля состояния соединения.
3️⃣Поддержка многопоточной передачи: Поддерживает одновременную передачу данных множеству получателей (мультикастинг и броадкастинг).

Сценарии использования:

1️⃣Видео- и аудиостриминг: Приложения для стриминга мультимедиа, такие как IPTV или онлайн-радио, часто используют UDP, поскольку он позволяет быстро передавать потоковые данные, а некоторая потеря данных (например, несколько кадров видео или мгновения аудио) обычно не сильно сказывается на качестве восприятия.
2️⃣Онлайн-игры: Для онлайн-игр критически важны скорость и минимальная задержка, что делает UDP предпочтительным выбором. Игры обычно спроектированы так, чтобы могли корректировать небольшие потери данных или обновлять игровое состояние в следующем пакете.
3️⃣VoIP (Голосовая связь по IP): Приложения, такие как Skype или Zoom, могут использовать UDP для передачи голоса в реальном времени. Потеря небольшого количества пакетов данных может быть менее заметна, чем задержки, вызванные попытками их восстановления.
4️⃣DNS-запросы: Протокол определения доменных имен (DNS) обычно использует UDP для запросов из-за их малого размера, что обеспечивает быстроту и эффективность в выполнении большого числа небольших запросов.
5️⃣DHCP (Dynamic Host Configuration Protocol): Протокол для автоматической настройки IP-адресов на клиентских устройствах также использует UDP.

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

UDP используется, когда скорость передачи данных и маленькая задержка являются более важными, чем надежность доставки. Это делает его идеальным для видеостриминга, онлайн-игр, VoIP и других приложений, где некоторые потери данных приемлемы.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍17🔥1
Что такое entrypoint \ cmd ?
Спросят с вероятностью 20%

ENTRYPOINT и CMD — это две инструкции, которые определяют команду и параметры, исполняемые при запуске контейнера. Они похожи, но служат немного разным целям и взаимодействуют между собой определенным образом.

ENTRYPOINT

Определяет исполняемый файл, который будет запущен при старте контейнера. Он фактически устанавливает постоянную базовую команду, к которой затем можно добавить дополнительные аргументы при запуске контейнера. Это можно использовать, например, чтобы сделать контейнер ведущим себя как исполняемый файл.
# Используется официальный образ Python
FROM python:3.8

# Устанавливаем рабочий каталог
WORKDIR /app

# Копируем исходный код в контейнер
COPY . /app

# Устанавливаем зависимости
RUN pip install -r requirements.txt

# Устанавливаем entrypoint
ENTRYPOINT ["python", "app.py"]


В этом примере, он устанавливает команду python app.py как команду, которая будет выполнена при запуске контейнера.

CMD

Предоставляет аргументы по умолчанию для ENTRYPOINT. Если ENTRYPOINT не указан, то он также может быть использован для указания исполняемой команды. Однако, если ENTRYPOINT указан, CMD предоставляет дополнительные аргументы к этой команде.
# Используется официальный образ Python
FROM python:3.8

# Устанавливаем рабочий каталог
WORKDIR /app

# Копируем исходный код в контейнер
COPY . /app

# Устанавливаем зависимости
RUN pip install -r requirements.txt

# Устанавливаем entrypoint и cmd
ENTRYPOINT ["python"]
CMD ["app.py"]


В этом случае ENTRYPOINT устанавливает команду python, а CMD предоставляет файл app.py как аргумент по умолчанию. Если при запуске контейнера указать другие аргументы, например docker run myimage hello.py, то CMD будет перезаписан, и вместо app.py будет выполнен hello.py.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍172
Сколько мастеров в kubernetes должно быть и почему ?
Спросят с вероятностью 13%

Число мастер-узлов зависит от требований к доступности и отказоустойчивости вашего приложения или сервиса. Управляют состоянием кластера, распределяют работу между рабочими узлами (worker nodes) и синхронизируют различные конфигурации. Важно правильно спланировать архитектуру мастер-узлов, чтобы обеспечить стабильную и надежную работу кластера.

Конфигурация:

1️⃣Одиночный мастер-узел: Простейшая конфигурация кластера с одним мастер-узлом подходит для разработки, тестирования или маленьких проектов, где высокая доступность не является критической. Однако, такой кластер уязвим к сбоям, поскольку отказ единственного мастера может привести к полной недоступности кластера.

2️⃣Множество мастер-узлов: Для производственных сред, где требуется высокая доступность, рекомендуется использовать несколько мастер-узлов. На практике часто используют конфигурацию с тремя мастер-узлами, которая обеспечивает баланс между стоимостью, сложностью управления и отказоустойчивостью.

Почему три мастер-узла?

1️⃣Отказоустойчивость: Использование трех мастер-узлов позволяет переносить нагрузку с одного узла на другой в случае его сбоя, что существенно повышает надежность кластера. При отказе одного узла, два других могут продолжить работу, не допуская простоя системы.

2️⃣Распределение нагрузки: Несколько мастер-узлов позволяют распределять запросы API, задачи управления и другие операции между узлами, что улучшает производительность и масштабируемость кластера.

3️⃣Толерантность к разделению сети (Split-brain): В случае сетевых проблем, которые могут вызвать "разделение мозга" (split-brain), где часть узлов теряет связь с другой частью, наличие нечетного числа узлов с использованием алгоритма консенсуса (например, etcd использует RAFT) помогает правильно определить, какая группа узлов должна продолжать работу, предотвращая неконсистентность данных.

4️⃣Минимизация издержек: Хотя можно использовать и больше мастер-узлов для дополнительной отказоустойчивости, три узла часто являются оптимальным выбором, учитывая затраты на инфраструктуру и управление.

Принятие решения

Выбор числа мастер-узлов зависит от множества факторов, включая бюджет, требования к SLA (Service Level Agreement), и технические возможности поддерживать и управлять расширенной инфраструктурой. Для малых или не критичных сред может подойти один мастер-узел, тогда как для крупных, критически важных систем, где требуется высокая доступность и надежность, рекомендуется использовать три и более мастер-узлов.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍9
Что такое Kubernetes ?
Спросят с вероятностью 20%

Kubernetes (часто сокращенно K8s) — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Эта система была разработана и запущена инженерами Google на основе их опыта работы с системой Borg и предоставлена сообществу как проект с открытым исходным кодом. Сейчас Kubernetes поддерживается Cloud Native Computing Foundation (CNCF).

Основные концепции и компоненты:

1️⃣Поды (Pods): Минимальная и базовая единица развертывания в Kubernetes. Каждый под представляет собой один или несколько контейнеров, которые разделяют хранилище, сетевой стек, и другие ресурсы.

2️⃣Сервисы (Services): Абстракция, которая определяет логический набор подов и политику доступа к ним. Сервисы позволяют подам быть доступными снаружи или внутри кластера.

3️⃣Деплойменты (Deployments): Управляют развертыванием подов. Они позволяют обеспечить декларативное обновление приложений, а также позволяют масштабировать, откатывать и обновлять состояние подов.

4️⃣ConfigMaps и Secrets: Предоставляют способ хранения конфигурационных данных и секретов (например, паролей и ключей), которые могут быть использованы подами без внедрения их непосредственно в образ контейнера.

5️⃣Ингресс (Ingress): Управляет доступом к сервисам в кластере извне, предоставляя правила маршрутизации трафика.

Зачем он нужен?

1️⃣Масштабируемость: Позволяет автоматически масштабировать количество подов в зависимости от нагрузки.

2️⃣Управление ресурсами: Контролирует и автоматически распределяет вычислительные ресурсы между подами в кластере.

3️⃣Самовосстановление: Автоматически перезапускает контейнеры, которые завершили работу неудачей, заменяет и пересоздает поды, которые не отвечают на проверки состояния.

4️⃣Обновление и откаты: Позволяет обновлять приложения с минимальными простоями и откатывать изменения, если что-то идет не так.

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

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍121
🤔 Какой инструмент не используется для CI/CD?
Anonymous Quiz
10%
Jenkins
14%
GitLab
70%
Nagios
6%
Travis CI
Для какого приложения использовать StatefulSet(а не Deployment) и почему ?
Спросят с вероятностью 13%

StatefulSet идеально подходит для приложений, которым необходимо поддерживать стабильное состояние или уникальные идентификаторы подов. Это отличает StatefulSet от Deployment, который лучше подходит для управления stateless (безсостоянийми) приложениями. Важность его использования проявляется в случаях, когда приложения или сервисы требуют одного или нескольких из следующих условий:

1️⃣Постоянное хранилище данных
Гарантирует, что каждому поду может быть постоянно присвоен том хранения данных (Persistent Volume). Это означает, что даже если под перезапускается или перемещается на другой узел, его данные сохранятся и будут доступны под тем же самым подключением. Это критически важно для приложений, таких как:

Базы данных: такие как MySQL, PostgreSQL, MongoDB, где каждый экземпляр должен сохранять свои данные независимо и гарантированно переносить их при рестарте или перепланировании.
Хранилища данных: системы, такие как Elasticsearch или Cassandra, которые также зависят от постоянства данных для обеспечения целостности и производительности.

2️⃣Стабильные идентификаторы сети
Каждый под получает уникальный и стабильный сетевой идентификатор. Это позволяет подам легко обнаруживать друг друга и эффективно взаимодействовать в рамках кластера. Такая особенность необходима для:

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

3️⃣Порядок запуска и остановки
Обеспечивает упорядоченный и предсказуемый порядок развертывания и масштабирования подов. Это особенно важно для:

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

Почему не Deployment?

Не предоставляет механизмы для управления состоянием или уникальными хранилищами данных. Поды, управляемые через Deployment, могут быть заменены любым другим подом без сохранения каких-либо связей с использованными ранее хранилищами данных или сетевыми идентификаторами. Это делает Deployment идеальным для stateless приложений, где каждый под взаимозаменяем и не зависит от своего предыдущего состояния.

Использование StatefulSet вместо Deployment рекомендуется для приложений, требующих постоянства, стабильности и порядка в управлении своим состоянием и данными. Для безсостоянийных приложений, которые не хранят данные пользователя или внутреннее состояние между сессиями, предпочтительнее использовать Deployment.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
1👍1
Где лучше всего хранить state ?
Спросят с вероятностью 20%

Вопрос о хранении состояния (state) приложений в архитектуре, особенно в масштабируемых и распределённых системах, является ключевым. В зависимости от требований к системе, архитектуры приложения и предпочтений разработчиков, состояние может храниться в различных местах. Рассмотрим несколько подходов и мест для хранения:

1️⃣Внешние системы хранения данных

Базы данных: Реляционные (SQL) и нереляционные (NoSQL) базы данных часто используются для хранения состояния. Это обеспечивает постоянство, масштабируемость и доступность данных.
Примеры: PostgreSQL, MySQL, MongoDB, Cassandra.

Ключ-значение хранилища: Эти системы предоставляют быстрый доступ к данным и удобны для хранения сессий, кэшей и легковесных структур данных.
Примеры: Redis, Memcached.

2️⃣Облачные хранилища

Managed services: Облачные провайдеры предлагают управляемые базы данных и хранилища, которые упрощают масштабирование, бэкап и управление.
Примеры: Amazon RDS, Google Cloud SQL, Azure SQL Database, Amazon DynamoDB, Google Bigtable.

Объектные хранилища: Используются для хранения больших объёмов неструктурированных данных. Подходят для хранения файлов, медиа и бэкапов.
Примеры: Amazon S3, Google Cloud Storage, Azure Blob Storage.

3️⃣Локальное хранилище в составе контейнеров

Тома (Volumes): Тома используются для хранения данных, необходимых для работы контейнеров. Это может быть полезно для временного хранения или когда данные должны сохраняться между перезапусками контейнеров.
Примеры: Персистентные тома Kubernetes, Docker volumes.

4️⃣Клиентское хранилище

Web Local Storage, Cookies, SessionStorage: Эти технологии подходят для хранения пользовательских настроек, токенов сессии и небольших фрагментов данных непосредственно на стороне клиента.

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

Отказоустойчивость: Использование репликации и бэкапов.
Безопасность: Шифрование данных в покое и передаче.
Соответствие законодательству: Соблюдение GDPR и других норм о защите данных.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍82
Что такое StatefulSet ?
Спросят с вероятностью 13%

StatefulSet — это контроллер API, предназначенный для управления и обеспечения упорядоченного развертывания и масштабирования набора подов, а также для гарантии порядка и уникальности этих подов. В отличие от Deployment и ReplicaSet, которые предназначены для управления безсостоянием (stateless) приложениями, StatefulSet используется для работы с состоянием (stateful) приложениями.

Основные особенности:

1️⃣Стабильное и уникальное сетевое имя: Каждый под имеет стабильный идентификатор, который сохраняется независимо от пересоздания подов. Эти идентификаторы строятся на базе общего имени и индекса (например, myapp-0, myapp-1).

2️⃣Стабильное хранилище: Может использовать постоянные тома (Persistent Volumes), которые могут быть повторно присоединены к поду в случае его перезапуска. Постоянные тома привязываются к подам на основе их уникальных индексов.

3️⃣Упорядоченное развертывание и масштабирование: Поды создаются и удаляются строго в порядке их индексации. Например, под с индексом n будет создан только после успешного создания пода с индексом n-1.

4️⃣Упорядоченное и грациозное удаление: Поды удаляются и заменяются в обратном порядке к их индексам. Kubernetes дожидается грациозного завершения подов перед их удалением, что важно для поддержания консистентности данных.

StatefulSet часто используются для развертывания систем баз данных, кэшей, хранилищ и любых других приложений, где важны порядок и устойчивость данных. Например, для запуска репликации базы данных PostgreSQL в Kubernetes можно использовать StatefulSet для обеспечения, что каждый экземпляр базы данных будет иметь своё собственное устойчивое хранилище и уникальный сетевой адрес.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
name: web
volumeClaimTemplates:
- metadata:
name: nginx-storage
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "my-storage-class"
resources:
requests:
storage: 1Gi


В этом примере:
volumeClaimTemplates используется для автоматического создания постоянного хранилища для каждого пода.
replicas указывает на количество подов, которые нужно управлять.

StatefulSet является важным инструментом для управления stateful приложениями, обеспечивая необходимую инфраструктуру для поддержания порядка, уникальности и стабильности хранилища, что критически важно для приложений, требующих сохранения состояния.

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍41👾1
Отличия виртуальной машины от контейнеров ?
Спросят с вероятностью 20%

Виртуальные машины (ВМ) и контейнеры — это два разных подхода к виртуализации, которые служат для изоляции и управления ресурсами в ИТ-инфраструктурах. Каждый из этих подходов имеет свои преимущества и особенности.

Виртуальные машины (ВМ)

Эмулируют полноценные аппаратные средства, что позволяет запускать полноценные операционные системы поверх хостовой ОС. Каждая ВМ включает в себя не только приложения и необходимые библиотеки, но и полностью изолированную гостевую операционную систему.

Преимущества ВМ:
Полная изоляция: каждая ВМ полностью изолирована от других и от хоста.
Безопасность: благодаря полной изоляции, ВМ обеспечивают высокий уровень безопасности.
Совместимость: ВМ могут запускать любую ОС, которая поддерживается аппаратной платформой.

Недостатки ВМ:
Ресурсоемкость: каждая ВМ требует значительного объема ресурсов, включая процессор, память и хранилище, поскольку каждая имитирует полноценную систему.
Медлительность: запуск ВМ может занимать значительное время.

Контейнеры

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

Преимущества контейнеров:
Легковесность: контейнеры требуют меньше ресурсов, так как не включают гостевую ОС.
Быстрый старт и остановка: контейнеры запускаются и останавливаются за секунды.
Эффективность: позволяют эффективнее использовать ресурсы системы и упрощают процессы CI/CD.

Недостатки контейнеров:
Ограниченная изоляция: контейнеры менее изолированы по сравнению с ВМ, что может снижать безопасность.
Зависимость от ОС хоста: все контейнеры должны использовать ту же операционную систему, что и хост.

Сравнение:

1️⃣Изоляция: Предоставляют более строгую изоляцию на уровне аппаратного обеспечения, тогда как контейнеры изолируют только на уровне ОС.
2️⃣Производительность: Контейнеры более эффективны и быстрее, так как не требуют дополнительных ресурсов на виртуализацию целой ОС.
3️⃣Универсальность: Могут запускать разные операционные системы на одном хосте, контейнеры же ограничены ОС хоста.
4️⃣Управление и масштабирование: Управление контейнерами и их масштабирование проще и эффективнее, что делает их идеальными для микросервисов и облачных приложений.

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

👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент

🔐 База собесов | 🔐 База тестовых
👍141