使用“ kubectl修补程序”更新部署标签不起作用

时间:2019-08-26 15:28:53

标签: kubernetes kubectl minikube

我正在尝试使用kubectl更新标签。

当我使用apply时有效,但是在进行patch时无效。

我尝试了kubectl patch deployment nginx-deployment --patch "$(cat nginx.yaml)";它返回了no change,我希望在那里可以重新获得标签更改。

这些是我Yaml的唯一更改。

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

对哪些补丁更新有限制吗?或者我做错了什么?

我还尝试指定--type strategic和其他类型,但似乎没有任何作用。

2 个答案:

答案 0 :(得分:1)

在第二个文件(更改标签的位置)上执行命令 kubectl补丁后,您应该看到以下错误:

Error from server: cannot restore map from string

在此文件上执行命令 kubectl apply 后,您将得到以下错误:

error: error validating "nginx.yaml": error validating data: ValidationError(Deployment.metadata): unknown field "label" in io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta; if you choose to ignore these errors, turn validation off with --validate=false

您的部署文件应如下所示:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: helloWorld
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.8
        ports:
        - containerPort: 8

您错过了在应用标签后添加空格的操作。

添加空间,然后再次执行命令kubectl patch deployment nginx-deployment --patch "$(cat nginx.yaml)"

以下是有用的文档:labels-selectorskubernetes-deploymentskubernetes-patch

答案 1 :(得分:0)

您应该在元数据中包含以下内容:

metadata:
  name: nginx-deployment
  labels:
    label: testLabel2