This media is not supported in your browser
VIEW IN TELEGRAM
SRE Roadmap
Дорожная карта, чтобы стать SRE (концепции > инструменты)
https://github.com/teivah/sre-roadmap
Подпишись 👉@devopslib
Дорожная карта, чтобы стать SRE (концепции > инструменты)
https://github.com/teivah/sre-roadmap
Подпишись 👉@devopslib
👍3
🔥 eBPF — новая эра мониторинга и безопасности в Kubernetes
В 2025 году eBPF (Extended Berkeley Packet Filter) стал стандартом для высокоэффективного мониторинга и безопасности в Kubernetes. Это мощный инструмент, который позволяет инспектировать сетевой трафик, системные вызовы и поведение приложений без оверхеда, присущего традиционным агентам.
🔹 Что даёт eBPF в Kubernetes?
✅ Безагентный мониторинг – отслеживание сетевой активности, производительности, логов, запросов к ядру
✅ Снижение нагрузки – нет необходимости в сторонних DaemonSet или sidecar-контейнерах
✅ Глубокий анализ трафика – выявление аномалий, сетевых атак, скрытых угроз
✅ Реализация политики безопасности – динамическое управление доступом и фильтрация трафика
🔹 Где уже применяют eBPF?
🚀 Cilium – продвинутый CNI для Kubernetes на базе eBPF
🛡️ Tetragon – мониторинг безопасности с нулевым оверхедом
📊 Pixie – трассировка и анализ приложений без инвазивного кода
⚡ Вывод:
eBPF – это будущее Kubernetes-обсервабилити и безопасности. Всё больше компаний отказываются от громоздких решений в пользу лёгких и мощных eBPF-инструментов.
❓ А ты уже пробовал eBPF в продакшене? Делись опытом!
Подпишись 👉@devopslib
В 2025 году eBPF (Extended Berkeley Packet Filter) стал стандартом для высокоэффективного мониторинга и безопасности в Kubernetes. Это мощный инструмент, который позволяет инспектировать сетевой трафик, системные вызовы и поведение приложений без оверхеда, присущего традиционным агентам.
🔹 Что даёт eBPF в Kubernetes?
✅ Безагентный мониторинг – отслеживание сетевой активности, производительности, логов, запросов к ядру
✅ Снижение нагрузки – нет необходимости в сторонних DaemonSet или sidecar-контейнерах
✅ Глубокий анализ трафика – выявление аномалий, сетевых атак, скрытых угроз
✅ Реализация политики безопасности – динамическое управление доступом и фильтрация трафика
🔹 Где уже применяют eBPF?
🚀 Cilium – продвинутый CNI для Kubernetes на базе eBPF
🛡️ Tetragon – мониторинг безопасности с нулевым оверхедом
📊 Pixie – трассировка и анализ приложений без инвазивного кода
⚡ Вывод:
eBPF – это будущее Kubernetes-обсервабилити и безопасности. Всё больше компаний отказываются от громоздких решений в пользу лёгких и мощных eBPF-инструментов.
❓ А ты уже пробовал eBPF в продакшене? Делись опытом!
Подпишись 👉@devopslib
👍3
🔥 DevOps 2025: GitHub Copilot для CI/CD – автоматизация следующего уровня!
В 2024 году GitHub Copilot вышел далеко за рамки помощника для кодинга. Теперь он активно внедряется в процессы DevOps, автоматизируя рутинные задачи CI/CD. Что это значит для нас?
💡 Автоматическая генерация GitHub Actions
Copilot уже умеет анализировать репозиторий и предлагать готовые workflow'ы! Например, если у вас есть Dockerfile и Helm Chart, он сам предложит билд и деплой через GitHub Actions.
⚡ Интеграция с Terraform и Ansible
Вы пишете инфраструктурный код? Теперь Copilot может не только автодополнять, но и помогать дебажить ошибки в конфигурациях. Особенно полезно при создании сложных модулей Terraform.
🔄 Сценарии автоматического rollback'а
Copilot может помочь написать стратегию откатов, анализируя ошибки в логах. Больше никаких ручных правок в экстренных ситуациях!
🚀 Оптимизация CI/CD пайплайнов
Copilot изучает существующие пайплайны и предлагает более эффективные способы их оптимизации. Например, кеширование сборок, распараллеливание тестов или переход на более быстрые runner'ы.
Будущее DevOps – это не просто автоматизация, а автоматизация автоматизации! Готовы к новому уровню эффективности?
Подпишись 👉@devopslib
В 2024 году GitHub Copilot вышел далеко за рамки помощника для кодинга. Теперь он активно внедряется в процессы DevOps, автоматизируя рутинные задачи CI/CD. Что это значит для нас?
💡 Автоматическая генерация GitHub Actions
Copilot уже умеет анализировать репозиторий и предлагать готовые workflow'ы! Например, если у вас есть Dockerfile и Helm Chart, он сам предложит билд и деплой через GitHub Actions.
⚡ Интеграция с Terraform и Ansible
Вы пишете инфраструктурный код? Теперь Copilot может не только автодополнять, но и помогать дебажить ошибки в конфигурациях. Особенно полезно при создании сложных модулей Terraform.
🔄 Сценарии автоматического rollback'а
Copilot может помочь написать стратегию откатов, анализируя ошибки в логах. Больше никаких ручных правок в экстренных ситуациях!
🚀 Оптимизация CI/CD пайплайнов
Copilot изучает существующие пайплайны и предлагает более эффективные способы их оптимизации. Например, кеширование сборок, распараллеливание тестов или переход на более быстрые runner'ы.
Будущее DevOps – это не просто автоматизация, а автоматизация автоматизации! Готовы к новому уровню эффективности?
Подпишись 👉@devopslib
👍2
🚀 CI/CD для Kubernetes: Как ускорить деплой?
Автоматизация развертывания в Kubernetes — не просто удобство, а необходимость для DevOps. Как ускорить и упростить этот процесс?
✅ Используйте GitOps
Инструменты вроде ArgoCD и Flux помогут автоматизировать доставки, минимизируя человеческий фактор. Git — единственный источник правды.
✅ Оптимизируйте образ Docker
Чем меньше слоев, тем быстрее сборка и деплой. Используйте multistage builds, alpine-образы и кэширование.
✅ Правильная стратегия обновления
Не используйте
✅ Параллельные пайплайны
Разбивайте CI/CD пайплайн на этапы. Например, сборка образа и тестирование могут идти параллельно.
✅ Подключите K8s-aware CI/CD
Tekton, Jenkins X, Keptn — все они заточены под Kubernetes. Их встроенные механики позволяют лучше управлять деплоями.
⚡ Чем быстрее и стабильнее CI/CD, тем быстрее фича уходит в прод.
Подпишись 👉@devopslib
Автоматизация развертывания в Kubernetes — не просто удобство, а необходимость для DevOps. Как ускорить и упростить этот процесс?
✅ Используйте GitOps
Инструменты вроде ArgoCD и Flux помогут автоматизировать доставки, минимизируя человеческий фактор. Git — единственный источник правды.
✅ Оптимизируйте образ Docker
Чем меньше слоев, тем быстрее сборка и деплой. Используйте multistage builds, alpine-образы и кэширование.
✅ Правильная стратегия обновления
Не используйте
latest
. Оптимально — RollingUpdate или Canary. Они дают контроль над обновлениями, снижая риски. ✅ Параллельные пайплайны
Разбивайте CI/CD пайплайн на этапы. Например, сборка образа и тестирование могут идти параллельно.
✅ Подключите K8s-aware CI/CD
Tekton, Jenkins X, Keptn — все они заточены под Kubernetes. Их встроенные механики позволяют лучше управлять деплоями.
⚡ Чем быстрее и стабильнее CI/CD, тем быстрее фича уходит в прод.
Подпишись 👉@devopslib
👍3
Как мониторить Kubernetes без боли? 🔥
Мониторинг Kubernetes – это вечная головная боль для DevOps-инженеров. Кластеры растут, метрик становится всё больше, а Prometheus раздувается до размеров Годзиллы. Как справиться с этим и не утонуть в алертах?
🔹 Используй правильные метрики – не собирай всё подряд. Ориентируйся на RED (Rate, Errors, Duration) для сервисов и USE (Utilization, Saturation, Errors) для инфраструктуры.
🔹 Прометей + Thanos/Loki – если у тебя растущий кластер, стандартный Prometheus быстро захлебнётся. Используй Thanos или Cortex для горизонтального масштабирования. А для логов – Loki, чтобы не раздувать storage.
🔹 Grafana Mimir – новая альтернатива Prometheus, позволяющая хранить кучу метрик в распределённой архитектуре.
🔹 Автоматизация алертов – фильтруй шум через Alertmanager. Заводи дашборды в Grafana, а не забивай Slack алертами по каждому чиху.
🔹 Service Mesh как источник данных – если у тебя Istio или Linkerd, используй их встроенные метрики для мониторинга сервисов.
🔹 EBPF для продвинутого мониторинга – инструменты, такие как Pixie или Cilium, могут давать глубокую телеметрию с минимальной нагрузкой на кластер.
Соблюдая эти принципы, можно сократить хаос и создать удобную систему мониторинга, которая поможет видеть реальную картину состояния инфраструктуры.
Подпишись 👉 @devopslib
Мониторинг Kubernetes – это вечная головная боль для DevOps-инженеров. Кластеры растут, метрик становится всё больше, а Prometheus раздувается до размеров Годзиллы. Как справиться с этим и не утонуть в алертах?
🔹 Используй правильные метрики – не собирай всё подряд. Ориентируйся на RED (Rate, Errors, Duration) для сервисов и USE (Utilization, Saturation, Errors) для инфраструктуры.
🔹 Прометей + Thanos/Loki – если у тебя растущий кластер, стандартный Prometheus быстро захлебнётся. Используй Thanos или Cortex для горизонтального масштабирования. А для логов – Loki, чтобы не раздувать storage.
🔹 Grafana Mimir – новая альтернатива Prometheus, позволяющая хранить кучу метрик в распределённой архитектуре.
🔹 Автоматизация алертов – фильтруй шум через Alertmanager. Заводи дашборды в Grafana, а не забивай Slack алертами по каждому чиху.
🔹 Service Mesh как источник данных – если у тебя Istio или Linkerd, используй их встроенные метрики для мониторинга сервисов.
🔹 EBPF для продвинутого мониторинга – инструменты, такие как Pixie или Cilium, могут давать глубокую телеметрию с минимальной нагрузкой на кластер.
Соблюдая эти принципы, можно сократить хаос и создать удобную систему мониторинга, которая поможет видеть реальную картину состояния инфраструктуры.
Подпишись 👉 @devopslib
👍2
📢 Как сократить время деплоя: лучшие практики DevOps 🚀
Быстрые и стабильные деплои – мечта любого DevOps-инженера. Давайте разберем несколько практик, которые помогут ускорить процесс и минимизировать простои.
✅ Параллельные пайплайны
Запускайте шаги CI/CD параллельно, где это возможно. Например, сборка, тестирование и сканирование кода могут выполняться одновременно.
✅ Кэширование артефактов
Используйте кэш для зависимостей, Docker-образов и результатов промежуточных шагов. Это значительно ускоряет сборку.
✅ Голубое/Зеленое развертывание (Blue-Green Deployment)
Обновляем сервис на отдельной инфраструктуре и мгновенно переключаем трафик – никаких простоев!
✅ Канареечный релиз (Canary Deployment)
Включаем новую версию сначала для части пользователей, анализируем метрики и плавно масштабируем.
✅ Оптимизация образов
Минимизируйте размер Docker-образов – меньше размер, быстрее скачивание и запуск. Используйте
✅ Горизонтальное масштабирование билд-агентов
Запускайте дополнительные билд-агенты при высокой нагрузке, чтобы ускорить выполнение CI/CD-процессов.
✅ Feature Flags
Разрешаем включать и выключать новые фичи без необходимости полного релиза, снижая риски.
🚀 Автоматизируем, оптимизируем, ускоряем! Как у вас устроены деплои? Делитесь в комментариях!
Подпишись 👉@devopslib
Быстрые и стабильные деплои – мечта любого DevOps-инженера. Давайте разберем несколько практик, которые помогут ускорить процесс и минимизировать простои.
✅ Параллельные пайплайны
Запускайте шаги CI/CD параллельно, где это возможно. Например, сборка, тестирование и сканирование кода могут выполняться одновременно.
✅ Кэширование артефактов
Используйте кэш для зависимостей, Docker-образов и результатов промежуточных шагов. Это значительно ускоряет сборку.
✅ Голубое/Зеленое развертывание (Blue-Green Deployment)
Обновляем сервис на отдельной инфраструктуре и мгновенно переключаем трафик – никаких простоев!
✅ Канареечный релиз (Canary Deployment)
Включаем новую версию сначала для части пользователей, анализируем метрики и плавно масштабируем.
✅ Оптимизация образов
Минимизируйте размер Docker-образов – меньше размер, быстрее скачивание и запуск. Используйте
distroless
или alpine
. ✅ Горизонтальное масштабирование билд-агентов
Запускайте дополнительные билд-агенты при высокой нагрузке, чтобы ускорить выполнение CI/CD-процессов.
✅ Feature Flags
Разрешаем включать и выключать новые фичи без необходимости полного релиза, снижая риски.
🚀 Автоматизируем, оптимизируем, ускоряем! Как у вас устроены деплои? Делитесь в комментариях!
Подпишись 👉@devopslib
👍3
📌Лучшие практики для CI/CD-пайплайнов
Правильная настройка CI/CD (Continuous Integration/Continuous Deployment) позволяет ускорить доставку кода, минимизировать ошибки и повысить безопасность. Вот ключевые best practices для CI/CD:
1. Используйте систему контроля версий для всего
- Храните в Git (или другом VCS) не только код, но и конфигурации, скрипты для CI/CD и инфраструктуру как код (IaC).
- Следуйте стратегии ветвления: Git Flow, GitHub Flow, trunk-based development.
- Включите код-ревью и защиту веток перед слиянием (Pull Requests, Merge Requests).
2. Автоматизируйте сборку, тестирование и развертывание
- Используйте Jenkins, GitHub Actions, GitLab CI/CD, CircleCI для автоматизации.
- Включите в пайплайн юнит-, интеграционные, функциональные и безопасностные тесты.
- Настройте автоматическое развертывание, чтобы исключить человеческий фактор.
3. Shift Left: Тестируйте на ранних этапах
- Запускайте статический анализ кода (SAST) сразу после коммита (SonarQube, Checkmarx).
- Добавьте динамическое тестирование (DAST) и сканирование контейнеров.
- Используйте feature flags, чтобы включать/выключать фичи без релиза.
4. Применяйте инфраструктуру как код (IaC)
- Управляйте инфраструктурой с помощью Terraform, AWS CloudFormation, Pulumi.
- Храните IaC-файлы в Git и тестируйте их перед развертыванием.
- Применяйте принцип неизменяемости инфраструктуры (избегайте ручных изменений на проде).
5. Оптимизируйте производительность пайплайнов
- Кэшируйте зависимости (Docker-образы, npm, Maven) для ускорения сборки.
- Разбивайте тесты на параллельные потоки.
- Используйте инкрементальную сборку, чтобы пересобирать только измененные части проекта.
6. Обеспечьте безопасность пайплайна
- Храните секреты в защищенных хранилищах (AWS Secrets Manager, HashiCorp Vault, GitHub Secrets).
- Включите RBAC (разграничение прав доступа) в CI/CD-системе.
- Автоматически сканируйте зависимости, контейнеры и инфраструктуру на уязвимости.
7. Используйте Blue-Green и Canary-развертывания
- Blue-Green: два окружения (старое и новое), переключение трафика без даунтайма.
- Canary-релизы: выкатывайте обновления на небольшой процент пользователей перед полным релизом.
- Автоматически откатывайте неудачные развертывания.
8. Внедрите мониторинг и логирование
- Настройте централизованные логи через ELK Stack, Grafana Loki, AWS CloudWatch.
- Используйте мониторинг Prometheus, Datadog, New Relic.
- Настройте алерты и автоматическую реакцию на сбои.
9. Соблюдайте комплаенс и управление изменениями
- Внедряйте policy-as-code (например, Open Policy Agent (OPA), AWS Config).
- Логируйте все развертывания для аудита.
- Соблюдайте SOC2, HIPAA, GDPR при работе с чувствительными данными.
10. Контроль качества и постоянное улучшение
- Анализируйте метрики CI/CD и оптимизируйте узкие места.
- Получайте обратную связь от разработчиков для улучшения процесса.
- Проводите автоматизированные post-mortem разборы инцидентов.
Следуя этим best practices, вы получите быстрые, надежные и безопасные CI/CD-процессы с минимальными рисками и затратами. 🚀
Подпишись 👉@devopslib
Правильная настройка CI/CD (Continuous Integration/Continuous Deployment) позволяет ускорить доставку кода, минимизировать ошибки и повысить безопасность. Вот ключевые best practices для CI/CD:
1. Используйте систему контроля версий для всего
- Храните в Git (или другом VCS) не только код, но и конфигурации, скрипты для CI/CD и инфраструктуру как код (IaC).
- Следуйте стратегии ветвления: Git Flow, GitHub Flow, trunk-based development.
- Включите код-ревью и защиту веток перед слиянием (Pull Requests, Merge Requests).
2. Автоматизируйте сборку, тестирование и развертывание
- Используйте Jenkins, GitHub Actions, GitLab CI/CD, CircleCI для автоматизации.
- Включите в пайплайн юнит-, интеграционные, функциональные и безопасностные тесты.
- Настройте автоматическое развертывание, чтобы исключить человеческий фактор.
3. Shift Left: Тестируйте на ранних этапах
- Запускайте статический анализ кода (SAST) сразу после коммита (SonarQube, Checkmarx).
- Добавьте динамическое тестирование (DAST) и сканирование контейнеров.
- Используйте feature flags, чтобы включать/выключать фичи без релиза.
4. Применяйте инфраструктуру как код (IaC)
- Управляйте инфраструктурой с помощью Terraform, AWS CloudFormation, Pulumi.
- Храните IaC-файлы в Git и тестируйте их перед развертыванием.
- Применяйте принцип неизменяемости инфраструктуры (избегайте ручных изменений на проде).
5. Оптимизируйте производительность пайплайнов
- Кэшируйте зависимости (Docker-образы, npm, Maven) для ускорения сборки.
- Разбивайте тесты на параллельные потоки.
- Используйте инкрементальную сборку, чтобы пересобирать только измененные части проекта.
6. Обеспечьте безопасность пайплайна
- Храните секреты в защищенных хранилищах (AWS Secrets Manager, HashiCorp Vault, GitHub Secrets).
- Включите RBAC (разграничение прав доступа) в CI/CD-системе.
- Автоматически сканируйте зависимости, контейнеры и инфраструктуру на уязвимости.
7. Используйте Blue-Green и Canary-развертывания
- Blue-Green: два окружения (старое и новое), переключение трафика без даунтайма.
- Canary-релизы: выкатывайте обновления на небольшой процент пользователей перед полным релизом.
- Автоматически откатывайте неудачные развертывания.
8. Внедрите мониторинг и логирование
- Настройте централизованные логи через ELK Stack, Grafana Loki, AWS CloudWatch.
- Используйте мониторинг Prometheus, Datadog, New Relic.
- Настройте алерты и автоматическую реакцию на сбои.
9. Соблюдайте комплаенс и управление изменениями
- Внедряйте policy-as-code (например, Open Policy Agent (OPA), AWS Config).
- Логируйте все развертывания для аудита.
- Соблюдайте SOC2, HIPAA, GDPR при работе с чувствительными данными.
10. Контроль качества и постоянное улучшение
- Анализируйте метрики CI/CD и оптимизируйте узкие места.
- Получайте обратную связь от разработчиков для улучшения процесса.
- Проводите автоматизированные post-mortem разборы инцидентов.
Следуя этим best practices, вы получите быстрые, надежные и безопасные CI/CD-процессы с минимальными рисками и затратами. 🚀
Подпишись 👉@devopslib
👍5
🔥 Kubernetes: 5 секретных команд, которые спасут тебе нервы
💡 1. Перезапуск всех подов в неймспейсе
Если нужно быстро перезапустить все поды в конкретном неймспейсе:
Это избавит от необходимости удалять поды по одному.
💡 2. Чистка завершённых и сбойных подов
Если в кластере накопилось слишком много старых подов в статусе
Это поможет поддерживать чистоту в кластере.
💡 3. Быстрая отладка пода с exec
Вместо долгих поисков и правок команд можно просто подключиться внутрь работающего пода:
Если используется
💡 4. Слежение за логами всех подов одновременно
Когда нужно посмотреть логи сразу от всех подов в неймспейсе:
Отлично подходит для анализа проблем.
💡 5. Быстрое восстановление удалённого пода
Если случайно удалил под, но знаешь его имя, можно быстро восстановить:
Это спасает, если приложение не управляется контроллером (например, `Job`).
⚡️ Эти команды помогут сэкономить время и нервы при работе с Kubernetes!
Подпишись 👉@devopslib
💡 1. Перезапуск всех подов в неймспейсе
Если нужно быстро перезапустить все поды в конкретном неймспейсе:
kubectl delete pods --all -n my-namespace
Это избавит от необходимости удалять поды по одному.
💡 2. Чистка завершённых и сбойных подов
Если в кластере накопилось слишком много старых подов в статусе
Completed
или Evicted
:
kubectl get pods --all-namespaces | grep -E 'Completed|Evicted' | awk '{print $2 " -n " $1}' | xargs -I {} kubectl delete pod {}
Это поможет поддерживать чистоту в кластере.
💡 3. Быстрая отладка пода с exec
Вместо долгих поисков и правок команд можно просто подключиться внутрь работающего пода:
kubectl exec -it my-pod -- /bin/sh
Если используется
distroless`-образ, попробуй `kubectl debug
! 💡 4. Слежение за логами всех подов одновременно
Когда нужно посмотреть логи сразу от всех подов в неймспейсе:
kubectl logs --tail=100 -l app=my-app --all-containers -f
Отлично подходит для анализа проблем.
💡 5. Быстрое восстановление удалённого пода
Если случайно удалил под, но знаешь его имя, можно быстро восстановить:
kubectl get pod my-pod -o yaml | kubectl apply -f -
Это спасает, если приложение не управляется контроллером (например, `Job`).
⚡️ Эти команды помогут сэкономить время и нервы при работе с Kubernetes!
Подпишись 👉@devopslib
👍4
📌Регулярное выражение для поиска и проверки правильных IPv4-адресов
Разбор регулярного выражения:
• \b – граница слова, чтобы избежать нахождения частей IP-адресов в тексте.
• (25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?) – шаблон для чисел от 0 до 255.
• 25[0-5] — числа от 250 до 255.
• 2[0-4][0-9] — числа от 200 до 249.
• 1?[0-9][0-9]? — числа от 0 до 199 (учитывает 0-9, 10-99, 100-199).
• \. – точка, экранированная \, так как . в регулярных выражениях обозначает любой символ.
• Четыре таких блока, разделенных точками, формируют полный IPv4-адрес.
Пример использования в Python:
Этот код проверяет, какие IP-адреса корректны, а какие нет.
Подпишись 👉@devopslib
\b(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b
Разбор регулярного выражения:
• \b – граница слова, чтобы избежать нахождения частей IP-адресов в тексте.
• (25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?) – шаблон для чисел от 0 до 255.
• 25[0-5] — числа от 250 до 255.
• 2[0-4][0-9] — числа от 200 до 249.
• 1?[0-9][0-9]? — числа от 0 до 199 (учитывает 0-9, 10-99, 100-199).
• \. – точка, экранированная \, так как . в регулярных выражениях обозначает любой символ.
• Четыре таких блока, разделенных точками, формируют полный IPv4-адрес.
Пример использования в Python:
import re
pattern = r"\b(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|1?[0-9][0-9]?)\b"
test_ips = ["192.168.1.1", "255.255.255.255", "256.100.50.25", "192.168.300.1", "abc.def.ghi.jkl"]
for ip in test_ips:
if re.fullmatch(pattern, ip):
print(f"{ip} - валидный IPv4")
else:
print(f"{ip} - НЕ валидный IPv4")
Этот код проверяет, какие IP-адреса корректны, а какие нет.
Подпишись 👉@devopslib
👍4