使用“kubectl 补丁”更新部署标签在 v1.18 中不起作用
Update deployment labels using “kubectl patch” does not work in v1.18
我正在尝试使用 kubectl v1.18 更新标签。
我尝试了 kubectl patch deployment my-deployment --patch "$(cat patch1.yaml)";它 returns 一个错误
部署“my-deployment”无效:spec.selector:无效值:v1.LabelSelector{MatchLabels:map[string]string{"app":"nginx"}, MatchExpressions :[]v1.LabelSelector要求(nil)}:字段不可变
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
client: user
name: my-deployment
spec:
replicas: 1
selector:
matchLabels:
app: revproxy
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 2
template:
metadata:
creationTimestamp: null
labels:
app: revproxy
spec:
containers:
- image: nginx:1.7.9
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
补丁 yaml 是
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
来自文档 here
Note: In API version apps/v1, a Deployment's label selector is
immutable after it gets created.
使标签选择器不可变的动机是
- 更改选择器会导致未定义的行为 - 用户不应更改选择器
- 让选择器不可变可确保它们始终匹配已创建的子级,从而防止意外批量孤立等事件发生
如果您想修改标签选择器,您必须删除现有部署并重新创建它。
修改为 metadata.labels
应该可以。
我正在尝试使用 kubectl v1.18 更新标签。
我尝试了 kubectl patch deployment my-deployment --patch "$(cat patch1.yaml)";它 returns 一个错误
部署“my-deployment”无效:spec.selector:无效值:v1.LabelSelector{MatchLabels:map[string]string{"app":"nginx"}, MatchExpressions :[]v1.LabelSelector要求(nil)}:字段不可变
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
client: user
name: my-deployment
spec:
replicas: 1
selector:
matchLabels:
app: revproxy
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 2
template:
metadata:
creationTimestamp: null
labels:
app: revproxy
spec:
containers:
- image: nginx:1.7.9
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
补丁 yaml 是
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
来自文档 here
Note: In API version apps/v1, a Deployment's label selector is immutable after it gets created.
使标签选择器不可变的动机是
- 更改选择器会导致未定义的行为 - 用户不应更改选择器
- 让选择器不可变可确保它们始终匹配已创建的子级,从而防止意外批量孤立等事件发生
如果您想修改标签选择器,您必须删除现有部署并重新创建它。
修改为 metadata.labels
应该可以。