天天看点

Centos7二进制部署k8s-v1.20.2 ipvs版本(docker、etcd)

一、iptables和ipvs对比

1、概念

  从k8s的1.8版本开始,kube-proxy引入了ipvs模式,ipvs模式与iptables同样基于netfilter,但是ipvs采用的hash表,iptables采用一条条的规则列表。iptables又是为了防火墙设计的,集群数量越多iptables规则就越多,而iptables规则是从上到下匹配,所以效率就越是低下。因此当service数量达到一定规模时,hash查表的速度优势就会显现出来,从而提高service的服务性能

  每个节点的kube-proxy负责监听api server中service和endpoint的变化情况。将变化信息写入本地userspace、iptables、ipvs来实现service负载均衡,使用nat将vip流量转至endpoint中。由于userspace模式因为可靠性和性能(频繁切换内核/用户空间)早已经淘汰,所有的客户端请求svc,先经过iptables,然后再经过kube-proxy到pod,所以性能很差。

ipvs和iptables都是基于netfilter的,两者差别如下:

  ipvs 为大型集群提供了更好的可扩展性和性能

  ipvs 支持比 iptables 更复杂的负载均衡算法(最小负载、最少连接、加权等等)

  ipvs 支持服务器健康检查和连接重试等功能

2、iptables模式

在这种模式下,kube-proxy监视api server中service和endpoint的变化情况。对于每个service,它都生成相应的iptables规则,这些规则捕获到service的clusterip和port的流量,并将这些流量随机重定向到service后端pod。对于每个endpoint对象,它生成选择后端pod的iptables规则。

如果选择的第一个pod没有响应,kube-proxy将检测到到第一个pod的连接失败,并将自动重试另一个后端pod。

拓扑图:

Centos7二进制部署k8s-v1.20.2 ipvs版本(docker、etcd)
Centos7二进制部署k8s-v1.20.2 ipvs版本(docker、etcd)

缺点:

iptables 因为它纯粹是为防火墙而设计的,并且基于内核规则列表,集群数量越多性能越差。

一个例子是,在5000节点集群中使用 nodeport 服务,如果我们有2000个服务并且每个服务有10个 pod,这将在每个工作节点上至少产生20000个 iptable 记录,这可能使内核非常繁忙。

3、ipvs模式(nat模式)

在这种模式下,kube-proxy监听api server中service和endpoint的变化情况,调用netlink接口创建相应的ipvs规则,并定期将ipvs规则与kubernetes服 services和endpoints同步。保证ipvs状态。当访问services时,ipvs将流量定向到后端pod之一。

ipvs代理模式基于netfilter hook函数,该函数类似于iptables模式,但使用hash表作为底层数据结构,在内核空间中工作。这意味着ipvs模式下的kube-proxy使用更低的重定向流量。其同步规则的效率和网络吞吐量也更高。

Centos7二进制部署k8s-v1.20.2 ipvs版本(docker、etcd)
Centos7二进制部署k8s-v1.20.2 ipvs版本(docker、etcd)

4、ipvs代理模  这种模式,kube-proxy会监视kubernetesservice对象和endpoints。,调用netlink接口以相应ipvs规则并定期与kubernetes service对象和endpoints对象同步ipvs规则,以确保ipvs状态与期望一致,访问服务时,流量将重定向到具中一个后端pod与iptables类似,ipvs于netfilter的hook功能,但使用希表作为底层数据结构并在内核空间中工作。这意ipvs可以更快地重定向流量,并且在同步代理规则时貝有更好的性能。此外,ipvs为负载均衡算法提供了更多选顶,

冽如:

  rr :轮询调度 

  lc :最小连接数

  dh:目标哈希

  sh:源哈希

  sed:最短期望延迟

  np:不排队调度

说明:

ipvs依赖iptables进行包过滤、snat、masquared(伪装)。 使用 ipset 来存储需要 drop 或 masquared 的流量的源或目标地址,以确保 iptables 规则的数量是恒定的,这样我们就不需要关心我们有多少服务了

如果没有加载并启用ipvs模块,或者没有配置ipvs相关配置,则会被降级成iptables模式。

二、安装前期准备

本次集群的规划:

1、操作系统初始化配置

三、安装etcd集群

1、准备自签证书工具

2、配置ca请求文件

注:

cn:common name,kube-apiserver 从证书中提取该字段作为请求的用户名 (user name);浏览器使用该字段验证网站是否合法;

o:organization,kube-apiserver 从证书中提取该字段作为请求用户所属的组 (group)

3、配置ca证书策略

4、配置etcd请求csr文件

5、部署etcd集群,下载etcd软件包

6、创建配置文件

etcd_name:节点名称,集群中唯一

etcd_data_dir:数据目录

etcd_listen_peer_urls:集群通信监听地址

etcd_listen_client_urls:客户端访问监听地址

etcd_initial_advertise_peer_urls:集群通告地址

etcd_advertise_client_urls:客户端通告地址

etcd_initial_cluster:集群节点地址

etcd_initial_cluster_token:集群token

etcd_initial_cluster_state:加入集群的当前状态,new是新集群,existing表示加入已有集群

7、创建启动服务文件

8、同步相关文件到各个节点

9、启动etcd集群

10、查看集群状态

四、部署docker

继续阅读