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

Kubernetes provisioning GCE Persistent disk sometimes fails

我目前正在使用 GCE 标准容器集群,并取得了很大的成功和乐趣。但是我对 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"
      }
    }
  }
}

磁盘创建完美! 如果我现在开始关注 unit

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 文件中找不到更多):

无法在节点“....”上附加卷 "claim-test",原因是:未找到 GCE 永久磁盘:diskName="....." zone="europe-west1-b" 同步 pod 时出错,跳过:等待 pod“....”的卷到 attach/mount 超时已过期。 unattached/unmounted 卷列表=[....]

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

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

提前致谢! 最好的问候,

哈科尔

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

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

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

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

  • Pods 使用 NFS 共享
  • NFS 共享的 PV、PVC
  • NFS 服务器

如果 pod 需要更长的时间才能删除,并且在删除 PV 之前它没有完全消失,则节点挂起并挂载它无法删除,因为它正在使用中,这就是问题发生的地方。

老实说,现在我要迁移到外部配置的 GlusterFS 集群。 希望对大家有帮助!

此致,

哈科尔