Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在kubernetes节点上添加交换空间?_Kubernetes - Fatal编程技术网

是否可以在kubernetes节点上添加交换空间?

是否可以在kubernetes节点上添加交换空间?,kubernetes,Kubernetes,我试图在kubernetes节点上添加交换空间,以防止其内存不足问题。是否可以在节点(以前称为minion)上添加交换空间?如果可能,我应该遵循什么程序以及它如何影响pods验收测试 Kubernetes不支持容器内存交换。即使添加交换空间,kubelet也会创建一个--memory swappiness=0的容器(使用Docker时)。有关增加支持的讨论已经展开,但该提案未获批准 从技术上讲你可以做到。 有一个广泛的讨论,让K8S用户有权决定是否启用交换 我将首先直接提到你的问题,然后继续讨论

我试图在kubernetes节点上添加交换空间,以防止其内存不足问题。是否可以在节点(以前称为minion)上添加交换空间?如果可能,我应该遵循什么程序以及它如何影响pods验收测试

Kubernetes不支持容器内存交换。即使添加交换空间,kubelet也会创建一个--memory swappiness=0的容器(使用Docker时)。有关增加支持的讨论已经展开,但该提案未获批准

从技术上讲你可以做到。
有一个广泛的讨论,让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