Kubernetes 的作用
1、编排工具、google开源的项目,基于go语言开发
简单来说:kubernetes的目的就是让容器部署应用变的更加高效和简单
使用Kubernets的优势
1、自我修复
Kubernetes会对容器的存活状态实时检测,一旦检测到容器挂掉之后,k8s会自动建一个一模一样的容器
2、管理角度
Kubernetes会帮我们自动维持容器的副本,假设有四个容器副本,挂掉两个后,Kubernets会帮我们自动再创建两个一模一样的容器。
3、从业务更新角度来讲
Kubernetes支持对容器做滚动更新,不会一下子把所有的旧业务容器都删除掉。
假设有四个旧业务的容器需要更新,Kubernets先更新两个旧业务,如果新版本稳点的话,再去更新最后两个容器,如果不稳定的话,把更新掉的删除,然后再按照剩下的两个旧的业务容器复制出两个一模一样的容器;
4、Kubernets原生支持负载均衡
多个容器创建出来后,Kubernetes会自动为多个容器负载均衡;
5、Kubernets支持有状态负载
如果数据库挂掉后,会自动创建容器然后挂载旧容器的数据卷
注意这里是为了好理解才会说容器,但是实际上Kubernetes创建的是pod,而容器是运行在pod中的;
Kubernetes基础架构
master节点的作用
主要负责整个集群的管理工作:
集群状态的监控
集群的扩容
集群的缩容
接收处理各种请求
Master中的各个组件介绍(进程)
kube-scheduler 调度作用
负责接收到创建容器的请求,由kube-scheduler来选择合适的工作节点(node)创建pod
kube-apiserver
1、接收客户端(kubectl)的操作请求
2、对客户端进行认证授权
3、负责与etcd(数据库)进行交互
4、接收kubelet发过来的注册请求
kube-controller-manager 控制器管理器
负责提供控制器,以及对控制器的管理
如:RS(副本集):维护副本
Node节点的作用
集群内的所有pod都运行在这些node节点上
kubelet
负责调度底层的容器管理软件来实现容器的管理
kube-porxy
实现多个pod之间的负载均衡
实现负载均衡的时候实际上是调用kernel(内核)的lvs
实现服务端口的映射,底层调用的是iptables
Container 底层的容器管理软件
k8s1.24版本之前 底层用的是docker
k8s1.24版本之后,底层用的是containerd(容器管理软件)
工作流程(拿创建一个容器来说)
kubectl 发送建立容器的请求到kube-apiserver 将这个请求(要创建容器的名称、IP、镜像)存入数据库
kube-scheduler会周期性的向apiserver询问建容器的请求,apiserver每次接受到都会区etcd数据库去查,查到之后apiserver会将这个请求信息传给kube-scheduler,然后kube-scheduler会按照一定的算法来选取一个工作节点创建容器,然后会告诉给apiserver,apiserver会将这个信息存入到ercd数据库;
每个kubelet会周期性的去询问apiserver是否有容器创建请求,当apiserver在数据库中查询到有创建容器的信息;会将这个信息返回给信息中工作节点的Kubelet,kubelet接受到这个请求后会调用底层的容器管理软件创建容器,创建好容器之后,kubernet再将创建完的容器的各种信息、IP等等再交给apiserver,apiserver再将请求保存到etcd数据库中