我正在尝试使用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
和其他类型,但似乎没有任何作用。
答案 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-selectors,kubernetes-deployments,kubernetes-patch。
答案 1 :(得分:0)
您应该在元数据中包含以下内容:
metadata:
name: nginx-deployment
labels:
label: testLabel2