一、kubernetes中关于资源的计算方式
Kubernetes中通过节点用allocatableKubelet Node Allocatable用来为Kube组件和System进程预留资源,从而保证当节点出现满负荷时也能保证Kube和System进程有足够的资源。
节点可为pod分配的资源计算方法:
Node Allocatable Resource = Node Capacity(资源总大小) - Kube-reserved(kubz组件保留资源) - system-reserved(系统保留资源) - eviction-threshold(用户设置的驱逐阈值)
无论Pod怎么消耗资源,都不会超过分配的Node Allocatable Resource,一旦超过,Pod就会触发驱逐策略。
二、kubernetes中关于资源预留的配置方式
在kubelet的启动参数中,可配置kubernetes的资源预留相关参数:
- –enforce-node-allocatable,默认为pods,要为kube组件和System进程预留资源,则需要设置为pods,kube-reserved,system-reserve。
- –cgroups-per-qos,Enabling QoS and Pod level cgroups,默认开启。开启后,kubelet会将管理所有workload Pods的cgroups。
- –cgroup-driver,默认为cgroupfs,另一可选项为systemd。取决于容器运行时使用的cgroup driver,kubelet与其保持一致。比如你配置docker使用systemd cgroup driver,那么kubelet也需要配置–cgroup-driver=systemd,否则kubelet启动会报错。
- –kube-reserved,用于配置为kube组件(kubelet,kube-proxy,dockerd等)预留的资源量,比如—kube-reserved=cpu=1000m,memory=8Gi,ephemeral-storage=16Gi。
- –kube-reserved-cgroup,如果你设置了–kube-reserved,那么请一定要设置对应的cgroupÿ