kubernetes的本质是⼀组服务器集群,它可以在集群的每个节点上运⾏特定的程序,来对节点中的容器进⾏管理。
⽬的是实现资源管理的⾃动化,主要提供了如下的主要功能:
- ⾃我修复:⼀旦某⼀个容器崩溃,能够在1秒左右迅速启动新的容器
- 弹性伸缩:可以根据需要,⾃动对集群中正在运⾏的容器数量进⾏调整
- 服务发现:服务可以通过⾃动发现的形式找到它所依赖的服务
- 负载均衡:如果⼀个服务起动了多个容器,能够⾃动实现请求的负载均衡
- 版本回退:如果发现新发布的程序版本有问题,可以⽴即回退到原来的版本
- 存储编排:可以根据容器⾃身的需求⾃动创建存储卷
⼀个kubernetes集群主要是由控制节点(master)、⼯作节点(node)构成,每个节点上都会安装不同的组件。
master:集群的控制平⾯,负责集群的决策 ( 管理 )
ApiServer : 资源操作的唯⼀⼊⼝,接收⽤户输⼊的命令,提供认证、授权、API注册和发现等机制Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上ControllerManager : 负责维护集群的状态,⽐如程序部署安排、故障检测、⾃动扩展、滚动更新等Etcd :负责存储集群中各种资源对象的信息
node:集群的数据平⾯,负责为容器提供运⾏环境 ( ⼲活 )
Kubelet : 负责维护容器的⽣命周期,即通过控制docker,来创建、更新、销毁容器KubeProxy : 负责提供集群内部的服务发现和负载均衡Docker : 负责节点上容器的各种操作
一些基本概念:
Master:集群控制节点,每个集群需要⾄少⼀个master节点负责集群的管控Node:⼯作负载节点,由master分配容器到这些node⼯作节点上,然后node节点上的docker负责容器的运⾏Pod:kubernetes的最⼩控制单元,容器都是运⾏在pod中的,⼀个pod中可以有1个或者多个容器Controller:控制器,通过它来实现对pod的管理,⽐如启动pod、停⽌pod、伸缩pod的数量等等Service:pod对外服务的统⼀⼊⼝,下⾯可以维护者同⼀类的多个podLabel:标签,⽤于对pod进⾏分类,同⼀类pod会拥有相同的标签NameSpace:命名空间,⽤来隔离pod的运⾏环境
下⾯,以部署⼀个nginx服务来说明kubernetes系统各个组件调⽤关系:
1. ⾸先要明确,⼀旦kubernetes环境启动之后,master和node都会将⾃身的信息存储到etcd数据库中2. ⼀个nginx服务的安装请求会⾸先被发送到master节点的apiServer组件3. apiServer组件会调⽤scheduler组件来决定到底应该把这个服务安装到哪个node节点上在此时,它会从etcd中读取各个node节点的信息,然后按照⼀定的算法进⾏选择,并将结果告知apiServer4. apiServer调⽤controller-manager去调度Node节点安装nginx服务5. kubelet接收到指令后,会通知docker,然后由docker来启动⼀个nginx的podpod是kubernetes的最⼩操作单元,容器必须跑在pod中⾄此,6. ⼀个nginx服务就运⾏了,如果需要访问nginx,就需要通过kube-proxy来对pod产⽣访问的代理,外界⽤户就可以访问集群中的nginx服务了