我试图在kubernetes节点上添加交换空间,以防止它出现内存不足问题.是否可以在节点上添加交换空间(以前称为minion)?如果可能的话,我应该遵循什么程序以及它如何影响豆荚验收测试?
Yu-*_*ong 10
Kubernetes不支持容器内存交换.即使你添加交换空间,kubelet也会使用--memory-swappiness = 0创建容器(使用Docker时).有关添加支持的讨论,但该提案未获批准.https://github.com/kubernetes/kubernetes/issues/7294
从技术上讲你可以做到。
有一个广泛的讨论天气让 K8S 用户有权决定是否启用交换。
我将首先直接提及您的问题,然后继续讨论。
如果您在Kubeadm上运行 K8S并且已将交换添加到节点 -请按照以下步骤操作:
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
Run Code Online (Sandbox Code Playgroud)
(*) 如果您在 Ubuntu 上运行,请将 Kubelet 配置的路径从 替换etc/systemd/syste,/kubelet为/etc/default/kubelet。
2)重新加载服务:
systemctl daemon-reload
systemctl restart kubelet
Run Code Online (Sandbox Code Playgroud)
3 ) 再次初始化集群设置并忽略交换错误:
kubeadm init --ignore-preflight-errors Swap
Run Code Online (Sandbox Code Playgroud)
或者:
如果您更喜欢与以下人员合作kubeadm-config.yaml:
1)添加failSwapOn标志:
---
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
failSwapOn: false # <---- Here
Run Code Online (Sandbox Code Playgroud)
2)并运行:
kubeadm init --config /etc/kubernetes/kubeadm-config.yaml --ignore-preflight-errors=Swap
Run Code Online (Sandbox Code Playgroud)
返回讨论天气是否允许交换。
一方面,K8S 对此非常清楚——Kubelet 并不是设计来支持 swap 的——你可以在我上面分享的 Kubeadm 链接中看到它提到的:
交换禁用。您必须禁用交换才能使 kubelet 正常工作
另一方面,您可以看到用户报告说,在某些情况下,部署需要启用交换。
我建议您首先尝试不启用 swap。
(并不是因为swap是内核无法管理的功能,而仅仅是因为Kube不推荐它——可能与Kubelet的设计有关)。
确保您熟悉 K8S 提供的用于优先考虑 pod 内存的功能:
1 ) 3 个 qos 类别- 确保您的高优先级工作负载正在Guaranteed(或至少Burstable)类别中运行。
2)Pod优先级和抢占。
我还建议阅读Evicting end-user Pods:
如果 kubelet 无法回收节点上足够的资源,kubelet 就会开始驱逐 Pod。
kubelet 首先根据 Pod 对匮乏资源的使用是否超过请求来对 Pod 进行逐出排名,然后根据优先级,然后根据相对于 Pod 调度请求的匮乏计算资源消耗情况对 Pod 进行排名。
因此,kubelet 按以下顺序对 Pod 进行排名和驱逐:
BestEffort 或 Burstable Pod 对资源匮乏的资源的使用超出了其请求。此类 Pod 按优先级排名,然后使用高于请求。
使用率低于请求的有保证的 Pod 和 Burstable Pod 将最后被驱逐。仅当为所有容器指定了请求和限制并且它们相等时,保证 Pod 才会得到保证。这样的 Pod 保证永远不会因为另一个 Pod 的资源消耗而被驱逐。如果系统守护进程(例如 kubelet、docker 和journald)消耗的资源多于通过系统保留或 kube 保留分配预留的资源,并且该节点只有Guaranteed 或Burstable Pod 使用的资源少于剩余请求,则该节点必须选择驱逐这样的 Pod 是为了保持节点稳定性并限制意外消耗对其他 Pod 的影响。在这种情况下,它将选择首先驱逐优先级最低的 Pod。
祝你好运 (:
一些相关讨论:
Kubelet/Kubernetes 应该与启用交换一起使用
| 归档时间: |
|
| 查看次数: |
3972 次 |
| 最近记录: |