我试图通过以下链接在EKS集群中安装mongodb。(使用mongodb-kubernetes-operator)
https://www.youtube.com/watch?v=VqeTT0NvRR4&t=1s
https://github.com/mongodb/mongodb-kubernetes-operator
kubectl apply -f config/crd/bases/mongodbcommunity.mongodb.com_mongodbcommunity.yaml
kubectl get crd/mongodbcommunity.mongodbcommunity.mongodb.com
kubectl create ns mongo
kubectl apply -k config/rbac/ --namespace mongo
kubectl get role mongodb-kubernetes-operator --namespace mongo
kubectl get rolebinding mongodb-kubernetes-operator --namespace mongo
kubectl get serviceaccount mongodb-kubernetes-operator --namespace mongo
kubectl create -f config/manager/manager.yaml --namespace mongo
kubectl get pods --namespace mongo
kubectl apply -f config/samples/mongodb.com_v1_mongodbcommunity_cr.yaml --namespace mongo
kubectl get pods -n mongo
选中后
kubectl get pods -n mongo
example-mongodb-0
pod处于挂起状态很长时间。
在描述pod时,出现以下错误,
“正在运行PreBind插件“VolumeBinding”:结合体积:等待条件超时”。
1条答案
按热度按时间pepwfjgg1#
我已经就这个问题联系了AWS支持团队,并得到了以下回复。
从您的通信中,我了解到您在EKS集群中创建mongodb pod时遇到了问题,并且在创建pod之后,您的pod将处于挂起状态。
请让我知道如果我误解了你的问题。感谢您使用相同的方式分享GitHub存储库URL。我花了一些精力在我这边复制同样的问题,谢天谢地,我能够复制这个问题。
进一步调查我的挂起的pod问题,我在我的集群上运行了以下describe命令,
"kubectl describe pod"<pending_pod_name>
几分钟后,我在输出的"事件"部分发现了下面这行。
"正在运行PreBind插件" VolumeBinding ":结合体积:等待条件超时"。
在进一步的调查中,我发现您试图在集群上部署的mongodb pod模块试图创建一个EBS卷作为持久卷,这就是为什么我得到了上述错误。我们需要在集群中安装EBS CSI驱动程序加载项才能使用EKS创建EBS卷,如果EBS CSI驱动程序加载项不存在,则通常会发生上述错误。由于在创建集群时默认不安装此附加组件,因此您需要通过EKS控制台附加组件选项卡安装它。
或者另一种可能性是,即使加载项存在,它也没有创建EBS卷所需的权限。因此,在将EBS CSI驱动程序加载项安装到集群之前,我们需要确保已经创建了用于附加到加载项的IAM角色。这一点在这里也有提及[1]。
在您的情况下,您可以通过运行以下命令来检查EBS CSI驱动程序是否存在:
"kubectl get pods-n kube-system"
并查找名称为"ebs-csi-bizer-xxxxxxx"的pod。如果找到,则意味着您已经安装了EBS CSI驱动程序,问题可能与权限有关。
为此,您需要运行以下命令。
"kubectl describe pod ebs-csi-provision-n kube-system"
这将给予驱动程序pod配置的输出。在该输出中,您需要检查名为"AWS_ROLE_ARN:"的环境:如果在输出中不存在该环境,则意味着您没有为附加组件提供IAM OIDC提供者角色。因此,您需要在IAM控制台中创建该角色,然后从EKS集群控制台中删除现有的EBS CSI驱动程序加载项,然后再次添加EBS CSI驱动程序加载项,并将该角色设置为"服务帐户角色"。有关将EBS CSI驱动程序加载项添加到群集的更多详细信息,请参阅此处[3]。
如果您已经有了"AWS_ROLE_ARN"的值,那么您需要使用此文档[2]检查角色的配置。
因此,牢记上述内容,我为该附加组件创建了IAM OIDC提供者角色。为此,您需要遵循有关如何为附加组件创建IAM角色的所有步骤,如此处所述[2]。
创建IAM OIDC提供者角色后,我已按照本文档[3]中的步骤通过控制台安装了附加组件,对于服务帐户角色,我已选择在上述步骤中创建的OIDC提供者角色。
在安装了附加组件之后,我尝试通过运行以下命令来删除mogodb数据库pod。
"kubectl delete-f config/samples/www.example.com_v1_mongodbcommunity_cr.yaml"
然后运行以下apply命令重新部署pod。
"kubectl apply-f config/samples/www.example.com_v1_mongodbcommunity_cr.yaml"
在我检查pod之后,我可以看到mongodb数据库pod已经进入运行状态。
以上是可能发生的最常见的问题,如果以上都不是您的问题,那么请与我们分享您工作所在时区的方便时间沿着,以及带有国家代码的联系电话,以便我们可以通过电话进行连接,并进行屏幕共享故障排除会话。
参考链接:
[1]Amazon EBS CSI驱动程序加载项:https://docs.aws.amazon.com/eks/latest/userguide/ebs-csi.html
[2]如何为EBS CSI驱动程序插件创建IAM OIDC提供程序:https://docs.aws.amazon.com/eks/latest/userguide/csi-iam-role.html
[3]管理EBS CSI驱动程序加载项:https://docs.aws.amazon.com/eks/latest/userguide/managing-ebs-csi.html
工作命令/步骤
(支持团队提到的步骤)
1.创建EKS集群
1.转到AWS控制台中新创建的EKS集群。在Overview选项卡中,复制OpenID Connect提供商URL的值,并将该值保存到某个位置以备将来参考。
1.点击 * IAM-> Identity Providers-> Add Provider 。选择 * OpenID Connect * 作为 * 提供程序类型。
1.将步骤2中复制的URL粘贴到 * Provider URL * 文本框中,然后单击“获取指纹”。在相应的文本框中设置 * Audience-www.example.com 。
1.单击“添加提供程序”按钮。
1.创建所需的iam角色。 IAM-> Roles-> Create Role 。在"选择受信任实体" 部分中,选择"Web身份"*。在 * Identity Provider * 下拉列表中,选择在步骤5中创建的OIDC选项。在下拉列表中选择Audience-www.example.com。sts.amazonaws.com
1.在下一个窗口中搜索 AmazonEBSCSIDriverPolicy 策略,然后单击“下一步”,为角色给予名称、描述和标签,然后单击创建角色。
1.在 Roles 部分中,搜索在步骤7中新创建的角色并进入该角色。* 信任关系->编辑信任策略。*
“oidc.eks.eu-west-1.amazonaws.com/id/385AA11111111116116:sub“:“system:serviceaccount:kube-system:ebs-csi-pumer-sa”
1.使用当前的oidc id更新上面的文本,并将其作为新的键值添加到 Statement[0] -> Condition -> StringEquals 中。参考最后这个信任关系json数据的完整json结构。
1.更新文本后,单击“更新策略”转到 EKS ->集群->步骤1中新建的集群 。点击 * 附加组件 * 选项卡, 添加新的。
1.在弹出窗口中,选择名称为Amazon EBS CSI Driver。* 版本 * 为最新版本。选择Role作为在步骤7* 中创建的 * 角色。如果下拉列表中没有列出上述角色,请使用reload按钮重新加载该部分,然后单击【添加】。
1.一段时间后,新的Add on将激活。然后运行这个
kubectl get pods -n kube-system
命令,我们应该看到csi pod,如图所示。然后运行问题中给出的命令。
下面的字典是role的Trusted relationshipsjson