и посмотреть медиа
DevOps - вопросы собесов
и посмотреть медиа
Собесы DevOps.
AI бот для озвучки текста и клонирования голоса в Telegram. Создавай аудио с помощью нейросети быстро и просто.
Вопросы для собеседований по DevOps.
🤔 Что слышали про rancher kubernetes? Это платформа для управления Kubernetes-кластерами. Она позволяет развертывать, настраивать, мониторить и управлять несколькими кластерами Kubernetes из единой панели управления. Rancher упрощает работу с Kubernetes, предоставляя удобный UI, API и инструменты автоматизации. 🚩Зачем нужен Rancher? 🟠Управление несколькими кластерами Rancher позволяет управлять кластерами Kubernetes, развернутыми в различных облаках (AWS, GCP, Azure) и на локальной инфраструктуре. 🟠Упрощенная установка и настройка С помощью Rancher можно быстро развернуть Kubernetes-кластеры с минимальными усилиями. 🟠Безопасность и контроль доступа Поддерживает аутентификацию через LDAP, Active Directory, GitHub и другие методы. 🟠Мониторинг и логирование Встроенная поддержка Prometheus, Grafana и Fluentd для мониторинга и логов. 🟠Развертывание приложений Поддерживает Helm-чарты и стандартные манифесты Kubernetes. 🚩Как работает Rancher? 🟠Rancher Server центральный компонент, управляющий кластерами и предоставляющий UI/API. 🟠Kubernetes-кластеры могут быть развернуты с помощью Rancher (RKE, RKE2) или добавлены вручную (например, EKS, AKS, GKE). 🟠Rancher Agents агенты, установленные в кластерах для обеспечения связи с сервером Rancher. 🚩Пример развертывания Rancher Для развертывания Rancher можно использовать Docker docker run -d --name=rancher --restart=unless-stopped \ -p 80:80 -p 443:443 \ rancher/rancher:latest Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое брокеры сообщений? Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers). 🚩Основные функции брокеров сообщений 🟠Прием и маршрутизация сообщений Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys). 🟠Асинхронное взаимодействие Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы. 🟠Очереди сообщений Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено. 🟠Гарантированная доставка Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери. 🟠Распределение нагрузки Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними. 🟠Фильтрация и маршрутизация Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации. 🚩Примеры использования брокеров сообщений 🟠Микросервисы Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми. 🟠Логирование и мониторинг Сбор логов и метрик от множества источников с их дальнейшей обработкой. 🟠Управление задачами Постановка задач в очередь для выполнения одним или несколькими воркерами. 🟠Интеграция систем Связывание разнородных систем, которые обмениваются данными. 🚩Примеры брокеров сообщений 🟠RabbitMQ Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации. 🟠Apache Kafka Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени. 🟠Redis (Pub/Sub) Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния. 🟠ActiveMQ Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями. 🟠NATS Легковесный и быстрый брокер для приложений, требующих низкой задержки. 🚩Как работают брокеры сообщений Producers (отправители) отправляют сообщение в брокер. Брокер размещает сообщение в соответствующей очереди или теме. Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди. 🚩Пример использования RabbitMQ 1⃣Отправитель публикует сообщение в очередь: import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') connection.close() 2⃣Получатель забирает сообщение из очереди: import pika connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel() channel.queue_declare(queue='hello') def callback(ch, method, properties, body): print(f"Received {body}") channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True) channel.start_consuming() 🚩Плюсы использования ➕Разделение ответственности Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных. ➕Масштабируемость Легко добавлять новых потребителей или отправителей. ➕Устойчивость к сбоям Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен. ➕Гибкость Возможность использовать различные стратегии маршрутизации и обработки данных. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Какая есть защита на ветках, чтобы не запушили что-то не то? Используют protected branches. В GitLab можно запретить push в main, разрешить только через merge request с код-ревью, включить required approvals, проверку пайплайнов и запретить force-push. Это повышает стабильность и безопасность. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 При попытке создания файла на диске на linux ошибка что места нет проверяете место есть с чем это может быть связано Если при создании файла в Linux появляется ошибка, что места нет, но df -h показывает свободное место, проблема может быть в следующем: 🚩Закончились inodes Inodes – это структуры, которые хранят метаданные о файлах. Даже если есть свободное место, но inodes кончились, новые файлы создать нельзя. df -i Найти каталоги с множеством маленьких файлов: find /path -xdev -type f | wc -l # Количество файлов в каталоге 🚩Ограничение дискового квотирования (quota) В системе могут быть настроены дисковые квоты, которые ограничивают использование диска для пользователя или группы. quota -v 🚩Заполнен раздел `/var`, `/tmp` или `/home` В системе может быть несколько дисковых разделов (/, /var, /home и т. д.). Если один из них заполнен, в него нельзя записывать файлы. df -hT 🚩Файловая система смонтирована в режиме `read-only` Если файловая система перешла в режим «только для чтения» (read-only) из-за ошибки или сбоя, запись на неё невозможна. mount | grep ' ro,' Если файловая система смонтирована с `ro`, значит, запись запрещена. Перемонтировать диск: mount -o remount,rw /path Проверить диск на ошибки: dmesg | tail -20 # Лог ошибок fsck /dev/sdX # Проверка диска Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Что такое debezium? Она позволяет отслеживать изменения в базах данных (INSERT, UPDATE, DELETE) в реальном времени и передавать их в Kafka, Elasticsearch, MongoDB и другие системы. 🚩Как работает Debezium? Подключается к базе данных (PostgreSQL, MySQL, MongoDB, Oracle и др.). Слушает лог изменений (binlog, WAL, oplog и т. д.) Формирует события в формате JSON Передаёт их в Kafka или другую шину данных. 🚩Где используется? Синхронизация данных между базами Репликация данных в реальном времени Отправка изменений в аналитические системы (Elasticsearch, ClickHouse) Аудит и логирование изменений 🟠Пример работы с Kafka Запускаем Debezium Connector для PostgreSQL* { "name": "inventory-connector", "config": { "connector.class": "io.debezium.connector.postgresql.PostgresConnector", "database.hostname": "localhost", "database.port": "5432", "database.user": "debezium", "database.password": "dbz", "database.dbname": "inventory", "database.server.name": "dbserver1" } } При изменении данных в таблице, Kafka получит событие: { "schema": { ... }, "payload": { "before": { "id": 1, "name": "Old Name" }, "after": { "id": 1, "name": "New Name" }, "op": "u" // Update } } Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Может ли быть несколько контейнеров в поде? Да, в Kubernetes Pod можно запускать несколько контейнеров, и это обычная практика. Pod — это минимальная единица развертывания в Kubernetes которая может содержать один или несколько контейнеров. 🚩Зачем запускать несколько контейнеров в одном Pod? 🟠Sidecar-контейнеры вспомогательные контейнеры, дополняющие основное приложение (логирование, прокси, безопасность). 🟠Init-контейнеры выполняют задачи перед запуском основного контейнера (например, подготовка базы данных). 🟠Общий файловый кэш контейнеры могут использовать общие тома (volumes) для хранения данных. 🟠Общий сетевой стек контейнеры в одном Pod разделяют IP-адрес и порты. 🚩Пример: два контейнера в одном Pod (Nginx + логирование) Допустим, у нас есть Nginx и отдельный контейнер, который собирает его логи. yaml apiVersion: v1 kind: Pod metadata: name: nginx-pod spec: containers: - name: nginx image: nginx volumeMounts: - name: log-volume mountPath: /var/log/nginx - name: log-collector image: busybox command: ["sh", "-c", "tail -f /var/log/nginx/access.log"] volumeMounts: - name: log-volume mountPath: /var/log/nginx volumes: - name: log-volume emptyDir: {} 🚩Как работают контейнеры внутри Pod? Все контейнеры внутри Pod имеют один IP-адрес и могут взаимодействовать через localhost. Например, если в одном контейнере работает Node.js на порту 3000, другой контейнер внутри Pod может обращаться к нему через localhost:3000. Контейнеры могут делиться файлами через volumes, как в примере выше. Если нужно выполнить команду перед запуском основного контейнера, используют initContainers. yaml apiVersion: v1 kind: Pod metadata: name: app-pod spec: initContainers: - name: wait-for-db image: busybox command: ["sh", "-c", "until nc -z db-service 5432; do sleep 1; done"] containers: - name: app image: my-app Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Поды висят в pending, в чем проблема? Pod в Pending означает, что он не может быть запущен, потому что Kubernetes не может его назначить (schedule) на ноду. Нет свободных ресурсов на нодах (CPU, RAM) Неподходящие nodeSelector, affinity или taints Нет доступных узлов (все NotReady) Проблемы с PersistentVolume (PVC не привязан) Ошибки в CNI (сеть Kubernetes) 🚩Проверяем статус подов (`kubectl get pods`) Команда kubectl get pods -A 🚩Нет свободных ресурсов на нодах Команда: kubectl describe pod my-app-1 🚩Проблема с `nodeSelector`, `affinity`, `taints` Если под настроен только на определенные ноды, он может не найти подходящую. kubectl describe pod my-app-1 Вывод: 0/3 nodes are available: 3 node(s) didn't match pod affinity/selector. 🚩Все ноды в состоянии `NotReady` Проверяем статус нод kubectl get nodes Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как мы можем поменять последовательное выполнение таски плейбука на машинах в параллельное? По умолчанию Ansible выполняет задачи последовательно, но можно ускорить выполнение с помощью параметра forks или асинхронных задач (async). 🚩Увеличение параллельных подключений (`forks`) forks – это количество серверов, на которых Ansible выполняет задачи одновременно. ansible-playbook -i inventory.ini playbook.yml --forks=10 Установить forks в ansible.cfg: [defaults] forks = 10 🚩Асинхронное выполнение (`async` + `poll`) Если задача выполняется долго, ее можно запустить асинхронно и не ждать завершения. Пример асинхронного выполнения установки пакета - name: Установить nginx параллельно apt: name: nginx state: present async: 300 poll: 0 async: 300 – запускает задачу и дает ей 300 секунд на выполнение poll: 0 – не ждет завершения, сразу переходит к следующей Проверить статус запущенных задач: ansible all -m async_status -a "jid=1234567890" -i inventory.ini 🚩Использование `&` в Shell-командах (`shell` + `nohup`) Пример запуска задачи в фоновом режиме - name: Запустить долгий процесс shell: "nohup long_script.sh &" Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиа🤔 Как в линуксе посмотреть список дескрипторов файлов? В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы /proc, которая содержит информацию о процессах, включая их открытые файловые дескрипторы. 🚩Основные способы 🟠Команда `ls` в каталоге `/proc/[PID]/fd` Каждый процесс в Linux имеет свой подкаталог в /proc с идентификатором процесса (PID). В подкаталоге fd хранятся ссылки на открытые дескрипторы файлов. ls -l /proc/$(pidof )/fd Вывод lrwx------ 1 user user 64 Dec 23 12:00 0 -> /dev/pts/0 lrwx------ 1 user user 64 Dec 23 12:00 1 -> /dev/pts/0 lrwx------ 1 user user 64 Dec 23 12:00 2 -> /dev/pts/0 🟠Использование `lsof` Команда lsof (list open files) отображает список всех открытых файлов в системе. lsof -p Пример для всех процессов lsof Вывод COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME bash 1234 user cwd DIR 8,1 4096 256 /home/user bash 1234 user rtd DIR 8,1 4096 2 / bash 1234 user 0u CHR 136,0 0 3 /dev/pts/0 bash 1234 user 1u CHR 136,0 0 3 /dev/pts/0 bash 1234 user 2u CHR 136,0 0 3 /dev/pts/0 🟠Использование `lsfd` Утилита lsfd (из пакета util-linux) удобна для просмотра файловых дескрипторов. lsfd Вывод PID FD TTY TYPE DEVICE SIZE/OFF NODE NAME 1234 0 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0 1234 1 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0 1234 2 /dev/pts/0 CHR 136,0 0 3 /dev/pts/0 🚩Полезные флаги и фильтрация Список дескрипторов определенного пользователя: lsof -u Список файлов определенного типа (например, сокеты): lsof -i Фильтрация по определенному файлу или устройству: lsof /path/to/file 🚩Почему важно знать про дескрипторы? 🟠Отладка приложений Определение, какие файлы, сокеты или устройства использует процесс. 🟠Устранение утечек Проверка, остаются ли ненужные дескрипторы открытыми. 🟠Администрирование Диагностика проблем, связанных с блокировкой файлов. Ставь 👍 и забирай 📚 Базу знаний
Открыть канал и посмотреть медиаТолько зарегистрированные пользователи могут делиться своим мнением.
Станьте первым, кто поделится своим впечатлением об этом ресурсе!