kube-proxy | Kubernetes

一、使用 ipvs 模式

IPVS模式和IPTABLES模式之间的差异如下:

  • 性能和扩展性:IPVS 是一个基于内核的 TCP/UDP 负载均衡器,相对于 iptables 具 有更高的性能和扩展能力。
  • 负载均衡算法:IPVS 提供了多种负载均衡算法,如轮询、加权轮询、最少连接数 等。
  • 服务代理模式:与 iptables 相比,IPVS 可以以直接代理模式工作,将数据包直接转发到后端 Pod 的 IP 地址,而无需修改数据包的目标 IP 地址。
  • 动态配置更新:IPVS 支持动态配置更新,可以让 kube-proxy 在运行时动态地添加、删除和更新负载均衡规则,而无需重新生成整个 iptables 规则集。

二、优化

  • --conntrack-tcp-timeout-close-wait:用于指定 IPVS 的 TCP CLOSE_WAIT 状态下的连接超时时间。
  • --conntrack-max-per-core:用于指定每个 CPU 核心的最大并发连接数限制。

三、镜像优化

一个容器的镜像平均 1~2G 左右,若频繁的拉取镜像可能会将宿主机的带宽打满,甚至影响镜像仓库的使用,

1、镜像优化;

  • 使用基于 Alpine Linux、BusyBox 或 Scratch 的轻量级基础镜像;
  • 能在一个阶段中执行的业务逻辑就不要放到2个;
  • 移除不必要的依赖和文件;
  • 镜像使用最小化的操作系统组件。

2、镜像缓存;

3、使用 P2P 进行镜像分发,比如:dragonfly;

4、基础镜像预加载(一般镜像会分为三层):

  • 第一层:基础镜像即 os,
  • 第二层:环境镜像即带有 nginx、tomcat 等服务的镜像,
  • 第三层:业务镜像也就是带有业务代码的镜像。
  • 基础镜像一般不会频繁更新,可在所有宿主机上预先加载,环境镜像可以定时 进行加载,业务镜像则实时拉取。

四、docker优化

1)配置docker daemon并行拉取镜像,以提高镜像拉取效率, 在/etc/docker/daemon.json中添加以下配置:

"max-concurrent-downloads": 10

2)可以使用local SSD或者高性能云盘作为docker容器的持久数据目录, 在/etc/docker/daemon.json中添加以下配置:

"data-root": "/ssd_mount_dir" 

3)启动pod时都会拉取pause镜像,为了减小拉取pause镜像网络带宽,可以每个node预加载pause镜像,在每个node节点上执行以下命令:

docker load -i /tmp/preloaded_pause_image.tar