如何避免在没有足够存储空间的节点上创建Pod?

时间:2019-04-25 17:04:25

标签: kubernetes

我正在使用Kubernetes设置我的应用程序。我有2个Docker映像(Oracle和Weblogic)。我有2个kubernetes节点,分别是Node1(20 GB存储)和Node2(60 GB)存储。

当我运行kubectl apply -f oracle.yaml时,它尝试在Node1上创建oracle pod,几分钟后,由于缺少存储,它失败了。我该如何强制Kubernetes在该节点上创建Pod之前检查该节点的空闲存储空间?

谢谢

2 个答案:

答案 0 :(得分:2)

首先,您可能希望为Node1提供更多存储空间。

但是,如果您根本不想启动Pod,则可以使用initContainer进行检查,在其中检查du或{{3 }}。它可能是一个脚本,用于检查没有足够空间的情况下无法成功退出的阈值。像这样:

#!/bin/bash 

# Check if there are less than 10000 bytes in the <dir> directory
if [ `du <dir> | tail -1 | awk '{print $1}'` -gt "10000" ]; then exit 1; fi

另一种替代方法是使用df(PV)和persistent volume(PVC)并具有足够的空间以及默认的persistent volume claim StorageClass,然后进行分配卷定义中的适当空间。

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 40Gi
  storageClassName: mytype

然后在您的Pod上

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
    - name: mycontainer
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html"
        name: mypd
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: myclaim

如果无法分配您的索赔(空间不足),则Pod不会启动

答案 1 :(得分:0)

您可以尝试为pod指定临时存储需求:

resources:
  requests:
    ephemeral-storage: "40Gi"
  limits:
    ephemeral-storage: "40Gi"

那么它将仅在具有足够的临时存储可用的节点上进行调度。

您可以在“ kubectl describe节点”的输出中验证每个节点上的临时存储量。

$ kubectl describe node somenode | grep -A 6 Allocatable
Allocatable:
 attachable-volumes-gce-pd:  64
 cpu:                        3920m
 ephemeral-storage:          26807024751
 hugepages-2Mi:              0
 memory:                     12700032Ki
 pods:                       110