关于防火墙的原因(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 breakskube-proxy.

大概意思就是 nftables 与 kubeadm 不兼容:它会导致重复的防火墙规则和breakskube-proxy

关于selinux的原因(关闭selinux以允许容器访问宿主机的文件系统)

selinux 是什么?是 Linux® 上最杰出的新安全子系统。NSA是在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。

那为什么要关闭这个很好的功能呢?

Setting SELinux in permissive mode by running setenforce 0 and sed ...effectively disables it. This is required to allow containers to access the host filesystem, which is needed by pod networks for example. You have to do this until SELinux support is improved in the kubelet.

因为有些时候容器需要访问宿主机器去实现一些功能,比如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 防火墙?相关推荐

  1. 【收藏】部署Kubernetes(k8s)时,为什么要关闭swap、selinux、防火墙?

    不止部署k8s,许多公司在装机过程就就直接关闭了swap.selinux和防火墙 selinux,这个是用来加强安全性的一个组件,但非常容易出错且难以定位,一般上来装完系统就先给禁用了 iptable ...

  2. 基于kubeadm快速部署kubernetes K8S V1.17.4集群-无坑完整版

    基于kubeadm快速部署kubernetes K8S V1.17.4集群,并部署Dashboard Web页面,实现可视化查看Kubernetes资源 主机配置规划 服务器名称(hostname) ...

  3. 【CentOS】利用Kubeadm部署Kubernetes (K8s)

    [CentOS]利用Kubeadm部署Kubernetes (K8s)[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.具体实验流程 1 系统准 ...

  4. Centos7 安装部署Kubernetes(k8s)集群过程

    1.系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.9 Docker version 20.10.12 x86_64 2.前言 如下图描述了软件部 ...

  5. 内网环境下手动部署kubernetes(v1.26.3)高可用集群

    这篇博客主要是记录了手动部署一个高可用的Kubernetes集群的过程.旨在帮助自己及初学者学习kubernetes,并记录下具体的操作过程和总结的知识点.文中可能存在一些问题或不足之处,仅供参考. ...

  6. 【kubernetes / k8s 踩坑记录】一定要关闭SWAP

    重要提示 重启集群后出现 connection to the server was refused 报错,我的情况是由于swap引起的. swapoff -a 再次启动即可 生产环境建议关闭swap ...

  7. Kubernetes(k8s)快速入门和环境部署

    目录 1. Kubernetes介绍 1.1 应用部署方式演变 1.2 kubernetes简介 1.3 kubernetes组件 1.4 kubernetes概念 2. kubernetes集群环境 ...

  8. 【博客558】k8s node为什么需要关闭selinux与swap

    k8s node为什么需要关闭selinux与swap 1.关闭selinux centos关闭方法: setenforce 0 && sed -i 's/^SELINUX=.*/SE ...

  9. kubeasz一键部署containerd运行时、高可用k8s(1.26.x)集群-Day 02

    1. 生产环境部署架构 (1)多master节点,实现master节点的高可用和高性能. (2)单独的etcd分布式集群(生产使用SSD盘),高可用持久化k8s资源对象数据,并实现高可用. (3)多n ...

最新文章

  1. python 2x xlrd使用merged_cells 读取的合并单元格为空
  2. 《Android开发从零开始》——11.AbsoluteLayoutFrameLayout学习
  3. python idle编辑的代码文件拓展名是_Python IDLE编辑器打开后缀名为.py的文件
  4. Java培训分享void的用法和意义
  5. 查看mysql是否启用安全审计_如何查看oracle是否开启了审计功能?
  6. java调用caffe_Caffe中master与windows分支差异对比及通过命令提示符编译Caffe源码操作步骤...
  7. 《Android开发艺术探索》— Android 书籍
  8. MySQL ( Ubuntu16.04 )
  9. linux关闭rpcbind服务,rpcbind服务 关闭
  10. 使用RMAN备份与恢复数据库(1)——RMAN基本命令
  11. C++中的RECT类
  12. 学习笔记14--环境感知传感器技术之毫米波雷达
  13. 利用frps进行内网穿透
  14. 使用dubbo遇到了Unsatisfied dependency expressed through field ‘userService‘
  15. net中winform教程 浏览器控件,还是微软的WebView2最好用
  16. html显示svg图片,HTML5/CSS3系列教程:使用SVG图片
  17. Mapping Spiking Neural Networks的论文汇总以及思考
  18. WIN10一键开启所有服务
  19. 海定计算机计算标准差,标准差怎么算公式(标准差的计算例题)
  20. Docker 容器技术(史上最强总结)

热门文章

  1. 联想台式修复计算机,联想台式电脑开机后显示你的电脑需要修复
  2. 最大回撤线性算法实现
  3. 猿创征文 | Shell编程【上篇】
  4. SnnGrow快讯:微软 Win7/8.1 今日结束支持,不会再获得安全更新、AI工程化进程加速,人工智能需要怎样的数据?
  5. C++进阶——内存管理(三)
  6. Codeforces 891E Lust
  7. Unity RawImage背景无缝连接移动
  8. 心情不好时请看:小P孩的故事
  9. 服务器判断是手机访问网址还是电脑访问网址
  10. js调用c++实现的dll, Error: Dynamic Linking Error: Win32 error 126 问题原因