1

我有一個kubernetes窗格,我使用一個持久性聲明來附加一個GCE持久性卷。 (對於沒有批量聲明的更嚴重問題,請參閱:Mounting a gcePersistentDisk kubernetes volume is very slow爲什麼在Kubernetes吊艙中安裝GCE卷會導致延遲?

當沒有連接卷時,該任務盒會立即啓動(最長2秒)。但是,如果該容器具有GCE持續卷裝,則會在20到60秒之間達到該狀態。我正在測試不同的磁盤大小(10,200,500吉比特)和多個吊艙創建,並且大小似乎與延遲無關。

而這種延遲不僅發生開始也當滾動更新與複製控制器執行或當代碼運行時崩潰

下面我有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" 
     } 
    } 
} 

而且

回答

1

GCE(與AWS和OpenStack一起)必須先將節點掛載到節點,然後才能掛載到節點並將其展示給節點。附件所需的時間取決於雲提供商。

對於由ReplicationController創建的Pod的情況,還有一個額外的分離操作必須發生。同一個磁盤不能連接到多個節點(至少不能以讀/寫模式)。拆卸和吊艙清理髮生在與附加不同的線程中。具體而言,在節點上運行的Kubelet必須將其當前擁有的Pod(及其卷的總和)與當前存在於該節點上的捲進行協調。孤立卷被卸載和分離。如果您的pod安排在其他節點上,則必須等到原始節點分離卷。

集羣最終達到正確的狀態,但每個組件都需要一段時間才能到達該狀態。這是你的等待時間。

+0

不僅如此,但如果您重新啓動一個窗格或刪除並重新創建,存儲可能不會卸載,直到稍後,然後嘗試掛載存儲的窗格將無法通過,因爲存儲已經安裝在其他地方...因此它會等到存儲未安裝之後才能重新安裝。我看到幾分鐘的延遲,它與我在GKE節點日誌中可以看到的靜音錯誤相匹配。 – MrE