一、使用 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