🤔 Какое практическое использование DaemonSet?
DaemonSet запускает по одному экземпляру пода на каждой ноде (или выбранных). Используется для:
- мониторинга (Prometheus Node Exporter, Fluentd);
- логгирования;
- установки агентов безопасности;
- настройки хостовых ресурсов на каждой ноде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
DaemonSet запускает по одному экземпляру пода на каждой ноде (или выбранных). Используется для:
- мониторинга (Prometheus Node Exporter, Fluentd);
- логгирования;
- установки агентов безопасности;
- настройки хостовых ресурсов на каждой ноде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Что сейчас больше используется ингресс класс в ингрессе или указывается ингресс контроллер непосредственно в апликейшене?
Сейчас стандартом является использование
🚩Что лучше использовать?
🟠`ingressClassName` (новый метод, Kubernetes 1.19+)
Современный, удобный, поддерживается официально
Работает с
Можно управлять через CRD (
🟠Аннотация `kubernetes.io/ingress.class` (старый метод, deprecated с 1.18)
Все еще работает, но устарела
Нельзя контролировать
🚩Как правильно указывать `ingressClassName`?
1⃣Настраиваем
2⃣Используем
🚩Старый способ (не рекомендуется, но все еще встречается)
Раньше использовали аннотацию
Ставь 👍 и забирай 📚 Базу знаний
Сейчас стандартом является использование
ingressClassName, а аннотации kubernetes.io/ingress.class считаются устаревшими (deprecated). 🚩Что лучше использовать?
🟠`ingressClassName` (новый метод, Kubernetes 1.19+)
Современный, удобный, поддерживается официально
Работает с
IngressClass ресурсами Можно управлять через CRD (
IngressClass) 🟠Аннотация `kubernetes.io/ingress.class` (старый метод, deprecated с 1.18)
Все еще работает, но устарела
Нельзя контролировать
IngressClass через CRD 🚩Как правильно указывать `ingressClassName`?
1⃣Настраиваем
IngressClass (если нужно) yaml
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: nginx
spec:
controller: k8s.io/ingress-nginx
2⃣Используем
ingressClassName в Ingressyaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
spec:
ingressClassName: nginx
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
🚩Старый способ (не рекомендуется, но все еще встречается)
Раньше использовали аннотацию
kubernetes.io/ingress.class yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
Ставь 👍 и забирай 📚 Базу знаний
🔥2
🤔 Чем отличается CMD от ENTRYPOINT в DockerFile?
CMD задает команду по умолчанию, которая может быть переопределена при запуске контейнера. ENTRYPOINT определяет неизменяемую команду, которая всегда будет выполняться. CMD обычно используется для указания параметров для ENTRYPOINT.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍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⃣Отправитель публикует сообщение в очередь:
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
🤔 Отличия Deployment и StatefulSet?
Deployment применяется для stateless-приложений, где не важен порядок и стабильность имён подов. StatefulSet нужен для приложений с состоянием — таких как базы данных — где важна стабильность DNS-имени, порядок запуска и постоянные тома для хранения данных. StatefulSet обеспечивает более строгую и предсказуемую организацию.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Deployment применяется для stateless-приложений, где не важен порядок и стабильность имён подов. StatefulSet нужен для приложений с состоянием — таких как базы данных — где важна стабильность DNS-имени, порядок запуска и постоянные тома для хранения данных. StatefulSet обеспечивает более строгую и предсказуемую организацию.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4
🤔 Какая может быть проблема если вы подключаетесь к серверу через ssh а вам приходят тикеты, что другие пользователи не могут подключиться по ssh по одной и той же учётной записи
Если вы можете подключиться к серверу по SSH, но другие пользователи, использующие ту же учетную запись, не могут, возможны следующие причины:
🟠Проблема с ограничением количества подключений
В файле конфигурации SSH (
Открываем конфигурацию SSH
Проверяем параметры
Решение
Увеличьте
Перезапустите SSH:
🟠Файл .ssh/authorized_keys имеет неверные права
Если у вас ключевая авторизация, возможно, права на файлы
На сервере выполните:
Если права не
🟠Ограничение по IP (DenyUsers, AllowUsers, TCP Wrappers)
Конфигурация SSH может блокировать подключения для определенных IP или пользователей.
Откройте
Проверьте
🟠Закончились доступные PTY (псевдотерминалы)
Если исчерпан лимит доступных PTY, новые сессии не смогут открываться.
Запустите
Если там слишком много открытых сессий, попробуйте очистить:
или увеличьте лимит в
Ставь 👍 и забирай 📚 Базу знаний
Если вы можете подключиться к серверу по SSH, но другие пользователи, использующие ту же учетную запись, не могут, возможны следующие причины:
🟠Проблема с ограничением количества подключений
В файле конфигурации SSH (
/etc/ssh/sshd_config) могут быть ограничения на число одновременных подключений. Открываем конфигурацию SSH
sudo nano /etc/ssh/sshd_config
Проверяем параметры
MaxSessions 1
MaxStartups 10:30:60
Решение
Увеличьте
MaxSessions, например: MaxSessions 10
Перезапустите SSH:
sudo systemctl restart sshd
🟠Файл .ssh/authorized_keys имеет неверные права
Если у вас ключевая авторизация, возможно, права на файлы
.ssh/authorized_keys нарушены. На сервере выполните:
ls -l ~/.ssh/authorized_keys
Если права не
600, исправьте chmod 600 ~/.ssh/authorized_keys
🟠Ограничение по IP (DenyUsers, AllowUsers, TCP Wrappers)
Конфигурация SSH может блокировать подключения для определенных IP или пользователей.
Откройте
/etc/ssh/sshd_config и проверьте параметры DenyUsers user1
AllowUsers admin
Проверьте
/etc/hosts.deny и /etc/hosts.allow cat /etc/hosts.deny
cat /etc/hosts.allow
🟠Закончились доступные PTY (псевдотерминалы)
Если исчерпан лимит доступных PTY, новые сессии не смогут открываться.
Запустите
ls /dev/pts
Если там слишком много открытых сессий, попробуйте очистить:
pkill -u user
или увеличьте лимит в
/etc/security/limits.conf * hard nproc 1024
* soft nproc 1024
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Какие минусы Stateful-приложения?
- Сложность масштабирования (не масштабируются горизонтально так же просто, как Stateless);
- Требуют постоянного хранения состояния (например, базы данных);
- Требуют использования PersistentVolume, что усложняет деплой в Kubernetes;
- Трудности с отказоустойчивостью и миграциями данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Сложность масштабирования (не масштабируются горизонтально так же просто, как Stateless);
- Требуют постоянного хранения состояния (например, базы данных);
- Требуют использования PersistentVolume, что усложняет деплой в Kubernetes;
- Трудности с отказоустойчивостью и миграциями данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 В чем разница Deployment и DaemonSet?
Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев.
🚩Deployment
Это контроллер, который обеспечивает декларативное обновление подов и ReplicaSets (другой тип контроллера, который управляет одновременным запуском нескольких экземпляров одного и того же пода). Deployment поддерживает непрерывное развертывание, откат к предыдущим версиям, а также масштабирование подов.
🟠Масштабирование
Вы можете увеличивать или уменьшать количество подов в зависимости от нужд.
🟠Обновления
Поддерживает стратегии развертывания, такие как Rolling Update (постепенное обновление), которое помогает минимизировать простои при обновлении приложения.
🟠Самовосстановление
Автоматически перезапускает поды, которые перестали работать, находятся в ошибочном состоянии или не отвечают.
🚩DaemonSet
Это контроллер, который гарантирует, что на каждом узле кластера Kubernetes запущен экземпляр заданного пода. Когда добавляется новый узел, на нем автоматически запускается под, управляемый DaemonSet, и если узел удаляется, поды удаляются автоматически. Это идеально подходит для запуска служб мониторинга, сбора логов или других утилит, которые должны быть запущены на каждом узле.
🟠Гарантия запуска
Убедитесь, что каждый узел кластера запускает копию определённого пода.
🟠Автоматическое размещение
Когда добавляются новые узлы, на них автоматически размещаются необходимые поды.
🟠Службы уровня узла
Идеально подходит для запуска системных служб, таких как коллекторы логов, системы мониторинга и другие.
Ставь 👍 и забирай 📚 Базу знаний
Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев.
🚩Deployment
Это контроллер, который обеспечивает декларативное обновление подов и ReplicaSets (другой тип контроллера, который управляет одновременным запуском нескольких экземпляров одного и того же пода). Deployment поддерживает непрерывное развертывание, откат к предыдущим версиям, а также масштабирование подов.
🟠Масштабирование
Вы можете увеличивать или уменьшать количество подов в зависимости от нужд.
🟠Обновления
Поддерживает стратегии развертывания, такие как Rolling Update (постепенное обновление), которое помогает минимизировать простои при обновлении приложения.
🟠Самовосстановление
Автоматически перезапускает поды, которые перестали работать, находятся в ошибочном состоянии или не отвечают.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
🚩DaemonSet
Это контроллер, который гарантирует, что на каждом узле кластера Kubernetes запущен экземпляр заданного пода. Когда добавляется новый узел, на нем автоматически запускается под, управляемый DaemonSet, и если узел удаляется, поды удаляются автоматически. Это идеально подходит для запуска служб мониторинга, сбора логов или других утилит, которые должны быть запущены на каждом узле.
🟠Гарантия запуска
Убедитесь, что каждый узел кластера запускает копию определённого пода.
🟠Автоматическое размещение
Когда добавляются новые узлы, на них автоматически размещаются необходимые поды.
🟠Службы уровня узла
Идеально подходит для запуска системных служб, таких как коллекторы логов, системы мониторинга и другие.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
containers:
- name: fluentd-elasticsearch
image: fluent/fluentd:v1.0
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
Ставь 👍 и забирай 📚 Базу знаний
👍5
🤔 Как установить msodbcsql на Astra?
Пакет msodbcsql — это драйвер ODBC от Microsoft для SQL Server. Его нет в стандартных репах Astra.
1. Добавь репозиторий Microsoft:
- Установи зависимости: unixODBC, curl, gnupg2.
- Импортируй ключ и добавь репо:
- curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
- echo "deb [arch=amd64] https://packages.microsoft.com/debian/10/prod buster main" | sudo tee /etc/apt/sources.list.d/msprod.list
2. Установи:
3. sudo apt update
4. sudo apt install msodbcsql17
Примечание: требуется совместимость с Debian-базой, так что могут понадобиться обходные пути.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Добавь репозиторий Microsoft:
- Установи зависимости: unixODBC, curl, gnupg2.
- Импортируй ключ и добавь репо:
- curl
- echo "deb [arch=amd64]
2. Установи:
3. sudo apt update
4. sudo apt install msodbcsql17
Примечание: требуется совместимость с Debian-базой, так что могут понадобиться обходные пути.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Чем отличается образ от контейнера?
Образ (Image) – это шаблон, из которого создаются контейнеры.
Контейнер (Container) – это запущенный экземпляр образа.
🚩Что такое образ (Image)?
Образ – это неизменяемый шаблон с установленным ПО
Содержит все файлы, библиотеки и зависимости
Может храниться в реестре (Docker Hub, GitHub Container Registry, ECR)
Пример списка образов
Пример создания образа через
🚩Что такое контейнер (Container)?
Контейнер – это запущенный экземпляр образа
Может изменять файлы и состояние, но это не сохраняется в образе
Изолирован, но использует ядро ОС хоста
Пример списка контейнеров
Пример остановки контейнера
Ставь 👍 и забирай 📚 Базу знаний
Образ (Image) – это шаблон, из которого создаются контейнеры.
Контейнер (Container) – это запущенный экземпляр образа.
🚩Что такое образ (Image)?
Образ – это неизменяемый шаблон с установленным ПО
Содержит все файлы, библиотеки и зависимости
Может храниться в реестре (Docker Hub, GitHub Container Registry, ECR)
docker pull nginx:latest
Пример списка образов
docker images
Пример создания образа через
DockerfileFROM ubuntu:latest
RUN apt update && apt install -y nginx
CMD ["nginx", "-g", "daemon off;"]
docker build -t my-nginx .
🚩Что такое контейнер (Container)?
Контейнер – это запущенный экземпляр образа
Может изменять файлы и состояние, но это не сохраняется в образе
Изолирован, но использует ядро ОС хоста
docker run -d --name web -p 80:80 nginx
Пример списка контейнеров
docker ps
Пример остановки контейнера
docker stop web
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Что помимо bash sh можно в шебанг написать без проблем?
Можно использовать другие интерпретаторы, такие как zsh, python, perl, env, и т.д., в зависимости от того, на каком языке написан скрипт. Это делает скрипты переносимыми или привязывает их к конкретной среде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Можно использовать другие интерпретаторы, такие как zsh, python, perl, env, и т.д., в зависимости от того, на каком языке написан скрипт. Это делает скрипты переносимыми или привязывает их к конкретной среде.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1💊1
🤔 Как бы построить выделение ресурсов, балансировку, нагрузку и всю масштабированность?
Чтобы система работала стабильно и эффективно, нужно правильно распределять ресурсы, балансировать нагрузку и масштабировать сервисы.
🚩Основные компоненты
Выделение ресурсов - CPU, RAM, диски, сеть
Балансировка нагрузки равномерное распределение трафика
Горизонтальное и вертикальное масштабирование
Авто-масштабировани – динамическое добавление/удаление мощностей
🟠Выделение ресурсов (CPU, RAM, Диск, Сеть)
В виртуализированных средах (Kubernetes, Docker, AWS, KVM, ESXi) выделение ресурсов настраивается через лимиты и квоты.
🟠Балансировка нагрузки
Балансировка уменьшает нагрузку на один сервер и равномерно распределяет запросы.
Пример терраформа для AWS ALB
🟠Масштабирование (Горизонтальное и Вертикальное)
Горизонтальное масштабирование (добавление новых инстансов)
Kubernetes Horizontal Pod Autoscaler (HPA)
🟠Авто-масштабирование (AWS/GCP/Kubernetes)
AWS Auto Scaling Group
Ставь 👍 и забирай 📚 Базу знаний
Чтобы система работала стабильно и эффективно, нужно правильно распределять ресурсы, балансировать нагрузку и масштабировать сервисы.
🚩Основные компоненты
Выделение ресурсов - CPU, RAM, диски, сеть
Балансировка нагрузки равномерное распределение трафика
Горизонтальное и вертикальное масштабирование
Авто-масштабировани – динамическое добавление/удаление мощностей
🟠Выделение ресурсов (CPU, RAM, Диск, Сеть)
В виртуализированных средах (Kubernetes, Docker, AWS, KVM, ESXi) выделение ресурсов настраивается через лимиты и квоты.
yaml
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: my-app:latest
resources:
requests:
cpu: "500m" # Минимально 0.5 CPU
memory: "256Mi" # Минимально 256MB RAM
limits:
cpu: "1000m" # Максимально 1 CPU
memory: "512Mi" # Максимально 512MB RAM
🟠Балансировка нагрузки
Балансировка уменьшает нагрузку на один сервер и равномерно распределяет запросы.
nginx
upstream backend {
server app1:5000;
server app2:5000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}
Пример терраформа для AWS ALB
hcl
resource "aws_lb" "example" {
name = "my-load-balancer"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.lb_sg.id]
}
🟠Масштабирование (Горизонтальное и Вертикальное)
Горизонтальное масштабирование (добавление новых инстансов)
Kubernetes Horizontal Pod Autoscaler (HPA)
yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
🟠Авто-масштабирование (AWS/GCP/Kubernetes)
AWS Auto Scaling Group
hcl
resource "aws_autoscaling_group" "example" {
min_size = 2
max_size = 10
desired_capacity = 2
launch_configuration = aws_launch_configuration.example.name
}
Ставь 👍 и забирай 📚 Базу знаний
🔥3
🤔 Почему если поставить Docker и создать образ, он может не запускаться, в чём может быть причина?
1. Ошибки в Dockerfile: неправильные инструкции, отсутствующие зависимости или неверный базовый образ.
2. Проблемы с сетью: отсутствие необходимых портов или конфликт портов.
3. Отсутствие прав доступа: недостаточно прав для запуска контейнера.
4. Несоответствие архитектуры: образ может быть создан для другой платформы или процессора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Проблемы с сетью: отсутствие необходимых портов или конфликт портов.
3. Отсутствие прав доступа: недостаточно прав для запуска контейнера.
4. Несоответствие архитектуры: образ может быть создан для другой платформы или процессора.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 По какой причине inode могут закончиться?
Это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе.
🚩Причины исчерпания
🟠Большое количество мелких файлов
Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно.
🟠Недостаточное количество выделенных inode
При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов.
🟠Особенности файловой системы
Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой.
🚩Решения проблемы исчерпания
🟠Проверка использования
С помощью команды
🟠Очистка файловой системы
Удаление ненужных или временных файлов может освободить inode.
🟠Изменение файловой системы
Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode.
🟠Использование других файловых систем
Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов.
🟠Архивирование
Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode.
Ставь 👍 и забирай 📚 Базу знаний
Это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе.
🚩Причины исчерпания
🟠Большое количество мелких файлов
Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно.
🟠Недостаточное количество выделенных inode
При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов.
🟠Особенности файловой системы
Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой.
🚩Решения проблемы исчерпания
🟠Проверка использования
С помощью команды
df -i можно проверить, сколько inode используется и сколько ещё доступно в вашей файловой системе.🟠Очистка файловой системы
Удаление ненужных или временных файлов может освободить inode.
🟠Изменение файловой системы
Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode.
🟠Использование других файловых систем
Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов.
🟠Архивирование
Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode.
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Как прикрутить логирование к любому питон-скрипту?
Добавить в начало
Можно заменить print на logging.debug(), info(), warning() и т.д.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Добавить в начало
Можно заменить print на logging.debug(), info(), warning() и т.д.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1💊1
🤔 Что такое debezium?
Она позволяет отслеживать изменения в базах данных (INSERT, UPDATE, DELETE) в реальном времени и передавать их в Kafka, Elasticsearch, MongoDB и другие системы.
🚩Как работает Debezium?
Подключается к базе данных
(PostgreSQL, MySQL, MongoDB, Oracle и др.).
Слушает лог изменений (binlog, WAL, oplog и т. д.)
Формирует события в формате JSON
Передаёт их в Kafka или другую шину данных.
🚩Где используется?
Синхронизация данных между базами
Репликация данных в реальном времени
Отправка изменений в аналитические системы (Elasticsearch, ClickHouse)
Аудит и логирование изменений
🟠Пример работы с Kafka
Запускаем Debezium Connector для PostgreSQL*
При изменении данных в таблице, Kafka получит событие:
Ставь 👍 и забирай 📚 Базу знаний
Она позволяет отслеживать изменения в базах данных (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
}
}Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Можно ли откатить деплоймент?
Да. Kubernetes поддерживает откат на предыдущую ревизию:
- С помощью команды kubectl rollout undo deployment <имя>.
- Можно указать конкретную ревизию, если нужно вернуться дальше.
Это позволяет безопасно вернуться к предыдущей стабильной версии.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Да. Kubernetes поддерживает откат на предыдущую ревизию:
- С помощью команды kubectl rollout undo deployment <имя>.
- Можно указать конкретную ревизию, если нужно вернуться дальше.
Это позволяет безопасно вернуться к предыдущей стабильной версии.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие виды метрик в 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},
})
Ставь 👍 и забирай 📚 Базу знаний
🤔1💊1
🤔 Как отличается работа с PersistentVolume у Deployment и StatefulSet?
Deployment может использовать общий volume или один PVC для всех подов. В StatefulSet у каждого пода есть свой отдельный PVC, созданный на основе шаблона. Эти PVC жёстко связаны с именами подов и сохраняются даже после удаления подов. Это позволяет сохранять состояние у каждого инстанса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Deployment может использовать общий volume или один PVC для всех подов. В StatefulSet у каждого пода есть свой отдельный PVC, созданный на основе шаблона. Эти PVC жёстко связаны с именами подов и сохраняются даже после удаления подов. Это позволяет сохранять состояние у каждого инстанса.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое cherry pick?
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
🚩Когда используется
🟠Применение отдельных изменений
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
🟠Быстрое исправление ошибок
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
🟠Избежание сложного слияния
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
🚩Примеры использования
🟠Простого `cherry-pick`
Перенос одного коммита из другой ветки.
🟠Применения нескольких коммитов
Перенос нескольких коммитов из другой ветки.
🟠Применения диапазона коммитов
Перенос диапазона коммитов из другой ветки.
🚩Разрешение конфликтов
1⃣Разрешите конфликты в файлах.
2⃣Добавьте изменения в индекс
3⃣Завершите процесс
🚩Прерывание
Если вы хотите прервать процесс
Ставь 👍 и забирай 📚 Базу знаний
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
🚩Когда используется
🟠Применение отдельных изменений
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
🟠Быстрое исправление ошибок
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
🟠Избежание сложного слияния
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
cherry-pick позволяет аккуратно перенести только нужные коммиты.🚩Примеры использования
🟠Простого `cherry-pick`
Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick коммита
git cherry-pick <commit-hash>
🟠Применения нескольких коммитов
Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
🟠Применения диапазона коммитов
Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>
🚩Разрешение конфликтов
1⃣Разрешите конфликты в файлах.
2⃣Добавьте изменения в индекс
git add <filename>
3⃣Завершите процесс
cherry-pick git cherry-pick --continue
🚩Прерывание
Если вы хотите прервать процесс
cherry-pick, можно использовать командуgit cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Как доставлять билд в окружение?
Билд доставляется в окружение через CI/CD пайплайн. Этапы:
1. Сборка (build) — компиляция и упаковка артефакта.
2. Тестирование — юнит, интеграционные, e2e.
3. Артефакт хранится в реестре (например, Docker Registry, Nexus, Artifactory).
4. Деплой — с помощью:
- kubectl, Helm (в Kubernetes);
- Ansible, Terraform;
- скриптов или GitLab/GitHub Actions.
Процесс автоматизируется, чтобы исключить ошибки и ускорить доставку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Билд доставляется в окружение через CI/CD пайплайн. Этапы:
1. Сборка (build) — компиляция и упаковка артефакта.
2. Тестирование — юнит, интеграционные, e2e.
3. Артефакт хранится в реестре (например, Docker Registry, Nexus, Artifactory).
4. Деплой — с помощью:
- kubectl, Helm (в Kubernetes);
- Ansible, Terraform;
- скриптов или GitLab/GitHub Actions.
Процесс автоматизируется, чтобы исключить ошибки и ускорить доставку.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний