Kubernetes 从节点本身耗尽节点的权限

erk*_*kum 3 kubernetes

我想从节点本身耗尽节点。因此,我创建了一个服务帐户并将令牌添加到节点上的 .kube/config 文件中。我还撰写了角色绑定。

但我无法找出正确的权限。到目前为止我已经尝试过了,但没有成功。

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: admin-clusterrole
rules:
- apiGroups: [""]
  resources: ["nodes"]
  verbs: ["drain"]

Run Code Online (Sandbox Code Playgroud)

正确的权限是什么?
谢谢 :)

编辑1:

角色绑定:

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: node-drainer-clusterrole-bind
  namespace: default
subjects:
- kind: ServiceAccount
  name: node-drainer-sa
  namespace: default
roleRef:
  kind: ClusterRole
  name: system:node-drainer
  apiGroup: rbac.authorization.k8s.io
Run Code Online (Sandbox Code Playgroud)

服务帐号:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: node-drainer-sa
Run Code Online (Sandbox Code Playgroud)

Ore*_*ail 7

首先,您不应该使用admin-clusterrole此 ClusterRole 的名称,因为您可能会因为覆盖默认绑定而将自己锁定在自己的集群之外。

这是一个 ClusterRole,它应该能够耗尽节点。如果它不适合您,请告诉我。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: system:node-drainer
rules:
  # Needed to evict pods
  - apiGroups: [""]
    resources: ["pods/eviction"]
    verbs: ["create"]
  # Needed to list pods by Node
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]
  # Needed to cordon Nodes
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "patch"]
  # Needed to determine Pod owners
  - apiGroups: ["apps"]
    resources: ["statefulsets"]
    verbs: ["get", "list"]
  # Needed to determine Pod owners
  - apiGroups: ["extensions"]
    resources: ["daemonsets", "replicasets"]
    verbs: ["get", "list"]
Run Code Online (Sandbox Code Playgroud)

您可以使用详细级别确定 kubectl 命令使用哪些 API。

例如:

kubectl drain node my-node -v=10
Run Code Online (Sandbox Code Playgroud)

从这里您可以检查 kubectl 发出的 HTTP 请求。