是否可以在kubernetes节点上添加交换空间?
我试图在kubernetes节点上添加交换空间,以防止其内存不足问题。是否可以在节点(以前称为minion)上添加交换空间?如果可能,我应该遵循什么程序以及它如何影响pods验收测试 Kubernetes不支持容器内存交换。即使添加交换空间,kubelet也会创建一个--memory swappiness=0的容器(使用Docker时)。有关增加支持的讨论已经展开,但该提案未获批准 从技术上讲你可以做到。是否可以在kubernetes节点上添加交换空间?,kubernetes,Kubernetes,我试图在kubernetes节点上添加交换空间,以防止其内存不足问题。是否可以在节点(以前称为minion)上添加交换空间?如果可能,我应该遵循什么程序以及它如何影响pods验收测试 Kubernetes不支持容器内存交换。即使添加交换空间,kubelet也会创建一个--memory swappiness=0的容器(使用Docker时)。有关增加支持的讨论已经展开,但该提案未获批准 从技术上讲你可以做到。 有一个广泛的讨论,让K8S用户有权决定是否启用交换 我将首先直接提到你的问题,然后继续讨论
有一个广泛的讨论,让K8S用户有权决定是否启用交换 我将首先直接提到你的问题,然后继续讨论 如果在上运行K8S并且已将交换添加到节点-请执行以下步骤: 1)重置当前群集设置,然后向kubelet配置添加
fail swap on=false
标志:
kubeadm reset
echo 'Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"' >> /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
(*)如果您在Ubuntu上运行,请将Kubelet配置的路径从etc/systemd/syste、/Kubelet
替换为/etc/default/Kubelet
2)重新加载服务:
systemctl daemon-reload
systemctl restart kubelet
3)再次初始化群集设置并忽略交换错误:
kubeadm init --ignore-preflight-errors Swap
或:
如果您更喜欢使用kubeadm config.yaml
:
1)添加failSwapOn
标志:
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
failSwapOn: false # <---- Here
返回讨论天气是否允许交换。 一方面,K8S非常清楚这一点——Kubelet不是为支持交换而设计的——你可以在我上面分享的Kubeadm链接中看到它: 交换已禁用。必须禁用交换才能使kubelet工作 恰当地 另一方面,您可以看到用户报告在某些情况下部署需要启用交换 我建议您首先尝试不启用交换功能
(不是因为swap是内核无法管理的函数,而是因为Kube不推荐它——可能与Kubelet的设计有关) 确保您熟悉K8S提供的功能,以确定POD内存的优先级: 1)确保您的高优先级工作负载使用
保证
(或至少Burstable
)类运行
(二)
我还建议阅读:
如果kubelet无法回收节点上的足够资源,
库贝莱开始驱逐豆荚
kubelet将驱逐的豆荚排在第一位,这取决于豆荚的大小
饥饿资源的使用超过请求,然后按优先级,以及
然后通过消耗相对于
播客的调度请求
因此,kubelet按以下顺序排列和驱逐豆荚:
- BestEffort或Burstable吊舱,其对饥饿资源的使用超过其请求。这些吊舱按优先级排序,然后按使用情况排序 以上要求
- 使用率低于请求的有保证的pod和无负担的pod最后被逐出。只有在请求时才保证有保证的POD 对所有容器都规定了限制,并且它们是相等的。 这样的吊舱保证不会因为另一个吊舱的损坏而被驱逐 资源消耗。如果系统守护进程(如kubelet、docker和 journald)消耗的资源比通过 系统保留或kube保留分配,且节点仅具有 保证或中断POD使用的剩余请求少于,然后 为了保留节点,节点必须选择退出这样的Pod 稳定,并限制意外消费的影响 其他豆荚。在这种情况下,它将选择逐出最低成本的豆荚 优先
一些相关讨论:
Kubelet不设置交换空间大小,因此我认为如果您想调整k8s节点的交换空间大小,您必须以与非k8s机器上相同的方式进行调整。从那时起,它发生了变化吗?
kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=Swap