🤔 Когда используется UDP?
UDP используется, когда важна скорость и допустима потеря данных, например, в стриминге, видеозвонках, DNS-запросах и онлайн-играх.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊2
🤔 Для чего используется clickhouse?
ClickHouse – это высокопроизводительная колоночная база данных для аналитики.
Она предназначена для быстрого выполнения аналитических запросов на больших объемах данных (миллиарды строк). Используется в BI-системах, логировании, мониторинге и обработке событий.
🚩Основные возможности
🟠Очень быстрые запросы
за счёт хранения данных по колонкам и сжатия.
🟠Отлично масштабируется
работает на одной машине или в кластере.
🟠Поддержка SQL
работает с привычными SQL-запросами.
🟠Хорош для real-time аналитики
обработка миллионов событий в секунду.
🟠Без индексов
использует Primary Key + MergeTree, что упрощает оптимизацию.
🟠Хорошее сжатие данных
благодаря специальным алгоритмам хранения.
🚩Где используется?
🟠Аналитика и отчёты
BI-системы (анализ продаж, маркетинга, поведения пользователей).
Агрегация данных по времени (финансы, реклама, ретеншн).
🟠Логирование и мониторинг
Хранение логов (NGINX, Kubernetes, Clickstream).
Аналитика событий в реальном времени.
🟠IoT и Big Data
Обработка телеметрии с датчиков.
Анализ поведения пользователей в приложениях.
🟠Пример работы с ClickHouse
1⃣Создание таблицы
2⃣Вставка данных
3⃣Аналитический запрос (например, среднее время посещения сайта)
Ставь 👍 и забирай 📚 Базу знаний
ClickHouse – это высокопроизводительная колоночная база данных для аналитики.
Она предназначена для быстрого выполнения аналитических запросов на больших объемах данных (миллиарды строк). Используется в BI-системах, логировании, мониторинге и обработке событий.
🚩Основные возможности
🟠Очень быстрые запросы
за счёт хранения данных по колонкам и сжатия.
🟠Отлично масштабируется
работает на одной машине или в кластере.
🟠Поддержка SQL
работает с привычными SQL-запросами.
🟠Хорош для real-time аналитики
обработка миллионов событий в секунду.
🟠Без индексов
использует Primary Key + MergeTree, что упрощает оптимизацию.
🟠Хорошее сжатие данных
благодаря специальным алгоритмам хранения.
🚩Где используется?
🟠Аналитика и отчёты
BI-системы (анализ продаж, маркетинга, поведения пользователей).
Агрегация данных по времени (финансы, реклама, ретеншн).
🟠Логирование и мониторинг
Хранение логов (NGINX, Kubernetes, Clickstream).
Аналитика событий в реальном времени.
🟠IoT и Big Data
Обработка телеметрии с датчиков.
Анализ поведения пользователей в приложениях.
🟠Пример работы с ClickHouse
1⃣Создание таблицы
CREATE TABLE visits (
user_id UInt32,
url String,
duration UInt32,
event_time DateTime
) ENGINE = MergeTree()
ORDER BY event_time;
2⃣Вставка данных
INSERT INTO visits VALUES (1, 'https://example.com', 30, now());
3⃣Аналитический запрос (например, среднее время посещения сайта)
SELECT url, AVG(duration)
FROM visits
GROUP BY url
ORDER BY AVG(duration) DESC;
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как тэгировать роли?
Для тэгирования ролей применяются Git-теги, указывающие на номер версии (например, v1.0.0). Это позволяет другим разработчикам понимать, какую версию роли они используют.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Для тэгирования ролей применяются Git-теги, указывающие на номер версии (например, v1.0.0). Это позволяет другим разработчикам понимать, какую версию роли они используют.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем нужны теги в Ansible?
Теги в Ansible позволяют запускать только определенные задачи или роли, а не весь плейбук. Это ускоряет выполнение и упрощает управление конфигурацией.
🚩Когда использовать теги?
🟠Запуск только нужных задач
если плейбук содержит много шагов, можно выполнить только нужные.
🟠Разделение задач по категориям
например, отдельно установка, обновление, настройка сервиса.
🟠Оптимизация CI/CD
ускорение развертывания, выполняя только измененные задачи.
🚩Как использовать теги?
🟠Теги в задачах (`tasks`)
Простой пример – установка и перезапуск Nginx
Запуск только установки (
Запуск только перезапуска (
🟠Теги в ролях (`roles`)
Если у вас несколько ролей, можно запускать только нужную:
Запуск только роли
🟠Исключение тегов (`--skip-tags`)
Можно пропустить выполнение определенных задач
Ставь 👍 и забирай 📚 Базу знаний
Теги в Ansible позволяют запускать только определенные задачи или роли, а не весь плейбук. Это ускоряет выполнение и упрощает управление конфигурацией.
🚩Когда использовать теги?
🟠Запуск только нужных задач
если плейбук содержит много шагов, можно выполнить только нужные.
🟠Разделение задач по категориям
например, отдельно установка, обновление, настройка сервиса.
🟠Оптимизация CI/CD
ускорение развертывания, выполняя только измененные задачи.
🚩Как использовать теги?
🟠Теги в задачах (`tasks`)
Простой пример – установка и перезапуск Nginx
yaml
- name: Установить Nginx
apt:
name: nginx
state: present
tags: install
- name: Перезапустить Nginx
service:
name: nginx
state: restarted
tags: restart
Запуск только установки (
install) sh
ansible-playbook playbook.yml --tags install
Запуск только перезапуска (
restart) sh
ansible-playbook playbook.yml --tags restart
🟠Теги в ролях (`roles`)
Если у вас несколько ролей, можно запускать только нужную:
yaml
- hosts: all
roles:
- { role: nginx, tags: web }
- { role: database, tags: db }
Запуск только роли
database sh
ansible-playbook playbook.yml --tags db
🟠Исключение тегов (`--skip-tags`)
Можно пропустить выполнение определенных задач
sh
ansible-playbook playbook.yml --skip-tags restart
Ставь 👍 и забирай 📚 Базу знаний
👍4
🤔 Как узнать причину CrashLoopBackOff?
CrashLoopBackOff возникает, когда под постоянно падает и перезапускается. Чтобы понять причину, сначала нужно использовать kubectl describe pod <pod-name> и просмотреть секцию Events. Также важно посмотреть логи последнего запуска перед сбоем: kubectl logs --previous <pod-name>. Обрати внимание на exit code контейнера: код 1 означает, что произошла ошибка в приложении, код 137 — что контейнер был убит из-за нехватки памяти (OOMKilled), 126 или 127 — что команда не найдена или не может быть выполнена.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
CrashLoopBackOff возникает, когда под постоянно падает и перезапускается. Чтобы понять причину, сначала нужно использовать kubectl describe pod <pod-name> и просмотреть секцию Events. Также важно посмотреть логи последнего запуска перед сбоем: kubectl logs --previous <pod-name>. Обрати внимание на exit code контейнера: код 1 означает, что произошла ошибка в приложении, код 137 — что контейнер был убит из-за нехватки памяти (OOMKilled), 126 или 127 — что команда не найдена или не может быть выполнена.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как диагностировать проблемы с локальным сервером который не отвечает на ping?
Если сервер не пингуется, это не значит, что он не работает – проблема может быть в сети, настройках брандмауэра или самом сервере.
🚩Пошаговая диагностика
1⃣Проверить, действительно ли сервер включен
Подойти к серверу и проверить:
Горят ли индикаторы сети (LAN) на сервере?
Реагирует ли на клавиатуру/монитор?
Не завис ли сервер? (Может помочь Hard Reboot).
2⃣Проверить, есть ли связь на L2-уровне (MAC-адреса)
Проверяем, видит ли наш компьютер MAC-адрес сервера через `arp`.
Запрос ARP
Если MAC-адрес есть → пакеты доходят до сервера, но он не отвечает.
Если MAC-адреса нет → возможны проблемы с сетью (кабель, порт, VLAN, DHCP, статика).
Дополнительно проверить соединение
3⃣Проверить, отвечает ли сервер на другие запросы (SSH, HTTP, RDP)
Если
Пробуем зайти по SSH (если это Linux)
Пробуем зайти по RDP (если это Windows)
Пробуем зайти через HTTP (если там веб-сервер)
4⃣Проверить сетевой интерфейс на сервере
Подключаемся к серверу (если возможно) и проверяем, есть ли у него сеть.
Проверяем IP-адрес сервера
или
Пробуем пропинговать шлюз с сервера
5⃣Проверить брандмауэр и iptables на сервере
Если сервер не отвечает на ICMP, его может блокировать брандмауэр.
Linux (firewalld, iptables, ufw)
Если ICMP запрещен → разрешаем его
Windows (Проверить ICMP в брандмауэре Windows)
Если правило отключено → включаем
6⃣Проверить маршрутизацию и сеть
Если сервер и клиент находятся в разных VLAN или подсетях, проверяем маршрут.
На клиенте
Проверить маршруты на сервере
Если маршрут отсутствует → добавляем вручную
Ставь 👍 и забирай 📚 Базу знаний
Если сервер не пингуется, это не значит, что он не работает – проблема может быть в сети, настройках брандмауэра или самом сервере.
🚩Пошаговая диагностика
1⃣Проверить, действительно ли сервер включен
Подойти к серверу и проверить:
Горят ли индикаторы сети (LAN) на сервере?
Реагирует ли на клавиатуру/монитор?
Не завис ли сервер? (Может помочь Hard Reboot).
2⃣Проверить, есть ли связь на L2-уровне (MAC-адреса)
Проверяем, видит ли наш компьютер MAC-адрес сервера через `arp`.
Запрос ARP
arp -a | grep 192.168.1.100
Если MAC-адрес есть → пакеты доходят до сервера, но он не отвечает.
Если MAC-адреса нет → возможны проблемы с сетью (кабель, порт, VLAN, DHCP, статика).
Дополнительно проверить соединение
ethtool eth0 # Проверить состояние сетевого адаптера
ip link show eth0 # Интерфейс должен быть UP
3⃣Проверить, отвечает ли сервер на другие запросы (SSH, HTTP, RDP)
Если
ping отключен (ICMP заблокирован брандмауэром), но сервер работает, попробуем другие протоколы. Пробуем зайти по SSH (если это Linux)
ssh user@192.168.1.100
Пробуем зайти по RDP (если это Windows)
rdesktop 192.168.1.100
Пробуем зайти через HTTP (если там веб-сервер)
curl -I http://192.168.1.100
4⃣Проверить сетевой интерфейс на сервере
Подключаемся к серверу (если возможно) и проверяем, есть ли у него сеть.
Проверяем IP-адрес сервера
ip a
или
ifconfig -a
Пробуем пропинговать шлюз с сервера
ping 192.168.1.1
5⃣Проверить брандмауэр и iptables на сервере
Если сервер не отвечает на ICMP, его может блокировать брандмауэр.
Linux (firewalld, iptables, ufw)
iptables -L -n | grep DROP # Проверяем правила iptables
ufw status # Проверяем UFW (если используется)
firewall-cmd --list-all # Проверяем firewalld
Если ICMP запрещен → разрешаем его
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
ufw allow proto icmp
firewall-cmd --add-icmp-block=echo-reply --permanent
firewall-cmd --reload
Windows (Проверить ICMP в брандмауэре Windows)
netsh advfirewall firewall show rule name="File and Printer Sharing (Echo Request - ICMPv4-In)"
Если правило отключено → включаем
netsh advfirewall firewall add rule name="ICMP Allow" protocol=icmpv4:8,any dir=in action=allow
6⃣Проверить маршрутизацию и сеть
Если сервер и клиент находятся в разных VLAN или подсетях, проверяем маршрут.
На клиенте
traceroute 192.168.1.100 # Linux
tracert 192.168.1.100 # Windows
Проверить маршруты на сервере
ip route show
Если маршрут отсутствует → добавляем вручную
ip route add 192.168.1.0/24 via 192.168.1.1
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что хранится в /etc/fstab?
Содержит таблицу монтирования файловых систем.
1. Указывает устройства и точки монтирования, например, диски, разделы, сетевые файловые системы.
2. Задаёт параметры монтирования, такие как тип файловой системы, опции (rw, noatime) и поведение при загрузке.
3. Используется системой для автоматического монтирования файловых систем при запуске.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Указывает устройства и точки монтирования, например, диски, разделы, сетевые файловые системы.
2. Задаёт параметры монтирования, такие как тип файловой системы, опции (rw, noatime) и поведение при загрузке.
3. Используется системой для автоматического монтирования файловых систем при запуске.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое брокеры сообщений?
Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (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⃣Отправитель публикует сообщение в очередь:
2⃣Получатель забирает сообщение из очереди:
🚩Плюсы использования
➕Разделение ответственности
Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
➕Масштабируемость
Легко добавлять новых потребителей или отправителей.
➕Устойчивость к сбоям
Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
➕Гибкость
Возможность использовать различные стратегии маршрутизации и обработки данных.
Ставь 👍 и забирай 📚 Базу знаний
Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (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()
🚩Плюсы использования
➕Разделение ответственности
Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
➕Масштабируемость
Легко добавлять новых потребителей или отправителей.
➕Устойчивость к сбоям
Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
➕Гибкость
Возможность использовать различные стратегии маршрутизации и обработки данных.
Ставь 👍 и забирай 📚 Базу знаний
💊1
🤔 Чем отличается CD и CD (непрерывная доставка)?
Это два смысла одного сокращения:
- Continuous Delivery (непрерывная доставка) — код всегда готов к деплою, но деплой в прод по кнопке.
- Continuous Deployment (непрерывное развёртывание) — код автоматически деплоится в прод после прохождения всех тестов.
Delivery — ручной шаг, Deployment — полностью автоматизированный.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это два смысла одного сокращения:
- Continuous Delivery (непрерывная доставка) — код всегда готов к деплою, но деплой в прод по кнопке.
- Continuous Deployment (непрерывное развёртывание) — код автоматически деплоится в прод после прохождения всех тестов.
Delivery — ручной шаг, Deployment — полностью автоматизированный.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊14👍4🔥1
🤔 Что такое acl в linux?
ACL (Access Control List) – это механизм расширенных прав доступа в Linux, который позволяет задавать более гибкие разрешения для файлов и директорий, чем стандартные
Позволяет назначать дополнительные права для отдельных пользователей и групп
Упрощает гранулярный контроль доступа
Работает поверх стандартных прав (rwx)
🚩Проверка поддержки ACL
Убедимся, что файловая система поддерживает ACL
Если ACL не включен, монтируем с поддержкой ACL
🚩Проверка текущих ACL-прав
Команда
Пример вывода
🚩Добавление новых ACL-прав (`setfacl`)
Разрешить пользователю
Разрешить группе
Дать всем (
Назначить по умолчанию права для всех новых файлов в папке
🚩Удаление ACL-прав
Удалить ACL для пользователя
Очистить все ACL-права файла
Ставь 👍 и забирай 📚 Базу знаний
ACL (Access Control List) – это механизм расширенных прав доступа в Linux, который позволяет задавать более гибкие разрешения для файлов и директорий, чем стандартные
chmod и chown. Позволяет назначать дополнительные права для отдельных пользователей и групп
Упрощает гранулярный контроль доступа
Работает поверх стандартных прав (rwx)
🚩Проверка поддержки ACL
Убедимся, что файловая система поддерживает ACL
mount | grep acl
Если ACL не включен, монтируем с поддержкой ACL
mount -o remount,acl /home
🚩Проверка текущих ACL-прав
Команда
getfacl показывает текущие ACL для файла или папкиgetfacl myfile.txt
Пример вывода
# file: myfile.txt
# owner: user1
# group: users
user::rw-
user:john:r--
group::r--
mask::r--
other::---
🚩Добавление новых ACL-прав (`setfacl`)
Разрешить пользователю
john запись (rw) в myfile.txtsetfacl -m u:john:rw myfile.txt
Разрешить группе
developers выполнение (x)setfacl -m g:developers:x myfile.txt
Дать всем (
other) полный доступ (rwx)setfacl -m o::rwx myfile.txt
Назначить по умолчанию права для всех новых файлов в папке
project/ setfacl -d -m u:john:rwx project/
🚩Удаление ACL-прав
Удалить ACL для пользователя
john setfacl -x u:john myfile.txt
Очистить все ACL-права файла
setfacl -b myfile.txt
Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Чем отличается Docker от LXC?
1. Docker: предоставляет контейнеры с упрощённым API и инструментами для управления, ориентирован на приложения.
2. LXC: предоставляет низкоуровневую контейнеризацию, ближе к виртуализации всей ОС.
3. Docker упрощает работу разработчиков, а LXC больше подходит для системных администраторов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Docker: предоставляет контейнеры с упрощённым API и инструментами для управления, ориентирован на приложения.
2. LXC: предоставляет низкоуровневую контейнеризацию, ближе к виртуализации всей ОС.
3. Docker упрощает работу разработчиков, а LXC больше подходит для системных администраторов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊4
🤔 Как версионируете чарты?
Helm-чарты должны быть версионированы, чтобы отслеживать изменения и управлять развертываниями.
Версии чарта (
Версии приложения (
Репозиторий Helm (
Git-теги и CI/CD
🚩Версия чарта (`Chart.yaml`)
Каждый Helm-чарт содержит
🚩Хранение и обновление чарта в репозитории Helm
Helm-чарты можно хранить в локальном или удаленном репозитории.
Обновить индекс в репозитории
Добавить новый чарт в Helm-репозиторий
🚩Автоматическое версионирование через Git и CI/CD
Обычно чарты хранятся в Git, и версии обновляются автоматически через CI/CD.
Пример автоматического увеличения версии (
🚩Как установить конкретную версию чарта?
Чтобы развернуть определенную версию Helm-чарта, указываем
Или обновить до новой версии:
Ставь 👍 и забирай 📚 Базу знаний
Helm-чарты должны быть версионированы, чтобы отслеживать изменения и управлять развертываниями.
Версии чарта (
Chart.yaml) Версии приложения (
appVersion) Репозиторий Helm (
helm repo) Git-теги и CI/CD
🚩Версия чарта (`Chart.yaml`)
Каждый Helm-чарт содержит
Chart.yaml, где указывается версия чарта. yaml
apiVersion: v2
name: my-app
description: Helm chart for my application
version: 1.2.3
appVersion: 2.0.1
🚩Хранение и обновление чарта в репозитории Helm
Helm-чарты можно хранить в локальном или удаленном репозитории.
sh
helm package my-chart/
Обновить индекс в репозитории
sh
helm repo index .
Добавить новый чарт в Helm-репозиторий
sh
helm repo add my-repo https://charts.example.com
helm push my-app-1.2.3.tgz my-repo
🚩Автоматическое версионирование через Git и CI/CD
Обычно чарты хранятся в Git, и версии обновляются автоматически через CI/CD.
Пример автоматического увеличения версии (
version) в Chart.yaml через helm/chart-releaser-actionyaml
name: Release Helm Chart
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Set up Helm
uses: azure/setup-helm@v3
with:
version: 'latest'
- name: Package Helm Chart
run: helm package my-chart/
- name: Upload to Helm Repo
uses: helm/chart-releaser-action@v1
🚩Как установить конкретную версию чарта?
Чтобы развернуть определенную версию Helm-чарта, указываем
--version sh
helm install my-app my-repo/my-app --version 1.2.3
Или обновить до новой версии:
sh
helm upgrade my-app my-repo/my-app --version 1.2.4
Ставь 👍 и забирай 📚 Базу знаний
🔥1💊1
🤔 Что является критикал, а что нет?
Это то, что влияет на работоспособность, доступность, безопасность или данные системы:
- Падение сервиса, от которого зависят другие.
- Потеря или повреждение данных.
- Утечка доступа, компрометация ключей.
- Сбой в CI/CD, блокирующий релиз.
- Отказ прод-сервера, отказ балансировки, перегрузка очереди.
Некритикал (non-critical) — сбои, которые не мешают работе системы в целом:
- Ошибки в логах, не влияющие на функционал.
- Временная недоступность второстепенного сервиса.
- Глюки в UI без влияния на бекенд.
- Тестовые среды, non-prod проблемы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это то, что влияет на работоспособность, доступность, безопасность или данные системы:
- Падение сервиса, от которого зависят другие.
- Потеря или повреждение данных.
- Утечка доступа, компрометация ключей.
- Сбой в CI/CD, блокирующий релиз.
- Отказ прод-сервера, отказ балансировки, перегрузка очереди.
Некритикал (non-critical) — сбои, которые не мешают работе системы в целом:
- Ошибки в логах, не влияющие на функционал.
- Временная недоступность второстепенного сервиса.
- Глюки в UI без влияния на бекенд.
- Тестовые среды, non-prod проблемы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие join бывают?
В реляционных базах данных, операции объединения (JOIN) позволяют объединить строки из двух или более таблиц на основе связанных между собой столбцов. Существует несколько типов JOIN, каждый из которых имеет свои особенности и применим для разных ситуаций. Рассмотрим основные типы JOIN:
🟠INNER JOIN
Объединяет строки из обеих таблиц, если они удовлетворяют условию объединения. Когда необходимо выбрать только те строки, которые имеют соответствующие значения в обеих таблицах.
🟠LEFT JOIN (или LEFT OUTER JOIN)
Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если соответствующей строки в правой таблице нет, в результирующем наборе данных для столбцов правой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы и соответствующие данные из другой таблицы, если они существуют.
🟠RIGHT JOIN (или RIGHT OUTER JOIN)
Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если соответствующей строки в левой таблице нет, в результирующем наборе данных для столбцов левой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы (правой) и соответствующие данные из другой таблицы (левой), если они существуют.
🟠FULL JOIN (или FULL OUTER JOIN)
Возвращает все строки, когда есть совпадения либо в левой, либо в правой таблице. Если строки не соответствуют в одной из таблиц, для этой таблицы будут значения NULL. Когда необходимо выбрать все строки из обеих таблиц, независимо от того, есть ли соответствующие строки в другой таблице.
🟠CROSS JOIN
Возвращает декартово произведение двух таблиц, то есть все возможные комбинации строк из обеих таблиц. Когда необходимо создать комбинации всех строк из обеих таблиц. Используется редко и с осторожностью, так как может привести к очень большому количеству строк.
🟠SELF JOIN
Применяется для объединения таблицы самой с собой. Обычно используется для сравнения строк внутри одной и той же таблицы. Когда необходимо сопоставить строки одной таблицы друг с другом, например, для анализа иерархий или поиска парных записей.
🟠NATURAL JOIN
Автоматически объединяет таблицы по всем столбцам с одинаковыми именами и типами данных. Когда у таблиц есть столбцы с одинаковыми именами, и нужно объединить их без явного указания условий объединения.
Ставь 👍 и забирай 📚 Базу знаний
В реляционных базах данных, операции объединения (JOIN) позволяют объединить строки из двух или более таблиц на основе связанных между собой столбцов. Существует несколько типов JOIN, каждый из которых имеет свои особенности и применим для разных ситуаций. Рассмотрим основные типы JOIN:
🟠INNER JOIN
Объединяет строки из обеих таблиц, если они удовлетворяют условию объединения. Когда необходимо выбрать только те строки, которые имеют соответствующие значения в обеих таблицах.
SELECT *
FROM таблица1
INNER JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
🟠LEFT JOIN (или LEFT OUTER JOIN)
Возвращает все строки из левой таблицы и соответствующие строки из правой таблицы. Если соответствующей строки в правой таблице нет, в результирующем наборе данных для столбцов правой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы и соответствующие данные из другой таблицы, если они существуют.
SELECT *
FROM таблица1
LEFT JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
🟠RIGHT JOIN (или RIGHT OUTER JOIN)
Возвращает все строки из правой таблицы и соответствующие строки из левой таблицы. Если соответствующей строки в левой таблице нет, в результирующем наборе данных для столбцов левой таблицы будут значения NULL. Когда необходимо выбрать все строки из одной таблицы (правой) и соответствующие данные из другой таблицы (левой), если они существуют.
SELECT *
FROM таблица1
RIGHT JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
🟠FULL JOIN (или FULL OUTER JOIN)
Возвращает все строки, когда есть совпадения либо в левой, либо в правой таблице. Если строки не соответствуют в одной из таблиц, для этой таблицы будут значения NULL. Когда необходимо выбрать все строки из обеих таблиц, независимо от того, есть ли соответствующие строки в другой таблице.
SELECT *
FROM таблица1
FULL JOIN таблица2
ON таблица1.ключ = таблица2.ключ;
🟠CROSS JOIN
Возвращает декартово произведение двух таблиц, то есть все возможные комбинации строк из обеих таблиц. Когда необходимо создать комбинации всех строк из обеих таблиц. Используется редко и с осторожностью, так как может привести к очень большому количеству строк.
SELECT *
FROM таблица1
CROSS JOIN таблица2;
🟠SELF JOIN
Применяется для объединения таблицы самой с собой. Обычно используется для сравнения строк внутри одной и той же таблицы. Когда необходимо сопоставить строки одной таблицы друг с другом, например, для анализа иерархий или поиска парных записей.
SELECT A.*
FROM таблица A, таблица B
WHERE A.ключ = B.ключ;
🟠NATURAL JOIN
Автоматически объединяет таблицы по всем столбцам с одинаковыми именами и типами данных. Когда у таблиц есть столбцы с одинаковыми именами, и нужно объединить их без явного указания условий объединения.
SELECT *
FROM таблица1
NATURAL JOIN таблица2;
Ставь 👍 и забирай 📚 Базу знаний
👍1💊1
🤔 Что такое OpsWorks?
AWS OpsWorks — это сервис управления конфигурациями, который:
- Поддерживает Chef и Puppet.
- Используется для автоматизации серверной инфраструктуры.
- Позволяет управлять слоями, версиями, скриптами и зависимостями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
AWS OpsWorks — это сервис управления конфигурациями, который:
- Поддерживает Chef и Puppet.
- Используется для автоматизации серверной инфраструктуры.
- Позволяет управлять слоями, версиями, скриптами и зависимостями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1
🤔 Как сделать rebase на main branch?
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке
🟠Выполняем rebase на `main`
Сначала убедимся, что
Теперь выполняем сам rebase:
🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
Продолжите rebase:
🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
Ставь 👍 и забирай 📚 Базу знаний
Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (
main). 🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке
feature-branch: git checkout feature-branch
🟠Выполняем rebase на `main`
Сначала убедимся, что
main обновлена: git checkout main
git pull origin main
Теперь выполняем сам rebase:
git checkout feature-branch
git rebase main
🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:
git add <файл>
Продолжите rebase:
git rebase --continue
🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
git push origin feature-branch --force
Ставь 👍 и забирай 📚 Базу знаний
🤔 Поды висят в Pending. В чём проблема?
Основные причины:
- Нет доступных нод, удовлетворяющих требованиям (resources, affinity, taints).
- Недостаточно ресурсов (CPU или памяти).
- Ошибки в StorageClass или PVC, если поду нужен диск.
- Проблемы с сетью или CNI-плагином.
- Неверные ограничения в nodeSelector, tolerations, affinity.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Основные причины:
- Нет доступных нод, удовлетворяющих требованиям (resources, affinity, taints).
- Недостаточно ресурсов (CPU или памяти).
- Ошибки в StorageClass или PVC, если поду нужен диск.
- Проблемы с сетью или CNI-плагином.
- Неверные ограничения в nodeSelector, tolerations, affinity.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊1
🤔 Как настраивать графики на панели графаны?
Настройка графиков на панели Grafana позволяет визуализировать данные из подключенных источников в удобной и наглядной форме.
1⃣Создание новой панели (Panel)
Откройте существующий дашборд или создайте новый: Перейдите в раздел Dashboards → New Dashboard.
Нажмите Add new panel для добавления панели.
2⃣Выбор источника данных
В интерфейсе панели в разделе Query выберите источник данных (Data Source) из выпадающего списка. Например, Prometheus, InfluxDB, MySQL, Elasticsearch. Подключение источника данных настраивается через Configuration → Data Sources.
3⃣Написание запроса для графика
Каждый источник данных имеет свой язык запросов. Примеры:
Prometheus
MySQL
Elasticsearch: Используйте Lucene или Elasticsearch Query DSL.
4⃣Настройка визуализации
В разделе Visualization выберите тип графика: Time series (график по времени). Bar chart (столбчатая диаграмма). Gauge (гейдж/индикатор). Table (таблица). Pie chart (круговая диаграмма, доступна через плагин).
Настройте параметры визуализации: Линии, точки, области (lines, points, fill). Цвета линий, область графика. Подписи данных.
5⃣Форматирование данных
В разделе Transform: Преобразуйте данные (группировка, сортировка, вычисления). Добавьте фильтры или агрегируйте данные. В разделе Overrides: Настройте специфичные параметры для отдельных рядов данных (цвета, форматы отображения).
6⃣Настройка временного интервала
Выберите временной диапазон панели в правом верхнем углу дашборда: Например, последние 5 минут, 1 час, 24 часа. Установите параметры временного сдвига, если нужно отображать данные за конкретный период.
7⃣Настройка подписей и описаний
В разделе Panel settings: Укажите название панели. Добавьте описание для контекста.
8⃣Сохранение дашборда
Нажмите Save dashboard. Укажите имя дашборда и добавьте теги (опционально) для удобного поиска.
🚩Полезные фишки
🟠Панели Variables
Позволяют создавать динамические фильтры. Например, добавьте переменную для выбора имени хоста:
🟠Плагины визуализации
Установите дополнительные плагины из Grafana Marketplace (например, Pie Chart, Worldmap Panel).
Ставь 👍 и забирай 📚 Базу знаний
Настройка графиков на панели Grafana позволяет визуализировать данные из подключенных источников в удобной и наглядной форме.
1⃣Создание новой панели (Panel)
Откройте существующий дашборд или создайте новый: Перейдите в раздел Dashboards → New Dashboard.
Нажмите Add new panel для добавления панели.
2⃣Выбор источника данных
В интерфейсе панели в разделе Query выберите источник данных (Data Source) из выпадающего списка. Например, Prometheus, InfluxDB, MySQL, Elasticsearch. Подключение источника данных настраивается через Configuration → Data Sources.
3⃣Написание запроса для графика
Каждый источник данных имеет свой язык запросов. Примеры:
Prometheus
rate(http_requests_total[5m])
MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;
Elasticsearch: Используйте Lucene или Elasticsearch Query DSL.
4⃣Настройка визуализации
В разделе Visualization выберите тип графика: Time series (график по времени). Bar chart (столбчатая диаграмма). Gauge (гейдж/индикатор). Table (таблица). Pie chart (круговая диаграмма, доступна через плагин).
Настройте параметры визуализации: Линии, точки, области (lines, points, fill). Цвета линий, область графика. Подписи данных.
5⃣Форматирование данных
В разделе Transform: Преобразуйте данные (группировка, сортировка, вычисления). Добавьте фильтры или агрегируйте данные. В разделе Overrides: Настройте специфичные параметры для отдельных рядов данных (цвета, форматы отображения).
6⃣Настройка временного интервала
Выберите временной диапазон панели в правом верхнем углу дашборда: Например, последние 5 минут, 1 час, 24 часа. Установите параметры временного сдвига, если нужно отображать данные за конкретный период.
7⃣Настройка подписей и описаний
В разделе Panel settings: Укажите название панели. Добавьте описание для контекста.
8⃣Сохранение дашборда
Нажмите Save dashboard. Укажите имя дашборда и добавьте теги (опционально) для удобного поиска.
🚩Полезные фишки
🟠Панели Variables
Позволяют создавать динамические фильтры. Например, добавьте переменную для выбора имени хоста:
label_values(node_cpu_seconds_total, instance)
🟠Плагины визуализации
Установите дополнительные плагины из Grafana Marketplace (например, Pie Chart, Worldmap Panel).
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как решать проблему, если ваш коллега удалил /usr/bin/chmod, и нет ОС-донора?
- Если chmod удалён, изменить права файла невозможно стандартным способом.
- Возможные варианты:
- Найти бинарник chmod в другой директории (например, в /bin, /sbin, /usr/local/bin).
- Использовать busybox chmod, если busybox установлен.
- Если есть root-доступ — попробовать выполнить через python, perl или bash:
- python -c 'import os; os.chmod("file", 0o755)'
- Или через find с -exec (если chmod встроен туда).
- В крайнем случае — смонтировать диск на другой системе (если физически возможно).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Если chmod удалён, изменить права файла невозможно стандартным способом.
- Возможные варианты:
- Найти бинарник chmod в другой директории (например, в /bin, /sbin, /usr/local/bin).
- Использовать busybox chmod, если busybox установлен.
- Если есть root-доступ — попробовать выполнить через python, perl или bash:
- python -c 'import os; os.chmod("file", 0o755)'
- Или через find с -exec (если chmod встроен туда).
- В крайнем случае — смонтировать диск на другой системе (если физически возможно).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1🤔1
🤔 Какие виды метрик в Prometheus знаешь?
В Prometheus есть 4 типа метрик, которые используются для мониторинга и сбора данных.
🚩Counter (Счетчик) – только увеличивается
Используется для подсчета событий, ошибок, запросов
Значение только увеличивается (нельзя уменьшить)
Как вывести количество запросов за последние 5 минут
Пример экспозиции в приложении
🚩Gauge (Измеритель) – может расти и уменьшаться
Используется для измерения текущего состояния (температура, RAM, CPU)
Значение может расти и уменьшаться
Как вывести среднюю загрузку CPU за 5 минут
Пример экспозиции в коде
🚩Histogram (Гистограмма) – распределение значений
Используется для измерения длительности, размера запросов
Делит данные по диапазонам (buckets)
Как вычислить среднее время отклика
Пример в коде
🚩Summary (Сводка) – квантильные метрики
Показывает среднее, медиану, квантильное распределение
Используется для измерения задержек, времени отклика
Пример в коде:
Ставь 👍 и забирай 📚 Базу знаний
В Prometheus есть 4 типа метрик, которые используются для мониторинга и сбора данных.
🚩Counter (Счетчик) – только увеличивается
Используется для подсчета событий, ошибок, запросов
Значение только увеличивается (нельзя уменьшить)
promql
http_requests_total
Как вывести количество запросов за последние 5 минут
promql
rate(http_requests_total[5m])
Пример экспозиции в приложении
go
httpRequests := prometheus.NewCounter(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total number of HTTP requests",
})
🚩Gauge (Измеритель) – может расти и уменьшаться
Используется для измерения текущего состояния (температура, RAM, CPU)
Значение может расти и уменьшаться
promql
node_memory_usage_bytes
Как вывести среднюю загрузку CPU за 5 минут
promql
avg(node_cpu_seconds_total)
Пример экспозиции в коде
go
cpuUsage := prometheus.NewGauge(
prometheus.GaugeOpts{
Name: "cpu_usage_percentage",
Help: "Current CPU usage",
})
🚩Histogram (Гистограмма) – распределение значений
Используется для измерения длительности, размера запросов
Делит данные по диапазонам (buckets)
promql
http_request_duration_seconds_bucket
Как вычислить среднее время отклика
promql
histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))
Пример в коде
go
requestDuration := prometheus.NewHistogram(
prometheus.HistogramOpts{
Name: "http_request_duration_seconds",
Help: "Histogram of response time for HTTP requests",
Buckets: prometheus.DefBuckets,
})
🚩Summary (Сводка) – квантильные метрики
Показывает среднее, медиану, квантильное распределение
Используется для измерения задержек, времени отклика
promql
http_request_duration_seconds{quantile="0.99"}
Пример в коде:
go
requestSummary := prometheus.NewSummary(
prometheus.SummaryOpts{
Name: "http_request_duration_seconds",
Help: "Summary of response time for HTTP requests",
Objectives: map[float64]float64{0.5: 0.05, 0.9: 0.01, 0.99: 0.001},
})
Ставь 👍 и забирай 📚 Базу знаний
🤔 На скольких хостах по умолчанию Ansible позволяет одновременно выполнять сценарии?
По умолчанию Ansible запускает задачи на 5 хостах одновременно (forks = 5). Это значение можно изменить в ansible.cfg или через флаг --forks.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4👍1