我希望kubernetes中的部署能够从集群内重新启动自己。
我知道我可以创建一个serviceaccount并将其绑定到pod,但是我缺少最具体的权限的名称(即而不仅仅是允许'*'
)允许命令
kubectl rollout restart deploy <deployment>
字符串
这是我有的,然后呢?是我所缺少的
apiVersion: v1
kind: ServiceAccount
metadata:
name: restart-sa
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: default
name: restarter
rules:
- apiGroups: ["apps"]
resources: ["deployments"]
verbs: ["list", "???"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: testrolebinding
namespace: default
subjects:
- kind: ServiceAccount
name: restart-sa
namespace: default
roleRef:
kind: Role
name: restarter
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- image: nginx
name: nginx
serviceAccountName: restart-sa
型
3条答案
按热度按时间23c0lvtd1#
我认为以下是重新启动部署所需的最低权限:
字符串
b1zrtrql2#
如果你想要在集群中重启kubernetes部署本身,你需要在rbac authorisation上设置权限。
在yaml文件中,您在Role:rules下遗漏了一些特定的权限,您需要以以下格式添加 predicate :[“get”,“watch”,“list”]
你需要在yaml文件中添加“deployment”而不是“Pod”。
请确保添加“serviceAccountName:restart-sa”在部署yaml文件的“spec:containers”下。如下所述:
字符串
然后,您可以使用以下命令重新启动部署:
**$**kubectl rollout restart部署[deployment_name]
sc4hvdpw3#
如果有人也面临这个问题,我遇到了一个类似的问题,其中服务帐户无法执行推出重新启动。
最后,我通过将复制集添加到资源列表中来修复它
字符串
希望这对你也有帮助:)