Home

ipvs模式下kube-proxy的性能分析

Kubernetes L4的负载均衡通常是通过操作node的iptables或者的rules来实现的。但iptables底层数据结构基于链表,一旦集群规模上升,会有严重的性能问题。kube-proxy另一种模式ipvs和iptables都基于netfilter,并且也工作在内核态,ipvs使用哈希表实现底层数据结构,适合更大的集群规模。

Read more

Cloud Native Landscape

早在2018年3月,CNCF发布了一个项目Cloud Native Landscape: https://landscape.cncf.io,用一张图概括了CNCF生态里的所有项目,技术栈分类和公司。截止2020-04-10 03:51:49Z,这张图涵盖了总共2,184,917 stars的开源项目,$14.72T市值的公司,$68.61B的funding。

Read more

Kubernetes运行时调试方案

“Premature optimization is the root of all evil.”过早优化是万恶之源。在容器环境,一方面容器在发布前被要求精简到去掉一切运行时不需要的内容,直接基于scratch的镜像甚至不包含一个shell executor。而同时又有太多问题是无法在开发时被预测出来,在运行时却因为没有必要的工具而无法有效的进行调试。目前官方给出最接近的方案是Ephemeral Containers和shareProcessNamespace暂时还在alpha stage,不能直接使用。

Read more

Container Runtime的演化过程

最早的环境隔离工具是chroot,并因为被锁死在指定的目录无法污染host的root file system被称为chroot jail。虽然chroot对很多情况已经足够好用,但只能做file system的隔离。之后lxc和cgroups被加入主流unix和linux的kernel,对更多的设备和方面进行了可隔离性的标准化,并把它们定义为namespace。最早的docker也是基于lxc和cgroups。

Read more

基于eBPF的kernel侧监控

传统的Kubernetes系统监控工具像cAdvisor只暴露比较粗粒度内核metrics,真实的性能会延迟反映出来,并造成一些通常无法解释的响应抖动。eBPF可以在用户态通过JIT挂住内核函数的hook,往往可以实时获取到比cgroups接口更能反映负载真实情况的一些指标。

Read more

大规模Kubernetes集群下etcd的性能优化

Etcd是一个分布式键值存储方案,也是Kubernetes控制层唯一指定的状态同步机制。Etcd使用Raft一致性算法来在node之间同步写请求并达成一致。因为Kubernetes的reconcile loop会循环重复的检查所有资源的状态,并和desired state做比较和矫正,所以Etcd的性能直接决定Kubernetes控制层的响应速度。

Read more

Kubernetes调度优化--predicates短路

kube-scheduler在选择scheduling过程中会进行两个步骤:Predicates(判定)和Priorities(优先级)。默认kube-scheduler需要先对所有node进行Predicate检查再计算Priority,而Predicate又需要检查所有node所有states,比如cpu/memory/port/affinity等等,是一个非常耗时的操作。美团的同学提供过一个参考数据,在规模近3000台的1.6版本的集群上,一次Pod的调度耗时在5s左右。之后也是美团的同学提供一个局部最优解的思路,即如果匹配好需要的node就提前短路Predicates,同样在他们的环境里,scheduling性能比优化前提升了400%以上。

Read more

Kubernetes环境下Mutual TLS详解

Mutual TLS或者mtls指的是TLS传输层client和server都需要对对方的的tls证书进行验证。Kubernetes环境内部各组件之间需要进行双向的TLS验证,运行在Kubernetes环境下的service mesh里的各个microservices也应该双向的TLS验证。

Read more