2017-01-04 65 views
1

我目前正在使用GCE标准容器集群,很多成功和乐趣。但是我对GCE永久磁盘的配置有疑问。Kubernetes供应GCE持久性磁盘有时会失败

this文件形式Kubernetes。我创建了两个YAML文件:

kind: StorageClass 
apiVersion: storage.k8s.io/v1beta1 
metadata: 
    annotations: 
     storageclass.beta.kubernetes.io/is-default-class: "true" 
    name: slow 
provisioner: kubernetes.io/gce-pd 
parameters: 
    type: pd-standard 

kind: StorageClass 
apiVersion: storage.k8s.io/v1beta1 
metadata: 
    name: fast 
provisioner: kubernetes.io/gce-pd 
parameters: 
    type: pd-ssd 

如果我现在创建以下卷声明:

{ 
    "kind": "PersistentVolumeClaim", 
    "apiVersion": "v1", 
    "metadata": { 
    "name": "claim-test", 
    "annotations": { 
     "volume.beta.kubernetes.io/storage-class": "hdd" 
    } 
    }, 
    "spec": { 
    "accessModes": [ 
     "ReadWriteOnce" 
    ], 
    "resources": { 
     "requests": { 
     "storage": "3Gi" 
     } 
    } 
    } 
} 

磁盘被完美创造的! 如果我现在开始以下单位

apiVersion: v1 
kind: ReplicationController 
metadata: 
    name: nfs-server 
spec: 
    replicas: 1 
    selector: 
    role: nfs-server 
    template: 
    metadata: 
     labels: 
     role: nfs-server 
    spec: 
     containers: 
     - name: nfs-server 
     image: gcr.io/google_containers/volume-nfs 
     ports: 
      - name: nfs 
      containerPort: 2049 
      - name: mountd 
      containerPort: 20048 
      - name: rpcbind 
      containerPort: 111 
     securityContext: 
      privileged: true 
     volumeMounts: 
      - mountPath: /exports 
      name: mypvc 
     volumes: 
     - name: mypvc 
      persistentVolumeClaim: 

     claimName: claim-test 

磁盘被完全安装,但很多次,我偶然发现了以下错误(没有更多可以在kubelet.log文件中找到):

失败在节点“....”上附加音量“声明 - 测试”:未找到GCE永久磁盘:diskName =“.....”zone =“europe-west1-b” 同步窗格时出错,正在跳过:超时已过期等待卷挂接/挂载“...”。未挂接/未挂载的卷的列表= [...]

有时候pod靴子完美,但有时会崩溃。我能找到的唯一的事情就是在创建PVC和RC本身之间需要足够的时间。我尝试了很多次,但结果相同。

我希望有人能给我一些建议或帮助。

在此先感谢! 最好的问候,

Hacor

+0

对不起,麻烦Hacor。我们想调试这个。您可以与我离线分享您的GKE集群信息(项目名称,区域/区域和集群名称)(联系信息https://github.com/saad-ali)以及最后一个报告的确切时间 - 我们会看看主日志,看看发生了什么。 –

+0

带GCE的PVC使用起来相当麻烦:磁盘被安装到一台机器上,而一个吊舱在随机机器上启动。由于这一点,吊舱可能永远找不到PV。为了防止这种情况,您必须将吊舱绑定到机器上。在谷歌能够将磁盘安装到多台机器上之前,一种更可行的方法是使用直接从吊舱安装的GCE存储器 –

回答

0

预先感谢您的意见!经过几天的搜索,我终于可以确定问题所在,我发布了它,因为它可能对其他用户有用。

我使用NFS example作为Kubernetes的复制控制器来为我的应用程序提供NFS存储,但似乎NFS服务器和PV,PVC有时会被删除,NFS共享会卡在节点本身,而我认为这与我没有按照特定的顺序删除这些元素有关,因此节点陷入了无法将新股份安装到自身或Pod的限制中!

我注意到在我从群集中删除了一些应用程序(NFS,PV,PVC和其他组件)之后,总是发生这个问题。如果我在GCE上创建了一个新的群集,它完美地用于创建应用程序,直到我删除它并出错。

正确删除次序是什么我不知道肯定做的,但我认为:使用

  • 荚NFS共享
  • PV,NFS共享的PVC
  • NFS服务器

如果pod需要更长的时间才能删除,并且在删除PV之前并未完全消失,则该节点会挂载一个挂载,因为该挂载正在使用而无法删除,这就是问题发生的地方

我必须诚实地说现在我正在转向外部配置的GlusterFS集群。 希望它可以帮助别人!

问候,

Hacor

相关问题