部署Kubernetes(k8s)时,为什么要关闭swap、selinux、firewall 防火墙?
关于防火墙的原因(nftables后端兼容性问题,产生重复的防火墙规则)
The ip tables tooling can act as a compatibility layer, behaving like iptables but actually configuring nftables. This nftables backend is not compatible with the current kubeadm packages: it causes duplicated firewall rules and breaks |
大概意思就是 nftables 与 kubeadm 不兼容:它会导致重复的防火墙规则和breakskube-proxy
关于selinux的原因(关闭selinux以允许容器访问宿主机的文件系统)
selinux 是什么?是 Linux® 上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。
那为什么要关闭这个很好的功能呢?
Setting SELinux in permissive mode by running |
因为有些时候容器需要访问宿主机器去实现一些功能,比如pod 的网络需要方位宿主文件进行实现,所以没办法咯。
关闭swap 的原因
首先我们确认下 swap是干嘛的?
在Linux下,SWAP的作用类似Windows系统下的“虚拟内存”。当物理内存不足时,拿出部分硬盘空间当SWAP分区(虚拟成内存)使用,从而解决内存容量不足的情况。
SWAP意思是交换,顾名思义,当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN。
当然,swap大小是有上限的,一旦swap使用完,操作系统会触发OOM-Killer机制,把消耗内存最多的进程kill掉以释放内存。
当然这种交换肯定是以牺牲性能作为代价来保证程序的运行,如果你的磁盘是机械硬盘,那么恭喜你,速度更慢了。。
那么我们来看下k8s中,swap对它的影响呢?
Swap会导致docker的运行不正常,性能下降,是个bug,但是后来关闭swap就解决了,就变成了通用方案。
对于我们部署在k8s中的应用或者运行在k8s上的工作服务,看到一个别人很好的举例:
在计算集群(请注意计算集群这四个字的含义,这种集群主要运行一些生存周期短暂的计算应用,申请大量内存-动用大量CPU-完成计算-输出结果-退出,而不是运行诸如mysql之类的服务型程序)中,我们通常希望OOM的时候直接杀掉进程,向运维或者作业提交者报错提示,并且执行故障转移,把进程在其他节点上重启起来。而不是用swap续命,导致节点hang住,集群性能大幅下降,并且运维还得不到报错提示。更可怕的是有一些集群的swap位于机械硬盘阵列上,大量动用swap基本可以等同于死机,你甚至连root都登录不上,不用提杀掉问题进程了。往往结局就是硬重启。 节点hang住是非常恶劣的情况,往往发现问题的时候,已经造成了大量损失。而程序出错可以自动重试,重试还OOM说明出现了预料之外的情况(比如程序bug或是预料之外的输入、输入文件大小远超预期等问题),这种时候就应该放弃这个作业等待人员处理,而不是不停地尝试着执行它们,从而导致后面的其他作业全部完蛋。 所以计算集群通常都是关闭swap的,除非你十分明确swap可以给你的应用带来收益。 计算集群和诸如执行mysql的集群有一个根本不同就是计算集群不在意单个进程、单个作业的失败(由于面向的用户很宽泛,这些作业所执行的程序很可能未经严格的测试,它们客观上出问题的几率远高于mysql等成熟的程序),但是绝对不接受hang住引起整个集群无法处理任何作业,这是非常严重的事故。 |
上诉描述中 主要还是结合了实际的使用场景,一般k8s服务部署的大部分都属于允许OOM时候直接将服务杀掉的应用。对于像mysql的服务,在实际生产中从性能稳定性多方面考虑上应该都选用物理机部署。
对于swap的历史可以看下面链接
Kubelet/Kubernetes should work with Swap Enabled · Issue #53533 · kubernetes/kubernetes · GitHub
部署Kubernetes(k8s)时,为什么要关闭swap、selinux、firewall 防火墙?相关推荐
- 【收藏】部署Kubernetes(k8s)时,为什么要关闭swap、selinux、防火墙?
不止部署k8s,许多公司在装机过程就就直接关闭了swap.selinux和防火墙 selinux,这个是用来加强安全性的一个组件,但非常容易出错且难以定位,一般上来装完系统就先给禁用了 iptable ...
- 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版
基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...
- 【CentOS】利用Kubeadm部署Kubernetes (K8s)
[CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...
- Centos7 安装部署Kubernetes(k8s)集群过程
1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...
- 内网环境下手动部署kubernetes(v1.26.3)高可用集群
这篇博客主要是记录了手动部署一个高可用的Kubernetes集群的过程.旨在帮助自己及初学者学习kubernetes,并记录下具体的操作过程和总结的知识点.文中可能存在一些问题或不足之处,仅供参考. ...
- 【kubernetes / k8s 踩坑记录】一定要关闭SWAP
重要提示 重启集群后出现 connection to the server was refused 报错,我的情况是由于swap引起的. swapoff -a 再次启动即可 生产环境建议关闭swap ...
- Kubernetes(k8s)快速入门和环境部署
目录 1. Kubernetes介绍 1.1 应用部署方式演变 1.2 kubernetes简介 1.3 kubernetes组件 1.4 kubernetes概念 2. kubernetes集群环境 ...
- 【博客558】k8s node为什么需要关闭selinux与swap
k8s node为什么需要关闭selinux与swap 1.关闭selinux centos关闭方法: setenforce 0 && sed -i 's/^SELINUX=.*/SE ...
- kubeasz一键部署containerd运行时、高可用k8s(1.26.x)集群-Day 02
1. 生产环境部署架构 (1)多master节点,实现master节点的高可用和高性能. (2)单独的etcd分布式集群(生产使用SSD盘),高可用持久化k8s资源对象数据,并实现高可用. (3)多n ...
最新文章
- python 2x xlrd使用merged_cells 读取的合并单元格为空
- 《Android开发从零开始》——11.AbsoluteLayoutFrameLayout学习
- python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件
- Java培训分享void的用法和意义
- 查看mysql是否启用安全审计_如何查看oracle是否开启了审计功能?
- java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...
- 《Android开发艺术探索》— Android 书籍
- MySQL ( Ubuntu16.04 )
- linux关闭rpcbind服务,rpcbind服务 关闭
- 使用RMAN备份与恢复数据库(1)——RMAN基本命令
- C++中的RECT类
- 学习笔记14--环境感知传感器技术之毫米波雷达
- 利用frps进行内网穿透
- 使用dubbo遇到了Unsatisfied dependency expressed through field ‘userService‘
- net中winform教程 浏览器控件,还是微软的WebView2最好用
- html显示svg图片,HTML5/CSS3系列教程:使用SVG图片
- Mapping Spiking Neural Networks的论文汇总以及思考
- WIN10一键开启所有服务
- 海定计算机计算标准差,标准差怎么算公式(标准差的计算例题)
- Docker 容器技术(史上最强总结)
热门文章
- 联想台式修复计算机,联想台式电脑开机后显示你的电脑需要修复
- 最大回撤线性算法实现
- 猿创征文 | Shell编程【上篇】
- SnnGrow快讯:微软 Win7/8.1 今日结束支持,不会再获得安全更新、AI工程化进程加速,人工智能需要怎样的数据?
- C++进阶——内存管理(三)
- Codeforces 891E Lust
- Unity RawImage背景无缝连接移动
- 心情不好时请看:小P孩的故事
- 服务器判断是手机访问网址还是电脑访问网址
- js调用c++实现的dll, Error: Dynamic Linking Error: Win32 error 126 问题原因