DevOps | Вопросы собесов
5.2K subscribers
30 photos
820 links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Что такое хендлеры?

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

🚩Примеры использования

🟠Обработчики событий в графических интерфейсах (GUI)
В GUI-приложениях хендлеры часто используются для обработки событий, таких как нажатия кнопок, движения мыши или ввод текста.
import tkinter as tk

def on_button_click():
print("Button clicked!")

root = tk.Tk()
button = tk.Button(root, text="Click me", command=on_button_click)
button.pack()
root.mainloop()


🟠Сигнальные хендлеры в операционных системах
В Unix-подобных системах хендлеры могут использоваться для обработки сигналов, таких как SIGINT или SIGTERM.
import signal
import time

def signal_handler(sig, frame):
print('Signal received:', sig)
exit(0)

signal.signal(signal.SIGINT, signal_handler)
print('Press Ctrl+C')
while True:
time.sleep(1)


🟠Обработчики в веб-серверах
В веб-приложениях хендлеры могут обрабатывать HTTP-запросы.
from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
return "Hello, World!"

if __name__ == '__main__':
app.run(debug=True)


🚩Зачем нужны хендлеры?

🟠Разделение кода
Хендлеры позволяют отделить логику обработки событий от основной логики приложения, что делает код более структурированным и читаемым.

🟠Удобство управления событиями
Хендлеры упрощают управление событиями и реакцией на них, что особенно важно в асинхронных и многозадачных приложениях.

🟠Гибкость и расширяемость
Хендлеры позволяют легко добавлять новые обработчики событий без изменения основной структуры программы.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое виртуальная память и зачем она нужна?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 На каких принципах работает докер?

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

🚩Основные принципы

🟠Контейнеризация
Контейнеризация позволяет запускать приложения и их зависимости в изолированных окружениях. Контейнеры предоставляют легкие и эффективные среды, которые включают все необходимое для запуска приложений.
Контейнеры: Легковесные, изолированные окружения, которые работают поверх ядра хостовой операционной системы.
Namespace: Механизм ядра Linux, обеспечивающий изоляцию процессов, сети, PID, пользовательских идентификаторов и монтирования файловых систем.
Cgroups: Контрольные группы в Linux, которые ограничивают и отслеживают использование ресурсов контейнерами, включая процессорное время, память и I/O.

🟠Использование образов
Образы Docker являются шаблонами для создания контейнеров. Образ включает в себя все необходимые компоненты, такие как код приложения, библиотеки, зависимости и конфигурационные файлы.
Dockerfile: Скрипт, содержащий инструкции по созданию образа. Используется для автоматизации создания образов.
Слойность: Каждый образ состоит из нескольких слоев, которые кэшируются и могут использоваться повторно, что ускоряет процесс сборки и уменьшает использование ресурсов.

🟠Изоляция и безопасность
Docker обеспечивает изоляцию приложений, что позволяет запускать несколько контейнеров на одном хосте без взаимного влияния.
Изоляция процессов: Каждый контейнер имеет свой собственный процессорный контекст, что исключает конфликты между приложениями.
Изоляция файловой системы: Контейнеры имеют свои собственные файловые системы, изолированные от файловой системы хостовой операционной системы.
Безопасность: Docker использует механизмы, такие как AppArmor, SELinux и seccomp, для обеспечения безопасности контейнеров.

🟠Управление сетями
Docker предоставляет гибкие возможности управления сетями для контейнеров, включая создание изолированных сетей и подключение контейнеров к различным сетям.
Bridge Network: Создает изолированную сеть для контейнеров на одном хосте.
Host Network: Контейнер использует сетевые интерфейсы хостовой операционной системы.
Overlay Network: Позволяет контейнерам на разных хостах взаимодействовать друг с другом.
Macvlan Network: Контейнеры получают собственные MAC-адреса и ведут себя как физические устройства в сети.

