Docker

超出 GKE 上下文期限:CreateContainerError 並且未能保留容器名稱

  • February 17, 2022

我正在執行一個 GKE 集群,有時,其中一個節點與從php7-alpine.

我們執行兩種類型的容器,第一種類型是從 建構的php7-alpine,第二種類型是從第一種類型建構的。( php7-alpine-> Base App-> App with extra)。只有我們Base App Pods有這些問題。

到目前為止,我已經看到以下錯誤:

  • failed to reserve container name
  • FailedSync: error determining status: rpc error: code = Unknown desc = Error: No such container: XYZ
  • Error: context deadline exceeded context deadline exceeded: CreateContainerError

節點上有大量磁碟空間,kubectl describe pod不包含任何相關/有用的資訊。

更多細節:

  • 在 50 個Base app中,有 6 個 pod 出錯,並且在所有App with extrapod 中,沒有一個失敗。
  • 所有失敗的 pod 總是在同一個節點上。
  • 我們已經重新創建/替換了節點。問題仍然存在,如果我們用有故障的 pod 替換節點,我們有 50/50% 的機率讓下一個節點上的所有 pod 都正常。問題顯得有些隨機。
  • 執行 GKE v1.17.9-gke.1504
  • 我們在可搶占節點上執行。
  • 容器圖像非常大(~3gb,正在努力減少)。
  • 問題可能在一個月前開始。

我真的不知道要尋找什麼,我已經廣泛尋找類似的問題。任何幫助是極大的讚賞!

更新:

這是部署

apiVersion: apps/v1
kind: Deployment
metadata:
 labels:
   app: my-app
   appType: web
   env: prod
 name: my-app
 namespace: default
spec:
 replicas: 2
 selector:
   matchLabels:
     app: my-app
 strategy:
   rollingUpdate:
     maxSurge: 1
     maxUnavailable: 0
   type: RollingUpdate
 template:
   metadata:
     labels:
       app: my-app
       version: v1.0
   spec:
     containers:
         image: richarvey/nginx-php-fpm:latest  # We build upon that image to add content and services
         lifecycle:
           preStop:
             exec:
               command:
                 - /entry-point/stop.sh
         name: web
         ports:
           - containerPort: 80
             protocol: TCP
         resources:
           requests:
             cpu: 50m
             memory: 1500Mi
       - image: redis:4.0-alpine
         name: redis
         resources:
           requests:
             cpu: 25m
             memory: 25Mi
         terminationMessagePath: /dev/termination-log
         terminationMessagePolicy: File

該問題已被調查並修復。

https://github.com/containerd/containerd/issues/4604

引用自:https://serverfault.com/questions/1036683