Работающий под Кубера не нужно гасить, чтобы его переделать.
Используя опцию patch, добавить новый контейнер в под довольно просто.
Kubernetes – один из самых мощных и гибких менеджеров контейнерных кластеров на рынке облачных технологий.
С помощью этого инструмента вы можете делать практически все, что вам нужно.
Одна из таких возможностей, которую предлагает Kubernetes, – это возможность исправления уже развернутого пода.
Скажем, например, у вас есть развернутый модуль, который включает в себя контейнер NGINX, но вы хотите позже добавить контейнеры redis и MySQL в эту смесь.
Вместо того чтобы тушить все и переоснащать ваши файлы конфигурации, вы можете просто запустить команду patch, чтобы добавить новые контейнеры.
Я собираюсь показать вам, как это сделать.
Хотя этот пример будет довольно элементарным, он продемонстрирует, как работает опция patch с командой kubectl.
Что вам нужно
Единственное, что вам нужно для этой работы – это работающий кластер Kubernetes.
- ☸️ Разверните готовый кластер Kubernetes с помощью Ansible & Kubespray
- ☸️ Как развернуть легкий кластер Kubernetes за 5 минут с K3s
Как развернуть сервис Kubernetes
Первое, что нам нужно сделать, это развернуть сервис Kubernetes.
Создайте новый каталог с помощью команды:
mkdir ~/patch-demo
Перейдите в этот новый каталог с помощью команды:
cd ~/patch-demo
Теперь создайте файл YAML для развертывания службы, который будет включать в себя NGINX с довольно простым шаблоном и двумя репликами.
Создайте этот файл с помощью команды:
nano deployment-patch.yaml
Вставьте следующее содержимое:
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2 kind: Deployment metadata: name: patch-demo spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: patch-demo-ctr image: nginx tolerations: - effect: NoSchedule key: dedicated value: test-team
kubectl apply -f deployment-patch.yaml
Теперь вы можете увидеть, что этот под запущен, выполнив команду:
kubectl get pods
Демо-версия патча будет указана как работающая сущность:
Как обновить работающий сервис
Теперь мы собираемся создать файл патча стратегического слияния, который добавит контейнер redis в наш под.
Создайте файл патча с помощью команды:
nano patch-file.yaml
В этот файл вставьте следующее:
spec: template: spec: containers: - name: patch-demo-ctr-2 image: redis
Сохраните и закройте файл.
Чтобы исправить работающий сервис, введите команду:
kubectl patch deployment patch-demo --patch "$(cat patch-file.yaml)"
В этом случае происходит развертывание, которое завершает работу старых подов и создает новые.
Вы могли бы продолжить это дело.
Скажем, например, вы хотели добавить еще MySQL.
Создайте другой файл патча с помощью команды:
nano patch-file-2.yaml
В этот файл вставьте следующее:
spec: template: spec: containers: - name: patch-demo-ctr-3 image: mysql
Сохраните и закройте файл и повторно запустите команду patch следующим образом:
kubectl patch deployment patch-demo --patch "$(cat patch-file-2.yaml)"
Если вы выполните команду:
kubectl get deployment patch-demo --output yaml
kubectl scale --replicas=4 deployment patch-demo
kubectl scale --replicas=0 deployment patch-demo