🟠Хранение данных
Docker поддерживает различные механизмы хранения данных для обеспечения сохранности и доступности данных контейнеров.
Volumes: Независимые от контейнеров хранилища данных, которые могут быть подключены к одному или нескольким контейнерам.
Bind Mounts: Позволяют монтировать директории хостовой файловой системы в контейнеры.
Tmpfs: Использует память хоста для хранения данных контейнера, что полезно для временных данных.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Какую методологию используете для планирования проектов (спринты и так далее)?

Чаще всего используются методологии Agile, такие как Scrum или Kanban. Scrum организует работу в спринты с регулярными встречами и ретроспективами, а Kanban визуализирует задачи на доске с гибким управлением приоритетами. Выбор зависит от специфики проекта и требований команды.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
🤔 Вопрос по linux зашли вы на сервер написали top видите надпись elan20 это хорошо или плохо?

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

🟠Пользовательская сессия
Если elan20 отображается в колонке "USER", это просто означает, что процессы принадлежат пользователю elan20. Это может быть нормально, если пользователь имеет разрешение выполнять эти процессы.

🟠Имя процесса
Если elan20 отображается в колонке "COMMAND", это может быть имя выполняемого процесса или скрипта. Нужно уточнить, что это за процесс и соответствует ли он ожидаемому поведению системы. Возможно, процесс называется так специально для каких-то внутренних нужд.

🟠Имя хоста
Иногда в заголовках top может отображаться имя хоста, к которому вы подключены. Это нормально и просто информирует вас о том, на каком сервере вы находитесь.

🚩Чтобы определить, хорошо это или плохо, следует оценить следующие аспекты

🟠Процессы пользователя
Проверьте, что за процессы запущены под пользователем elan20. Убедитесь, что они не потребляют чрезмерное количество ресурсов и являются допустимыми для данного пользователя.

🟠Безопасность
Убедитесь, что пользователь elan20 не запускает подозрительные или нежелательные процессы.

🟠Нагрузка на систему
Оцените, как процессы elan20 влияют на общую производительность системы. Если система перегружена из-за этих процессов, нужно принять меры.

🚩Пример анализа

1⃣Запустите top и посмотрите на колонки USER и COMMAND
top - 15:32:44 up  2:22,  1 user,  load average: 0.58, 0.72, 0.61
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 3.2 us, 1.1 sy, 0.0 ni, 95.4 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2052920 total, 532356 free, 1045812 used, 474752 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 732168 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1523 elan20 20 0 142576 7648 5764 S 0.7 0.4 0:02.34 sshd
1524 elan20 20 0 132876 3456 2340 S 0.3 0.2 0:01.87 bash


2⃣Убедитесь, что процессы под пользователем elan20 не являются подозрительными и не потребляют слишком много ресурсов.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🤔2
🤔 Для чего нужен бюджет ошибок?

Это допустимый уровень отказов или ошибок в системе, который помогает балансировать между инновациями и стабильностью. Он позволяет команде оценивать риски внедрения новых функций и поддерживать стабильность системы. Такой подход используется, например, в SRE (Site Reliability Engineering).

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2
🤔 Куда идет деплой из релизных веток?

Касается подходов к управлению релизами в системах контроля версий, таких как Git, и их интеграции с процессами CI/CD. Ответ зависит от структуры разработки и процесса релиза в конкретной команде или компании. Однако, в общем, деплой из релизных веток обычно идет на тестовые, стейджинговые или продакшн-окружения. Давайте разберем этот процесс подробнее.

🚩Что такое релизные ветки?

Это ветки, которые создаются на этапе, когда функционал и исправления, готовые к выпуску, отделяются от основной ветки разработки (например, main или develop). Они позволяют:
Заморозить текущий набор изменений для подготовки к релизу.
Отделить доработки и исправления релиза от активной разработки.
Упростить процесс тестирования и последующего деплоя.

🚩Куда обычно идет деплой из релизных веток?

