amazon-web-services - 挂载失败:在 Kubernetes 使用 EBS 卷时退出状态 32
问题描述
我对 AWS 上的 k8s 设置集群有点困惑。我正在尝试使用 EBS 卷作为持久存储,但找不到足够的信息(我遗漏了一些东西,或者这是 aws 提供者https://kubernetes.github.io/cloud-provider-aws/的所有文档?
当我尝试将部署配置应用到我的集群时,输出
kubectl describe pods
是:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 7s default-scheduler Successfully assigned default/mssql-deploy-67885c9f84-9xx7c to ip-172-31-0-215.sa-east-1.compute.internal
Normal SuccessfulAttachVolume 4s attachdetach-controller AttachVolume.Attach succeeded for volume "mssql-volume"Normal SuccessfulAttachVolume 4s attachdetach-controller AttachVolume.Attach succeeded for volume "mssql-volume"
Warning FailedMount 3s (x4 over 6s) kubelet MountVolume.SetUp failed for volume "mssql-volume" : mount failed: exit status 32
Mounting command: mount
Mounting arguments: -o bind /var/lib/kubelet/plugins/kubernetes.io/aws-ebs/mounts/vol-02efbeface5569c51 /var/lib/kubelet/pods/01537252-4323-4e7c-9f05-a2a730498ecd/volumes/kubernetes.io~aws-ebs/mssql-volume
Output: mount: /var/lib/kubelet/pods/01537252-4323-4e7c-9f05-a2a730498ecd/volumes/kubernetes.io~aws-ebs/mssql-volume: special device /var/lib/kubelet/plugins/kubernetes.io/aws-ebs/mounts/vol-02efbeface5569c51 does not exist.
我使用我认为这是使用 aws 提供程序的必要条件来设置主节点,例如:将主机名设置为 priv dns,在 ClusterConfig 上设置 extraArgs cloud-provider aws,在 EC2 实例中设置角色,如 cloud-provider-aws 文档(控制平面到主机,节点到节点)。
然后我使用以下文件(通过kubeadm join --config node.yaml
)将节点加入集群:
apiVersion: kubeadm.k8s.io/v1beta1
kind: JoinConfiguration
discovery:
bootstrapToken:
token: "TOKEN-FROM-MASTER"
apiServerEndpoint: "IP-PORT-FROM-MASTER"
caCertHashes:
- "SHA-FROM-MASTER"
nodeRegistration:
name: $(hostname)
kubeletExtraArgs:
cloud-provider: aws
由于集群能够附加卷(这是真的,因为我在 AWS 控制台上进行了验证),我认为问题出在节点上的 kubelet 上。
解决方案
尽管 aws 提供程序文档非常薄弱,但解决方案很简单。实际上我的搜索是错误的,错误的重要部分是最终的,我们读到“特殊设备......不存在”。
有了这个,我在 stackoverflow https://stackoverflow.com/a/60325491/1169158中找到了这个答案。
最后,我们需要做的就是在所有节点+主节点中添加--cloud-provider=aws
标志/var/lib/kubelet/kubeadm-flags.env
。
希望这会很有用。
推荐阅读
- html - 在 html5 中使用高度作为百分比
- regex - 如何匹配特定字符串后面的字符?
- c++ - LLVM 错误:MCJIT::runFunction 不支持全功能参数传递
- html - Angular - 在一个 HTML 文件中包含两个相同的 ng-template 和组件(如何参考,而不是复制)
- json - 我厌倦了在颤抖中找出我的产品列表长度。你能帮我找出我的问题吗?
- r - 如何将y轴标签放在2行ggplot上
- python - 当我尝试抓取 Web 数据时会弹出以下错误:模块 'html5lib.treebuilders' 没有属性 '_base'
- delphi - THeaderControl,如何使用 VCL 样式显示 CheckBoxes
- c# - 如何向除当前用户之外的所有用户发送推送通知?
- android - 科尔多瓦的 Android 构建问题