IPVS 简易入门
IPVS简介
我们接触比较多的是应用层负载均衡,比如haproxy、nginx、F5等,这些负载均衡工作在用户态,因此会有对应的进程和监听socket,一般能同时支持4层负载和7层负载,使用起来也比较方便。
LVS是国内章文嵩博士开发并贡献给社区的(章文嵩博士和他背后的负载均衡帝国 ),主要由ipvs和ipvsadm组成,ipvs是工作在内核态的4层负载均衡,和iptables一样都是基于内核底层netfilter实现,netfilter主要通过各个链的钩子实现包处理和转发。ipvsadm和ipvs的关系,就好比netfilter和iptables的关系,它运行在用户态,提供简单的CLI接口进行ipvs配置。
k8s集群dns优化
重新调度器
动态调度器
共享GPU调度
Coredns 性能和扩展性问题
Kubernetes Coredns 性能优化
四个方面优化:
- coredns 功能
- dns 本地缓存
- client和server 之间网络
- 服务自动扩容
Kubernetes Pod 解析 DNS 域名会 search 很多次,例如上图 Pod 中 DNS 配置,当它请求 ksyun.com,会依次解析:
- ksyun.com.kube-system.svc.cluster.local -> NXDOMAIN
- ksyun.com.svc.cluster.local -> NXDOMAIN
- ksyun.com.cluster.local -> NXDOMAIN
- ksyun.com -> 1.1.1.1
Coredns 是中心化部署在某一个节点上的,Pod 访问 Coredns 解析经过链路过长,又是 UDP 协议,导致失败率高。
自动扩缩集群 DNS 服务
NodeLocal DNSCache 启用
简介
NodeLocal DNSCache 通过在集群节点上作为 DaemonSet 运行 dns 缓存代理来提高集群 DNS 性能。在今天的架构中,ClusterFirst DNS 模式下的 Pod 会访问 kube-dns serviceIP 以进行 DNS 查询。这通过 kube-proxy 添加的 iptables 规则转换为 kube-dns/CoreDNS 端点。使用这种新架构,Pods 将接触到运行在同一节点上的 dns 缓存代理,从而避免 iptables DNAT 规则和连接跟踪。本地缓存代理将查询 kube-dns 服务以查找集群主机名(默认为 cluster.local 后缀)的缓存未命中。
- 拦截 Pod 的 DNS 查询的请求
- 将外部域名分流,外部域名请求不再请求中心 Coredns
- 中间链路使用更稳定的 TCP 解析
- 节点级别缓存 DNS 解析结果,较少请求中信 Coredns
k8s拓扑感知服务路由
开启拓扑感知服务路由特性需同时启动ServiceTopology=true和EndpointSlice=true的FeatureGate
EndpointSlices简介
FEATURE STATE: Kubernetes v1.17 [beta]
EndpointSlices提供了一种简单的方法来跟踪Kubernetes集群中的网络Endpoints。 它们为Endpoints提供了更可扩展和可扩展的替代方案。 Endpoints API提供了一种简单而直接的方式来跟踪Kubernetes中的网络Endpoints。 不幸的是,随着Kubernetes集群和服务能够处理更多流量并将其发送到更多后端Pod,该原始API的局限性变得更加明显。 最值得注意的是,这些挑战包括扩展到更多网络Endpoints的挑战。 由于服务的所有网络Endpoints都存储在单个Endpoints资源中,因此这些资源可能会变得很大。 这影响了Kubernetes组件(尤其是主控制平面)的性能,并在Endpoints更改时导致大量网络流量和处理。 EndpointSlices可帮助您减轻这些问题,并为诸如拓扑路由之类的其他功能提供可扩展的平台。