🟠Тестовое окружение (QA environment)
На тестовое окружение деплой из релизной ветки осуществляется для прохождения проверок качества: Автоматизированное и ручное тестирование.
Проверка производительности, безопасности и других аспектов.
stages:
- test
deploy:
stage: test
script:
- echo "Deploying release branch to QA"
- ./deploy.sh qa
only:
- release/*


🟠Стейджинговое окружение (Staging)
После успешного прохождения тестов релизную ветку деплоят в стейджинг. Это окружение максимально похоже на продакшн и используется для финального тестирования: Проверка совместимости с продакшн-системами.
Демонстрация функционала заказчикам или заинтересованным сторонам.
stages:
- staging
deploy:
stage: staging
script:
- echo "Deploying release branch to Staging"
- ./deploy.sh staging
only:
- release/*


🟠Продакшн (Production)
После прохождения всех этапов тестирования изменения из релизной ветки деплоятся в продакшн: Обычно это делается автоматически после финального подтверждения.
В некоторых командах финальный мерж релизной ветки в main инициирует деплой.
stages:
- production
deploy:
stage: production
script:
- echo "Deploying release branch to Production"
- ./deploy.sh production
only:
- release/*


🚩Зачем это нужно?

🟠Изоляция релиза
Релизные ветки позволяют избежать включения новых, неподготовленных изменений в текущий релиз.
🟠Гибкость
Если в процессе тестирования или релиза найдены баги, их можно исправить прямо в релизной ветке без влияния на разработку.
🟠Управление рисками
Релизные ветки упрощают управление разными стадиями разработки и релиза.

🚩Пример использования

1⃣Разработчик создает ветку release/1.0.0 от develop.
2⃣Выполняются тесты на QA окружении.
3⃣Исправляются баги в release/1.0.0, и изменения деплоятся на стейджинг.
4⃣После успешного тестирования ветка мержится в main, и начинается деплой в продакшн.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🤔 Что такое слои?

Слои создаются каждой инструкцией (например, FROM, RUN, COPY) и представляют собой файловую систему, добавляемую поверх предыдущих слоёв. Каждый слой кэшируется, что ускоряет процесс сборки, если слои не изменялись. Финальный образ — это объединение всех слоёв.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4
🤔 Приведи пример изменяемых и неизменяемых типах данных?

В Python типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменить их содержимое после создания.

🚩Изменяемые типы данных (mutable)

Это те, содержимое которых можно менять после создания объекта, не создавая новый объект.

Списки (list)
my_list = [1, 2, 3]
my_list.append(4) # Добавляем элемент
print(my_list) # [1, 2, 3, 4]


Словари (dict)
my_dict = {'a': 1, 'b': 2}
my_dict['c'] = 3 # Добавляем ключ-значение
print(my_dict) # {'a': 1, 'b': 2, 'c': 3}


Множества (set)
my_set = {1, 2, 3}
my_set.add(4) # Добавляем элемент
print(my_set) # {1, 2, 3, 4}


🚩Неизменяемые типы данных (immutable)

Неизменяемые типы данных нельзя изменить после их создания. Любая операция, изменяющая объект, приводит к созданию нового объекта.

Кортежи (tuple)
my_tuple = (1, 2, 3)
# my_tuple[0] = 0 # Ошибка: TypeError
print(my_tuple) # (1, 2, 3)


Строки (str)
my_string = "Hello"
# my_string[0] = "h" # Ошибка: TypeError
new_string = my_string.replace("H", "h")
print(new_string) # "hello"


Числа (int, float, complex)
x = 42
x += 1 # Создается новый объект
print(x) # 43


Неизменяемые множества (frozenset)
my_frozenset = frozenset([1, 2, 3])
# my_frozenset.add(4) # Ошибка: AttributeError
print(my_frozenset) # frozenset({1, 2, 3})



🚩Почему это важно?

🟠Оптимизация памяти
Неизменяемые объекты могут использоваться многократно без создания новых копий.
🟠Безопасность
Неизменяемые объекты защищены от изменений, что важно для многопоточных программ.
🟠Функциональное программирование
Неизменяемость — основа для предсказуемого поведения кода.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Зачем нужен multi-stage?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5
🤔 Как в линуксе посмотреть список дескрипторов файлов?

В 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 <PID>


Пример для всех процессов
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


🚩Почему важно знать про дескрипторы?

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤔 Что такое API и зачем оно нужно?

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

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
🤔 В чём преимущество Kubernetes как платформы?

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

🚩Основные плюсы

Автоматизация управления приложениями
Kubernetes автоматически запускает, останавливает и перезапускает контейнеры при сбоях. Поддерживает заданное число экземпляров (реплик) приложений, перезапуская или создавая их при необходимости.

Масштабирование (горизонтальное и вертикальное)
Ручное: Легко увеличить или уменьшить количество контейнеров (поды) для приложения. Автоматическое: Используя Horizontal Pod Autoscaler (HPA), Kubernetes добавляет ресурсы при увеличении нагрузки.

Высокая доступность (HA)
Kubernetes поддерживает отказоустойчивость: Если один узел (node) выходит из строя, поды перемещаются на другие узлы. Внутренний балансировщик нагрузки распределяет трафик между подами.

Платформонезависимость
Kubernetes работает в любых средах: Локальных (например, Minikube). В публичных облаках (AWS, Google Cloud, Azure). В гибридных и on-premise инфраструктурах.

Управление конфигурацией и секретами
Kubernetes упрощает работу с настройками: ConfigMaps: Для управления конфигурационными данными.
Secrets: Для безопасного хранения конфиденциальной информации, например, ключей API или паролей.

Эффективное использование ресурсов
Kubernetes помогает оптимизировать потребление CPU и памяти: Устанавливая минимальные и максимальные лимиты ресурсов для каждого приложения. Перераспределяя ресурсы между приложениями.

Расширяемость
Kubernetes поддерживает плагины и кастомизацию: Сетевые плагины (Calico, Flannel) для настройки сети. Системы мониторинга (Prometheus, Grafana). Операторы для автоматизации сложных задач.

Сообщество и экосистема
Kubernetes поддерживается большинством крупных облачных провайдеров. Обширная экосистема инструментов: Helm для управления шаблонами, ArgoCD для GitOps, Istio для сетевых взаимодействий.

🚩Когда особенно полезен?

Разработка микросервисных архитектур. Частые релизы и автоматизация CI/CD. Работа с масштабируемыми приложениями. Использование гибридных или мультиоблачных решений.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1
🤔 Что такое blue-green deployment?

Это стратегия развертывания, при которой две идентичные среды (blue и green) используются для обновления приложения. Текущая версия работает в одной среде (blue), а новая разворачивается в другой (green). После тестирования новая версия переключается в продакшн без простоев.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4
🤔 Что такое container network module в докере?

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

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

🟠Sandbox
Это изолированная среда, где настраиваются сетевые интерфейсы контейнера, такие как IP-адреса, маршруты и DNS. Что включает: veth-пара интерфейсов (виртуальный Ethernet): соединяет контейнер с внешней сетью. Конфигурации маршрутов и сетевых правил.

🟠Endpoint
Точка подключения контейнера к сети. Функции: Обеспечивает контейнеру связь с другими контейнерами или внешними сетями. Соединяет Sandbox с Network.

🟠Network
Логическая сущность, объединяющая Endpoints для обеспечения взаимодействия контейнеров. Типы сетей в Docker:
bridge: Локальная сеть, позволяющая контейнерам взаимодействовать на одном хосте.
host: Контейнеры используют сетевой стек хоста без изоляции.
none: Сеть отключена; контейнер полностью изолирован.
overlay: Распределенная сеть для связи контейнеров на разных хостах.
macvlan: Контейнеры получают прямой доступ к физической сети.

🚩Как это работает в Docker

Создается Sandbox, где настраиваются сетевые параметры контейнера.
Создается Endpoint, который подключает контейнер к выбранной сети.
Endpoint добавляется в Network, что позволяет контейнеру взаимодействовать с другими узлами.

🚩Плюсы

Гибкость
Легко подключать контейнеры к различным типам сетей.
Изоляция
Обеспечивает безопасность, изолируя сетевые пространства контейнеров.
Расширяемость
CNM поддерживает сторонние плагины для интеграции с другими сетевыми решениями (например, Calico, Flannel).
Управляемость
Позволяет контролировать настройки сети через команды Docker.

🚩Пример создания сети

1⃣Создание сети
docker network create my_bridge


2⃣Подключение контейнера к сети
docker run --network my_bridge -d nginx


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Что будет происходить при kubectl apply?

Команда kubectl apply применяет манифесты Kubernetes к кластеру, создавая или обновляя ресурсы. Если ресурс уже существует, Kubernetes сравнивает его текущее состояние с новым и вносит изменения. Это позволяет применять изменения декларативно, без удаления ресурса.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3👾2
🤔 Какая разница между deployment и stateful set?

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

🚩Что такое Deployment?

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

🟠Бесстаточные приложения
Примеры: веб-серверы, микросервисы, обработка очередей. Каждый под одинаков, и потеря одного из них не нарушает работу приложения.
🟠Порядок развертывания
Поды запускаются и удаляются в любом порядке. Если под удаляется, создается новый с другой идентичностью.
🟠Сетевой доступ
Поды доступны через Service, но они не сохраняют фиксированные сетевые имена.
🟠Обновления
Поддерживает обновления без простоя (rolling updates). Умеет откатываться на предыдущую версию.

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.21.6


🚩Что такое StatefulSet?

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

🟠Состояние приложения
Примеры: базы данных (MySQL, PostgreSQL), системы очередей (Kafka), распределенные системы (Cassandra, Elasticsearch). Каждый под имеет уникальный идентификатор и связан с определенным хранилищем данных.

🟠Порядок развертывания
Поды запускаются, обновляются и удаляются строго в определенном порядке (0, 1, 2...). Это важно для приложений, где один узел должен быть доступен перед запуском другого.

🟠Сетевой доступ
Каждый под имеет фиксированное имя (например, pod-0, pod-1), что упрощает взаимодействие между подами.

🟠Обновления
Выполняются поэтапно, с учетом порядка.

🟠Постоянство данных
Поды используют PersistentVolumeClaim (PVC) для сохранения данных. Даже если под удален, данные остаются на диске и доступны после повторного запуска.

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: "mysql-service"
replicas: 3
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi


🚩Когда использовать что?

🟠Используйте `Deployment`
Бесстаточное. Требует быстрой масштабируемости. Не зависит от порядка запуска подов.
🟠Используйте `StatefulSet`
Требует сохранения данных между перезапусками. Зависит от фиксированной идентичности подов. Требует упорядоченного запуска или удаления.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥41👍1👾1
🤔 Чем отличаются Deployment и ReplicaSet?

Управляет поддержанием заданного числа реплик подов, обеспечивая их наличие и работоспособность. Deployment — более высокий уровень абстракции, который использует ReplicaSet для управления подами и добавляет возможности для обновлений, откатов и управления версиями.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥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()


🚩Плюсы использования

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

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Что такое провайдеры в Terraform?

Это плагины, которые позволяют взаимодействовать с облачными сервисами, API или другими системами.
1. Они управляют ресурсами, такими как виртуальные машины, базы данных или сети.
2. Каждый провайдер содержит набор команд для создания, обновления и удаления инфраструктуры.
3. Примеры: AWS, Azure, Google Cloud.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1