Kubernetes是什么?
Kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。Kubernetes是Google开源的一个容器编排引擎,同时也是一个开源的容器集群管理系统,可以实现容器应用的自动化部署、自动扩缩容、监控和维护等功能。
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes的目标旨在消除编排物理/虚拟计算、网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原理上进行自助运营。
Kubernetes具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。
Borg是谷歌内部的大规模集群管理系统,负责对谷歌内部很多核心服务的调度和管理。Borg的目的是让用户能够不必操心资源管理的问题,从而更专注于自己的核心业务。Borg甚至能做到跨多个数据中心的资源利用率最大化。
Kubernetes属于主从分布式架构,主要由Master和Node组成,以及包括客户端命令行工具kubectl和其它附加项。
Master:作为控制节点,对集群进行调度管理;由kube-apiserver、kube-scheduler、kube-controller-manager和etcd组成。
Node:作为工作节点,运行业务应用的容器;由kubelet、kube-proxy和docker(或者rocket)组成。
Master指的是集群控制节点,每个Kubernetes集群里需要有至少一个Master来负责集群的管理和控制。Master可以是一台物理机,也可以是一台虚拟机,Master节点上运行着以下组件:
kube-apiserver:提供了HTTP Rest接口的关键服务进程,是集群里所有资源的增、删、改、查等操作的唯一入口,也是集群的控制入口。
kube-controller-manager:运行管理控制器,是集群中处理常规任务的后台进程,每个Controller都负责一种具体的控制流程,而Controller Manager就是这些Controller的核心管理者。
kube-scheduler:负责资源调度(Pod调度)的进程,为新创建的Pod选择一个Node节点。
etcd:是kubernetes默认的存储系统,集群里所有资源对象的数据全部保存在etcd中。
Node指的是集群的工作节点,和Master一样,可以是一台物理主机,也可以是一台虚拟机。每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。Node上运行的组件如下:
kubelet:负责Pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。
kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。
docker:容器引擎,负责本机的容器创建和管理工作。
Deployment的典型使用场景有以下几个:
创建一个Deployment对象来生成对应的ReplicaSet,并完成Pod副本的创建过程。
检查Deployment的状态来查看部署工作是否完成(Pod副本的数量是否达到预期的值)。
更新Deployment以创建新的Pod(比如镜像升级)。
如果当前Deployment不稳定,则回滚到一个早先的Deployment版本。
挂起或者恢复一个Deployment。
StatefulSet的使用场景如下:
稳定性,唯一的网络标识。
稳定性,持久化存储。
有序的部署和扩展。
有序的删除和终止。
有序的自动滚动更新。
上述这些组件都是Kubernetes系统的核心组件,它们共同构成了Kubernetes系统的框架和计算模型。通过对它们进行灵活组合,用户就可以快速、方便地对容器集群进行配置、创建和管理。除了本文所介绍的核心组件,Kubernetes中还有许多辅助配置的资源对象,例如LimitRange、ResourceQuota等。另外,还有一些系统内部使用的对象,例如Binding、Event等可参考官方API文档。
说在最后
本人也是刚接触Kubernetes(K8s),本文内容是摘自相关书籍和网上的相关资料,并结合自己的理解所写的,如有理解错误的地方还请大家不吝指出,共同进步。
由于国内关于Kubernetes的学习资料很少,51cto上倒是有相关的订阅专栏,但都是要钱的,对于这个我不做评论。这里向跟我一样的初学者推荐一本书《Kubernetes权威指南(第2版)》,网上可以下载到PDF版本,虽然这本书讲的Kubernetes的版本是1.3的,版本比较老,但对于初学者可以学习它的理论知识,并结合网上新版本的相关资料自行理解,也是一种非常不错的学习方法。
对Kubernetes(K8s)有兴趣的朋友,可以关注我的博客,后面我会继续发表学习Kubernetes的博文,欢迎各位朋友和我一起踏上Kubernetes(K8s)的旅程。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。