组件的用途
- Api Server: 所有服务的访问入口
- Controller Manager(RC,RS):维持期望的副本数。
- Schedule:将pod调度到合适的node上。
- Etcd:存储k8s的运行参数信息,重要的会持久化。
- Kubelet: 跟容器引擎交互,实现容器的生命周期管理。
把k8s的指令翻译成docker识别的指令,然后通过docker引擎来管理容器
- Kube-proxy: 将规则写入到IPVS或IPTables(防火墙代理),实现服务映射访问。
实现pod间的访问,负载均衡
- CoreDNS:给集群中的svc创建A记录,实现域名访问。
POD
- RS支持集合似的selector
打标签,然后通过标签来搜索符合条件的pod
,RC不支持。 - deployment通过新增一个RS,来实现pod的滚动更新。
旧RS删一个,新的RS加一个
-HPA:可以设定条件,通过控制RS来实现扩缩容。例如,cpu的利用率达到80%时,创建一个pod,直到降下来,最多十个,最小两个
- Stateful SET: 用来解决有状态服务的问题。
- 稳定的持久化存储,即使pod被调度,也能正常访问到。
- 稳定的网络标志。
重新生成之后,hostname和podname不变
。 - 有序部署,有序缩容。
- Daemon Set:保证每隔node上都有一个pod的副本。
一般用来收集node上的日志
- Service:可以把带有同样标签的pod抽象成一个service,然后在其他pod访问时,直接找service就能到对应的pod上。
service与pod之间的通信,用各节点的iptales/lvs规则
- flannel:保证每个pod的IP唯一,当pod访问其他节点的pod时,数据包到docker0之后,flannel抓取出来,然后去etcd查要访问的pod所在的节点的IP,然后发送到网卡上,iptables或lvs在数据包封装一层
1. 把当前宿主机的IP和目标机器的IP加上。
2. etcd会存储每个节点的信息,和每个pod的IP。
3. 同一个节点的pod互相访问,不经过flannel,直接通过docker0网桥。