11

我想知道是否可以动态更改 pod 的标签,以便服务根据新标签将请求路由到这些 pod。

例如,我有两个服务 A 和 B。然后我有 10 个 pod,其中 5 个的标签类型 = A(匹配服务 A),另外 5 个标签类型 = B(匹配服务 B)。在某些时候,我想更改 pod 上的标签以实现标签类型 = A 的 2 和标签类型 = B 的 8 的配置。

我想知道我是否可以只更改标签,并且服务将相应更新,而无需停止并启动具有不同标签的新 pod。

4

2 回答 2

23

您可以使用此处kubectl label记录的命令更改单个 pod 上的标签。

更改正在运行的 pod 的标签不应导致其重新启动,服务将自动检测和处理标签更改。

所以换句话说,是的,你可以:)

于 2015-02-13T20:32:33.380 回答
8

步骤如下:

  1. 创建两个部署,每个部署都有一个标签,并提及您希望在其中拥有的 pod 数量。

部署task1.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: task1deploy
spec:
  replicas: 5
  template:
    metadata:
      labels:
        app: task1deploy
    spec:
      containers:
      - name: nodetask1

部署2task1.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: task1deploy2
spec:
  replicas: 5
  template:
    metadata:
      labels:
        app: task1deploy2
    spec:
      containers:
      - name: node2task1
        image: nginx
        ports:
        - containerPort: 80

2.创建两个服务:

kubectl expose deployment task1deploy --namespace=shifali --type=LoadBalancer --name=my-service
kubectl expose deployment task1deploy2 --namespace=shifali --type=LoadBalancer --name=my-service2

3.当您描述这些服务时,您会发现每个服务有 5 个端点(即 pod):

kubectl describe service my-service  --namespace=shifali

名称:task1deploy

端点:10.32.0.12:80,10.32.0.7:80,10.32.0.8:80 + 3 更多...

同样对于 service2

6.现在移除 pod new11 的标签并添加标签“app=task1deploy2”

kubectl label pods new11-68dfd7d4c8-64xhq  --namespace=shifali app-  
kubectl label pods new11-68dfd7d4c8-64xhq "app=task1deploy2" --namespace=Shifali

现在服务将显示目标端口数量的变化(my_service=5 和 my_service2=7)

kubectl describe service my-service --namespace=Shifali

端点:10.32.0.7:80,10.32.0.8:80,10.32.1.7:80 + 2 更多..

kubectl describe service my-service2 --namespace=Shifali

名称:my-service2 端点:10.32.0.10:80,10.32.0.12:80,10.32.0.9:80 + 4 更多...

于 2019-01-31T06:06:43.223 回答