ZWEI

Time flies.

iperf测试带宽

iperf是开源的跨平台网络带宽测试工具,支持windows、linux、macos、bsd等众多系统。可以测试带宽吞吐量、延迟、丢包等;支持使用TCP和UDP测试,结果比较准。由于是C/S架构,使用时需要在测试宽带的两端分别运行一个装有iperf的电脑,我是测试连接两个机房的专线,直接拿机房里的Linux服务器测试。
iperf有两个版本,一个是iperf2和iperf3,建议使用iperf3,iperf2比较老,对10G网卡测试速度上不来。两个版本用法基本上是一样的,我这里是测试百兆的带宽,以ipser2来做演示

阅读全文 »

IPVS简介

我们接触比较多的是应用层负载均衡,比如haproxy、nginx、F5等,这些负载均衡工作在用户态,因此会有对应的进程和监听socket,一般能同时支持4层负载和7层负载,使用起来也比较方便。

LVS是国内章文嵩博士开发并贡献给社区的(章文嵩博士和他背后的负载均衡帝国 ),主要由ipvs和ipvsadm组成,ipvs是工作在内核态的4层负载均衡,和iptables一样都是基于内核底层netfilter实现,netfilter主要通过各个链的钩子实现包处理和转发。ipvsadm和ipvs的关系,就好比netfilter和iptables的关系,它运行在用户态,提供简单的CLI接口进行ipvs配置。

阅读全文 »

目的

使用Service Mesh 拥抱云原⽣,拥抱开源社区已经成为⼈尽皆知的共识。
Service Mesh 体系中,使⽤ kubernetes Service 是必不可少的⼀环,在我们逐步迁移服务到Mesh体系的过
程中发现,存在部分应⽤的某些调⽤接经常超时。
经过我们的排查,这些出问题的调⽤往往是通过短链接的⽅式来访问的。
在使⽤短链接时,每次调⽤都会建⽴新的连接,这也会伴随着⼀次次 DNS 查询。
DNS 查询速度成为了提⾼调⽤延迟的罪魁祸⾸。

阅读全文 »

简介

DeScheduler 是容器服务的一个基于 Node 真实负载进行重调度的插件。该插件会和 Kube-scheduler 协同生效,实时监控集群中高负载节点并驱逐低优先级 Pod。建议您搭配 Dynamic Scheduler(动态调度器扩展组件)一起使用,多维度保障集群负载均衡。
该插件依赖 Prometheus 监控组件以及相关规则配置。

阅读全文 »

问题

在 K8s 集群运营过程中,常常会被节点 CPU 和内存的高使用率所困扰,既影响了节点上 Pod 的稳定运行,也会增加节点故障的几率。为了应对集群节点高负载的问题,平衡各个节点之间的资源使用率,应该基于节点的实际资源利用率监控信息:

  1. 在 Pod 调度阶段,应当优先将 Pod 调度到资源利用率低的节点上运行,不调度到资源利用率已经很高的节点上
阅读全文 »

问题背景

全球主要的容器集群服务厂商的Kubernetes服务都提供了Nvidia GPU容器调度能力,但是通常都是将一个GPU卡分配给一个容器。这可以实现比较好的隔离性,确保使用GPU的应用不会被其他应用影响;对于深度学习模型训练的场景非常适合,但是如果对于模型开发和模型预测的场景就会比较浪费。 大家的诉求是能够让更多的预测服务共享同一个GPU卡上,进而提高集群中Nvidia GPU的利用率。而这就需要提供GPU资源的划分,而这里GPU资源划分的维度指的就是GPU显存和Cuda Kernel线程的划分。通常在集群级别谈支持共享GPU,通常是两件事情:

阅读全文 »

Kubernetes Coredns 性能优化

四个方面优化:

  1. coredns 功能
  2. dns 本地缓存
  3. client和server 之间网络
  4. 服务自动扩容

1

Kubernetes Pod 解析 DNS 域名会 search 很多次,例如上图 Pod 中 DNS 配置,当它请求 ksyun.com,会依次解析:

  1. ksyun.com.kube-system.svc.cluster.local -> NXDOMAIN
  2. ksyun.com.svc.cluster.local -> NXDOMAIN
  3. ksyun.com.cluster.local -> NXDOMAIN
  4. ksyun.com -> 1.1.1.1

Coredns 是中心化部署在某一个节点上的,Pod 访问 Coredns 解析经过链路过长,又是 UDP 协议,导致失败率高。

阅读全文 »

简介

DNSAutoscaler 是 DNS 自动水平伸缩组件,可通过一个 deployment 获取集群的节点数和核数,根据预设的伸缩策略,自动水平伸缩 DNS 的副本数。目前的伸缩模式分为两种,分别是 Linear 线性模式 和 Ladder 阶梯模式。

组件介绍

我们创建一个 Deployment。Deployment 中的 Pod 运行一个基于 cluster-proportional-autoscaler 镜像的容器。

创建文件 dns-horizontal-autoscaler.yaml,内容如下所示:

阅读全文 »

简介

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 后缀)的缓存未命中。

4

  1. 拦截 Pod 的 DNS 查询的请求
  2. 将外部域名分流,外部域名请求不再请求中心 Coredns
  3. 中间链路使用更稳定的 TCP 解析
  4. 节点级别缓存 DNS 解析结果,较少请求中信 Coredns
阅读全文 »

开启拓扑感知服务路由特性需同时启动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可帮助您减轻这些问题,并为诸如拓扑路由之类的其他功能提供可扩展的平台。

阅读全文 »
0%