Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как устроена разработка Kubernetes-платформы Deckhouse

flant
March 15, 2023

Как устроена разработка Kubernetes-платформы Deckhouse

Доклад руководителя разработки Deckhouse (https://deckhouse.ru/) Константина Аксенова на конференции HighLoad++ 2022.

flant

March 15, 2023
Tweet

More Decks by flant

Other Decks in Technology

Transcript

  1. View Slide

  2. Обо мне
    Константин Аксёнов
    Руководитель разработки
    Deckhouse Kubernetes Platform
    [email protected]flant.com
    Чем занимаюсь
    Больше 5 лет засыпаю и просыпаюсь с мыслями о Kubernetes.
    Опыт
    С 2011 занимаюсь разработкой.
    С 2017 работаю в компании «Флант».
    С 2020 руководитель разработки Deckhouse Kubernetes Platform.
    С чем работаю больше всего
    github.com/konstantin-axenov

    View Slide

  3. Доклад будет интересен тем, кто
    Использует Kubernetes в production

    View Slide

  4. Доклад будет интересен тем, кто
    Использует Kubernetes в production
    Только присматривается к Kubernetes

    View Slide

  5. Доклад будет интересен тем, кто
    Использует Kubernetes в production
    Только присматривается к Kubernetes
    Задумывается над разработкой своего «аналога OpenShift»

    View Slide

  6. Доклад будет интересен тем, кто
    Использует Kubernetes в production
    Только присматривается к Kubernetes
    Задумывается над разработкой своего «аналога OpenShift»
    Просто любит Open Source

    View Slide

  7. Что вы, вообще, сделали?
    Взяли Kubernetes и засунули в него
    разные Open Source-компоненты?
    «Работать с Kubernetes умеет каждый»

    View Slide

  8. Что вы, вообще, сделали?
    Взяли Kubernetes и засунули в него
    разные Open Source-компоненты?
    «Работать с Kubernetes умеет каждый»

    View Slide

  9. Kubernetes — это не только YAML

    View Slide

  10. Kubernetes — это не только YAML

    View Slide

  11. Kubernetes — это не только YAML

    View Slide

  12. Stateful-приложения

    View Slide

  13. Stateful-приложения

    View Slide

  14. Stateful-приложения
    Автомасштабирование и балансировка

    View Slide

  15. Stateful-приложения
    Автомасштабирование и балансировка

    View Slide

  16. Stateful-приложения
    Автомасштабирование и балансировка
    Беспростойные обновления

    View Slide

  17. Автомасштабирование и балансировка
    Беспростойные обновления

    View Slide

  18. Автомасштабирование и балансировка
    Беспростойные обновления
    Сеть и отказоустойчивость

    View Slide

  19. Беспростойные обновления
    Сеть и отказоустойчивость

    View Slide

  20. Беспростойные обновления
    Сеть и отказоустойчивость
    Безопасность

    View Slide

  21. Сеть и отказоустойчивость
    Безопасность

    View Slide

  22. Требования к Kubernetes-платформе
    Надежность
    Небольшая команда эксплуатации
    Идентичные Kubernetes-кластеры в любой инфраструктуре
    Снижение нагрузки на пользователей платформы — NoOps
    Безопасность

    View Slide

  23. Поэтому мы сделали
    Deckhouse для себя

    View Slide

  24. Поэтому мы сделали
    Deckhouse для себя

    View Slide

  25. Управляет
    конфигурацией кластера и всех компонентов
    Устанавливает
    компоненты в кластер
    Разворачивает
    Kubernetes кластер
    Подготавливает
    инфраструктуру или работает поверх bare-metal

    View Slide

  26. Управляет
    конфигурацией кластера и всех компонентов
    Устанавливает
    компоненты в кластер
    Разворачивает
    Kubernetes-кластер
    Подготавливает
    инфраструктуру или работает поверх bare-metal

    View Slide

  27. Управляет
    конфигурацией кластера и всех компонентов
    Устанавливает
    компоненты в кластер
    Разворачивает
    Kubernetes-кластер
    Подготавливает
    инфраструктуру или работает поверх bare-metal

    View Slide

  28. Управляет
    конфигурацией кластера и всех компонентов
    Устанавливает
    компоненты в кластер
    Разворачивает
    Kubernetes-кластер
    Подготавливает
    инфраструктуру или работает поверх Bare metal

    View Slide

  29. Решает проблему айсберга

    View Slide

  30. Решает проблему айсберга

    View Slide

  31. Продукт с историей
    Первый коммит
    Enterprise Edition (EE)
    Community Edition (CE)
    28 июля 2021
    Июль 2020
    29 сентября 2017

    View Slide

  32. Команда
    Product
    Manager
    Tech
    Lead/Architect
    Engineering
    Manager
    Account
    Manager
    Release
    Engineer
    Dev Team
    Teamlead
    Developers
    Teamlead
    Developers
    Flant DevOps Engineers
    Community
    Dev Team
    Teamlead
    Developers
    Teamlead
    Developers

    View Slide

  33. Жизненный цикл

    View Slide

  34. Планирование: источники задач
    Product owner
    Сформирован roadmap до 2025 года
    Q4 2022 Виртуализация
    Q1 2023 Web UI
    Q3 2023 Managed Databases

    View Slide

  35. Планирование: источники задач
    Product owner
    Команда Deckhouse
    Фиксы багов, работа над стабильностью
    CI и тесты
    Технический долг (переписали с Bash на Go)
    Обновления Kubernetes и компонентов
    Сформирован roadmap до 2025 года

    View Slide

  36. Планирование: источники задач
    Product owner
    Команда Deckhouse
    Фиксы багов, работа над стабильностью
    CI и тесты
    Технический долг (переписали с Bash на Go)
    Обновления Kubernetes и компонентов
    Сформирован roadmap до 2025 года
    Пользователи Managed K8s и Enterprise-версии
    Баги
    Новая функциональность
    Улучшения документации
    DevOps Engineers

    View Slide

  37. Планирование: источники задач
    Community-пользователи и большие запросы
    Поддержка всех возможных провайдеров
    Поддержка всех возможных ОС
    Community

    View Slide

  38. Планирование: сортировка задач
    Периодичность Обработка
    Источник
    Тип
    Раздел Deckhouse
    Приоритет
    Один раз в неделю

    View Slide

  39. Планирование: сортировка задач
    Периодичность Обработка
    Источник
    Тип
    Раздел Deckhouse
    Приоритет
    Один раз в неделю
    Планирование: релиз
    Минорные релизы Патч релизы
    По мере необходимости
    Один раз в две недели

    View Slide

  40. Планирование: release flow
    main
    feature_1
    feature_2
    2 недели 2 недели 2 недели
    release-1.35
    release-1.36
    release-1.37

    View Slide

  41. Планирование: release flow
    main
    feature_1
    feature_2
    2 недели 2 недели 2 недели
    release-1.36
    release-1.37
    release-1.35
    bugfix_1

    View Slide

  42. Планирование: release flow
    main
    feature_1
    feature_2
    2 недели 2 недели 2 недели
    bugfix_1
    release-1.36
    release-1.37
    release-1.35

    View Slide

  43. Разработка: GitHub
    Переезжали из standalone GitLab
    Настрадались от GitHub Actions
    Но GitHub по-прежнему остаётся самым популярным
    https://insights.stackoverflow.com/survey/2020#technology-collaboration-tools

    View Slide

  44. Разработка: Open Source
    Публичные issue и changelog — доверие и уверенность
    Открытые исходники — прозрачность

    View Slide

  45. Разработка: идеология Deckhouse
    Минимум «крутилок»
    Собственные интерфейсы, чтобы скрыть реализацию
    NoOps — безболезненные обновления платформы
    Cохраняем «ванильность» K8s, никаких форков

    View Slide

  46. Разработка: идеология Deckhouse
    Минимум «крутилок»
    Собственные интерфейсы, чтобы скрыть реализацию
    NoOps — безболезненные обновления платформы
    Cохраняем «ванильность» K8s, никаких форков

    View Slide

  47. Разработка: идеология Deckhouse
    Минимум «крутилок»
    Собственные интерфейсы, чтобы скрыть реализацию
    NoOps — безболезненные обновления платформы
    Cохраняем «ванильность» K8s, никаких форков

    View Slide

  48. Разработка: идеология Deckhouse
    Минимум «крутилок»
    Собственные интерфейсы, чтобы скрыть реализацию
    NoOps — безболезненные обновления платформы
    Cохраняем «ванильность» K8s, никаких форков

    View Slide

  49. Разработка: наш вклад в Kubernetes
    Топ-1 в России
    Входим в топ-150 в мире

    View Slide

  50. Разработка: наш вклад в Open Source

    View Slide

  51. Разработка: наш вклад в Open Source
    Все патчи должны быть донесены в upstream
    Если изменения приняли в upstream — это гарантия, что они будут работать
    Влияем на развитие важных для нас компонентов
    Дополнительная оценка наших изменений

    View Slide

  52. Разработка: наш вклад в Open Source
    Все патчи должны быть донесены в upstream
    Если изменения приняли в upstream — это гарантия, что они будут работать
    Влияем на развитие важных для нас компонентов
    Дополнительная оценка наших изменений
    Наш пример с containerd

    View Slide

  53. Тестирование
    Модульные тесты Helm, hook’ов, OpenAPI
    Модульные матричные тесты
    E2E-тесты для каждого провайдера и конфигурации
    E2E-тесты обновления минорной версии Deckhouse
    Линтеры кода, линтеры шаблонов, валидаторы и прочее

    View Slide

  54. Тестирование: множество провайдеров
    Облачные платформы
    Другие варианты

    View Slide

  55. Тестирование: разные схемы размещения
    Стандарт Без NAT В уже существующей сети

    View Slide

  56. Тестирование: множество вариантов ОС и версий Kubernetes
    РЕД ОС
    Версии: 7.1
    AlterOS
    Версии: 7
    Astra Linux Special Edition
    Версии: 1.7
    CentOS
    Версии: 7, 8, 9
    Debian
    Версии: 9, 10, 11
    Ubuntu
    Версии: 16.04, 18.04, 20.04, 22.04
    Kubernetes
    Версии: 1.20, 1.21, 1.22, 1.23, 1.24

    View Slide

  57. Тестирование: множество вариантов всего
    Поддержка 2-х CRI: Docker и сontainerd
    Поддержка 2-х CNI: flannel и Cilium
    Несколько десятков модулей

    View Slide

  58. Тестирование: множество вариантов всего
    Поддержка 2-х CRI: Docker и containerd
    Поддержка 2-х CNI: flannel и Cilium
    Несколько десятков модулей

    View Slide

  59. Разработка и тестирование: важные моменты
    Публичная разработка дала нам только плюсы
    Следует приносить изменения во все используемые Open Source-проекты
    У продукта должна быть идеология и правила
    Тесты — это хорошо, но всё протестировать невозможно

    View Slide

  60. Разработка и тестирование: важные моменты
    Публичная разработка дала нам только плюсы
    Следует приносить изменения во все используемые Open Source-проекты
    У продукта должна быть идеология и правила
    Тесты — это хорошо, но всё протестировать невозможно
    И как же мы решили проблему с тестами?

    View Slide

  61. Разработка и тестирование: важные моменты
    И как же мы решили проблему с тестами?
    Нужен правильно
    выстроенный
    релизный процесс!
    Публичная разработка дала нам только плюсы
    Следует приносить изменения во все используемые Open Source-проекты
    У продукта должна быть идеология и правила
    Тесты — это хорошо, но всё протестировать невозможно

    View Slide

  62. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления

    View Slide

  63. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления
    Менее стабильные
    Более стабильные
    Alpha
    Beta
    Early Access
    Stable
    Rock Solid

    View Slide

  64. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления
    flow.deckhouse.io

    View Slide

  65. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления
    flow.deckhouse.io

    View Slide

  66. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления
    flow.deckhouse.io

    View Slide

  67. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления

    View Slide

  68. Релиз: уверенность
    Каналы обновлений
    Очередность выката
    Окна обновлений
    Ручные обновления
    Your Deckhouse is waiting
    for the v1.36.5 update approval
    $ kubectl patch deckhouserelease v1-36-5 \
    --type=merge -p='{"approved": true}'

    View Slide

  69. Релиз: люди
    Релиз-инженер
    Оповещение пользователей
    Отслеживание процесса релиза (телеметрия и логи)
    Первичная обработка входящих ошибок по проблемам во время обновления

    View Slide

  70. Релиз: люди
    Релиз-инженер
    Оповещение пользователей
    Отслеживание процесса релиза (телеметрия и логи)
    Первичная обработка входящих ошибок по проблемам во время обновления
    Ответственный за релиз
    Своевременная «заморозка» кодовой базы
    Проверка changelog’а
    Проверка E2E по обновлению релиза
    Финальное согласование выката
    Поддержка релиз-инженера

    View Slide

  71. Релиз: отслеживание
    Логи deckhouse-controller
    Аудит-логи с kube-apiserver
    Телеметрия с информацией о кластере

    View Slide

  72. Релиз: отслеживание
    Логи deckhouse-controller
    Аудит-логи с kube-apiserver
    Телеметрия с информацией о кластере
    Всё это собирается только с кластеров под нашим управлением

    View Slide

  73. Релиз: телеметрия

    View Slide

  74. Релиз: телеметрия

    View Slide

  75. Релиз: телеметрия

    View Slide

  76. Релиз: телеметрия

    View Slide

  77. Релиз: процесс обновления
    v1.36.3 v1.36.4
    registry.deckhouse.io

    View Slide

  78. Релиз: процесс обновления
    v1.36.3 v1.36.4
    registry.deckhouse.io
    stable
    An OCI formatted image
    release.yml

    View Slide

  79. Релиз: процесс обновления
    stable v1.36.3 v1.36.4
    registry.deckhouse.io
    tag: v1.35.9

    View Slide

  80. Релиз: процесс обновления
    stable v1.36.3 v1.36.4
    registry.deckhouse.io
    tag: v1.35.9

    View Slide

  81. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    stable v1.36.3 v1.36.4
    registry.deckhouse.io
    tag: v1.35.9

    View Slide

  82. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    stable v1.36.3 v1.36.4
    registry.deckhouse.io
    tag: v1.35.9
    Проверка требований

    View Slide

  83. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    tag: v1.36.3
    stable v1.36.3 v1.36.4
    registry.deckhouse.io

    View Slide

  84. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    tag: v1.36.3
    stable v1.36.3 v1.36.4
    registry.deckhouse.io

    View Slide

  85. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    Deckhouse Release
    v1.36.4
    tag: v1.36.3
    stable v1.36.3 v1.36.4
    registry.deckhouse.io

    View Slide

  86. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    Deckhouse Release
    v1.36.4
    tag: v1.36.4
    stable v1.36.3 v1.36.4
    registry.deckhouse.io

    View Slide

  87. Релиз: процесс обновления
    Deckhouse Release
    v1.36.3
    Deckhouse Release
    v1.36.4
    tag: v1.36.4
    stable v1.36.3 v1.36.4
    registry.deckhouse.io

    View Slide

  88. Релиз: интересные случаи
    Observed
    a panic
    Проблема:
    Помогли каналы обновлений и FE-редакция
    Сделали E2E для проверки обновлений релизов
    Cломался механизм обновления Deckhouse controller
    Решение:

    View Slide

  89. Старый
    Docker
    Релиз: интересные случаи
    Проблема:
    Остановили канареечный релиз на Early Access
    Прекратили поддержку Docker 18.09
    При обновлении kubelet зависали узлы с Docker 18.09
    Решение:

    View Slide

  90. Deprecated
    API
    Релиз: интересные случаи
    Проблема:
    10 ударов плетью для тимлида команды разработки
    Надо обязательно ставить себя на место пользователя
    Пользователям пришлось дважды править
    устаревшие API в одном репозитории
    Решение:

    View Slide

  91. Релиз: важные моменты
    Ретроспектива релиза
    Главное — делать выводы из ошибок
    Нельзя катать по ночам :)

    View Slide

  92. Эксплуатация
    Большая сервисная история
    Дежурный инженер, дежурный по установке кластеров
    Целая команда разработчиков on-call для решения клиентских проблем
    А ещё есть постоянные демо, пилоты и внедрения

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  97. Эксплуатация: сервис
    Пришел инженер и в live-режиме
    решил проблему. Спасибо,
    вы нас спасли.

    View Slide

  98. Итоги
    У продукта должна быть идеология и правила
    Протестировать всё невозможно, но правильные процессы закрывают проблему
    Релизы нужно обязательно катать часто, но безопасно и незаметно
    Клиенты ценят сервис
    Обязательно нужно проводить ретроспективу и анализировать ошибки

    View Slide

  99. Что вы, вообще, сделали?
    Взяли Kubernetes и засунули в него
    разные Open Source-компоненты?
    «Работать с Kubernetes умеет каждый»

    View Slide

  100. Что вы, вообще, сделали?
    Взяли Kubernetes и засунули в него
    разные Open Source-компоненты?
    «Работать с Kubernetes умеет каждый»

    View Slide

  101. Флант
    flant.ru
    GitHub
    github.com/deckhouse
    Блог
    habr.com/company/flant
    Вакансии
    job.flant.ru
    deckhouse.io
    Константин Аксёнов
    [email protected]flant.com

    View Slide