一、k8s 核心组件
master 组件:
• etcd 是集群的主数据库,保存了整个集群的状态
• apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
• controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
• scheduler 资源调度,按照预定的调度策略将Pod调度到相应的机器上;
• Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI);
• 除了核心组件,还有一些推荐的Add-ons:
• kube-dns负责为整个集群提供DNS服务
• Ingress Controller为服务提供外网入口
• Heapster提供资源监控
• Dashboard提供GUI
• Federation提供跨可用区的集群
• Fluentd-elasticsearch提供集群日志采集、存储与查询
node组件:
• kubelet 负责维护容器的生命周期,负责管理pods和它们上面的容器,images镜像、volumes。同时也负责Volume(CVI)和网络(CNI)的管理;
• kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡;
二 k8s 相关概念:
1: pod
Pod是在K8s集群中运行部署应用或服务的最小单元,它是可以支持多容器的。Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务.
2: 副本复制器(RC)
通过监控运行中的Pod来保证集群中运行指定数目的Pod副本。少于指定数目,RC就会启动运行新的Pod副本;多于指定数目,RC就会杀死多余的Pod副本【k8s早期技术概念】来保证集群高可用!
3: 副本集(Replica Set,RS)
RS是新一代RC,提供同样的高可用能力,能支持更多种类的匹配模式。副本集对象一般不单独使用,配合deployment参数使用
4: 部署(Deployment)
部署是一个比RS副本集应用模式更广的API对象,支持动态扩展。可以创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新RS中副本数增加到理想状态,将旧RS中的副本数减小到0的复合操作【逐步升级新得副本,剔除旧的副本】;
总结:RC、RS和Deployment只是保证了支撑服务的微服务Pod的数量
5: 服务(Service)
RC、RS和Deployment只是保证了支撑服务的微服务Pod的数量,但是没有解决如何访问这些服务的问题。一个Pod只是一个运行服务的实例,随时可能在一个节点上停止,在另一个节点以一个新的IP启动一个新的Pod,因此不能以确定的IP和端口号提供服务。如果要稳定地提供服务需要服务发现和负载均衡能力。在K8s集群中,客户端需要访问的服务就是Service对象。每个Service会对应一个集群内部有效的虚拟IP,集群内部通过虚拟IP访问一个服务。
在K8s集群中微服务的负载均衡是由Kube-proxy实现的。Kube-proxy是K8s集群内部的负载均衡器。它是一个分布式代理服务器,在K8s的每个节点上都有一个;