默认情况下,clusterrole system:node中的数据如下:
$ kubectl get clusterrole system:node -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
name: system:node
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- pods
verbs:
- create
- delete
- apiGroups:
- ""
resources:
- pods/status
verbs:
- patch
- update
现在,我想更改簇角色system:node
,在pods资源下添加一个- patch
,应该这样:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- patch
我可以使用kubectl edit
对其进行更新,但是我想在bash脚本中对其进行更新,因此kubectl edit
不适合,是否还可以使用kubectl来解决其他问题?
答案 0 :(得分:3)
您可以使用kubectl apply -f node-role.yaml
,其中node-role.yaml
包含ClusterRole
的Yaml定义,并包含您的更改。 kubectl apply
将更新该角色(如果已存在)(否则将其创建)。
答案 1 :(得分:0)
chages.yaml
rules:
- apiGroups:
- ""
resources:
- pods
verbs:
- get
- list
- watch
- patch #added
- apiGroups:
- ""
resources:
- pods
verbs:
- create
- delete
- apiGroups:
- ""
resources:
- pods/status
verbs:
- patch
- update
使用以下bash命令更新ClusterRole
kubectl patch clusterrole system:node --patch "$(cat changes.yaml)"
有关更多详细信息,请访问k8s official documentations
答案 2 :(得分:0)
最简单的自动化方法可能是向ClusterRole添加新规则。
创建一个名为append.yaml
的文件,其内容如下:
- apiGroups:
- ""
resources:
- pods
verbs:
- patch
然后,将此规则附加到ClusterRole的现有YAML清单中,并重新应用它:
kubectl apply -f <(cat <(kubectl get clusterrole system:node -o yaml) append.yaml)
新规则将与pods
的其他权限合并,您可以使用以下权限进行验证:
kubectl describe clusterrole system:node
最好的命令式解决方案是使用kubectl patch
patch对象,但这似乎不容易实现:
rules
数组似乎使用 replace patch strategy,即提供的补丁只会替换现有数组而不是与之合并。