文章目录
前言-背景
容器是捆绑和运行应用程序的好方法。在生产环境中,您需要管理运行应用程序的容器并确保没有停机时间。例如,如果容器发生故障,则需要启动另一个容器。如果系统处理这种行为会不会更容易?
这就是Kubernetes拯救的方式!Kubernetes为您提供了一个弹性运行分布式系统的框架。它负责您的扩展要求,故障转移,部署模式等。
1、什么是Kubernetes?
Kubernetes简称K8S,是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明性配置和自动化。它拥有庞大,快速发展的生态系统。Kubernetes服务,支持和工具广泛可用。
Kubernetes为您提供:
- 服务发现和负载平衡
- 存储编排
- 自动部署和回滚
- 自动装箱
- 自我修复
- 密钥和配置管理
Kubernetes集群包含有节点代理kubelet和Master组件(APIs, scheduler, etc),一切都基于分布式的存储系统。下面这张图是Kubernetes的架构图:
2、Kubernetes组件
Kubernetes主要由以下几个核心组件组成:
- etcd 保存了整个集群的状态;
- apiserver 提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
- controller manager 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
- scheduler 负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
- kubelet 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
- Container runtime 负责镜像管理以及Pod和容器的真正运行(CRI);
- kube-proxy 负责为Service提供cluster内部的服务发现和负载均衡;
2.1、集群
简单的说是:多个人在一起做同样的事
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
2.2、分布式
简单的说是:多个人在一起做不同的事
分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。
2.3、etcd
所有master的持续状态都存在etcd的一个实例中。这可以很好地存储配置数据。因为有watch(观察者)的支持,各部件协调中的改变可以很快被察觉。
一致且高度可用的键值存储,用作Kubernetes的所有群集数据的后备存储。
2.4、Node
节点,是Kubernetes中的工作机器,以前称为a minion。节点可以是VM或物理机,具体取决于集群。每个节点都包含运行pod所需的服务,并由主组件管理。节点上的服务包括容器运行时,kubelet和kube-proxy。
目前,有三个组件与Kubernetes节点接口交互:节点控制器,kubelet和kubectl
2.5、Pod
pod,是Kubernetes应用最小,最简单的在创建或部署Kubernetes对象模型单元的基本执行单元。Pod表示在集群上运行的进程。
Kubernetes集群中的Pod可以以两种主要方式使用:
- 运行单个容器的Pod
- 运行多个需要协同工作的容器的Pod
Pod旨在支持多个协作流程(作为容器),形成一个有凝聚力的服务单元。Pod中的容器自动位于群集中的同一物理或虚拟机上,并共同调度。容器可以共享资源和依赖关系,彼此通信,并协调它们何时以及如何终止
2.6、Controller Manager
Controller Manager作为集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。
2.7、kube-proxy
kube-proxy是在集群中的每个节点上运行的网络代理,实现Kubernetes 服务的一部分将一组Pod上概念。
kube-proxy维护节点上的网络规则。这些网络规则允许通过群集内部或外部的网络会话与Pod进行网络通信。
kube-proxy使用操作系统数据包过滤层(如果有)并且可用。否则,kube-proxy会转发流量本身
2.8、kubelet
kubelet负责管理pods和它们上面的容器,images镜像、volumes、etc。
2.9、Scheduler
调度器把未调度的pod通过binding api绑定到节点上。调度器是可插拔的,并且我们期待支持多集群的调度,未来甚至希望可以支持用户自定义的调度器。
2.10、Container Runtime
Runtime指的是容器运行环境.
Kubernetes支持多个容器运行时:Docker, containerd,cri-o, rktlet以及Kubernetes CRI(容器运行时接口)的任何实现
2.11、 CRD(CustomResourceDefinition)自定义资源
CustomResourceDefinition(CRD)是 v1.7 新增的无需改变代码就可以扩展 Kubernetes API 的机制,用来管理自定义对象。
2.12 、APIServer
APIServer负责对外提供RESTful的Kubernetes API服务,它是系统管理指令的统一入口,任何对资源进行增删改查的操作都要交给APIServer处理后再提交给etcd
3、各组件之间的关系图
4、学习网址
官网:
https://kubernetes.io/
K8S中文社区:
https://www.kubernetes.org.cn/k8s