google-cloud-storage - 为什么在kubernetes容器中安装GCE卷会导致延迟?

标签 google-cloud-storage google-compute-engine kubernetes persistent-storage

我有一个kubernetes pods ,使用持久性卷声明将GCE持久性卷附加到该kubernetes pods 。 (对于更严重的问题,没有批量声明,请参阅:Mounting a gcePersistentDisk kubernetes volume is very slow)

如果没有附加的卷,则 Pane 将在无时间(最多2秒)内启动。但是,如果Pod具有GCE持久卷安装,则Running状态会在20到60秒之间到达。我正在使用不同的磁盘大小(10、200、500 GiB)和创建多个Pod进行测试,该大小似乎与延迟无关。

而且这种延迟不仅是,而且不仅是开始的中出现,而且是在复制 Controller 上执行滚动更新时,或者当代码在运行时使崩溃时。

下面我有kubernetes规范:

复制 Controller

{
    "apiVersion": "v1",
    "kind": "ReplicationController",
    "metadata": {
        "name": "a1"
    },
    "spec": {
        "replicas": 1,
        "template": {
            "metadata": {
                "labels": {
                    "app": "a1"
                }
            },
            "spec": {
                "containers": [
                    {
                        "name": "a1-setup",
                        "image": "nginx",
                        "ports": [
                            {
                                "containerPort": 80
                            },
                            {
                                "containerPort": 443
                            }
                        ]
                    }
                ]
            }
        }
    }
}

批量 claim
{
    "apiVersion": "v1",
    "kind": "PersistentVolumeClaim",
    "metadata": {
        "name": "myclaim"
    },
    "spec": {
        "accessModes": [
            "ReadWriteOnce"
        ],
        "resources": {
            "requests": {
                "storage": "10Gi"
            }
        }
    }
}

和音量
{
    "apiVersion": "v1",
    "kind": "PersistentVolume",
    "metadata": {
        "name": "mydisk",
        "labels": {
             "name": "mydisk"
        }
    },
    "spec": {
        "capacity": {
            "storage": "10Gi"
        },
        "accessModes": [
            "ReadWriteOnce"
        ],
        "gcePersistentDisk": {
            "pdName": "a1-drive",
            "fsType": "ext4"
        }
    }
}

最佳答案

GCE(以及AWS和OpenStack)必须先将磁盘/卷附加到节点,然后才能将其挂载并暴露到您的Pod。连接所需的时间取决于云提供商。

对于由ReplicationController创建的Pod,必须执行附加的分离操作。同一磁盘不能连接到多个节点(至少不能以读/写模式)。分离和pod清理发生在与连接不同的线程中。具体来说,在节点上运行的Kubelet必须将其当前具有的Pod(及其体积的总和)与节点上当前存在的体积进行协调。孤立的卷将被卸载和分离。如果您的Pod已安排在其他节点上,则它必须等待,直到原始节点分离该卷为止。

群集最终会达到正确的状态,但是每个组件可能要花一些时间才能到达那里。这是您的等待时间。

关于google-cloud-storage - 为什么在kubernetes容器中安装GCE卷会导致延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34854472/

相关文章:

jenkins - 迁移后的 Jenkins 不断重定向到原始域

kubernetes - 是否可以在 GKE 集群中同时运行 Istio 和 gRPC

python - 使用 Dataflow + Beam + Python 从 Google Cloud Storage 读取 Shapefile

python - 我无法创建适用于 "dev_appserver.py."的 Google Cloud Storage 文件

node.js - 无法从 nodejs 上传到谷歌云或 firebase 存储桶

google-cloud-platform - 我想获取 GCP VM 实例的操作系统

caching - 为 GCE 添加边缘缓存

google-cloud-storage - 附加了永久性磁盘的实例的 Google Compute Engine 快照失败

Django Google App Engine,如何使用 Google Cloud Storage 提供静态文件

kubernetes - 我们如何在我的k8s集群中修改docker0 mtu?