Kubelet 使用什么来确定节点的临时存储容量?

Sam*_*Sam 4 kubernetes kubelet

我在虚拟机上运行 Kubernetes 集群。安装座的简要概述如下:

$ df -h
Filesystem                    Size  Used Avail Use% Mounted on
/dev/sda1                      20G  4.5G   15G  24% /
/dev/mapper/vg001-lv--docker  140G   33G  108G  23% /var/lib/docker
Run Code Online (Sandbox Code Playgroud)

如您所见,我添加了一个额外的磁盘来存储 docker 映像及其卷。但是,查询节点容量时,返回以下内容

Capacity:
  cpu:                12
  ephemeral-storage:  20145724Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             65831264Ki
  nvidia.com/gpu:     1
  pods:               110
Run Code Online (Sandbox Code Playgroud)

ephemeral-storage20145724Ki20G,指挂载在 的磁盘/

Kubelet如何计算它的ephemeral-storage?它只是查看可用磁盘空间吗/?或者它正在查看另一个文件夹,例如/var/log/containers

这是一篇类似的文章,用户最终屈服于增加安装在 的磁盘/

小智 9

一些理论

默认情况下CapacityAllocatable对于标准 kubernetes 环境中的临时存储,源自文件系统(安装到 /var/lib/kubelet)。这是 kubelet 目录的默认位置。

kubelet 支持以下文件系统分区:

  1. nodefs:节点的主文件系统,用于本地磁盘卷、emptyDir、日志存储等。例如, nodefs 包含 /var/lib/kubelet/.
  2. imagefs:容器运行时用于存储容器映像和容器可写层的可选文件系统。

Kubelet 自动发现这些文件系统并忽略其他文件系统。Kubelet 不支持其他配置。

来自Kubernetes 网站有关卷的信息:

卷的存储介质(例如磁盘或 SSD)emptyDir由保存 kubelet 根目录(通常为 )的文件系统的介质决定/var/lib/kubelet

可以通过提供以下内容来配置 kubelet 目录的位置:

  1. kubelet初始化时的命令行参数

--root-dir字符串默认值:/var/lib/kubelet

  1. 通过kubeadm 和配置文件(例如)
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
  kubeletExtraArgs:
    root-dir: "/data/var/lib/kubelet"
Run Code Online (Sandbox Code Playgroud)

定制 kubelet

要自定义 kubelet,您可以 在同一配置文件中添加或KubeletConfiguration分隔。然后可以将该文件传递到 .ClusterConfigurationInitConfiguration---kubeadm init

使用 kubeadm 引导 kubernetes 集群时,Capacity报告的kubectl get node等于挂载的磁盘容量/var/lib/kubelet

但是,Allocatable将报告为: Allocatable= Capacity-10% nodefs使用标准 kubeadm 配置,因为kubelet 具有以下默认硬驱逐阈值:

  • nodefs.available<10%

可以在kubelet 初始化期间配置: -eviction-hardmapStringString 默认值:imagefs.available<15%,memory.available<100Mi,nodefs.available<10%


例子

我为 Kubernetes 设置了一个测试环境,其中包含一个主节点和两个工作节点(worker-1 和worker-2)。

两个工作节点都有相同容量的卷:50Gb。

此外,我在路径 处为 Worker-1 节点安装了第二个容量为 20Gb 的卷 /var/lib/kubelet。然后我用 kubeadm 创建了一个集群。

结果

从worker-1节点:

skorkin@worker-1:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        49G  2.8G   46G   6% /
...
/dev/sdb         20G   45M   20G   1% /var/lib/kubelet
Run Code Online (Sandbox Code Playgroud)

Capacity:
  cpu:                2
  ephemeral-storage:  20511312Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             4027428Ki
  pods:               110
Run Code Online (Sandbox Code Playgroud)

临时存储的大小与安装在 /var/lib/kubelet 的卷相同。

从worker-2节点:

skorkin@worker-2:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        49G  2.7G   46G   6% /
Run Code Online (Sandbox Code Playgroud)

Capacity:
  cpu:                2
  ephemeral-storage:  50633164Ki
  hugepages-1Gi:      0
  hugepages-2Mi:      0
  memory:             4027420Ki
  pods:               110  
Run Code Online (Sandbox Code Playgroud)