Kubernetes上的分布式系统
分布式系统不仅仅是运行时,还是开发时、构建时、运维时;分布式系统需要4个方面的能力,包括生命周期的管理、网络通讯能力、资源绑定能力以及有状态逻辑的处理。
系统的生命周期能力,我们需要一个可靠且全自动化的打包和部署、回滚、健康检查。能够实现应用在不同节点的分发,且资源隔离、扩展、配置可管理。这些能力就是第一位的基础。

网络的连接能力是分布式系统的第二要素。可靠韧性的连接到其他的服务,无论集群内还是集群外,分布式系统预期有服务发现、负载均衡等能力。同时由于不同的流量策略,需要具备流量转移的能力。服务的韧性在网络方面体现在超时重试、断路器等。围绕网络还要有安全保障,足够的监控、追踪和可观察性。

分布式系统的有能力与不同的API和端点交互,即资源绑定与其协议不同的数据格式交互,甚至从一种数据格式到另外一种数据格式的转换。对于消息数据的点对点pub/sub交互,以及数据的过滤,数据的路由;

关于依赖状态的开发人员抽象,分布式系统需要有工作流的管理能力,管理长进程以及短周期的调度任务,依赖分布式缓存,需要具有幂等性和支持回滚。这些均需要考虑系的同内部的已有状态的处理,依赖于开发人员的抽象。

技术架构的演进从单体到微服务再到云原生架构;
按照业务领域进行划分出现了微服务,容器和Kubernetes是管理这些微服务的优秀平台。Readiness和Liveness探测在kubernetes对于容器的生命周期管理至关重要,一个是确定应用在启动期间何时可以接受外部流量,一个是检查服务的健康状况;
- LivenessProbe,判断容器是否存活running状态,如果不健康会kill后重启处理;
- ReadinessProbe,判断容器服务是否可用ready状态,ready后的pod才接受来自外部的数据。Service同Pod Endpoint之间的关联关系基于该Pod的Ready状态进行设置;
Kubernetes 可以启动你的应用;它可以将其关闭,然后在不同的节点上移动它。为此,你必须正确执行平台在应用启动和关闭期间告诉你的事件。围绕声明式部署,声明资源需求,部署策略,应用程序同时需要执行来自环境的事件(健康检查、应用就绪度等);实现整个部署的资源隔离、配置管理、故障隔离;
Kubernetes中的Pod有两个约束:
- Pod的部署会确保所有的容器均在同一个节点;各个容器间可以通过localhost进行通信,也可以通过其他的类似文件共享/IPC机制等;
- Pod中的容器生命周期可以不同,分为Init容器和应用容器,Pod启动时,Init容器按顺序一个一个运行,仅前一个成功后一个才运行;应用容器是并行运行的,在整个Pod生命周期中运行;
K8s内部依赖调谐循环来确保状态和声明一致,将期望的状态驱动到与实际状态。