Kubernetes
Kubernetes是一个分布式操作系统,它是Google在分布式操作系统领域十余年工程经验和智慧的结晶,Kubernetes已经成为分布式集群管理系统和公有云/私有云的事实标准。
作为分布式操作系统,Kubernetes(包括其前代产品Google Borg)的出现远远晚于UNIX、Linux、Windows等著名的单机操作系统,Kubernetes架构设计自然地继承了很多单机操作系统的珍贵遗产,微内核架构就是这些遗产中最重要的一份。
使用 Kubernetes,可以快速、高效地满足以下的需求:
- 快速精准地部署应用程序
- 即时伸缩你的应用程序
- 无缝展现新特征
- 限制硬件用量仅为所需资源
etcd在k8s中起到了重要的作用,用于存储所有需要持久化的数据。通过分布式,它还维护分布式机器/服务器上所有集群的数据存储副本。此副本对于所有数据存储区都是相同的,并维护来自所有其他etcd数据存储区的相同数据。即使一个副本被破坏,还有另两个保存着相同的信息。
etcd在kubernetes中的应用
服务发现
分布式系统中,服务发现是比较常见的问题,在同一个分布式中的进程和服务,如何才能找到对方并建立连接,通过etcd保存这些进程的ip和监听的端口,通过名字就可以进行查找和连接。
配置中心
通过对Kubernetes-etcd的键值存储,存储了Kubernetes集群的所有配置。不同于传统的以表格形式存储数据的数据库,etcd为每个记录创建一个数据库页,在更新一条记录时不会妨碍其他记录,etcd以可靠的方式为Kubernetes添加和管理所有记录。
通过watch机制,实时通知配置变化。通过raft算法保持系统数据的cp和强一致性。
通过grpc proxy对同一个key 的watcher做优化。
集群监控
通过watch机制监控各节点,当节点消失或配置有变动时,watcher第一时间发现告知用户。使用TTL Key机制,比如心跳协议来代表节点是否存在,完成各个节点的健康状态。
通过这个功能,Kubernetes可以订阅集群内的更改并执行来自API服务器的任何状态请求。etcd与分布式集群中的不同组件协作。etcd对组件状态的更改作出反应,其他组件可能会对更改作出反应。
Leader选举
etcd不会处理每个集群节点上的写操作。只有一个实例负责在内部处理写操作,那个节点叫做leader。集群内其他节点采用RAFT算法选择一个leader。一旦leader选定,其他节点就成为follower节点。
当写请求到达leader节点时,leader处理写入。leader etcd节点向其他节点广播数据的副本。如果一个follower节点在那一刻处于不活动或脱机状态,那么基于大多数可用节点,写请求将得到一个完整的标志。如果leader得到集群中其他成员的同意,写操作将获得完整标志。