我正在用Kubernetes设置我的应用程序。我有2个Docker镜像(Oracle和Weblogic)。我有2个kubernetes节点,Node1(20 GB存储)和Node2(60 GB)存储。
当我运行kubectl apply -f oracle.yaml
时,它尝试在Node1上创建oracle pod,几分钟后由于缺少存储而失败。在创建pod之前,如何强制Kubernetes检查该节点的空闲存储?
谢谢
首先,您可能希望为Node1提供更多存储空间。
但是如果你不想让吊舱开始,你可以用initContainer
进行检查,你可以用du
或df
检查你使用的空间。它可能是一个脚本,用于检查在没有足够空间时退出失败的阈值。像这样的东西:
#!/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将无法启动
您可以尝试为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