k8s 部署operator 没有clusterrole问题

因管理要求,只能给namespace的最高权限,不给clusterrole权限,使用helm安装时,设置如下:

clusterScoped: false
rbac:
  create: false
timezone: Asia/Shanghai
operatorImage: 10.17/zongbu-sre/pingcap/tidb-operator-arm64:v1.4.0
imagePullPolicy: IfNotPresent
tidbBackupManagerImage: 10.17/zongbu-sre/pingcap/tidb-backup-manager-arm64:v1.4.0
features: []
appendReleaseSuffix: false
controllerManager:
  create: true
  serviceAccount: tidb-controller-manager
  clusterPermissions:
    nodes: true
    persistentvolumes: true
    storageclasses: true
  logLevel: 2
  replicas: 1
  resources:
    requests:
      cpu: 500m
      memory: 500Mi
  autoFailover: true
  pdFailoverPeriod: 5m
  tikvFailoverPeriod: 5m
  tidbFailoverPeriod: 5m
  tiflashFailoverPeriod: 5m
  dmMasterFailoverPeriod: 5m
  dmWorkerFailoverPeriod: 5m
  affinity: {}
  nodeSelector: {}
  tolerations: []
  selector: []
  env: []
  securityContext: {}
  podAnnotations: {}
scheduler:
  create: true
  serviceAccount: tidb-scheduler
  logLevel: 2
  replicas: 1
  schedulerName: tidb-scheduler
  resources:
    limits:
      cpu: 500m
      memory: 500Mi
    requests:
      cpu: 500m
      memory: 500Mi
  kubeSchedulerImageName: 10.17/zongbu-sre/dyrnq/kube-scheduler-arm64-1:v1.24.9 
  affinity: {}
  nodeSelector: {}
  tolerations: []
  securityContext: {}
  podAnnotations: {}
  configmapAnnotations: {}

设置了 clusterScoped: false 、 rbac.create: false
部署时没有报错,但是没有Pod

$ helm install test-tidb-operator ./tidb-operator --namespace=tidb-xktkj
NAME: test-tidb-operator
LAST DEPLOYED: Tue Feb 21 14:24:10 2023
NAMESPACE: tidb-xktkj
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Make sure tidb-operator components are running:

    kubectl get pods --namespace tidb-xktkj -l app.kubernetes.io/instance=test-tidb-operator

$ kubectl get pods --namespace tidb-xktkj 
No resources found in tidb-xktkj namespace.

$ kubectl describe rs  tidb-controller-manager-54dfd9d6d5 -n tidb-xktkj
 Error creating: pods "tidb-controller-manager-54dfd9d6d5-" is forbidden: error looking up service account tidb-xktkj/tidb-controller-manager: serviceaccount "tidb-controller-manager" not found

文档参考 https://docs.pingcap.com/zh/tidb-in-kubernetes/dev/tidb-operator-rbac#namespace-级别管理-tidb-集群

$ kubectl get clusterrole | grep tidb
Error from server (Forbidden): clusterroles.rbac.authorization.k8s.io is forbidden: User "system:serviceaccount:kube-amp:xx-test-common-work-cluster-kube-amp-386935687479365" cannot list resource "clusterroles" in API group "rbac.authorization.k8s.io" at the cluster scope

能给稍微解释下不,现在给我的用户只有role 角色和 namespace里的权限 ,不给clusterrole, 这行下面还有段

文档里列出了 operator (tidb-controller-manager) 需要的 non-namespaced k8s 资源的权限,对应 clusterrole

也就是说像我现在的情况 不给clusterrole就跑不起来了? 只有只读权限能满足要求不

上面图片「解释」里是 operator sync 逻辑中会执行的操作,不太清楚没有权限时程序会表现如何

那就是无解了, tidb要求的权限都有点高,tiup也是。