我正在使用Kubernetes设置我的应用程序。我有2个Docker映像(Oracle和Weblogic)。我有2个kubernetes节点,分别是Node1(20 GB存储)和Node2(60 GB)存储。
当我运行kubectl apply -f oracle.yaml
时,它尝试在Node1上创建oracle pod,几分钟后,由于缺少存储,它失败了。我该如何强制Kubernetes在该节点上创建Pod之前检查该节点的空闲存储空间?
谢谢
答案 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