Деплой микросервисов в Kubernetes. Helm
Программа
Подготовка инфраструктуры к запуску в 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
Заключение
Остановите кластер, но не удаляйте его, чтобы в дальнейшем не пришлось заново скачивать все образы при деплое сервисов.
Занятие 5: Деплой микросервисов в Kubernetes
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. В следующем уроке
мы подготовим манифесты для запуска самих микросервисов, применим их в кластере и протестируем работоспособность с помощью скриптов с запросами.