查看组件的状态 kubectl get componentstatusesController Panel := {etcd, API Server, Scheduler, Controller Manager}Worker node := {kubelet, kube-proxy, Controller Runtime}API Server和Conponents之间的通信多数时是Components发起的,少数kubectl log、kubectl attach时是API Server发起的。etcd、API Server可以同时启动多个、并行运行,Scheduler同时启动多个时也无法并行运行。etcd支持分布式一致性Key-Value存储,基于raft协议,用来存储资源的状态和metadata。API Server向Components通知资源更新事件。Sheduler通过更新资源的状态实现调度。Kubelet干什么?在API Server中创建Node对象;监听API Server,根据传来的事件,通知Container Runtime创建更新删除Pod资源;运行探针,管理Pods;将Pods的状态信息传给API Server;根据pod manifest来创建pod。userspace proxy 轮转, iptable proxy (kernel space proxy) 随机转发. 通过修改iptalbes实现通信拦截与转发。kube-proxy如何使用iptables发包?当Service被创建时,它的虚拟IP/port通过API Server传达给nodes,nodes会在iptables中添加记录:该服务的IP/port->提供该服务的pods的IP/port列表。当一个pod向该服务发包时,目的地址会被修改,由Service IP改为提供服务的pods的IP。Kubernetes自身如何保证高可用?API Server是(几乎,除了缓存)无状态应用,方便横向扩展;etcd是分布式数据存储;Controller和Sheduler可用通过leader elect的方式保证存在一个leader。 2 知识回顾
1 Kubernetes集群中包含Controller Panel: Etcd、API Server、Controller Manager、Scheduler; Workder: kubelet, kube-proxy, controller runtime。
2 i node内部的pods如何通信?一个node中的pods通过虚拟以太网接口对I(veth pair)连接到相同的桥上bridge,veth pair由pod中的eth0和node中的vethXXXX组成。pod中的eth0被分配一个IP,这个IP在网桥的范围内。
ii 不同nodes中的containers如何通信?使用SDN(软件定义网络)技术使得不同节点好像连接在同一个网络交换机上。



