mantenimiento-rbac.yaml

# Cuenta del portal de actualizaciones en el clúster. Solo puede lo justo para
# sacar un nodo y devolverlo (drain/uncordon) y ver si está Ready. No lee Secrets
# ni puede crear ni borrar cargas.
apiVersion: v1
kind: Namespace
metadata:
  name: mantenimiento
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: mantenimiento-nodos
  namespace: mantenimiento
automountServiceAccountToken: false
---
apiVersion: v1
kind: Secret
metadata:
  name: mantenimiento-nodos-token
  namespace: mantenimiento
  annotations:
    kubernetes.io/service-account.name: mantenimiento-nodos
type: kubernetes.io/service-account-token
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: mantenimiento-nodos
rules:
  # cordon/uncordon y kubectl wait
  - apiGroups: [""]
    resources: ["nodes"]
    verbs: ["get", "list", "watch", "patch"]
  # drain: ver los pods del nodo y desalojarlos respetando los PodDisruptionBudget
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list"]
  - apiGroups: [""]
    resources: ["pods/eviction"]
    verbs: ["create"]
  - apiGroups: ["apps"]
    resources: ["daemonsets"]
    verbs: ["get"]
  # aviso de los volúmenes local-path que se quedan sin servicio al reiniciar un nodo
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: mantenimiento-nodos
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: mantenimiento-nodos
subjects:
  - kind: ServiceAccount
    name: mantenimiento-nodos
    namespace: mantenimiento