在尝试创建 Kubernetes 账号时遇到的错误提示“error: resource mapping not found for name: "admin" namespace: "" from "account.yaml": no matches for kind "ClusterRoleBinding" in version "rbac.authorization.k8s.io/v1beta1" ensure CRDs are installed first”表明您在尝试使用一个已经不再支持的 API 版本来创建 ClusterRoleBinding。在 Kubernetes 的较新版本中,rbac.authorization.k8s.io/v1beta1 已经被更新为 rbac.authorization.k8s.io/v1。以下是详细的过程和步骤,帮助您解决这个问题:
首先,您需要确认您的 Kubernetes 集群的版本。rbac.authorization.k8s.io/v1beta1 在 Kubernetes 1.16 版本后已被弃用,并在 1.21 版本中被完全移除。如果您的集群版本是 1.16 或更高,您应该使用 rbac.authorization.k8s.io/v1。
kubectl version
您需要更新您的 account.yaml 文件中的 ClusterRoleBinding 部分,将 API 版本从 rbac.authorization.k8s.io/v1beta1 改为 rbac.authorization.k8s.io/v1。以下是更新后的示例:
apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: adminroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-adminsubjects:- kind: ServiceAccount name: admin namespace: kube-system
错误信息中提到“ensure CRDs are installed first”,这意味着在创建某些资源之前,需要先确保相关的自定义资源定义(CRDs)已经安装在集群中。这通常与使用 Helm Chart 或其他需要 CRDs 的安装过程有关。您可以通过以下命令检查 CRDs 的状态:
kubectl get crds
如果缺少必要的 CRDs,您可能需要从相应的服务或应用的文档中找到安装 CRDs 的指令。
使用更新后的 account.yaml 文件重新创建或更新资源:
kubectl apply -f account.yaml
创建完成后,您可以通过以下命令验证 ClusterRoleBinding 是否成功创建:
kubectl get clusterrolebinding admin
如果您创建了一个 ServiceAccount 并希望获取 Token,可以按照以下步骤操作:
# 获取与 ServiceAccount 相关的 Secret 名字kubectl -n kube-system get secret | grep admin-token# 获取 Token 的值kubectl -n kube-system describe secret <secret-name>
请确保替换 <secret-name> 为您实际的 Secret 名称。
通过以上步骤,您应该能够解决在创建 Kubernetes 账号时遇到的问题,并成功使用 Token 认证方案连接到 Kubernetes 集群。如果问题仍然存在,请参考 Kubernetes 官方文档或搜索社区支持以获取更多帮助。