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

问题描述 投票:1回答:2

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

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

谢谢

kubernetes
2个回答
2
投票

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

但是如果你不想让吊舱开始,你可以用initContainer进行检查,你可以用dudf检查你使用的空间。它可能是一个脚本,用于检查在没有足够空间时退出失败的阈值。像这样的东西:

#!/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

另一种方法是使用带有persistent volume(PVC)的persistent volume claim(PV),它具有足够的空间和默认的StorageClass Admission Controller,并且您确实在卷定义中分配了适当的空间。

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将无法启动


0
投票

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

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

然后,它将仅在具有足够短暂存储空间的节点上进行调度。

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

$ 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
© www.soinside.com 2019 - 2024. All rights reserved.