Kubernetes:mount:附加AWS EBS卷时不存在特殊设备

时间:2016-10-18 13:03:30

标签: amazon-web-services amazon-ec2 kubernetes amazon-ebs

亲爱的Kubernetes大师!

我使用' contrib'在手动创建的AWS主机上创建了kube 1.4.1群集。 Ansible剧本(https://github.com/kubernetes/contrib/tree/master/ansible)。

我的问题是Kube没有将EBS驱动器连接到minion主机。如果我按如下方式定义pod:

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata:
  name: kafka1
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: kafka1
        image: daniilyar/kafka
        ports:
        - containerPort: 9092 
          name: clientconnct
          protocol: TCP
        volumeMounts:
        - mountPath: /kafka
          name: storage
      volumes:
      - name: storage
        awsElasticBlockStore:
          volumeID: vol-56676d83
          fsType: ext4

我在kubelet.log中遇到以下错误:

Mounting arguments: /var/lib/kubelet/plugins/kubernetes.io/aws-ebs/mounts/vol-56676d83 /var/lib/kubelet/pods/db213783-9477-11e6-8aa9-12f3d1cdf81a/volumes/kubernetes.io~aws-ebs/storage  [bind]
Output: mount: special device /var/lib/kubelet/plugins/kubernetes.io/aws-ebs/mounts/vol-56676d83 does not exist

EBS交易量保持在'可用'在此期间的状态,所以我确信Kube 根本没有附加卷到主机,因此,不会挂载它。 我100%确定这是一个Kubernetes本身的问题,而不是许可问题,因为我可以从这个minion中手动安装相同的音量到这个minion就好了:

$ aws ec2 --region us-east-1 attach-volume --volume-id vol-56676d83 --instance-id $(wget -q -O - http://instance-data/latest/meta-data/instance-id) --device /dev/sdc
{
    "AttachTime": "2016-10-18T15:02:41.672Z", 
    "InstanceId": "i-603cfb50", 
    "VolumeId": "vol-56676d83", 
    "State": "attaching", 
    "Device": "/dev/sdc"
}

谷歌搜索,黑客攻击和尝试旧的K8版本并没有帮助我解决这个问题。 谁能指点我还能做些什么来理解这个问题所以我可以解决它?非常感谢任何帮助。

2 个答案:

答案 0 :(得分:8)

在K8 Slack频道没人帮我,所以经过一天的脱发后,我自己找到了解决办法:

要通过' contrib'安装K8群集。 Ansible playbook(https://github.com/kubernetes/contrib/tree/master/ansible)正确安装EBS卷,除了IAM角色设置外,您需要将 - cloud-provider = aws 标志添加到现有集群:所有kubelet,apiserver ,以及控制器管理员。

没有 - cloud-provider = aws 标志Kubernetes会给你一个不友好的安装:特殊设备xxx不存在'错误而非真实原因。

答案 1 :(得分:2)

使用kubeadm配置时,配置定义为: /var/lib/kubelet/config.yaml/var/lib/kubelet/kubeadm-flags.env

我遇到的问题是环境变量是在kubeadm-flags.env的主节点上定义的,而不是在第二个节点中定义的。

要手动解决此问题,我将--cloud-provider=aws标记添加到kubeadm-flags.env并重新启动了服务,从而解决了该问题: systemctl daemon-reload && systemctl restart kubelet