Docker只是一个单机的容器管理工具,只能管理单个节点上的容器,程序需要在多个节点运行的时候,就需要使用其他的工具如Docker Swarm,Kubernetes,都可以管理多个节点上的容器,但是也有区别,docker swarm是docker官方提供的一个容器编排引擎,功能比较简单,适合小型,简单的场景,kubernetes是比较复杂的容器编排引擎,是Google在2014年开源的,是一个开源的容器编排引擎,可以用来管理容器化的应用,包括容器的部署,扩容,缩容,升级,回滚等,提高了部署效率,降低物理成本,具有高可用性,不会因为某一个组件或者服务的故障而导致整个系统不可用,k8s也有高可用特性,自动重启,自动重建,自动修复等,提高了系统的可用性,用户在任何时间内都可以正常的使用系统,可扩展性是指程序可以通过系统的变化动态扩展或者缩减系统的资源,提高了系统的性能和资源利用率,例如618嘛
不可变基础设施和声明式API才是云原生的精髓
kubernetes架构
典型的master-worker架构,master负责管理整个集群,worker负责运行应用程序和服务,
etcd用的raft协议,可以在内部实现选举,实现高可用和分区容错
基础组件
典型的master-worker架构,master负责管理整个集群,worker负责运行应用程序和服务, etcd用的raft协议,可以在内部实现选举,实现高可用和分区容错 master上包含4个组件 kube-apiserver:负责提供kubernetes集群的api接口服务,所有的组件都会通过这个接口来进行通信,**相当于一个集群的网关**,是整个系统的入口,所有的请求都会经过它,然后再由它来分发发给不同的组件进行处理,比如一些创建,更新,删除pod的请求,或者是一些查询集群状态的命令,都会先经过apiserver ,再转发给相应的组件来进行处理,除了提供接口以外,还负责对所有资 源对象的增删改查等操作进行认证,授权和访问控制,确保只有经过认证和授权的用户才能访问到集群中的资源对象,提高了整个集群系统的安全性----如何监控 Scheduler:调度器,负责监控集群中所有节点的资源使用情况,然后根据一些调度策略,将pod调度到合适的节点上运行,当新增一个pod的时候,如果第一个pod上的资源占用了80%,而第二个资源只占用了20%,则会被智能的调度到第二个资源上,更加合理的利用集群中的资源------如何控制 ControllerManager:控制管理器,负责管理集群中各种资源对象的状态,比如,pod,node,service等,根据这些状态做出相应的响应,确保当前集群中的资源对象都处于我们预期的状态,当集群中任何一个节点上的pod发生故障的时候,必须要有一种机制能关注和检测到这故障,并且尽快对这个故障进行处理,重启pod或者使用其他pod来代替它,如何知道都是正常的 etcd:高可用的键值存储系统,用来、存储集群中所有资源对象的状态信息,比如一个pod挂掉崩溃了,或者新增pod,这些信息都会被记录到etcd中,可以理解为一个集群中的大脑,是一个集群的数据存储中心,很多功能都是依赖他来实现的,比如使用命令行或者UI界面来查询整个集群的状态,这些信息都是从etcd中获取的,etcd中一般只存储集群中各种资源对象的状态信息
node上包含三个组件 kubelet:负责管理和维护每个节点上的pod,并确保他们按照预期运行,也会定期从api- server组件中接受新的或者修改后的pod规范,同时也会监控工作节点的运行情况,然后将这些信息汇报给api-server kube-proxy:负责为pod对象提供网络代理和负载均衡服务,在每一个node上启动一个网络代理,使发往service的流量以一种高效的方式路由到正确的后端pod中 容器运行时container runtime:运行容器的软件,负责拉取容器镜像和创建容器,启动或者停止容器,所有的应用程序都需要容器运行时来运行 当pod创建后,Scheduler和kubelet节点一旦绑定,就是永久绑定,就算kubelet发生故障也不会重建