为什么在 kubernetes pod 中挂载 GCE 卷会导致延迟?

2024-02-24

我有一个 kubernetes pod,我使用持久卷声明将 GCE 持久卷附加到其中。 (对于没有数量声明的更糟糕的问题,请参阅:挂载 gcePersistentDisk kubernetes 卷非常慢 https://stackoverflow.com/q/34769946/454103)

当没有附加卷时,Pod 会立即启动(最多 2 秒)。但是当 pod 挂载了 GCE 持久卷时,Running20 到 60 秒之间达到状态。我正在使用不同的磁盘大小(10、200、500 GiB)和多个 Pod 创建进行测试,大小似乎与延迟无关。

而这个延迟是not only发生在开始但也当滚动更新使用复制控制器执行或当代码崩溃在运行时。

下面是 kubernetes 规范:

复制控制器

{
    "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
                            }
                        ]
                    }
                ]
            }
        }
    }
}

体积声明

{
    "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"
        }
    }
}

Also


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

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

集群最终达到正确的状态,但每个组件可能需要一些时间才能达到该状态。这是你的等待时间。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么在 kubernetes pod 中挂载 GCE 卷会导致延迟? 的相关文章

随机推荐