kubectl apply 不更新服务选择器标签

kubectl apply doesn't update service selector label

现在我有一个服务

kubectl get svc ray-test-svc

apiVersion: v1
items:
- apiVersion: v1
  kind: Service
  metadata:
    annotations:
   ....
    labels:
      app: ray-test-app
      service: ray-test-svc
    name: ray-test-svc
    namespace: ray-test-ns
  spec:
    ports:
    - nodePort: 30198
      port: 80
      protocol: TCP
      targetPort: 8000
    selector:
      app: ray-test-app
      service: ray-test-svc
      version: v2
    type: LoadBalancer

编辑 yaml 文件后,删除选择器中的 version: v2 并执行

kubectl apply -f ray-test-svc.yaml

version:v2 仍在选择器中!

这是我的 yaml 文件

kind: Service
apiVersion: v1
metadata:
  name: ray-test-svc
  annotations:
    ....
  labels:
    app: ray-test-app
    service: ray-test-svc
spec:
  selector:
    app: ray-test-app
    service: ray-test-svc
  type: LoadBalancer
  ports:
    - port: 80
      targetPort: 8000

我使用 -v=9 检查日志,发现 kubectl 使用 PATCH 进行更新。这是 kubeApi 中的错误还是有什么方法可以只删除部分标签?谢谢!!

看起来配置有误: 你没有在第二个 YAML 中设置 namespace,你通过命令应用它 kubectl apply -f ray-test-svc.yaml。它不会更新旧服务,它会在命名空间 default 中创建一个新服务。您可以 运行 命令 kubectl apply -f ray-test-svc.yaml -n ray-test-ns 它会更新您的服务。您也可以将 namespace: ray-test-ns 添加到第二个 YAML。