rickcheng created ZEPPELIN-5447: ----------------------------------- Summary: Spark driver pod cannot create resource "configmaps" under k8s mode Key: ZEPPELIN-5447 URL: https://issues.apache.org/jira/browse/ZEPPELIN-5447 Project: Zeppelin Issue Type: Bug Components: Kubernetes, spark Affects Versions: 0.9.0 Reporter: rickcheng Assignee: rickcheng Attachments: log.txt
h3. Description: When zeppelin is running under k8s mode, it will create the interpreter pod through "*k8s/interpreter/100-interpreter-spec.yaml*". And if user wants to use the spark interpreter in a k8s cluster with RBAC enabled, the driver pod (i.e., the interpreter pod ) should have the appropriate permissions to list, create, edit and delete pods in the cluster. So in the "k8s/interpreter/100-interpreter-spec.yaml", it defines a role and a rolebinding for the pod to obtain the above permissions. {code:java} --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: {{zeppelin.k8s.interpreter.pod.name}} namespace: {{zeppelin.k8s.namespace}} {% if zeppelin.k8s.server.uid is defined %} ownerReferences: - apiVersion: v1 controller: false blockOwnerDeletion: false kind: Pod name: {{zeppelin.k8s.server.pod.name}} uid: {{zeppelin.k8s.server.uid}} {% endif %} rules: - apiGroups: [""] resources: ["pods", "services"] verbs: ["create", "get", "update", "list", "delete", "watch" ] {code} However, when I tried to use the spark interpreter under k8s mode, I got the following error (The ip and port of my k8s cluster are replaced. For the complete log, please refer to the attachment [^log.txt]): {code:java} Caused by: io.fabric8.kubernetes.client.KubernetesClientException: Failure executing: POST at: https://<k8s-ip>:<k8s-port>/api/v1/namespaces/default/configmaps. Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. configmaps is forbidden: User "system:serviceaccount:default:default" cannot create resource "configmaps" in API group "" in the namespace "default". {code} This error seems to be that the service account used cannot correctly create the resource *configmap*. In the above defination of the Role in "k8s/interpreter/100-interpreter-spec.yaml", we can see that it only defines the permissions on resource: *["pods", "services"]*. h3. Possible solution: When I add "configmaps" in the resource defination of Role in "k8s/interpreter/100-interpreter-spec.yaml": {code:java} resources: ["pods", "services", "configmaps"] {code} the spark interpreter can be started correctly. h3. Reference: In the official spark documentation[https://spark.apache.org/docs/latest/running-on-kubernetes.html], there is such a description: The service account credentials used by the driver pods must be allowed to *create pods, services and configmaps.* -- This message was sent by Atlassian Jira (v8.3.4#803005)