масштабирование при помощи docker swarm

Pasted image 20251212200956.png
3.
Pasted image 20251212201006.png
4.
Pasted image 20251212201012.png
Pasted image 20251212201017.pngПосле восстановления режима Active на node2 реплицированные сервисы автоматически не запустятся, для того, чтобы на узле запустились сервисы необходимо принудительно перераспределить их при помощи команды на manager узле: docker service update --force sleep-app
5.
Настройка количества реплик производится в файле конфигурации (свойство replicas)
Pasted image 20251212202224.png
Для проверки работоспособности сервиса используется свойство healthcheck, в которой указывается команда, которая определяет работоспособность

Pasted image 20251213165323.png

Pasted image 20251213165743.png

RPS 4 копий выше 1 копии примерно на 15%

Pasted image 20251213181530.png

Видно, что RPS стал сопоставим с запуском app с единственным экземпляром, в теории из-за overhead содержания нескольких реплик redis

Особенность реплицируемого сервиса redis заключается в том, что реплики работают по архитектуре master-slave, поэтому в docker-compose.yml необходимо отдельно настроить master экземпляр сервиса и отдельно slave экземпляры.

Pasted image 20251219181249.png

RPS в kubernetes кластере выше swarm кластера примерно на 6%

Запуск kubernetes кластера

Перед запуском кластера необходимо собрать image app и опубликовать его в локальном репозитории:

docker run -d -p 5000:5000 --name registry registry:2
docker build -t 127.0.0.1:5000/app .
docker push 127.0.0.1:5000/app

команда curl.exe http://localhost:5000/v2/_catalog должна вывести примерно: {"repositories":["app"]}

Запуск кластера:

kubectl apply -f redis-pvc.yaml
kubectl apply -f redis-master-deployment.yaml
kubectl apply -f redis-slave-deployment.yaml
kubectl create secret generic app-env-secret --from-env-file=backend/.env
kubectl apply -f app-deployment.yaml
kubectl create configmap nginx-config --from-file=nginx.conf
kubectl apply -f nginx-deployment.yaml

Остановка kubernetes кластера

kubectl delete -f nginx-deployment.yaml
kubectl delete -f app-deployment.yaml
kubectl delete -f redis-slave-deployment.yaml
kubectl delete -f redis-master-deployment.yaml
kubectl delete -f redis-pvc.yaml

Также остановите локальный репозиторий image:

docker kill registry
docker rm registry