Вводная часть

Этот курс является логическим продолжением курса CloudJava, в котором мы разработали бэкенд для сервиса заказов еды на вынос на микросервисной архитектуре. Теперь нам предстоит развернуть написанные сервисы в одной из наиболее популярных систем управления контейнерами - Kubernetes.

План занятий

  1. В первом уроке мы познакомимся с тем, что такое Kubernetes, из каких элементов он состоит и как они взаимодействуют между собой. Узнаем основные абстракции Kubernetes, с помощью которых происходит управление контейнерами. Установим поддерживаемую k8s-коммьюнити утилиту Minikube, которая позволяет развернуть кластер Kubernetes на локальном хосте. Научимся пользоваться утилитой kubectl для управления абстракциями кластера, запустим свои первые Pod, ReplicaSet, Deployment и другие абстракции.
  2. Во втором уроке мы узнаем про такие сетевые абстракции Kubernetes, как Service и Ingress, а также про хранение конфигураций с помощью ConfigMap и Secret, какие задачи они решают и как их наличие изменит архитектуру наших микросервисов.
  3. В третьем уроке мы проведем рефакторинг написанных ранее микросервисов, чтобы подготовить их к развертыванию в Kubernetes, а также доработаем пайплайн Github Actions, чтобы при коммите в определенную ветку происходила сборка образа микросервиса и сохранение его в Github-репозитории.
  4. В четвертом уроке мы подготовим манифесты для запуска инфраструктурных компонентов нашей системы микросервисов в Kubernetes. Тут стоит оговориться, что основная задача курса - научить разработчиков готовить именно микросервисы к запуску в кластере, а не разворачивать инфраструктуру, так как это в основном задача DevOps команды. Поэтому база данных Postgres, брокер сообщений Apache Kafka, инструменты мониторинга, сбора метрик и логов и другие периферийные системы будут развернуты не в production-ready, а в необходимой для обеспечения работы сервисов конфигурации. Более того, системы, предназначенные для персистентного хранения данных, не рекомендуется разворачивать в Kubernetes. Хотя это и возможно сделать (подробнее в уроке), вместо этого для них, как правило, используют отдельные сервера.
  5. В пятом уроке мы подготовим манифесты для запуска микросервисов в Kubernetes. При этом постараемся учесть лучшие практики, такие как ограничение потребляемых контейнерами ресурсов, пробы готовности контейнера к работе (readinessProbe) и его жизнеспособности (livenessProbe), обеспечение безопасности контейнера через ограничение полномочий и другие. Мы запустим инфраструктуру и сервисы и протестируем их работоспособность.
  6. В шестом уроке мы познакомимся с пакетным менеджером Kubernetes - Helm, упрощающим развертывание, управление и обновление приложений в кластере.
  7. В седьмом уроке мы подготовим и развернем в кластере Helm-чарты для запуска инфраструктурных компонентов.
  8. Наконец, в последнем восьмом уроке мы подготовим и развернем в кластере Helm-чарты микросервисов.
Занятие 1: Обзор Kubernetes