Kubernetes kubectl更新服务选择器。

8

我的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个回答

19

最终,找到了解决方案:

kubectl patch service old-app -p '{"spec":{"selector":{"app": "new-app"}}}'

2
这在GKE教程这里中有详细说明。
首先,您应该保留一个静态IP地址,以便在部署之间重复使用。
您可以在GCP控制台或通过以下命令执行此操作: gcloud compute addresses create helloweb-ip --region us-central1 然后,您可以找到分配给您的静态IP地址: gcloud compute addresses describe helloweb-ip --region us-central1 然后,在设置LoadBalancer服务时,您应该使用此IP地址。在“命令式”命令中,您将键入: 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"

1

是的,您可以使用已有的服务来指向新的部署。

您需要做的是,使用新部署服务的标签编辑服务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

to

selector:
    app: my-app-2

很好。如果它不是新部署的(已经存在),怎么办? - No1Lives4Ever
然后,您只需要将现有部署的标签添加到服务的选择器中。 - Abu Hanifa
@No1Lives4Ever 这有帮助吗? - Abu Hanifa
是的,这是一种解决方案。我更喜欢另一种解决方案,在这里提到。感谢您的帮助! - No1Lives4Ever

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接