k8s组件
master节点组件
kube-APIserver: k8s的中心,各个组件信息交互都要通过它,也是k8s管理集群的入口。
Controller-Manager:集群的状态管理器,保证Pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除它所管理的资源。
Scheduler:k8s 集群的调度器,选择工作pod节点,预选 > 优选。
Etcd:键值数据库,用于保存k8s集群信息,网络信息,网络信息。
Master第三方组件
Flannel:网络插件,能够实现不同pod之间互相通信,还能够解决ip地址冲突的问题。
Coredns:附加组件,这是一个kubernetes集群内部的DNS。
Dashboard:附加组件,通过浏览器的形式访问你的资源 。
Metric-server:附加组件,计算Dashboard上资源的。
node节点
Worker、node节点、minion节点
**Kubelet:**负责监听节点和pod状态的,(监听状态发送 Kebu-APIserver 信息推送给 Etcd)
Kube-proxy:负责Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。
查看Kube-proxy工作模式:curl 127.0.0.1:10249/proxyMode
- Ipvs:监听Master节点增加和删除service以及endpoint的消息,调用Netlink接口创建相应的IPVS规则。通过IPVS规则,将流量转发至相应的Pod上。
- Iptables:监听Master节点增加和删除service以及endpoint的消息,对于每一个Service,他都会场景一个iptables规则,将service的clusterIP代理到后端对应的Pod。
node第三方节点
Docker:容器引擎,负责对容器的管理。
Calico:符合CNI标准的网络插件,给每个Pod生成一个唯一的IP地址,并且把每个节点当做一个路由器。Cilium
CoreDNS:用于Kubernetes集群内部Service的解析,可以让Pod把Service名称解析成IP地址,然后通过Service的IP地址进行连接到对应的应用上。
创建pod流程
用户要创建一个 Pod,先把请求发送给 kube-APIserver ,kube-APIserver 收到后会把请求写到 Etcd,之后 kube-APIserver 告诉给Scheduler,来启动pod,Scheduler就来选节点 ,选好节点后节点信息发送给 kube-APIserver,kube-APIserver 写到 Etcd ,再告诉 Kubelet,节点信息去运行 Pod, Kubelet 调用 docker 运行,docker 启动完成后,告诉 Kubelet,然后 Kubelet告诉 kube-APIserver 节点启动好了 ,kube-APIserver 再次会把信息写到 Etcd 里,代表Pod 启动完成。
Pod (里面运行的是容器)