磁盘管理

kubelet通过cAdvisor支持系统分区和运行时分区

各工作目录路径:

  • 操作系统、容器标准输出日志:/var/log/pods
  • 系统模块log:/var/log
  • kubelet工作目录:/var/lib/kubelet;emptyDir卷数据也存储在该工作目录下
  • 容器运行时分区存储容器镜像和用户可写层的数据,其他磁盘分区通过hostPath或本地供Pod挂载
  • 容器临时存储(ephemeral-storage)的容量就是根分区的大小,建议对此不要划分运行时分区
    • 它包括日志和可写层数据
    • 通过Pod Spec中limits.ephemeral-storage和requests.ephemeral-storage来申请
    • Node对于临时存储的限制不是基于CGroup的,而是kubelet定时获取容器的日志和可写层的磁盘使用情况,如果超过限制,Pod就会被驱逐

磁盘写满是运维过程中最常见的问题之一,这会导致容器进程异常或者Pod被驱逐,因此管理磁盘空间对于我们非常重要

  • 日志管理:
    • 管理系统日志:一般系统日志我们可以运行logrotate定时任务对日志进行rotate清理,rotate条件可以进行配置
    • 管理容器日志:
      • 以现在常用的docker为例,除了基于系统logrotate管理日志,还可以用docker自带的日志管理功能来设置容器日志数量和日志文件的大小
      • 设置日志大小及数量:/etc/docker/daemon.json(截取了部分配置,日志配置了最大10m,数量存储5个)
    "log-opts": {
        "max-size": "10m",
        "max-files":"5",
    },
  • hostPath卷管理
    • 将计算机节点的文件挂载给容器,但系统无法限制用户往改卷写入的数据的大小,所以要定时对数据进行清理
  • emptyDir卷管理
    • 与Pod生命周期相绑定、可以限制用量的主机磁盘挂载方式;K8S1.15版本后,kubelet用自带的Quota特性设置,并监控emptyDir卷的大小,kubelet目前只支持XFS和ext4文件系统

进程数

Linux支持有限的进程数

  • 当CPU核数小于32时,默认最大进程数是32768
  • 当CPU核数大于等于32时,默认最大进程数是CPU核数*1024
  • Kubernetes引入SupportPodPidsLimit来限制Pod创建的最多的PID数;通过kubelet的启动参数podPidsLimit开启限制,进程数设置的过大或过小都会给节点的运行带来负担
  • Kubernets管理PID资源的方式:用户是不能申请容器进程数的,Kubelet通过系统调用周期性地获取当前系统的PID使用量,并读取/proc/sys/kernel/pid_max,获取系统支持PID的上限

线程数

线程数上限公式
thread_max = mempages(内存页数) / (8 * thread_size(线程栈大小) / page_size(页大小))

通过ulimit命令可以看到操作系统对每个用户设置最大的PID数

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