k8s 框架及历史简介

k8s 框架简介

IAAS:基础设施级服务
PAAS:平台级服务
SAAS:软件级服务

学习k8s的思维导图

链接:https://pan.baidu.com/s/154StovBmSXj4-ZzGUVbeVA
提取码:q34m

发展史

Docker Swarm: 面向对象是中小型企业
Apache Mesos: Twitter marathon 把硬件资源虚拟成一个整体给别人分配使用,逐步没落,调度资源没有k8s灵活
k8s: CNCF(云计算基金会) Borg google内部使用borg,后来发现dockerswarm使用广泛,所以让go开发工程师重写brog,成了k8s,1.0版本的时候捐给了CNCF

这里注意的是,docker和另外一家coreos公司的ceo是好哥们,技术基本是共享的,docker火起来后,coreos也研发了一个类似docker的技术,但是最后结果可想而知,最后他加入k8s生态构建,etcd就是coreos提供的捐赠给CNCF的

除了k8s外还有一些容器管理引擎:

  • podman 红帽RedHat开发的容器管理引擎
  • docker docker公司研发的docker,另外他还研发了container捐给CNCF
  • CNCF container,docker公司研发捐给CNCF的

docker和contaniner的关系:

  • docker用到的运行接口是CRI,CRI是一种容器运行时的标准,可以把CRI想象成一个数据线接口,Python等调用docker是需要调用这个接口,遵循这个规范,这个规范就是CRI
  • container用到的接口是O-CRI,他是CRI做了些改动,O即OPEN,

有趣的是,k8s加入CNCF后,kubectl用的是O-CRI接口,无法直接调用docker的CRI接口,CNCF是国际公司,不可能直接去迁就docker,所以在中间加了个垫片,类似于螺丝与螺母之间的垫片,后来k8s壮大超过docker后,不再迁就docker,在1.19版本中,移除了垫片。k8s调用docker的O-CRI接口,如果没有就不调了,docker忍气吞声发了声明,说支持O_CRI,反过来支持k8s。

k8s的优势:

  • 开源
  • 轻量级
  • 弹性伸缩
  • 负载均衡

1.1 简介

  • Kubernetes 是用来管理容器集群的平台。既然是管理集群,那么就存在被管理节点,针对每个 Kubernetes 集群都由一个 Master 负责管理和控制集群节点。

  • 我们通过 Master 对每个节点 Node 发送命令。简单来说,Master 就是管理者,Node 就是被管理者。

  • Node 可以是一台机器或者一台虚拟机。在 Node 上面可以运行多个 Pod,Pod 是 Kubernetes 管理的最小单位,同时每个 Pod 可以包含多个容器(Docker)。

  • 通常我们都是通过 kubectl 对 Kubernetes 下命令的,它通过 APIServer 去调用各个进程来完成对 Node 的部署和控制

  • APIServer 的核心功能是对核心对象(例如:Pod,Service,RC)的增删改查操作,同时也是集群内模块之间数据交换的枢纽。

  • 它包括了常用的 API,访问(权限)控制,注册,信息存储(etcd)等功能。在它的下面我们可以看到 Scheduler,它将待调度的 Pod 绑定到 Node 上,并将绑定信息写入 etcd 中。

  • etcd 包含在 APIServer 中,用来存储资源信息。接下来就是 Controller Manager 了,如果说 Kubernetes 是一个自动化运行的系统,那么就需要有一套管理规则来控制这套系统。

  • Controller Manager 就是这个管理者,或者说是控制者。它包括 多 个 Controller,分别对应着副本,节点,资源,命名空间,服务等等

  • 紧接着,Scheduler 会把 Pod 调度到 Node 上,调度完以后就由 kubelet 来管理 Node 了。

  • kubelet 监听apiserver,apiserver下发任务后,kubectl调用docker的接口创建容器。

  • kube-proxy 上面监听apiserver,拿到请求后,到node上调用linux内核接口netlink,通过netlink实现对ipvs和network网络的管控,实现数据转发,和kubectl各司其职

  • 在完成资源调度以后,kubelet 进程也会在 APIServer 上注册 Node 信息,定期向 Master 汇报 Node 信息,并通过 cAdvisor 监控容器和节点资源。

  • 由于,微服务的部署都是分布式的,所以对应的 Pod 以及容器的部署也是。为了能够方便地找到这些 Pod 或者容器,引入了 Service(kube-proxy)进程,它来负责反向代理和负载均衡的实施。

上面是k8s的一些组件,另外还有一些插件。组件和插件的区别:

组件: 类似人的手,胳膊,有了这些才完整
插件: 手里的锤子,有了插件有更多的功能,没有也是正常的

2.1 组件

2.1.1 Controller Manager

  • Replication Controller:保证Replication Controller中定义的副本数量与实际运行的pod数量一致。

  • Node Controller:管理维护Node,定期检查Node节点的健康状态,标识出失效和未失效的Node节点。

  • Namespace Controller:管理维护Namespace,定期清理无效的Namespace,包括Namespace下的API对象,例如pod和service等

  • Service Controller:管理维护Service,提供负载以及服务代理。

  • Endpoints Controller:管理维护Endpoints,即维护关联service和pod的对应关系,其对应关系通过Label来进行关联的

  • Service Account Controller:管理维护Service Account,为每个Namespace创建默认的Service Account,同时为Service Account创建Service Account Secret。

  • Persistent Volume Controller:持久化数据控制器,用来部署有状态服务

  • Deamon Set Controller:让每一个Node节点都运行相同的服务

  • Deployment Controller:无状态服务部署控制器

  • Job Controller:管理维护Job,为Job创建一次性任务Pod,保证完成Job指定完成的任务数目。

  • Pod Autoscaler Controller:实现pod的自动伸缩,定时获取监控数据,进行策略匹配,当满足条件时执行pod的伸缩动作。

k8s其实就是两套cs架构组成

apiserver是server的时候,kubectl,kubproxy等都是client
etcd是server的时候,apiserver是client

posted @ 2022-04-14 11:29  liwenchao1995  阅读(452)  评论(0编辑  收藏  举报