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

时间:2016-04-09 13:34:40

标签: kubernetes

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

2 个答案:

答案 0 :(得分:9)

Kubernetes不支持容器内存交换。即使你添加交换空间,kubelet也会使用--memory-swappiness = 0创建容器(使用Docker时)。有关添加支持的讨论,但该提案未获批准。 https://github.com/kubernetes/kubernetes/issues/7294

答案 1 :(得分:0)

技术上,您可以做到。
广泛的讨论环境使K8S用户有特权决定是否启用交换。

我将首先直接提及您的问题,然后继续进行讨论。

如果您在Kubeadm上运行K8S,并且已在节点上添加了swap-请遵循以下步骤

1)重置当前集群设置,然后将fail-swap-on=false标志添加到kubelet配置中:

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

OR:

如果您喜欢使用kubeadm-config.yaml

1)添加failSwapOn标志:

---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
failSwapOn: false # <---- Here

2)并运行:

kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=Swap

返回讨论天气以允许或禁止交换。

一方面,K8S对此非常清楚-Kubelet并非旨在支持交换-您可以在我上面共享的Kubeadm链接中看到它:

禁止交换。您必须禁用交换才能使kubelet正常工作 正确

另一方面,您可以看到用户报告在某些情况下需要启用交换的部署。

我建议您先尝试不启用交换功能
(不是因为交换是内核无法管理的功能,而是因为Kube不推荐交换-可能与Kubelet的设计有关。)

请确保您熟悉K8S提供的功能,以优先考虑Pod的存储空间

1)3 qos classes-确保您的高优先级工作负载正在与Guaranteed(或至少Burstable)类一起运行。

2)Pod Priority and Preemption

我建议您同时阅读Evicting end-user Pods

如果kubelet无法在节点上回收足够的资源, kubelet开始驱逐Pods。

小牛根据是否将小豆荚逐出而将其排在首位 饥饿资源的使用超出了请求,然后是优先级,并且 然后通过消耗相对于 Pods的调度请求。

结果,kubelet按以下顺序对Pod进行排名和逐出:

  • BestEffort或Burstable Pod,其饥饿资源的使用超出了其请求。此类容器按优先级排序,然后使用 以上要求。

  • 使用率低于要求的保证的Pod和Burstable Pod被最后逐出。保证豆荚只有在有要求时才得到保证 并且为所有容器指定了限制,并且限制是相等的。 保证此类豆荚永远不会因为另一个豆荚而被逐出 资源消耗。系统守护程序(例如kubelet,docker和 日志)消耗的资源比通过保留的资源更多 系统保留或kube保留的分配,并且该节点仅具有 保证的或可爆的豆荚使用少于剩余请求的数量,然后 节点必须选择驱逐此类Pod才能保留节点 稳定性并限制意外消耗的影响 其他豆荚。在这种情况下,它将选择逐出最低的豆荚 优先优先。

祝你好运(:


一些相关的讨论:

Kubelet/Kubernetes should work with Swap Enabled

[ERROR Swap]: running with swap on is not supported. Please disable swap

Kubelet needs to allow configuration of container memory-swap