kubernertes一次执行的过程解析

K8S一次拉取镜像并启动pod的工程及原理

Kubernetes master结构

UI通过浏览器来管理,CLI是命令行来管理的,不管是浏览器还是命令行管理,都是通过API去访问K8S的master节点这个API也就是API server所监听的地址,负责认证和授权,如果认证没有问题之后就能够访问到K8S内部中去了,比如创建容器等等,创建容器的话有需要调度scheduler,由scheduler将这个角色或容器运行在那个节点上,这个数据会被放到etcd中。

Kubernetes node结

他的master节点就会下发指令,把这个pod的操作下发到指定的node节点上,他的这个创建是有筛选策略的,这多个node节点中我们要挑一部分,或者挑一些,然后再将指令发给需要创建pod的node节点,假如这里发给了3这个node节点上,再有3节点上的这个kubelet负责将这个pod创建起来,容器创建出来之后再有kube-proxy给它生成各种网络策略,以支持对外的访问,这些pod都是通过docker来运行的,是由kubelet将他创建起来,在K8S中启动容器就不需要docker run命令来启动,而是直接交给了kubelet组件去执行

kubelet组件:用于在node节点上创建多个pod

kube-proxy组件:用于创建node节点上的pod网络策略

Fluentd组件:是用来做pod的日志收集的。

Images registry:这是镜像仓库,这些镜像仓库是要提前创建好的,因为kubelet在创建pod的时候也需要拉镜像,kubelet也是从images registry中将镜像拉下来,所以我们需要先将镜像打好,然后上传到镜像仓库,并且要配置当前节点能够自动从镜像仓库中拉镜像,否则这个容器是创建不出来的,会报错。

K8S一次完整的执行过程

Master上运行了一个kube-controller-manager和kube-scheduler这两个组件,这两个组件是不直接对外的,我们对外的话需要访问他的kube-apiserver,无论使用web管理端工具还是命令行访问都是先访问apiserver,由apiserver提供认证授权机制(就是通过账号名密码来认证)如果账号名和密码对的话就能访问,不对的话就直接拒绝,然后认证成功后我们需要执行的操作就由kube-scheduler这个组件来执行调度,每个容器就运行在下面各个不同的node节点上,在noede节点上只运行两个组件一个是kubelet负责管理容器的生命周期,一个是kube-proxy负责容器的网络策略维护,然后在node节点的宿主机上我们通过docker来运行各个不同类型的容器,每个node节点宿主机都是这个结构。都是一个kuberlet和kube-proxy然后再加一个docker

K8s 核心优势:

  • 基于 yaml 文件实现容器的自动创建、删除
  • 更快速实现业务的弹性横向扩容(从一个容器可以快速的扩展到多个容器)
  • 动态发现新扩容的容器并对自动用户提供访问(无论扩充多少个容器,都能够让用户快速访问到,不需要再改修改什么负载均衡)
  • 更简单、更快速的实现业务代码升级和回滚。