Это два различных подхода в разработке и доставке программного обеспечения, которые имеют разные цели и методы, но могут взаимодополнять друг друга. Давайте рассмотрим основные различия и связи между ними.
Увеличение гибкости и адаптивности разработки программного обеспечения.
Разработка проходит в коротких циклах (итерациях), что позволяет регулярно представлять работающее программное обеспечение.
Регулярные встречи (например, ежедневные стендапы, спринт-ревью) для получения обратной связи от команды и заинтересованных сторон.
Команды, состоящие из разработчиков, тестировщиков, аналитиков и других специалистов, работают вместе над проектом.
Постоянное взаимодействие с клиентами для уточнения требований и проверки соответствия продукта их ожиданиям.
Фреймворки: Scrum, Kanban, XP (Extreme Programming).
Увеличение скорости и качества доставки программного обеспечения через автоматизацию и улучшение сотрудничества между разработчиками и операционными командами.
Автоматизация сборки, тестирования и развертывания кода, чтобы изменения могли быстро и надежно попасть в рабочую среду.
Использование кода для управления и автоматизации инфраструктуры, что делает процессы повторяемыми и предсказуемыми.
Постоянное отслеживание состояния приложений и инфраструктуры для быстрого обнаружения и устранения проблем.
Улучшение взаимодействия между разработчиками и операционными инженерами через общие инструменты и процессы.
Инструменты: Jenkins, Docker, Kubernetes, Ansible, Terraform, Prometheus, Grafana.
Agile: Сфокусирован на процессе разработки и управлении проектами, улучшая гибкость и адаптивность команды разработки.
DevOps: Сфокусирован на процессе доставки и эксплуатации, улучшая автоматизацию и сотрудничество между разработчиками и операционными командами.
Agile: Включает кросс-функциональные команды, которые работают вместе над созданием программного обеспечения.
DevOps: Включает команды разработчиков и операций, которые совместно работают над автоматизацией и улучшением процессов развертывания и эксплуатации.
Agile: Методы Scrum, Kanban и другие Agile-практики, которые улучшают процесс управления проектами.
DevOps: Инструменты и практики для автоматизации развертывания, мониторинга и управления инфраструктурой.
Помогает улучшить процесс разработки, делая его более гибким и отзывчивым к изменениям.
Дополняет Agile, автоматизируя развертывание и эксплуатацию программного обеспечения, что позволяет быстрее доставлять изменения пользователям.
Может использовать Scrum для управления спринтами и задачами.
Могут быть использованы для автоматизации CI/CD пайплайнов, чтобы каждая итерация разработки могла быть быстро и надежно развернута на серверы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Команда
kill
в Linux может отправлять разные сигналы процессам, включая как SIGTERM
, так и SIGKILL
. Основное различие между ними заключается в том, как они обрабатываются процессами.Это сигнал завершения, который может быть перехвачен и обработан процессом. Процесс может выполнить очистку (освободить ресурсы, сохранить состояние и т.д.) перед завершением. По умолчанию команда
kill
отправляет именно этот сигнал. Пример команды: kill <PID>
, где <PID>
- идентификатор процесса.Это сигнал немедленного завершения, который не может быть перехвачен процессом. Процесс завершается мгновенно без выполнения какой-либо очистки. Используется, когда процесс не реагирует на другие сигналы. Пример команды:
kill -9 <PID>
.Когда вы используете команду
kill
без указания сигнала, по умолчанию отправляется сигнал SIGTERM
.kill <PID>
Для отправки сигнала
SIGKILL
используется флаг -9
.kill -9 <PID>
Команда:
kill 1234
Процесс с идентификатором 1234 получит сигнал
SIGTERM
и, если он запрограммирован для обработки этого сигнала, может выполнить завершение с очисткой.Команда:
kill -9 1234
Процесс с идентификатором 1234 будет немедленно завершен без возможности выполнения какой-либо очистки.
Используйте, когда хотите корректно завершить процесс, предоставив ему возможность освободить ресурсы и завершить работу корректно.
Используйте в случае, если процесс не отвечает на
SIGTERM
или находится в зависшем состоянии.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Anonymous Quiz
73%
Тип службы, доступный только внутри кластера
8%
Инструмент для управления конфигурацией
7%
Система мониторинга сети
12%
Инструмент для автоматического масштабирования
Это функции или объекты, которые обрабатывают определенные события или сигналы. Они позволяют системе или программе реагировать на определенные действия, такие как нажатия кнопок, поступление данных, сигналы от операционной системы и другие события.
В 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
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
Запуск команды
top
на сервере выводит информацию о запущенных процессах, использовании ресурсов и общей загрузке системы. В данном случае, если вы видите надпись elan20
, это скорее всего обозначает имя пользователя или хоста, под которым выполняется процесс или который запустил процесс. Важно уточнить, в каком контексте вы видите эту надпись. Если
elan20
отображается в колонке "USER", это просто означает, что процессы принадлежат пользователю elan20
. Это может быть нормально, если пользователь имеет разрешение выполнять эти процессы.Если
elan20
отображается в колонке "COMMAND", это может быть имя выполняемого процесса или скрипта. Нужно уточнить, что это за процесс и соответствует ли он ожидаемому поведению системы. Возможно, процесс называется так специально для каких-то внутренних нужд.Иногда в заголовках
top
может отображаться имя хоста, к которому вы подключены. Это нормально и просто информирует вас о том, на каком сервере вы находитесь.Проверьте, что за процессы запущены под пользователем
elan20
. Убедитесь, что они не потребляют чрезмерное количество ресурсов и являются допустимыми для данного пользователя.Убедитесь, что пользователь
elan20
не запускает подозрительные или нежелательные процессы.Оцените, как процессы
elan20
влияют на общую производительность системы. Если система перегружена из-за этих процессов, нужно принять меры.top
и посмотрите на колонки USER и COMMANDtop - 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
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🤔2
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥11👍2
Касается подходов к управлению релизами в системах контроля версий, таких как Git, и их интеграции с процессами CI/CD. Ответ зависит от структуры разработки и процесса релиза в конкретной команде или компании. Однако, в общем, деплой из релизных веток обычно идет на тестовые, стейджинговые или продакшн-окружения. Давайте разберем этот процесс подробнее.
Это ветки, которые создаются на этапе, когда функционал и исправления, готовые к выпуску, отделяются от основной ветки разработки (например,
main
или develop
). Они позволяют:Заморозить текущий набор изменений для подготовки к релизу.
Отделить доработки и исправления релиза от активной разработки.
Упростить процесс тестирования и последующего деплоя.
На тестовое окружение деплой из релизной ветки осуществляется для прохождения проверок качества: Автоматизированное и ручное тестирование.
Проверка производительности, безопасности и других аспектов.
stages:
- test
deploy:
stage: test
script:
- echo "Deploying release branch to QA"
- ./deploy.sh qa
only:
- release/*
После успешного прохождения тестов релизную ветку деплоят в стейджинг. Это окружение максимально похоже на продакшн и используется для финального тестирования: Проверка совместимости с продакшн-системами.
Демонстрация функционала заказчикам или заинтересованным сторонам.
stages:
- staging
deploy:
stage: staging
script:
- echo "Deploying release branch to Staging"
- ./deploy.sh staging
only:
- release/*
После прохождения всех этапов тестирования изменения из релизной ветки деплоятся в продакшн: Обычно это делается автоматически после финального подтверждения.
В некоторых командах финальный мерж релизной ветки в
main
инициирует деплой.stages:
- production
deploy:
stage: production
script:
- echo "Deploying release branch to Production"
- ./deploy.sh production
only:
- release/*
Релизные ветки позволяют избежать включения новых, неподготовленных изменений в текущий релиз.
Если в процессе тестирования или релиза найдены баги, их можно исправить прямо в релизной ветке без влияния на разработку.
Релизные ветки упрощают управление разными стадиями разработки и релиза.
release/1.0.0
от develop
.release/1.0.0
, и изменения деплоятся на стейджинг.main
, и начинается деплой в продакшн.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4
В Python типы данных делятся на изменяемые (mutable) и неизменяемые (immutable) в зависимости от того, можно ли изменить их содержимое после создания.
Это те, содержимое которых можно менять после создания объекта, не создавая новый объект.
Списки (
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}
Неизменяемые типы данных нельзя изменить после их создания. Любая операция, изменяющая объект, приводит к созданию нового объекта.
Кортежи (
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
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5
В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы
/proc
, которая содержит информацию о процессах, включая их открытые файловые дескрипторы.Каждый процесс в 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
(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
(из пакета 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
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14
Это платформа для оркестрации контейнеров, которая упрощает развертывание, управление и масштабирование приложений. Она имеет ряд ключевых преимуществ, которые делают её популярной в DevOps и облачных решениях.
Kubernetes автоматически запускает, останавливает и перезапускает контейнеры при сбоях. Поддерживает заданное число экземпляров (реплик) приложений, перезапуская или создавая их при необходимости.
Ручное: Легко увеличить или уменьшить количество контейнеров (поды) для приложения. Автоматическое: Используя Horizontal Pod Autoscaler (HPA), Kubernetes добавляет ресурсы при увеличении нагрузки.
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) используются для обновления приложения. Текущая версия работает в одной среде (blue), а новая разворачивается в другой (green). После тестирования новая версия переключается в продакшн без простоев.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4
Это архитектурная модель, разработанная Docker для управления сетями контейнеров. Она описывает, как создаются, управляются и взаимодействуют сетевые компоненты в Docker-контейнерах. CNM служит основой для организации сетей Docker и позволяет подключать контейнеры к различным сетевым средам, обеспечивая гибкость, масштабируемость и безопасность.
Это изолированная среда, где настраиваются сетевые интерфейсы контейнера, такие как IP-адреса, маршруты и DNS. Что включает: veth-пара интерфейсов (виртуальный Ethernet): соединяет контейнер с внешней сетью. Конфигурации маршрутов и сетевых правил.
Точка подключения контейнера к сети. Функции: Обеспечивает контейнеру связь с другими контейнерами или внешними сетями. Соединяет Sandbox с Network.
Логическая сущность, объединяющая Endpoints для обеспечения взаимодействия контейнеров. Типы сетей в Docker:
bridge: Локальная сеть, позволяющая контейнерам взаимодействовать на одном хосте.
host: Контейнеры используют сетевой стек хоста без изоляции.
none: Сеть отключена; контейнер полностью изолирован.
overlay: Распределенная сеть для связи контейнеров на разных хостах.
macvlan: Контейнеры получают прямой доступ к физической сети.
Создается Sandbox, где настраиваются сетевые параметры контейнера.
Создается Endpoint, который подключает контейнер к выбранной сети.
Endpoint добавляется в Network, что позволяет контейнеру взаимодействовать с другими узлами.
Легко подключать контейнеры к различным типам сетей.
Обеспечивает безопасность, изолируя сетевые пространства контейнеров.
CNM поддерживает сторонние плагины для интеграции с другими сетевыми решениями (например, Calico, Flannel).
Позволяет контролировать настройки сети через команды Docker.
docker network create my_bridge
docker run --network my_bridge -d nginx
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥3👾2