我正在使用Kubernetes在AWS上玩,其中t2.medium EC2实例具有20GB的磁盘空间,其中一个节点在几天之后用尽了磁盘空间。它似乎是由Docker镜像和日志的组合引起的。
据我所知,Kubernetes拥有自己的Docker GC来管理Docker的磁盘使用和日志轮换。我猜测20GB不足以让Kubernetes自行管理磁盘使用情况。什么是生产环境的安全磁盘大小?
答案 0 :(得分:5)
按照quickstart guide中所述使用GKE进行标准安装时,您最终会得到3 x n1-standard-1个节点(请参阅machine types),每个节点有100 GB的存储空间。
在创建群集后立即查看节点,然后为磁盘空间提供这些数字:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 1.2G 455M 767M 38% /
devtmpfs 1.9G 0 1.9G 0% /dev
tmp 1.9G 24K 1.9G 1% /tmp
run 1.9G 684K 1.9G 1% /run
shmfs 1.9G 0 1.9G 0% /dev/shm
/dev/sda1 95G 2.4G 92G 3% /var
/dev/sda8 12M 28K 12M 1% /usr/share/oem
media 1.9G 0 1.9G 0% /media
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
tmpfs 256K 0 256K 0% /mnt/disks
tmpfs 1.0M 120K 904K 12% /var/lib/cloud
overlayfs 1.0M 124K 900K 13% /etc
这些数字可能会给你一个起点,但正如其他人已经指出的那样,其余的则取决于你的具体要求。
答案 1 :(得分:2)
我认为没有一般答案。您已经回答了自己 - 您需要足够的空间来存放码头图像,容器和日志。多少 - 取决于使用的图像数量,运行的容器,生成的日志量以及要保留的日志量。
基于Kubernetes的应用程序不应在pod卷上创建日志文件。日志应该转到共享卷(pod外部)或日志管理数据库,如elasticSearch,graylog。在群集生命周期内,将多次创建和删除Pod。当pod消失时,挂载在pod卷上的日志文件将消失。最有可能的是,您希望您的日志活得比这长。
从实验中你已经知道你应该知道这些数字,并能够根据你的需要估算用量。
有关详细信息,请参阅https://kubernetes.io/docs/admin/garbage-collection/。
答案 2 :(得分:0)
我发现,如果我确实需要5G,我可以``通过'',即用于测试K8s的可扩展性等等。有趣的是,在两个不同的平台上,Ive通常看到:
通常,在Vsphere上运行集群api实现时,我发现节点通常在40个节点集群上使用2%到10%的磁盘空间。这相当于1-5G。
在AWS上,我发现(例如,使用EKctl或cluster-api-provider-aws),集群可以使用相同的大小,大约2G左右,平均大约与我通常使用的大小相同在vSphere集群中查看
[ec2-user @ ip-192-168-76-4〜] $ df -h 已使用的文件系统大小可用百分比已安装在 / dev / nvme0n1p1 80G 2.4G 78G 3%/
这是您正在运行的高度可变的wrt容器,不同数量的映像等,但是通常,Kubelet本身会旋转日志,并且最终不会随着时间的推移而占用大量磁盘空间。如果您在此处查看:https://github.com/kubernetes/kubernetes/pull/59898,则可以看到围绕最大日志大小/有效期的初始实施的逻辑。如果您确实需要节省磁盘空间,可以使用多种选项发送Kubelet本身,以使此日志旋转更加严格。
因此,通常来说,您可以期望在运行群集几周后,无论状态大小如何,都可以坚持使用。
如果不时使用大量新图像,请确保与CRI配置核实有关是否回收了图像。