Для развертывания сервиса Redis мы воспользуемся ресурсом StatefulSet. Это дополнение к ReplicaSet, которое появилось уже после выхода первой версии Kubernetes и предоставляет более строгие гарантии, такие как согласованные имена (никаких случайных хешей!) и определенный порядок увеличения и уменьшения количества pod (scale-up, scale-down). Это не так важ
Если данные экземпляра Redis хранятся на каком-то конкретном сервере или в самом контейнере, то будут потеряны при миграции или перезапуске данного контейнера. Чтобы этого избежать, при выполнении в Kubernetes stateful-приложений нужно обязательно использовать удаленные постоянные тома (PersistentVolumes).
Kubernetes есть объект ReplicaSet, отвечающий за репликацию контейнеризованных приложений, но его лучше не использовать напрямую. Для наших задач подойдет объект Deployment, который сочетает в себе возможности объекта ReplicaSet, систему управления версиями и поддержку поэтапного развертывания обновлений. Объект Deployment позволяет применять встроенные в Kubernetes механизмы для перехода от одной версии к другой.
• сборка образа контейнера в случае успешного прохождения тестов;
• загрузка образа контейнера в реестр;
• развертывание приложения в Kubernetes;
• тестирование развернутого приложения;
• обновление Deployment без простоя в работе.
В этой главе мы обсудим следующие темы:
• управление версиями;
• непрерывную интеграцию;
• тестирование;
• создание тегов для образов;
• непрерывное развертывание;
• стратегии развертывания;
• тестирование развернутого кода;
• хаотическое тестирование.
Мы также пройдемся по примеру процесса CI/CD, состоящего из таких этапов, как:
• загрузка изменений в Git-репозиторий;
• сборка программного кода;
• тестирование кода;
Если хотите узнать больше о разных подходах к созданию уведомлений и управлению системами, то почитайте статью My Philosophy on Alerting1 Роба Иващука (https://oreil.ly/YPxju) — она основана на его наблюдениях в ходе работы инженером по мониторингу (site reliability engineer, SRE) в Google.
Метод USE, популяризованный Бренданом Греггом, сосредоточен на следующих аспектах:
• U — Utilization (использование);
• S — Saturation (загруженность);
• E — Errors (ошибки).
Kubernetes — фактический стандарт для облачно-ориентированной разработки. Это эффективный инструмент, который может упростить создание ваших приложений, ускорить развертывание и сделать его более надежным. Но для раскрытия всего потенциала этой платформы нужно научиться ее корректно использовать. Книга предназначена для всех, кто развертывает реальные приложения в Kubernetes и заинтересован в изучении паттернов проектирования и методик, применимых к этим приложениям.