Kubernetes配置GCE永久磁盘有时会失败

Kubernetes配置GCE永久磁盘有时会失败,kubernetes,provisioning,google-kubernetes-engine,Kubernetes,Provisioning,Google Kubernetes Engine,我目前使用的是GCE标准容器集群,非常成功和愉快。但我对GCE持久磁盘的配置有一个疑问 如Kubernetes文件格式所述。我创建了两个YAML文件: kind: StorageClass apiVersion: storage.k8s.io/v1beta1 metadata: annotations: storageclass.beta.kubernetes.io/is-default-class: "true" name: slow provisioner: ku

我目前使用的是GCE标准容器集群,非常成功和愉快。但我对GCE持久磁盘的配置有一个疑问

如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": "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时出错,正在跳过:等待卷连接/装载pod“…”的超时已过期。未连接/未安装卷的列表=[…]

有时吊舱可以完美启动,但有时会崩溃。我唯一能找到的是,在创建PVC和RC之间需要足够的时间。我试了很多次,但结果都不确定

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

提前谢谢! 致以最良好的祝愿


Hacor

提前感谢您的评论!经过几天的搜索,我终于能够确定问题出在哪里,我发布它是因为它可能对其他用户有用

我使用for Kubernetes作为复制控制器,为我的应用程序提供NFS存储,但似乎当NFS服务器和PV,PVC被删除有时NFS共享卡在节点本身上,我认为这与我没有按特定顺序删除这些元素有关,因此节点被卡在共享上,无法将新共享装载到自身或pod上

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

我不确定正确的删除顺序,但我认为:

  • 使用NFS共享的pod
  • NFS共享的PV、PVC
  • NFS服务器
如果pod需要更长的时间才能删除,并且在PV被删除之前它还没有完全消失,那么节点会挂起一个挂载,因为它无法删除,因为它正在使用中,这就是问题发生的地方

老实说,现在我要转移到一个外部配置的GlusterFS集群。 希望它能帮助别人

问候,


对不起,给您添麻烦了。我们想调试这个。你能和我分享你的GKE集群信息(项目名称、区域/地区和集群名称)吗?离线时(联系方式:联系方式:上一次复制的确切时间——我们将查看主日志以了解发生了什么。使用带有GCE的PVC非常麻烦:磁盘被安装到一台机器上,当吊舱在随机机器上启动时。因此,吊舱可能永远找不到PV。为了防止这种情况,您必须将吊舱绑定到机器上。在谷歌能够将一个磁盘装载到多台机器之前,一个更可行的方法是使用直接从pod装载的GCE存储
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