kubernetes本质
kubernetes项目的本质,是为用户提供一个具有普遍意义的容器编排工具,按照用户的意愿和整个系统的规则,完全自动化地处理好容器之间的关系。它的真正价值不仅限于一个工具,在于提供了一套基于容器构建分布式系统的基础依赖。
运行环境
裸金属或任何云基础设施。
架构图
关键特性
- 系统自愈
1、如果一个Node故障,控制器自动将该节点上的Pod调度到其他健康的Node上。
2、具备健康检查机制
(1) Liveness探测:可以为Pod中的每个容器指定故障的条件或者范围,这个条件的值可以通过在容器中执行命令、tcp端口是否可达、http状态查询等方式获得,不满足条件的情况下,对容器进行重启操作。
(2) Readiness探测:用来判断Pod中的容器是否准备就绪,可以被访问。如果Pod中的容器没有准备好对外提供服务,Pod会被标记为特殊状态,并将Pod从service的endpoint中移除,确保外部的请求不会转移到这个Pod上。等待Pod中所有容器恢复正常状态后,Pod也会变成正常状态,也会被加到endpoint中,继续提供服务。
- 自动伸缩
以下自动伸缩方法都是基于Nodes有足够资源的情况下:
1、Horizontal Pod Autoscaler(HPA):Pod水平自动伸缩,监视和缩放Pod数量,可以自定义部署按比例调整的阈值及规模上下限,v1版本仅支持CPU作为可监控的度量标准,v2版本支持内存和其他自定义指标。使运行在上面的服务对指标的变化有一定的自适应能力,适合流量波动较大的业务场景。
2、Vertical Pods Autoscaler(VPA):Pod垂直自动伸缩,自动调节程序可以随时调整Pod的CPU和内存请求,如果Pod过大,VPA会根据观察到的内存利用率缩小Pod。如果由于分配的内存不足导致Pod被OOM杀死,VPA将以较大的内存限制重启Pod。
- 滚动更新和回滚
1、滚动更新:允许通过使用新的实例逐步更新Pods实例来实现部署的更新,从而实现零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性。
2、回滚:kubectl apply每次更新应用时Kubernetes都会记录下当前的配置,保存为一个revision(版次),这样就可以回滚到某个特定revision。默认配置下,Kubernetes只会保留最近的几个revision,可以在Deployment配置文件中通过revisionHistoryLimit属性增加revision数量。
- 服务发现与负载均衡
Pod存在生命周期,销毁重建后,IP会改变,无法提供一个固定的访问接口。服务发现为Pod提供了一个固定、统一的访问接口和负载均衡能力,可通过虚拟IP或者DNS来访问服务。
Why kubernetes?
综上,总结题目的问题:
1、开源:技术成熟、社区活跃、架构清晰。
2、已默认成为容器编排的标准。
3、众多优点,见"关键特性"。
4、使业务更稳定、连续、弹性、灵活