我有一个kubernetes pod,我使用持久性卷声明附加了GCE持久卷。 (对于没有批量声明的更糟糕的问题,请参阅:Mounting a gcePersistentDisk kubernetes volume is very slow)
当没有附加音量时,pod会立即启动(最多2秒)。但是当pod具有GCE持久性卷安装时,Running
状态达到20到60秒之间。我正在测试不同的磁盘大小(10,200,500 GiB)和多个pod创建,并且大小似乎与延迟无关。
此延迟不仅发生在开始,而且滚动更新与复制控制器执行时或 >运行期间代码崩溃。
下面我有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"
}
}
}
另外
答案 0 :(得分:1)
GCE(以及AWS和OpenStack)必须首先将磁盘/卷附加到节点,然后才能将其装入并暴露给您的Pod。附件所需的时间取决于云提供商。
对于由ReplicationController创建的pod,需要进行额外的分离操作。同一磁盘不能连接到多个节点(至少不在读/写模式下)。分离和pod清理发生在与附加不同的线程中。具体而言,在节点上运行的Kubelet必须将其当前具有的pod(及其卷的总和)与当前存在于节点上的卷进行协调。孤立卷未卸载和分离。如果您的pod已安排在其他节点上,则必须等到原始节点分离卷。
群集最终会达到正确的状态,但每个组件可能需要一段时间才能到达。这是你的等待时间。