00:文章简介
介绍k8s是什么?k8s集群的基础架构等基础知识。
01:介绍
kubernetes简称k8s,是Google使用Go语言基于内部使用了多年的Borg重写并开源的一个开源系统。
官方的介绍是:
kubernetes是用于自动部署、扩展和管理容器化应用的开源系统。它将组成应用程序的容器组合成逻辑单元,以便于管理和服务发现。kubernetes源自Google 15年生产环境的运维经验,同时凝聚了社区的最佳创意和实践。
官方还介绍了它的特点:
规模:
扩展性极强
灵活:
功能没有上限,永远满足你的需求
时效:
永不过时,开源系统,可以在任意平台中使用
自己的总结:
kubernetes是Google基于内部Borg系统使用Go语言重写并开源的一款容器管理平台,它集成了Google 15年的生产环境运维经验,将运维经验落地形成了平台化的操作,使用Kubernetes相当于踩在了巨人的肩膀上。而且Kubernetes采用分布式的架构,扩展性极强;应用与底层基础架构分离,可以更灵活的管理业务;它是开源的操作系统,可以根据自己的使用习惯来进行二次开发。
带来的好处:
缩短软件开发周期,提高资源利用率,使用互补的开源技术
缺点:
每年4个重要版本,更新速度太快,且每个版本中的变动太大,每个版本都会引入新特性,很多版本不能兼容使用。
02:k8s基础架构
03:重要组件
Master
整个k8s集群中的控制节点,负责集群中所有资源的调度和控制,不应用资源的运行,节点数量应该为奇数,不需要较高配置。
API Server
它是k8s的入口,内部封装了核心对象的增删改查操作,提供了RESTFul风格的API接口的关键服务进程,k8s集群所有资源的“增删改查”操作唯一入口,是集群间节点通信的根基。所有结果将存储到etcd中。
Scheduler
资源调度中心,根据特定的调度算法,将Pod调度到node节点上(创建生成pod请求,匹配最佳工作节点)。
Controller
将运维经验代码化的产物,负责集群内部所有节点的资源对象的自动化管理控制中心,重点实现service Endpoint的动态更新。管理k8s集群中的各种控制节点,包括replication Controller 和 node Controller。
根据资源的 期望状态 和 当前状态 进行比较,判断是否与期望状态一致,若不一致,则通知APIServer进行重启、迁移、删除等操作,最终保证集群的各种资源在预期状态下运行。
资源对象:节点、容器应用、软件版本、容器副本(个数)等等
etcd
分布式的协同数据存储服务实现方案,通过将数据分散存储,达到提高数据的可靠性或读写性能
k8s内部资源对象的数据全部保存在etcd中,来实现持久化并维护对象的一致性。
Node
k8s集群中的工作负载节点,接收到Master的任务后,分配Pod到Node节点中运行,需要较高配置。
Kubelet
Node节点上的Agent客户端,负责与Master的API Server通信,同步工作状态、抓取主机资源信息。
它有垃圾回收机制,包括容器垃圾回收和镜像垃圾回收。
Kube-proxy
管理service并提供service通信和负载均衡的功能,提供算法将客户端流量负载均衡到service对应的一组后端pod
使用etcd的watch机制,实现服务发现功能,维护一张service到endpoint的映射关系,从而保证后端pod的IP变化不会影响用户的访问
将service资源转换成iptabels或ipvs规则,是k8s的核心网络组件。
Fluentd
集群中的一种日志管理方案,不是k8s内部实现的功能
flannel
它是针对k8s设计的一个覆盖网络工具,它的目的是为集群中的所有节点重新规划ip地址的使用规则,从而使得不同节点上的容器能够获得同属一个内网且不重复的ip地址,并让属于不同节点上的容器能够通过内网ip通信
Docker
底层容器运行依赖,是运行k8s集群中各种资源对象的载体。
Harbor
管理k8s集群中的所有docker镜像
04:内部资源对象
05:k8s与docker的关系
docker是容器管理平台
k8s是容器编排工具
k8s依赖于docker-shim 和 docker-containerd来创建容器
docker创建容器原理:
containerd -> docker-shim -> runc -> 容器
k8s创建容器原理:
kubelet -> CRI-containerd -> docker -> dockershim -> runc -> 容器
虽然Kubernetes在2020宣布废弃dockershim,但只是将CRI-Container d 和containerd结合成了CRI plugin container d,节省了两个插件中间的dockershim,实际上,在containerd 到container中间,还有dockershim负责与runc进行通信。
06:k8s与docker的关系中涉及名词
CNCF
CNCF,全称Cloud Native Computing Foundation(云原生计算基金会),口号是 "坚持和整合开源技术来编排容器作为微服务架构的一部分",实际上与其口号差不多,就是给开源容器的插件来进行审核的一个机构,开源插件需要经过他们的测试和考察,“毕业”后才能成为kubernetes和docker编排中的合格产品。
CNI
CNI, 全称Container Network Interface
kubernetes 对于网络的解决方案,只是预留了网络接口,只要符合CNI标准的解决方案都可以使用
CSI
Container Storage Interface
kubernetes 对于存储的解决方案,只是预留了存储接口,只要符合CSI标准的解决方案都可以使用
CRI
Container Runtime Interface
kubernetes 对于容器的解决方案,只是预留了容器接口,只要符合CRI标准的解决方案都可以使用
评论区