Kubernetes kubectl сервис выбора обновлений - PullRequest
0 голосов
/ 17 февраля 2019

Мой кластер Kubernetes работает под управлением Google Cloud.У меня есть развертывание, которое работает с портом 443 и LoadBalancer выставить его в Интернет.

Я создал его следующим образом:

kubectl expose deployment my-app --target-port=443 --port=443 --type=LoadBalancer

После выполнения этой команды балансировщик нагрузки указывает на развертывание my-app.Теперь я создал my-app2 и хочу изменить балансировщик нагрузки, чтобы указать новое развертывание (my-app2).

Примечание: При удалении и повторном создании развертывания освобождается внешний IP-адресадрес, и я хочу избежать этого.

Как пропатчить существующую службу для указания другого развертывания без потери внешнего IP-адреса?

Ответы [ 3 ]

0 голосов
/ 17 февраля 2019

Да, вы можете использовать уже существующую службу для указания нового развертывания.

Все, что вам нужно сделать, отредактировать YAML службы с меткой вновь развернутой службы.

Пример

Предположим, вы недавно развернули службы yaml, как показано ниже.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: my-app-2
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

Он имеет метку

template:
    metadata:
      labels:
        app: my-app-2

Если ваш сервис такой, как показано ниже:

kind: Service
apiVersion: v1
metadata:
  name: my-app
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

вам нужно только изменить раздел селектора службы

selector:
    app: my-app

на

selector:
    app: my-app-2
0 голосов
/ 18 февраля 2019

Наконец-то нашли решение:

kubectl patch service old-app -p '{"spec":{"selector":{"app": "new-app"}}}'
0 голосов
/ 17 февраля 2019

Это описано в руководстве для GKE здесь .

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

Это можно сделать в консоли GCP или с помощью команды, например, так: gcloud compute addresses create helloweb-ip --region us-central1

Затем вы можете найти назначенный вам статический IP-адрес: gcloud compute addresses describe helloweb-ip --region us-central1

Затем вам следует использовать этот IP-адрес при настройке услуги LoadBalancer.В «императивных» командах вы должны набрать:

kubectl expose deployment my-app --target-port=443 --port=443 --type=LoadBalancer --loadBalancerIP=YOUR.IP.ADDRESS.HERE

«Декларативная» форма YAML удобна, поскольку установка становится более сложной, ее также можно сохранить для повторного использования в будущем.,Например:

apiVersion: v1
kind: Service
metadata:
  name: helloweb
  labels:
    app: hello
spec:
  selector:
    app: hello
    tier: web
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer
  loadBalancerIP: "YOUR.IP.ADDRESS.HERE"
...