网站首页 文章专栏 k8s架构解析
k8s架构解析
编辑时间:2020-09-05 15:53:17 作者:linxi 浏览量:30010

一、Kubernetes核心组件

  • etcd保存了整个集群的状态;

  • apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;

  • controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等(deploymemt、statefulSet、demoSet、replicationController、replicaSet、job、cronJob、HPA等控制器均为其创建);

  • scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上(node上);

  • kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;

  • Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);

  • kube-proxy负责为Service提供cluster内部的服务发现负载均衡

除了核心组件,还有一些推荐的Add-ons(插件):

  • kube-dns(改为coerdns)负责为整个集群提供DNS服务

  • Ingress Controller为服务提供外网入口

  • Heapster提供资源监控

  • Dashboard提供GUI

  • Federation提供跨可用区的集群

  • Fluentd-elasticsearch提供集群日志采集、存储与查询

二、Kubernetes基础架构

k8s架构.png


三、Kubernetes各组件间工作流程

用户向kube-apiserver发出指令(我想干什么,我期望事情是什么状态)(以下kube-apiserver简称apiserver、kube-controller-manager简称controller、kube-scheduler简称scheduler)

api响应命令,通过一系列认证授权,把pod数据存储到etcd创建deployment资源并初始化。(期望状态)

controller通过list-watch机制,监测发现新的deployment,将该资源加入到内部工作队列,发现该资源没有关联的pod和replicaset,启用deployment controller创建replicaSet资源,再启用replicaSet controller创建pod。(由deployment 资源触发replicaSet资源replicaSet副本集对象一般不单独使用而是作为 Deployment 的理想状态参数使用。)

④所有controller被创建完成后,将deployment、replicaset、pod资源更新存储到etcd

scheduler通过list-watch机制,监测发现新的pod,经过主机过滤、主机打分规则,将pod绑定(binding)到合适的主机

⑥将绑定结果存储到etcd

kubelet每隔 20s(可以自定义)向apiserver通过NodeName 获取自身Node上所要运行的pod清单通过与自己的内部缓存进行比较新增加pod

kubelet创建pod

⑨kube-proxy为新创建的pod注册动态DNS到CoreOS(同步到dns),给pod的service添加iptables/ipvs规则,用于服务发现负载均衡

controller通过control loop(控制循环)将当前pod状态与用户所期望的状态对比,如果当前状态与用户期望状态不同,则controller会将pod修改为用户期望状态,实在不行将会通知删除pod,然后kubelet重新创建pod。


来说两句吧
最新评论