Подготовка инфраструктуры к запуску в Kubernetes

В этом уроке нам предстоит подготовить манифесты всех инфраструктурных компонентов для развертывания их в кластере. Это будет трудоемкая работа, в процессе которой вы сможете на практике применить знания, полученные в предыдущих уроках. Кроме того, мы также познакомимся с другими абстракциями, необходимыми для приложений, поддерживающих состояние, таких как Postgres и Apache Kafka.

Скачайте zip-архив патчей для конфигурирования инфраструктурных компонентов и распакуйте его
В каталоге patch находятся патчи для создания конфигурации контейнеров компонентов. Применяйте их последовательно (или переключитесь на ветку k8s, где патчи уже применены) и выполняете инструкции по развертыванию контейнеров в кластере ресурсов. Рекомендуется выполнять запросы на просмотр состояния ресурсов, их логов, масштабирование, обновление, откат к предыдущим версиям и т.п., чтобы закрепить на практике знания, полученные в предыдущих уроках:
kubectl logs POD_NAME
kubectl get po
kubectl describe po POD_NAME
kubectl get po POD_NAME -o yaml
kubectl get svc
kubectl describe svc SERVICE_NAME
kubectl get deployment
kubectl describe deployment DEPLOYMENT_NAME
kubectl rollout status deployment DEPLOYMENT_NAME
kubectl rollout history deployment DEPLOYMENT_NAME
kubectl rollout undo deployment DEPLOYMENT_NAME --to-revision=REVISION_NUMBER
kubectl scale deployment DEPLOYMENT_NAME --replicas REPLICAS_NUMBER
и др.

Небольшой Disclaimer: все инфраструктурные компоненты будут сконфигурированы в минимально необходимом для работы наших микросервисов формате. В продуктовой среде инфраструктуру, как правило, конфигурирует команда DevOps, применяя гораздо более сложный подход, зачастую используя такие продвинутые концепции Kubernetes, как операторы - специальные расширения кластера, которые определяют свои собственные типы ресурсов и управляют ими. В данном курсе мы не будем рассматривать операторы Kubernetes, а основной упор будет на подготовку production-ready манифестов микросервисов. Инфраструктурные компоненты содержат много настроек, которые подробно рассмотрены в курсе "Микросервисы, Kafka, Docker, Spring Cloud, реактивный стек". В данном уроке мы не будем разбирать эти настройки, вместо этого сконцентрируемся на подготовке манифестов Kubernetes.

Доступ после оплаты курса


Конфигурация Prometheus

  • Role и ClusterRole
  • ServiceAccount
  • ClusterRoleBinding, RoleBinding
  • Доступ извне кластера
  • Настройки ConfigMap
  • Настройки Deployment
  • Resources - управление ресурсами контейнера
  • Affinity - управление размещением Pod-ов в кластере
  • Развертывание Prometheus

Конфигурация Loki

Конфигурация Tempo

Конфигурация Grafana

Конфигурация Keycloak

Конфигурация Kafka

  • PersistentVolume (PV)
  • PersistentVolumeClaim (PVC)
  • StatefulSet
  • Headless Service
  • Развертывание Kafka

Конфигурация Kafka Connect

Конфигурация Confluent Schema Registry

Конфигурация Redis

Конфигурация Postgres

Заключение

Остановите кластер, но не удаляйте его, чтобы в дальнейшем не пришлось заново скачивать все образы при деплое сервисов.
minikube stop -p cloud-java
PS: вывести список всех загруженные в minikube образов можно внутри запущенного докер-контейнера с нашим кластером:
$ docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED      STATUS        PORTS                  NAMES
7a6ec8574f9e   gcr.io/k8s-minikube/kicbase:v0.0.47   "/usr/local/bin/entr…"   5 days ago   Up 16 hours   127.0.0.1:54735->...   cloud-java

$ docker exec -it 7a6ec8574f9e bash
root@cloud-java:/#

$ docker image ls
root@cloud-java:/# docker image ls
REPOSITORY                                           TAG        IMAGE ID       CREATED         SIZE
registry.k8s.io/kube-controller-manager              v1.33.1    ef43894fa110   3 months ago    94.6MB
registry.k8s.io/kube-scheduler                       v1.33.1    398c985c0d95   3 months ago    73.4MB
registry.k8s.io/kube-apiserver                       v1.33.1    c6ab243b29f8   3 months ago    102MB
registry.k8s.io/kube-proxy                           v1.33.1    b79c189b052c   3 months ago    97.9MB
registry.k8s.io/ingress-nginx/controller             <none>     3d5c6a600b31   3 months ago    298MB
registry.k8s.io/ingress-nginx/kube-webhook-certgen   <none>     fcb7220db703   3 months ago    67.2MB
registry.k8s.io/etcd                                 3.5.21-0   499038711c08   4 months ago    153MB
quay.io/keycloak/keycloak                            24.0       dd64cdcd1abd   6 months ago    458MB
registry.k8s.io/coredns/coredns                      v1.12.0    1cf5f116067c   9 months ago    70.1MB
grafana/loki                                         main       41dda0164596   10 months ago   85.2MB
busybox                                              latest     0ed463b26dae   11 months ago   4.43MB
grafana/grafana-oss                                  11.2.0     de903bc9ce7c   12 months ago   478MB
registry.k8s.io/pause                                3.10       873ed7510279   15 months ago   736kB
grafana/tempo                                        2.4.2      88430d3a2e52   15 months ago   111MB
prom/prometheus                                      v2.51.2    051cb67876a6   16 months ago   262MB
redis                                                7.2.4      9b38108e295d   16 months ago   116MB
postgres                                             16.1       b0b90c1d9579   19 months ago   425MB
confluentinc/cp-kafka-connect                        7.5.2      032a52edd498   22 months ago   1.64GB
confluentinc/cp-kafka                                7.5.2      039f3e98026d   22 months ago   852MB
confluentinc/cp-schema-registry                      7.5.2      9c75bce94773   22 months ago   1.99GB
gcr.io/k8s-minikube/storage-provisioner              v5         6e38f40d628d   4 years ago     31.5MB
В этом уроке мы подготовили все необходимые манифесты для запуска инфраструктурных компонентов нашей системы микросервисов в кластере Kubernetes. В следующем уроке мы подготовим манифесты для запуска самих микросервисов, применим их в кластере и протестируем работоспособность с помощью скриптов с запросами.
Занятие 5: Деплой микросервисов в Kubernetes