0

我正在尝试WorkflowTemplate在自定义命名空间中的 kubernetes 集群中运行 argo。这是快速规格。

namespace: appns
serviceaccount: default
# no Roles or RoleBindings
workflowtemplate
    spec.templates
      - container with volume mounts (config and secret)
      - dag

提交工作流时,它会生成两个容器,main并且wait. 主容器成功完成,但等待容器以以下错误结束。

pods "my-app-batch-4lr8g-2581825101" is forbidden: user "system:serviceaccount:appns:default" is not an admin and does not have permissions to use host bind mounts for resource my-app-batch-batch-4lr8g-2581825101

我很困惑does not have permissions to use host bind mounts,这到底是什么意思?

到目前为止我尝试了什么:

  • clusterrolebinding使用clusterrole/admin-创建serviceaccount:appns:default
  • clusterrolebinding使用clusterrole/cluster-admin-创建serviceaccount:appns:default
  • rolebindingclusterrole/admin-创建serviceaccount:appns:default
  • rolebindingclusterrole/cluster-admin-创建serviceaccount:appns:default
  • 创建了 PSP、clusterrole 和 clusterrolebinding
 name:psp2
 privileged: true
 selinux, supplementalGroups, runAsUser, fsGroup => RunAsAny
 volumes:*

#and a ClusterRole as follows
 apiGroups: policy
 resources: podsecuritypolicies, 
 resourcesNames: 
   - psp2, 
   - privileged
 verbs: use

A clusterrolebinding with this policyclusterrole and serviceaccount:appns:default

错误消息仍然相同。问题:

  • 该错误消息实际上是什么意思?
  • 我该如何解决?或者至少解决它。

请随时询问任何进一步的细节。我故意没有粘贴所有的 yaml 以保持简短和集中。我是 Kubernetes 的新手,非常感谢您的建议。

更新:

4

1 回答 1

0

我对这个错误的理论是 argo-workflows 可能会在作业完成时尝试将某些内容写入集群。

"system:serviceaccount:appns:default" is not an admin and does not have permissions to use host bind mounts for resource...

可能意味着命名空间中的default用户appns想要在集群本身 ( host bind mount) 上挂载文件系统并且无法这样做。

无论如何,您可能不想写出集群的文件系统......

Argo 工作流程可以由适当的数据存储(如 postgres)支持。要查看此示例,请查看 postgres 快速入门清单:

https://github.com/argoproj/argo-workflows/blob/master/manifests/quick-start-postgres.yaml

具体来说,请查看persistence:. workflow-controller-configmap这告诉工作流控制器使用 postgres 进行持久化。

当我们在 kubespray 集群上尝试此操作时,我们在每个工作流结束时都遇到了进一步的错误,例如:

Error (exit code 1): pods "pod-name-42gh2-2603838711" is forbidden: User "system:serviceaccount:appns:default" cannot patch resource "pods" in API group "" in the namespace "appns"

这最终导致命名空间中用户verb的角色缺失。要解决这个问题:defaultappns

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-patcher-role
  namespace: appns
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "patch", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: "pod-patcher-role-role-binding"
  namespace: appns
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: "pod-patcher-role"
subjects:
  - apiGroup: ""
    kind: ServiceAccount
    name: default
    namespace: appns
于 2021-05-12T13:39:42.893 回答