Sber OPS Meetup: удобство, функциональность, надежность
Бесплатный митап — отличная возможность пообщаться с единомышленниками и обсудить актуальные темы ИТ-сопровождения: Kubernetes Governance as a Code, dev/staging/testing-ветки, рабочее пространство администратора и техподдержку для сотрудников.
🗓 Когда? 10 июля 18:00 (МСК, GMT+3)
🌐 Онлайн — трансляция на сайте
📍 Офлайн — офис Сбера по адресу: Москва, Кутузовский проспект, 32, корпус Г
Что в программе? Доклады!
▪️«Kubernetes Governance as a Code, или Как содержать кластеры в чистоте и порядке»
▪️«Разделение на dev/master-ветки при деплое на стенды: паттерн или антипаттерн?»
▪️«Единое рабочее пространство администратора, или Когда закончилось место на панели вкладок»
▪️«Как мы в Сбере предоставляем техническую поддержку сотрудникам»
➡️ Для участия в онлайне или офлайне нужно зарегистрироваться.
Бесплатный митап — отличная возможность пообщаться с единомышленниками и обсудить актуальные темы ИТ-сопровождения: Kubernetes Governance as a Code, dev/staging/testing-ветки, рабочее пространство администратора и техподдержку для сотрудников.
🗓 Когда? 10 июля 18:00 (МСК, GMT+3)
🌐 Онлайн — трансляция на сайте
📍 Офлайн — офис Сбера по адресу: Москва, Кутузовский проспект, 32, корпус Г
Что в программе? Доклады!
▪️«Kubernetes Governance as a Code, или Как содержать кластеры в чистоте и порядке»
▪️«Разделение на dev/master-ветки при деплое на стенды: паттерн или антипаттерн?»
▪️«Единое рабочее пространство администратора, или Когда закончилось место на панели вкладок»
▪️«Как мы в Сбере предоставляем техническую поддержку сотрудникам»
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Сегодня целых два повода, чтобы немного расслабиться: маленькая пятница 🥳 и день трудоголика 😭
Поэтому предлагаем посмотреть познавательную документалку «Kubernetes: The Documentary». Фильм в двух частях (раз, два), на английском, но есть русские субтитры.
Как создавался Kubernetes? Почему он стал open-source и что сделало его, по сути, стандартом оркестрации? Об этом фильм :) Особенно интересно, что всю историю рассказывают люди, принимавшие непосредственное участие в разработке Kubernetes: инженеры из Google, Red Hat, Twitter и других компаний.
Всем DevOps! 🖖
#видео
Поэтому предлагаем посмотреть познавательную документалку «Kubernetes: The Documentary». Фильм в двух частях (раз, два), на английском, но есть русские субтитры.
Как создавался Kubernetes? Почему он стал open-source и что сделало его, по сути, стандартом оркестрации? Об этом фильм :) Особенно интересно, что всю историю рассказывают люди, принимавшие непосредственное участие в разработке Kubernetes: инженеры из Google, Red Hat, Twitter и других компаний.
Всем DevOps! 🖖
#видео
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥4
GitHub опубликовали отличную статью «Introduction to SELinux»
❓SELinux — самый популярный модуль безопасности Linux, используемый для изоляции и защиты системных компонентов друг от друга.
В статье рассказывается про различия между MAC (Mandatory Access Control) и DAC (Discretionary Access Control), объясняются основы системы типов SELinux и то, как SELinux работает в ядре Linux, предлагаются полезные инструменты и примеры взаимодействия с SELinux.
Бонус: На русском есть еще такая статья, тоже очень подробная :)
#статьи
❓SELinux — самый популярный модуль безопасности Linux, используемый для изоляции и защиты системных компонентов друг от друга.
В статье рассказывается про различия между MAC (Mandatory Access Control) и DAC (Discretionary Access Control), объясняются основы системы типов SELinux и то, как SELinux работает в ядре Linux, предлагаются полезные инструменты и примеры взаимодействия с SELinux.
Бонус: На русском есть еще такая статья, тоже очень подробная :)
#статьи
👍13
Первый общедоступный релиз Flux v2
❓Flux — это инструмент для синхронизации кластеров Kubernetes с источниками конфигурации (такими как репозитории Git и артефакты OCI) и автоматизации обновлений конфигурации при появлении нового кода для развертывания.
Подробнее о релизе можно почитать здесь, а документация проекта — вот тут.
#новости #open_source
❓Flux — это инструмент для синхронизации кластеров Kubernetes с источниками конфигурации (такими как репозитории Git и артефакты OCI) и автоматизации обновлений конфигурации при появлении нового кода для развертывания.
Подробнее о релизе можно почитать здесь, а документация проекта — вот тут.
#новости #open_source
👍11❤1
Kubernetes Examples 🗒
Нередко бывает, что нужен фрагмент YAML с демонстрацией чего-то конкретного: пода, простого деплоя или чего-нибудь подобного. Например, для базового тестирования окружения или в качестве примера, с которым можно поработать.
В общем, можно поискать нужный YAML в этом репозитории — в нем собраны примеры стандартных функций и шаблонов Kubernetes. Есть и сайт, вдруг кому-то удобнее :)
Всем DevOps и отличных выходных! 🖖
#open_source
Нередко бывает, что нужен фрагмент YAML с демонстрацией чего-то конкретного: пода, простого деплоя или чего-нибудь подобного. Например, для базового тестирования окружения или в качестве примера, с которым можно поработать.
В общем, можно поискать нужный YAML в этом репозитории — в нем собраны примеры стандартных функций и шаблонов Kubernetes. Есть и сайт, вдруг кому-то удобнее :)
Всем DevOps и отличных выходных! 🖖
#open_source
👍20🔥7🙏1
Ииии.... Об этой книге нам тоже рассказал подписчик, большое-большое спасибо :) Разумеется, делимся!
📝 Есть такой специалист, Джин Ким, основатель и ex-CTO компании Tripwire и автор книг по IT. Пожалуй, самая известная его работа — «Проект "Феникс". Роман о том, как DevOps меняет бизнес к лучшему». Но мы хотим порекомендовать другую книгу: «Руководство по DevOps».
📚 Цель этой книги — подробная кодификация принципов и методик DevOps. В книге описаны основные шаги и принципы построения производственного взаимодействия, автоматизации процессов и развития культуры разработки ПО. Теория щедро сдобрена историями реальных людей и компаний, прошедших непростой, но интересный путь к DevOps.
P.S. Если вы знаете какой-то классный материал, инструмент, увидели интересную новость и т.д. и хотите поделиться ими с сообществом — пишите!
#книги
📝 Есть такой специалист, Джин Ким, основатель и ex-CTO компании Tripwire и автор книг по IT. Пожалуй, самая известная его работа — «Проект "Феникс". Роман о том, как DevOps меняет бизнес к лучшему». Но мы хотим порекомендовать другую книгу: «Руководство по DevOps».
📚 Цель этой книги — подробная кодификация принципов и методик DevOps. В книге описаны основные шаги и принципы построения производственного взаимодействия, автоматизации процессов и развития культуры разработки ПО. Теория щедро сдобрена историями реальных людей и компаний, прошедших непростой, но интересный путь к DevOps.
P.S. Если вы знаете какой-то классный материал, инструмент, увидели интересную новость и т.д. и хотите поделиться ими с сообществом — пишите!
#книги
🔥13👍4❤1
It's Wednesday, my friends! 🆘
Пособирали разных статей, делимся подборкой.
▪️Гайд «GitHub to GitLab migration the easy way» — как перейти с GitHub на GitLab, используя функцию импорта проектов. Рассматривается и ручная миграция GitHub Actions в GitLab pipelines. Есть видео :)
▪️Статья «How to delegate tasks as a senior/lead engineer?» — как эффективно делегировать задачи членам команды. Забавные аналогии и жизненные ситуации прилагаются.
▪️Статья «Как я стал девопсом в городе, в котором есть только завод» — всегда интересно почитать про путь в профессию, особенно, когда у автора в моногороде два пути: на завод или в IT.
▪️Статья «Монолит или микросервисы — это не вопрос технологических предпочтений, это про time-to-market» — из названия все понятно, автор рассматривает вопрос монолит vs микросервисы через призму команд, их взаимодействия и интересов бизнеса.
(кстати, делали подборку всякого интересного на эту тему — вот здесь)
Всем DevOps! 🖖
#статьи
Пособирали разных статей, делимся подборкой.
▪️Гайд «GitHub to GitLab migration the easy way» — как перейти с GitHub на GitLab, используя функцию импорта проектов. Рассматривается и ручная миграция GitHub Actions в GitLab pipelines. Есть видео :)
▪️Статья «How to delegate tasks as a senior/lead engineer?» — как эффективно делегировать задачи членам команды. Забавные аналогии и жизненные ситуации прилагаются.
▪️Статья «Как я стал девопсом в городе, в котором есть только завод» — всегда интересно почитать про путь в профессию, особенно, когда у автора в моногороде два пути: на завод или в IT.
▪️Статья «Монолит или микросервисы — это не вопрос технологических предпочтений, это про time-to-market» — из названия все понятно, автор рассматривает вопрос монолит vs микросервисы через призму команд, их взаимодействия и интересов бизнеса.
(кстати, делали подборку всякого интересного на эту тему — вот здесь)
Всем DevOps! 🖖
#статьи
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
В эфире — новости!
▪️На 15 августа 2023 года запланирован релиз Kubernetes 1.28. Ожидается 59 новых улучшений , из которых 33 — alpha, 19 — beta и 15 — stable. Подробное описание доступно в release notes (пока черновик).
▪️Состоялся релиз KubeVirt 1.0.0. Подробности — в release notes.
❓KubeVirt — это надстройка по управлению ВМ для K8s. Его цель — обеспечить общую основу для решений виртуализации поверх K8s. С помощью KubeVirt можно управлять ВМ как ресурсом K8s, подобно подам.
▪️В пятницу, 7 июля 2023 года, в инфраструктуре Jenkins произошел серьезный сбой с 11:05 UTC до 15:25 UTC, Jenkins выпустили Postmortem об этом инциденте.
*️⃣ Писали про Postmortem здесь :)
▪️Компания Yandex Cloud проинформировала пользователей об ограничении доступности Managed service for Elasticsearch.
Действующие пользователи смогут работать с существующими кластерами и создавать новые до апреля 2024 года. Пользователи, которые пока не работали с Elasticsearch в облаке, не смогут создать кластеры сервиса с 20 июля 2023 года.
▪️Istio получили статус CNCF Graduated project. Первоначально Istio был разработан Google и IBM и построен на основе проекта Envoy от Lyft. В настоящее время в проекте участвуют более 16 компаний, в том числе многие крупнейшие поставщики сетевых услуг и облачные организации по всему миру. Istio — третий по активности проект CNCF по количеству открытых и смерженных PR.
❓Istio — инструмент конфигурации service mesh
#новости
▪️На 15 августа 2023 года запланирован релиз Kubernetes 1.28. Ожидается 59 новых улучшений , из которых 33 — alpha, 19 — beta и 15 — stable. Подробное описание доступно в release notes (пока черновик).
▪️Состоялся релиз KubeVirt 1.0.0. Подробности — в release notes.
❓KubeVirt — это надстройка по управлению ВМ для K8s. Его цель — обеспечить общую основу для решений виртуализации поверх K8s. С помощью KubeVirt можно управлять ВМ как ресурсом K8s, подобно подам.
▪️В пятницу, 7 июля 2023 года, в инфраструктуре Jenkins произошел серьезный сбой с 11:05 UTC до 15:25 UTC, Jenkins выпустили Postmortem об этом инциденте.
▪️Компания Yandex Cloud проинформировала пользователей об ограничении доступности Managed service for Elasticsearch.
Действующие пользователи смогут работать с существующими кластерами и создавать новые до апреля 2024 года. Пользователи, которые пока не работали с Elasticsearch в облаке, не смогут создать кластеры сервиса с 20 июля 2023 года.
▪️Istio получили статус CNCF Graduated project. Первоначально Istio был разработан Google и IBM и построен на основе проекта Envoy от Lyft. В настоящее время в проекте участвуют более 16 компаний, в том числе многие крупнейшие поставщики сетевых услуг и облачные организации по всему миру. Istio — третий по активности проект CNCF по количеству открытых и смерженных PR.
❓Istio — инструмент конфигурации service mesh
#новости
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Всем DevOps! 🖖
Полезное про CI/CD components в GitLab
В релизе GitLab 16.1 была представлена экспериментальная фича — CI/CD components. Это «строительные блоки», которые упрощают построение пайплайна. Компоненты можно переиспользовать, они поддерживают входные параметры и позволяют настраивать их в зависимости от контекста пайплайна.
В ближайшее время появится еще и CI/CD каталог — централизованное хранилище компонентов.
В статье можно подробнее узнать обо всех преимуществах компонентов и посмотреть, как с ними работать.
#статьи
Полезное про CI/CD components в GitLab
В релизе GitLab 16.1 была представлена экспериментальная фича — CI/CD components. Это «строительные блоки», которые упрощают построение пайплайна. Компоненты можно переиспользовать, они поддерживают входные параметры и позволяют настраивать их в зависимости от контекста пайплайна.
В ближайшее время появится еще и CI/CD каталог — централизованное хранилище компонентов.
В статье можно подробнее узнать обо всех преимуществах компонентов и посмотреть, как с ними работать.
#статьи
👍13
Всем DevOps! 🖖
Начнем неделю с полезных советов: Три простых приема для уменьшения Docker-образов💻
Образы, которые используют одни и те же слои и весят меньше — быстрее переносятся и деплоятся.
Но как контролировать размер, когда каждое выполнение оператора RUN создает новый слой? Плюс, еще нужны промежуточные артефакты до создания самого образа...
1️⃣ Объединяем несколько слоев в один с помощью поэтапной сборки Docker-образов
Когда Git-репозиторий разрастается, можно просто свести всю историю изменений в один commit и забыть о нем. Оказалось, что нечто подобное можно реализовать и в Docker — посредством поэтапной сборки.
Давайте создадим контейнер Node.js.
Начнем с index.js:
В Dockerfile теперь у нас есть операторы COPY и RUN, так что фиксируем увеличение как минимум на два слоя, по сравнению с исходным образом:
$ docker history node-vanilla
Как видим, итоговый образ возрос на пять новых слоев: по одному для каждого оператора в нашем Dockerfile. Давайте теперь опробуем поэтапную Docker-сборку. Используем тот же самый Dockerfile, состоящий из двух частей:
Давайте пробовать. Сначала создаем контейнер:
*️⃣ 2 и 3 приемы будут чуть позже :)
#лонгрид
Начнем неделю с полезных советов: Три простых приема для уменьшения Docker-образов
Образы, которые используют одни и те же слои и весят меньше — быстрее переносятся и деплоятся.
Но как контролировать размер, когда каждое выполнение оператора RUN создает новый слой? Плюс, еще нужны промежуточные артефакты до создания самого образа...
Когда Git-репозиторий разрастается, можно просто свести всю историю изменений в один commit и забыть о нем. Оказалось, что нечто подобное можно реализовать и в Docker — посредством поэтапной сборки.
Давайте создадим контейнер Node.js.
Начнем с index.js:
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => {
console.log(Example app listening on port 3000!)
})
и package.json:{
"name": "hello-world",
"version": "1.0.0",
"main": "index.js",
"dependencies": {
"express": "^4.16.2"
},
"scripts": {
"start": "node index.js"
}
}
Упакуем приложение со следующим Dockerfile:FROM node:8Создадим образ:
EXPOSE 3000
WORKDIR /app
COPY package.json index.js ./
RUN npm install
CMD ["npm", "start"]
$ docker build -t node-vanilla .Проверим, что все работает:
$ docker run -p 3000:3000 -ti --rm --init node-vanillaТеперь можно пройти по ссылке: http://localhost:3000 и увидеть там «Hello World!».
В Dockerfile теперь у нас есть операторы COPY и RUN, так что фиксируем увеличение как минимум на два слоя, по сравнению с исходным образом:
$ docker history node-vanilla
Как видим, итоговый образ возрос на пять новых слоев: по одному для каждого оператора в нашем Dockerfile. Давайте теперь опробуем поэтапную Docker-сборку. Используем тот же самый Dockerfile, состоящий из двух частей:
FROM node:8 as buildПервая часть Dockerfile создает три слоя. Затем слои объединяются и копируются на второй и заключительный этапы. Сверху в образ добавляются еще два слоя. В итоге имеем три слоя.
WORKDIR /app
COPY package.json index.js ./
RUN npm install
FROM node:8
COPY --from=build /app /
EXPOSE 3000
CMD ["index.js"]
Давайте пробовать. Сначала создаем контейнер:
$ docker build -t node-multi-stage .Проверяем историю:
$ docker history node-multi-stageСмотрим, изменился ли размер файла:
$ docker images | grep node-Да, он стал меньше, но пока не значительно. Есть способы уменьшить его сильнее.
node-multi-stage 331b81a245b1 678MB
node-vanilla 075d229d3f48 679MB
#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤩3❤1
Текущий образ предоставляет нам Node.js, yarn, npm, bash и много других полезных бинарников. Также, он создан на базе Ubuntu. Таким образом, развернув его, мы получаем полноценную операционную систему со множеством полезных бинарников и утилит.
При этом они не нужны нам для запуска контейнера. Единственная нужная зависимость — это Node.js.
Docker-контейнеры должны обеспечивать работу одного процесса и содержать минимально необходимый набор инструментов для его запуска. Целая операционная система для этого не требуется.
Таким образом, мы можем вынести из него все, кроме Node.js.
Но как?
В Google уже пришли к подобному решению — GoogleCloudPlatform/distroless.
Описание к репозиторию гласит:
Distroless-образы содержат только приложение и зависимости для его работы. Там нет менеджеров пакетов, shell'ов и других программ, которые обычно есть в стандартном дистрибутиве Linux.
Это то, что нужно!
Запускаем Dockerfile, чтобы получить новый образ:
FROM node:8 as buildСобираем образ как обычно:
WORKDIR /app
COPY package.json index.js ./
RUN npm install
FROM gcr.io/distroless/nodejs
COPY --from=build /app /
EXPOSE 3000
CMD ["index.js"]
$ docker build -t node-distroless .Приложение должно нормально заработать. Чтобы проверить, запускаем контейнер:
$ docker run -p 3000:3000 -ti --rm --init node-distrolessИ идем на http://localhost:3000. Стал ли образ легче без лишних бинарников?
$ docker images | grep node-distrolessЕще как! Теперь он весит всего 76,7 МБ, на целых 600 Мб меньше!
node-distroless 7b4db3b7f1e5 76.7MB
Все круто, но есть один важный момент. Когда контейнер запущен, и надо его проверить, подключиться можно с помощью:
$ docker exec -ti <insert_docker_id> bashПодключение к работающему контейнеру и запуск bash очень похоже на создание SSH-сессии.
Но поскольку distroless — это урезанная версия исходной операционной системы, там нет ни дополнительных бинарников, ни, собственно, shell!
Как подключиться к запущенному контейнеру, если нет shell?
Самое интересное, что никак.
Это не очень хорошо, так как исполнять в контейнере можно только бинарники. И единственный, который можно запустить — это Node.js:
$ docker exec -ti <insert_docker_id> nodeНа самом деле в этом есть и плюс, ведь если вдруг какой-то злоумышленник сможет получить доступ к контейнеру, он причинит намного меньше вреда, чем если бы у него был доступ к shell. Иными словами, меньше бинарников — меньше вес и выше безопасность. Но, правда, ценой более сложной отладки.
Тут надо бы оговориться, что подключать и отлаживать контейнеры на prod-окружении не стоит. Лучше положиться на правильно настроенные системы логирования и мониторинга.
Но что, если нам-таки нужен дебаггинг, и при этом мы хотим, чтобы docker-образ имел наименьший размер?
#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
Можно заменить distroless на Alpine-образ.
Alpine Linux — это ориентированный на безопасность, легкий дистрибутив на основе musl libc и busybox. Но не будем верить на слово, а лучше проверим.
Запускаем Dockerfile с использованием node:8-alpine:
FROM node:8 as buildСоздаем образ:
WORKDIR /app
COPY package.json index.js ./
RUN npm install
FROM node:8-alpine
COPY --from=build /app /
EXPOSE 3000
CMD ["npm", "start"]
$ docker build -t node-alpine .Проверяем размер:
$ docker images | grep node-alpineНа выходе имеем 69.7MB — это даже меньше, чем distroless-образ.
node-alpine aa1f85f8e724 69.7MB
Проверим, можно ли подключиться к работающему контейнеру (в случае с distrolles-образом мы не могли этого сделать).
Запускаем контейнер:
$ docker run -p 3000:3000 -ti --rm --init node-alpineИ подключаемся:
Example app listening on port 3000!
$ docker exec -ti 9d8e97e307d7 bashНеудачно. Но, возможно, у контейнера есть sh'ell…:
OCI runtime exec failed: exec failed: container_linux.go:296:
starting container process caused "exec: \"bash\":
executable file not found in $PATH": unknown
$ docker exec -ti 9d8e97e307d7 sh / #Отлично! У нас получилось подключиться к контейнеру, и при этом его образ имеет ещё и меньший размер. Но и тут не обошлось без нюансов.
Alpine-образы основаны на muslc — альтернативной стандартной библиотеке для C. В то время, как большинство Linux-дистрибутивов, таких как Ubuntu, Debian и CentOS, основаны на glibc. Считается, что обе эти библиотеки предоставляют одинаковый интерфейс для работы с ядром.
Однако у них разные цели: glibc является наиболее распространенной и быстрой, muslc же занимает меньше места и написана с уклоном в безопасность. Когда приложение компилируется, как правило, оно компилируется под какую-то определенную библиотеку C. Если потребуется использовать его с другой библиотекой, придется перекомпилировать.
Другими словами, сборка контейнеров на Alpine-образах может привести к неожиданному развитию событий, поскольку используемая в ней стандартная библиотека C отличается. Разница будет заметна при работе с прекомпилируемыми бинарниками, такими как расширения Node.js для C++.
Например, готовый пакет PhantomJS не работает на Alpine.
Так какой же базовый образ выбрать?
Alpine, distroless или ванильный образ — решать, конечно, лучше по ситуации.
Если имеем дело с prod-ом и важна безопасность, возможно, наиболее уместным будет distroless.
Каждый бинарник, добавленный к Docker-образу, добавляет определенный риск к стабильности всего приложения. Этот риск можно уменьшить, имея только один бинарник, установленный в контейнере.
Например, если злоумышленник смог найти уязвимость в приложении, запущенном на базе distroless-образа, он не сможет запустить в контейнере shell, потому что его там нет!
Если же по каким-то причинам размер docker-образа для вас крайне важен, определенно стоит присмотреться к образам на основе Alpine.
Они реально маленькие, но, правда, ценой совместимости. Alpine использует немного другую стандартную библиотеку C — muslc, так что иногда будут всплывать какие-то проблемы. С примерами можно ознакомиться по ссылкам: https://github.com/grpc/grpc/issues/8528 и https://github.com/grpc/grpc/issues/6126.
Ванильные же образы идеально подойдут для тестирования и разработки.
Да, они большие, но зато максимально похожи на полноценную машину с установленной Ubuntu. Кроме того, доступны все бинарники в ОС.
#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🤩1
This media is not supported in your browser
VIEW IN TELEGRAM
Всем DevOps! 🖖
Сегодня — делимся небольшой подборкой про деплой.
▪️Самая полезная ссылка. Можно получить ответ на вопрос «Когда лучше деплоить в продакшен» (спойлер: сегодня это могут делать Рыбы, Стрельцы и Овны 🤝)
▪️Ладно, сейчас будет и правда полезная ссылка. В этом репозитории подробно рассказывается про разные стратегии деплоя в Kubernetes: ramped, recreate, blue/green, canary, A/B-тестирование и т.д. Можно визуализировать с помощью Prometheus и Grafana. Есть и в формате статьи с наглядными схемами.
▪️Серия статей про канареечный деплой в k8s с использованием разных инструментов: часть 1 (Gitlab CI), часть 2 (Argo Rollouts), часть 3 (Istio), часть 4 (Jenkins-X, Istio и Flagger). На русском языке.
P.S. Если вы знаете какой-то классный материал, инструмент, увидели интересную новость, хотите задать вопрос, рассказать интересный случай из практики — и поделиться этим с сообществом — пишите! Ну или в комменты :)
#статьи #интересное #memes
Сегодня — делимся небольшой подборкой про деплой.
▪️Самая полезная ссылка. Можно получить ответ на вопрос «Когда лучше деплоить в продакшен» (спойлер: сегодня это могут делать Рыбы, Стрельцы и Овны 🤝)
▪️Ладно, сейчас будет и правда полезная ссылка. В этом репозитории подробно рассказывается про разные стратегии деплоя в Kubernetes: ramped, recreate, blue/green, canary, A/B-тестирование и т.д. Можно визуализировать с помощью Prometheus и Grafana. Есть и в формате статьи с наглядными схемами.
▪️Серия статей про канареечный деплой в k8s с использованием разных инструментов: часть 1 (Gitlab CI), часть 2 (Argo Rollouts), часть 3 (Istio), часть 4 (Jenkins-X, Istio и Flagger). На русском языке.
P.S. Если вы знаете какой-то классный материал, инструмент, увидели интересную новость, хотите задать вопрос, рассказать интересный случай из практики — и поделиться этим с сообществом — пишите! Ну или в комменты :)
#статьи #интересное #memes
👍12😁5
Станислав Тибекин, CVO компании Nixys, рассказал про разные формы DevOps-подряда.
Сможете больше узнать о потребностях бизнеса и продуктовой разработки, о том, как найти подход к каждому проекту, и о том, как сильно DevOps-инженеры влияют на успех продукта в целом.
➡️ Приятного чтения!
#статья_Nixys
Сможете больше узнать о потребностях бизнеса и продуктовой разработки, о том, как найти подход к каждому проекту, и о том, как сильно DevOps-инженеры влияют на успех продукта в целом.
➡️ Приятного чтения!
#статья_Nixys
👍8🔥3❤2
Всем DevOps! 🖖
Рады поделиться полезными материалами про Kubernetes Network Policy
❓Сетевые политики (Network Policies) Kubernetes позволяют настроить сетевое взаимодействие между группами подов и узлами сети.
▪️Репозиторий kubernetes-network-policy-recipes — содержит различные варианты использования сетевых политик Kubernetes и примеры файлов YAML, которые можнопросто скопировать и вставить использовать при настройке.
▪️Интерактивный конструктор Network Policies для Kubernetes — помогает создавать, визуализировать и изучать сетевые политики Kubernetes.
▪️Репозиторий с тестами для Kubernetes Network Policies
▪️Отличное руководство по сетевой модели Kubernetes — руководство довольно длинное и разделено на несколько разделов: базовая терминология Kubernetes, сетевая модель Kubernetes, подробное обсуждение маршрутизации трафика в Kubernetes с использованием нескольких различных вариантов. Прилагается глоссарий сетевых терминов.
#статьи
Рады поделиться полезными материалами про Kubernetes Network Policy
❓Сетевые политики (Network Policies) Kubernetes позволяют настроить сетевое взаимодействие между группами подов и узлами сети.
▪️Репозиторий kubernetes-network-policy-recipes — содержит различные варианты использования сетевых политик Kubernetes и примеры файлов YAML, которые можно
▪️Интерактивный конструктор Network Policies для Kubernetes — помогает создавать, визуализировать и изучать сетевые политики Kubernetes.
▪️Репозиторий с тестами для Kubernetes Network Policies
▪️Отличное руководство по сетевой модели Kubernetes — руководство довольно длинное и разделено на несколько разделов: базовая терминология Kubernetes, сетевая модель Kubernetes, подробное обсуждение маршрутизации трафика в Kubernetes с использованием нескольких различных вариантов. Прилагается глоссарий сетевых терминов.
#статьи
👍11🔥6
Всем DevOps! 🖖
Как прошли выходные?
Предлагаем начать неделю со статьи под кодовым названием «pipeline to hell», точнее — как случайно не сделать такой пайплайн.
Вообще статья называется «CI/CD Security: What is It, Risks & Best Practices»: почему безопасность CI/CD имеет решающее значение, OWASP Top 10 CI/CD рисков безопасности, как сделать безопасный пайплайн и прочие полезные рекомендации.
Примерное время прочтения: 27 минут, нужно использовать VPN :(
#статьи
Как прошли выходные?
Предлагаем начать неделю со статьи под кодовым названием «pipeline to hell», точнее — как случайно не сделать такой пайплайн.
Вообще статья называется «CI/CD Security: What is It, Risks & Best Practices»: почему безопасность CI/CD имеет решающее значение, OWASP Top 10 CI/CD рисков безопасности, как сделать безопасный пайплайн и прочие полезные рекомендации.
Примерное время прочтения: 27 минут, нужно использовать VPN :(
#статьи
⚡7👍3
Представляем nxs-data-anonymizer — удобный инструмент для анонимизации баз данных 🔥
И не просто инструмент, а open source инструмент компании Nixys! Поддерживает PostgreSQL (все версии) и MySQL/MariaDB/Percona (все версии).
Решение получилось достаточно гибким и простым в эксплуатации, и строится на следующих основных идеях:
⚙️ Потоковая обработка данных. Не обязательно предварительно готовить и сохранять где-то на диске дамп исходной базы. Инструмент может менять на лету данные, которые ему передаются на stdin. А выдавать всё — на stdout.
⚙️ Значения описываются Go template. То, на что вы хотите заменить нужные вам ячейки в таблице, определяется шаблонами как в Helm, который многим должен быть знаком.
⚙️ Использование условий и данных других ячеек в строке. Фильтры могут быть гибкими и делать те или иные подстановки в зависимости от значений других (или даже себя самого) ячеек в той же строке;
⚙️ Проверка уникальности данных.
Подробно рассказали про инструмент в статье на Хабре! Делитесь вашим мнением в комментариях :)
И, конечно, заходите в репозиторий — пользуйтесь инструментом, ставьте звездочки, оставляйте PR, рассказывайте коллегам 🦾
💻 Ссылка на GitHub
#open_source #статья_Nixys
И не просто инструмент, а open source инструмент компании Nixys! Поддерживает PostgreSQL (все версии) и MySQL/MariaDB/Percona (все версии).
Решение получилось достаточно гибким и простым в эксплуатации, и строится на следующих основных идеях:
⚙️ Потоковая обработка данных. Не обязательно предварительно готовить и сохранять где-то на диске дамп исходной базы. Инструмент может менять на лету данные, которые ему передаются на stdin. А выдавать всё — на stdout.
⚙️ Значения описываются Go template. То, на что вы хотите заменить нужные вам ячейки в таблице, определяется шаблонами как в Helm, который многим должен быть знаком.
⚙️ Использование условий и данных других ячеек в строке. Фильтры могут быть гибкими и делать те или иные подстановки в зависимости от значений других (или даже себя самого) ячеек в той же строке;
⚙️ Проверка уникальности данных.
Подробно рассказали про инструмент в статье на Хабре! Делитесь вашим мнением в комментариях :)
И, конечно, заходите в репозиторий — пользуйтесь инструментом, ставьте звездочки, оставляйте PR, рассказывайте коллегам 🦾
#open_source #статья_Nixys
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍10🎉6
Мы не договорили! 😁 Недавно делали подборку про Network Policy в Kubernetes, сегодня хочется сделать тематический день и рассказать про управление трафиком в Kubernetes-кластере с Calico.
Поехали!💻
Одно из ключевых и очевидных преимуществ Calico перед другими плагинами — это значительное расширение функционала для настройки сетевых политик — возможность в качестве источников и целей при создании правил задавать диапазоны портов и IP-адресов, протоколы, атрибуты HTTP-запросов, и даже возможность задавать логирование определенного трафика.
Помимо этого Calico добавляет свою политику GlobalNetworkPolicy. Она позволяет применять набор правил доступа по селектору не только для pod’ов, но и для групп хостов/контейнеров/pod’ов, и контролировать применение мер безопасности для различных цепочек путей трафика с помощью таких параметров, как preDNAT, doNotTrack и applyOnForward.
Задачу по обеспечению базовых принципов безопасности мы условно разделим на две:
1) на подзадачу по настройке взаимодействия между pod’ами
2) на подзадачу по настройке доступа к узлу в целом
Решить первую подзадачу можно при помощи такой сущности Kubernetes как NetworkPolicies и при этом можно расширить функционал данной сущности, если использовать её с api, предоставляемого Calico. Для решения второй подзадачи мы будем использовать сущность GlobalNetworkPolicy. По ходу дела так же будем анализировать детали и начнем с Zero Trust Networking.
Zero Trust Networking
Первое, что стоит учесть при написании сетевых политик, это то, что и Kubernetes, и Calico считают наилучшим подход Zero Trust Networking, то есть по умолчанию запросы из используемой сети всегда считаются враждебными.
Согласно данной концепции существуют следующие требования к контролю доступа:
* Правила применяются ко всем сетевым подключениям (не только к тем, которые пересекают границы защищаемой зоны).
* Идентификация удаленного endpoint всегда основана на нескольких критериях, включая надежные криптографические доказательства идентичности. В частности, идентификаторы сетевого уровня, такие как IP-адрес и порт, сами по себе недостаточны, поскольку могут быть подделаны враждебной сетью.
* Все ожидаемые и разрешенные сетевые подключения явно указаны в белом списке. Любое соединение, явно не занесенное в белый список, отклоняется.
* Трафик от скомпрометированных workload (pod/VM/container) не должен иметь возможности обойти применение сетевых политик.
Во многих Zero Trust Networks также реализуется шифрование всего сетевого трафика. Это не является обязательным требованием (если речь идет не о передаче приватных данных), но для соответствия критериям Zero Trust Networks шифрование должно использоваться для каждого сетевого соединения.
Эти принципы влияют, к примеру, на следующее: если есть какая-либо сущность, имеющая метку, то по умолчанию весь трафик для неё разрешён. Но если будет создана хоть одна Policy, в которой будет фигурировать метка конкретной сущности, то для этой сущности будет запрещён весь трафик, кроме того, который был явно разрешён в только что созданной или уже имеющихся политиках.
Аналогично с HostEndpoint, как только он будет создан, весь трафик к хосту будет запрещен, кроме определенного перечня портов, который останется открытым. Причем, даже если вы создадите политики, которые явно запрещают доступ к этим портам, они останутся открытыми.
Для того, чтобы запретить доступ к этим портам нужно будет изменить конфигурацию Felix. Felix — это компонент Calico, демон, запущенный на всех машинах, которые обслуживает Calico.
*️⃣ 1/6: продолжение следует :)
#лонгрид
Поехали!
Одно из ключевых и очевидных преимуществ Calico перед другими плагинами — это значительное расширение функционала для настройки сетевых политик — возможность в качестве источников и целей при создании правил задавать диапазоны портов и IP-адресов, протоколы, атрибуты HTTP-запросов, и даже возможность задавать логирование определенного трафика.
Помимо этого Calico добавляет свою политику GlobalNetworkPolicy. Она позволяет применять набор правил доступа по селектору не только для pod’ов, но и для групп хостов/контейнеров/pod’ов, и контролировать применение мер безопасности для различных цепочек путей трафика с помощью таких параметров, как preDNAT, doNotTrack и applyOnForward.
Задачу по обеспечению базовых принципов безопасности мы условно разделим на две:
1) на подзадачу по настройке взаимодействия между pod’ами
2) на подзадачу по настройке доступа к узлу в целом
Решить первую подзадачу можно при помощи такой сущности Kubernetes как NetworkPolicies и при этом можно расширить функционал данной сущности, если использовать её с api, предоставляемого Calico. Для решения второй подзадачи мы будем использовать сущность GlobalNetworkPolicy. По ходу дела так же будем анализировать детали и начнем с Zero Trust Networking.
Zero Trust Networking
Первое, что стоит учесть при написании сетевых политик, это то, что и Kubernetes, и Calico считают наилучшим подход Zero Trust Networking, то есть по умолчанию запросы из используемой сети всегда считаются враждебными.
Согласно данной концепции существуют следующие требования к контролю доступа:
* Правила применяются ко всем сетевым подключениям (не только к тем, которые пересекают границы защищаемой зоны).
* Идентификация удаленного endpoint всегда основана на нескольких критериях, включая надежные криптографические доказательства идентичности. В частности, идентификаторы сетевого уровня, такие как IP-адрес и порт, сами по себе недостаточны, поскольку могут быть подделаны враждебной сетью.
* Все ожидаемые и разрешенные сетевые подключения явно указаны в белом списке. Любое соединение, явно не занесенное в белый список, отклоняется.
* Трафик от скомпрометированных workload (pod/VM/container) не должен иметь возможности обойти применение сетевых политик.
Во многих Zero Trust Networks также реализуется шифрование всего сетевого трафика. Это не является обязательным требованием (если речь идет не о передаче приватных данных), но для соответствия критериям Zero Trust Networks шифрование должно использоваться для каждого сетевого соединения.
Эти принципы влияют, к примеру, на следующее: если есть какая-либо сущность, имеющая метку, то по умолчанию весь трафик для неё разрешён. Но если будет создана хоть одна Policy, в которой будет фигурировать метка конкретной сущности, то для этой сущности будет запрещён весь трафик, кроме того, который был явно разрешён в только что созданной или уже имеющихся политиках.
Аналогично с HostEndpoint, как только он будет создан, весь трафик к хосту будет запрещен, кроме определенного перечня портов, который останется открытым. Причем, даже если вы создадите политики, которые явно запрещают доступ к этим портам, они останутся открытыми.
Для того, чтобы запретить доступ к этим портам нужно будет изменить конфигурацию Felix. Felix — это компонент Calico, демон, запущенный на всех машинах, которые обслуживает Calico.
#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16👍4
Из чего состоит Calico
Кратко рассмотрим основные компоненты Calico. Как вы уже, наверное, поняли, Calico — это не один демон, который запущен на каждом хосте, где он управляет сетью, Calico состоит из нескольких элементов, так же как и Kubernetes. В целом он состоит из трех (иногда четырех) компонентов.
Felix
Основной компонент — это демон Felix, он отвечает за построение логики взаимодействия между сетевыми интерфейсами на хосте, и, как уже было сказано выше, за создание и функционирование endpoint на хостах или ВМ. В целом он выполняет следующие функции:
* Управление сетевыми интерфейсами, их создание, проверка их работоспособности и настройка пересылки трафика для управляемых интерфейсов.
* Программирование маршрутизации трафика через FIB (Forwarding Information Base) ядра Linux.
* Программирование ACL на уровне ядра Linux.
* Уведомления о статусе сети, Felix записывает данные о проблемах и ошибках в etcd.
Плагин для оркестратора
В зависимости от того, какой оркестратор вы используйте (например, OpenStack, Kubernetes) Calico предоставляет определенный плагин для наиболее эффективного взаимодействия с оркестратором. В случае Kubernetes — это CNI plugin.
etcd
Так же Calico использует etcd. etcd — это распределенное хранилище ключ-значение, которое выполняет функцию базы данных и служит шиной для коммуникации между компонентами Calico. В случае, если вы используйте Kubernetes, они с Calico будут использовать одно и то же etcd.
BGP клиент (BIRD)
Calico разворачивает клиент BGP на каждой ноде, на которой размещен Felix. Роль клиента BGP заключается в том, чтобы считывать настройки маршрутизации, которые Felix создает на уровне ядра, и распространять на другие ноды обслуживаемой сети, то есть рассылать на другие клиенты.
BGP повторитель для правил маршрутов (BIRD)
В случае, когда обслуживаемая Calico область достаточно велика при наличии только BGP клиента могут возникнуть проблемы, так как он требует чтобы каждый клиент мог соединиться с каждым клиентом, что может порождать слишком большое количество соединений(N ^ 2). В таких случаях для решения проблемы можно использовать повторитель маршрутов, то есть соответственно настроенный BIRD. Он занимается тем, что, если клиент BGP сообщает ему какую-либо информацию об изменении в маршрутах, он распространяет эту информацию для других BGP-клиентов.
Network Policy
NetworkPolicy, который предоставляет Calico, имеет более читаемый и развернутый синтаксис, чем тот, который предлагает сам Kubernetes.
Ресурс сетевой политики NetworkPolicy представляет собой упорядоченный набор правил, которые применяются к группе endpoints, соответствующих селектору меток (labels).
Простой пример из официальной документации:
*️⃣ 2/6: продолжение следует :)
#лонгрид
Кратко рассмотрим основные компоненты Calico. Как вы уже, наверное, поняли, Calico — это не один демон, который запущен на каждом хосте, где он управляет сетью, Calico состоит из нескольких элементов, так же как и Kubernetes. В целом он состоит из трех (иногда четырех) компонентов.
Felix
Основной компонент — это демон Felix, он отвечает за построение логики взаимодействия между сетевыми интерфейсами на хосте, и, как уже было сказано выше, за создание и функционирование endpoint на хостах или ВМ. В целом он выполняет следующие функции:
* Управление сетевыми интерфейсами, их создание, проверка их работоспособности и настройка пересылки трафика для управляемых интерфейсов.
* Программирование маршрутизации трафика через FIB (Forwarding Information Base) ядра Linux.
* Программирование ACL на уровне ядра Linux.
* Уведомления о статусе сети, Felix записывает данные о проблемах и ошибках в etcd.
Плагин для оркестратора
В зависимости от того, какой оркестратор вы используйте (например, OpenStack, Kubernetes) Calico предоставляет определенный плагин для наиболее эффективного взаимодействия с оркестратором. В случае Kubernetes — это CNI plugin.
etcd
Так же Calico использует etcd. etcd — это распределенное хранилище ключ-значение, которое выполняет функцию базы данных и служит шиной для коммуникации между компонентами Calico. В случае, если вы используйте Kubernetes, они с Calico будут использовать одно и то же etcd.
BGP клиент (BIRD)
Calico разворачивает клиент BGP на каждой ноде, на которой размещен Felix. Роль клиента BGP заключается в том, чтобы считывать настройки маршрутизации, которые Felix создает на уровне ядра, и распространять на другие ноды обслуживаемой сети, то есть рассылать на другие клиенты.
BGP повторитель для правил маршрутов (BIRD)
В случае, когда обслуживаемая Calico область достаточно велика при наличии только BGP клиента могут возникнуть проблемы, так как он требует чтобы каждый клиент мог соединиться с каждым клиентом, что может порождать слишком большое количество соединений(N ^ 2). В таких случаях для решения проблемы можно использовать повторитель маршрутов, то есть соответственно настроенный BIRD. Он занимается тем, что, если клиент BGP сообщает ему какую-либо информацию об изменении в маршрутах, он распространяет эту информацию для других BGP-клиентов.
Network Policy
NetworkPolicy, который предоставляет Calico, имеет более читаемый и развернутый синтаксис, чем тот, который предлагает сам Kubernetes.
Ресурс сетевой политики NetworkPolicy представляет собой упорядоченный набор правил, которые применяются к группе endpoints, соответствующих селектору меток (labels).
Простой пример из официальной документации:
apiVersion: projectcalico.org/v3Здесь мы разрешаем трафик с подов/контейнеров, у которых есть селектор role == 'frontend' на порт 6379 для доступа к БД.
kind: NetworkPolicy
metadata:
name: allow-tcp-6379
namespace: production
spec:
selector: role == 'database'
types:
- Ingress
- Egress
ingress:
- action: Allow
protocol: TCP
source:
selector: role == 'frontend'
destination:
ports:
- 6379
egress:
- action: Allow
#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10👍4
Host Endpoint
У каждого хоста (ноды) есть несколько реальных или виртуальных сетевых интерфейсов, с которыми взаимодействует Calico. Чтобы получить возможность применять политики конкретно к определенному интерфейсу необходимо создать для него сущность HostEndpoint. Они могут иметь метки (labels) и эти метки аналогичны меткам для pod’ов, поэтому сетевые политики в равной степени могут применяться и к HostEndpoint, и к endpoints pod’ов.
Предположим, что нам нужно запретить весь входящий трафик из внешней сети, кроме портов 22, 80, 443 на уровне хоста и при этом разрешить весь трафик от других нод кластера. Для этого, для начала, создадим для каждой ноды свой HostEndpoint. К примеру:
Global Network Policy
Теперь, когда почти весь трафик к ноде заблокирован, создадим GlobalNetworkPolicy, которая разрешит весь трафик с других нод кластера, входящий трафик на порты 80/443 и весь исходящий трафик для этого HostEndpoint:
Однако, для GlobalNetworkPolicyесть несколько интересных параметров, которые предоставляют дополнительные возможности для настройки политик, а именно: preDNAT, doNotTrack и applyOnForward, рассматриваемые ниже.
*️⃣ 3/6: продолжение следует :)
#лонгрид
У каждого хоста (ноды) есть несколько реальных или виртуальных сетевых интерфейсов, с которыми взаимодействует Calico. Чтобы получить возможность применять политики конкретно к определенному интерфейсу необходимо создать для него сущность HostEndpoint. Они могут иметь метки (labels) и эти метки аналогичны меткам для pod’ов, поэтому сетевые политики в равной степени могут применяться и к HostEndpoint, и к endpoints pod’ов.
Предположим, что нам нужно запретить весь входящий трафик из внешней сети, кроме портов 22, 80, 443 на уровне хоста и при этом разрешить весь трафик от других нод кластера. Для этого, для начала, создадим для каждой ноды свой HostEndpoint. К примеру:
apiVersion: projectcalico.org/v3В данном случае мы добавили также раздел ports, где описали определенные порты и протоколы для взаимодействия с ними. Мы сделали это для того, чтобы обозначить их и дать им названия (http, https), которые в дальнейшем можно использовать в сетевых политиках. interfaceName — название внешнего интерфейса сервера которому соответствует IP-адрес expectedIPs. Указывать порт 22 нет необходимости, так как он разрешен на уровне конфигурации Felix.
kind: HostEndpoint
metadata:
name: node4-ens160
labels:
type: production
role: worker
node: 4
spec:
interfaceName: ens160
node: k8s-s4
expectedIPs:
- 10.213.0.11
ports:
- name: http
port: 80
protocol: TCP
- name: https
port: 443
protocol: TCP
Global Network Policy
Теперь, когда почти весь трафик к ноде заблокирован, создадим GlobalNetworkPolicy, которая разрешит весь трафик с других нод кластера, входящий трафик на порты 80/443 и весь исходящий трафик для этого HostEndpoint:
kind: GlobalNetworkPolicyВ целом, все параметры GlobalNetworkPolicy аналогичны NetworkPolicy и интуитивно понятны. order — очередность применения политики, чем она меньше, тем раньше будет применено правило.
apiVersion: projectcalico.org/v3
metadata:
name: allow-s4
spec:
selector: role==worker
order: 10
applyOnForward: true
types:
- Egress
- Ingress
ingress:
- action: Allow
protocol: TCP
source:
nets:
- 10.213.0.0/24
- action: Allow
protocol: TCP
destination:
ports: [http,https]
- action: Allow
protocol: ICMP
egress:
- action: Allow
Однако, для GlobalNetworkPolicyесть несколько интересных параметров, которые предоставляют дополнительные возможности для настройки политик, а именно: preDNAT, doNotTrack и applyOnForward, рассматриваемые ниже.
#лонгрид
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍3