NNI结合K8s使用FrameworkController报BarrierUnknownFailed错误如何解决
错误根因
该报错的核心原因是Kubernetes集群default命名空间下的默认服务账号system:serviceaccount:default:default,没有frameworkcontroller自定义资源frameworks的GET访问权限,导致init容器frameworkbarrier拉取资源失败,Pod卡在初始化阶段。
解决步骤
- 创建framework资源访问权限角色
新建配置文件fc-role.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: frameworkcontroller-access rules: - apiGroups: ["frameworkcontroller.microsoft.com"] resources: ["frameworks"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
执行命令创建角色:kubectl apply -f fc-role.yaml
- 绑定角色到目标服务账号
新建绑定配置文件fc-rolebinding.yaml,内容如下:
apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: fc-default-sa-binding subjects: - kind: ServiceAccount name: default namespace: default # 如果你将NNI实验部署在其他命名空间,此处替换为对应命名空间 roleRef: kind: ClusterRole name: frameworkcontroller-access apiGroup: rbac.authorization.k8s.io
执行命令创建绑定:kubectl apply -f fc-rolebinding.yaml
验证权限配置生效
执行以下命令,返回yes则说明权限配置正确:kubectl auth can-i get frameworks.frameworkcontroller.microsoft.com --as=system:serviceaccount:default:default -n default清理之前卡住的异常实验,重新执行
nnictl create --config frameworkConfig.yaml启动实验即可。
内容的提问来源于stack exchange,提问作者GiwoongLee
相关产品推荐
相关产品推荐

