【问题标题】:Kubernetes provisioning GCE Persistent disk sometimes failsKubernetes 配置 GCE 持久磁盘有时会失败
【发布时间】:2017-05-18 20:09:58
【问题描述】:

我目前正在使用 GCE 标准容器集群并获得了很多成功和乐趣。但是我有一个关于 GCE Persistent 磁盘配置的问题。

如 Kubernetes 中的 this 文档中所述。我创建了两个 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 文件中找不到更多错误):

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

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

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

提前致谢! 最好的问候,

哈科尔

【问题讨论】:

  • 很抱歉给 Hacor 带来麻烦。我们想对此进行调试。您能否离线与我分享您的 GKE 集群信息(项目名称、区域/区域和集群名称)(联系信息github.com/saad-ali),以及上次重现的确切时间——我们将看看主日志以查看发生了什么。
  • 带 GCE 的 PVC 使用起来相当麻烦:磁盘被挂载到单台机器上,而 Pod 在随机机器上启动。因此,吊舱可能永远找不到 PV。为了防止这种情况,您必须将 pod 绑定到机器。在 Google 可以将磁盘挂载到多台机器之前,一种更可行的方法是使用直接从 pod 挂载的 GCE 存储

标签: kubernetes provisioning google-kubernetes-engine


【解决方案1】:

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

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

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

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

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

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

老实说,我现在要迁移到外部配置的 GlusterFS 集群。 希望它可以帮助某人!

问候,

哈科尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多