Kubernetes是谷歌以Borg为前身,谷歌一直再用容器的管理平台,容器的编排。基于谷歌15年的生产环境经验的基础上开源的一个项目(kubernetes),kubernetes致力于提供跨主机群集的自动部署、扩展、高可用以及运行应用程序容器的平台。
有很多人会说Kubernetes是系统,因为kubernetes运行各种容器,容器又运行各种服务。
Kubernetes组件
Kube-APIServer:集群的控制中枢,各个模块之间通信都需要经过Kube-APIServer,同时也是集群管理、资源配置、整个集群安全机制的入口。(核心组件)
Controller-manager: 集群的状态管理器, 保证pod或其他资源达到期望值,也是需要和APIServer进行通信,在需要的时候创建、更新或删除所管理的资源。
pod是kubernetes中的最小调度单元、最小管理单元。Kubernetes管理pod,容器在pod里。
controller-manager负责管理资源状态
Scheduler:集群的调度中心,根据指定的一系列条件,选择一个或一批最佳的节点,然后部署pod
以上三个组件安装在master节点,不需要安装在node节点
附加组件:
Etcd:键值数据库,保存一些集群的信息,一般生产环境中建议部署三个以上节点(奇数个)
Flannel:网络插件,能够实现不同pod之间互相通信,还能够解决ip地址冲突的问题。
Corendns:附加组件,这是一个kubernetes集群内部的DNS
Dashboard 附加组件,通过浏览器的形式访问资源
Metric-server 附加组件, 用于计算资源
node节点组件:
Kubelet:负责监听每个节点上的pod状态,同时负责上报节点和节点上面的pod状态,负责与master节点通信,并且管理节点上的pod。(管理指创建、删除、更新)是真正的执行者。
主节点不用安装kubelet。
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。
从性能方面ipvs相对IPtables较好,因为pod多时iptables的规则自然而然就多啦!
其他组件:
Calico: 符合CNI标准的网络插件,给每个pod生成一个唯一的IP地址,并且把每个节点当作一个路由器。Cilium
CoreDNS:用于kubernetes集群内部service的解析,可以让pod把service名称解析成IP地址,然后通过service的IP地址进行连接到对应的应用上。
Docker:容器引擎,负责对容器的管理。