1.kubernetes作用及组件
容器管理集群名称叫做k8s
容器的编排工具:swarm,kubesphere,open shift,kubernetes【市场占比大】
一.kubernetes介绍
1.kubernetes是什么?
由谷歌公司开源的应用,基于go语言编写
简称k8s
2.kubernetes作用
服务发现和负载均衡
这个服务发现就是整个k8s集群,中有web服务,缓存服务,MySQL服务,如何让这三个服务之间相互通信呢?
就是使用k8s的coreDNS插件,把服务的IP和服务的名称,记录在coreDNS中。
如果这个服务的IP地址发生了变化,对应在coreDNS中这个服务对应的IP地址也会发生变化,此时不同服务之间互相通信就是直接跟服务名通信就可以。也就是说在整个k8s集群中我不需要知道这个服务的IP地址是什么,知道这个服务的名称就可以直接进行通信。
存储编排
存储编排就是数据的持久化,在k8s集群中做容器数据的持久化的时候,不仅支持使用本地目录进行持久化操作,还支持使用外部的NFS等这样的增设文件系统,来为集群中的容器做数据的持久化。不用担心这个集群怎么连接存储,所有的一切都由后台连接完成。
动部署和回滚
自动部署的意思是只需要创建一个容器,然后指定一下初始化副本就能一下创建出多个所需要的容器,回滚的意思就是指升级的时候,如果升级失败,集群就会自动回滚到升级之前的状态。
资源调度分配
也就是说的CPU,内存等资源的分配。
自我修复
创建容器的时候,必须要事先说明好,我这个容器在我集群中的固定个数,比如说总共有三个容器,当一个容器挂了,就会新创建一个容器,当两个容器挂了,就会新创建两个容器,总是保持这个容器在我集群中的总个数。
总而言之,kubernetes的目的就是让容器部署应用变得更简单,高效。
二.kubernetes架构
如上图所示,一个k8s集群从最粗略的角度来说,应该有master节点,node节点,ETCD数据库。
而关于集群节点,本身的管理操作都是由master的节点来完成的。
包括这个集群要去连接ETCD数据库,要去保存这个集群中的相关信息。比如这个node节点的IP地址是什么,这个容器的IP是什么,这个node节点的名称是什么,所有的信息都要存到这个ETCD数据库,而这些信息由谁负责向ETCD数据库中传输,这些工作都是master节点的工作。
所以说master的作用就是整个集群的管理工作。
而node节点,就是容器的工作地点,
而ETCD数据库就是用来记录这个集群中的工作信息的。
如果这个ETCD数据库挂了整个集群就垮了,所以在整个k8s集群中最重要的就是ETCD数据库。
如上图所示,对集群做任何管理的时候都使用这个kubectl命令来实现。
当主节点master节点搭建好之后,这个master节点上应该最少有三个组件,
首先的kube-apiserver的作用:主要做三件事。第一件事就是通过kubectl工具向kube-apiserver发送请求说,要创建容器,这个请求就是由kube-apiserver来接收。kube-apiserver还具有验证用户是否是合法用户的功能,如果这个用户是合法用户才会执行之后的请求。【接收客户端请求,并且验证客户端身份】第二件事就是kube-apiserver作用还包括向ETCD数据库获取集群的状态信息,向ETCD数据库记录集群的状态信息。【与etcd数据库进行交互,读写集群状态信息】第三件事就是kube-apiserver还要负责接收所有node节点的注册请求。【接收node节点上的kubelet发送过来的注册请求。】
k8s身份验证:
1.基于token(令牌)
2.基于证书的方式
3.基于http basic的方式
kubernetes dashboard 组件提供的web页面
kube-scheduler组件的作用:调度客户端操作请求,选择合适的node节点运行资源
kube-controller-manager控制器的管理器【管理集群控制器】,的作用:是用来管理控制器的,一个集群创建好,之后所有的功能的实现都是通过某几个控制器来实现的。
最牛逼的控制器就是RS replication set【副本控制器】【副本控制集群】【控制容器的副本】
如果RS检测到一个容器挂了,就会重新创建新的容器,
例如replication controller负责维护容器的副本数量。
node节点:节点中的docker engine这个是容器的管理工具——docker服务。
k8s一共支持两种容器管理工具即docker和rks。
在node节点上的kubelet组件就是用来调用我node节点上的容器引擎来创建容器的,
在k8s集群中创建容器的操作是由kubectl将请求发送给kube-apiserver,然后这个apiserver将请求
发送给kube-scheduler,然后这个kube-scheduler选择一个节点,将这个创建容器的请求发送给node上的kubelet组件,然后这个组件将创建容器的请求发送给node节点上的docker engine,最后node节点上的kubelet组件将创建容器成功或者是创建容器失败的信息发送给apiserver
前面我们提到node节点的注册请求是由主节点上的apiserver组件来接收,但是这个请求是由node节点上的kubelet组件发送出来的。
在node节点上的kube-proxy组件的作用是在多个容器之间实现负载均衡的,
比如说创建了4个容器,我想要使用这4个容器来帮我提供数据库服务的负载均衡,那么是谁在这4个容器之间帮我们来转发请求呢?是node节点上的kube-proxy组件
构建k8s集群的时候,建议最少创建3个node节点。