- k8s 是什么(总结性介绍)
- 起源(为什么会产生它)
- 作用(它能拿来干嘛)
总结
Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,是一个自动化部署,缩放,以及容器化管理应用程序的开源系统,即基于容器的集群管理平台,旨在帮助人们高效管理这些集群。Kubernetes在容器级别而不是在硬件级别运行。
来源
从部署演进说起:
传统的部署(Traditional deployment)主要通过物理服务器实现,其存在的问题是无法为物理服务器中的应用程序定义资源边界,从而导致资源分配的问题(在物理服务器上运行多个应用程序,可能会出现一个应用程序占用大部分资源而另一个应用程序能够使用的资源有限故而性能将下降的情况),针对这一问题,可能的解决方案是在不同的物理服务器上运行每个应用程序,但这种解决方案并不能达到大规模运行的效果因为单个物理服务器的资源依然无法充分利用,且维护多个物理服务器的费用高。
虚拟化部署(Virtualized deployment)是为了解决传统部署的问题产生的,通过虚拟机的方式在单个物理服务器的CPU上运行多个“子电脑”,“子电脑”之间相互独立,所以在“子电脑”中运行的应用程序也是相互独立的。这种方式可以更好地利用物理服务器中的资源。
容器部署(Container deployment)在虚拟化部署的基础上发展而来,Docker这样的容器技术,属于轻量级的虚拟化,与VM相似,容器具有自己的文件系统,CPU,内存,进程空间等。由于它们与基础架构分离,因此可以跨云和OS分发进行移植。
容器部署具有诸多好处,但想要将Docker应用于具体的业务实现,存在一定的困难(容器自身只是一个轻薄的、底层的运行载体,很难大规模盈利并推动企业在复杂生产环境下使用)——编排、管理和调度等各个方面,都不容易,人们需要一套管理系统,对Docker及容器进行更高级更灵活的管理。Kubernetes提供了一个框架来弹性运行分布式系统。它负责应用程序的扩展和故障转移,提供部署模式等。
作用
主要负责应用程序的扩展和故障转移,提供部署模式等。Kubernetes集群可以跨越本地、公共、私有或混合云中的主机 。
- 实现负载平衡
在使用DNS名称或者IP地址公开容器后,若容器的流量很高,Kubernetes可以分配网络流量并实现负载平衡,从而使部署稳定。
- 允许用户自动挂载自己选择的存储系统,例如本地存储、公共云提供商等。
- 自动部署和回滚
可以用Kubernetes为部署创建新容器,删除现有容器并将所有资源用于新容器。
- 充分利用资源
Kubernetes得到可用于运行容器化任务的节点集群和每个容器需要多少CPU和RAM的要求后,可以按照要求将容器分配到节点上,以充分利用资源。
- 自我修复
Kubernetes将重启失败的容器,替换容器,杀死不响应用户定义的运行状况检查的容器。(通过自动放置,自动重启,自动复制和自动缩放功能对应用程序进行运行状况检查和自我修复)
k8s对象
在 Kubernetes 系统中,Kubernetes 对象是持久化的实体。Kubernetes 使用这些实体去表示整个集群的状态。对象描述了哪些容器化应用在运行以及在哪个node上、可以被应用使用的资源、关于应用运行时表现的策略(如重启策略、升级策略,以及容错策略)等信息。
创建对象=告知 Kubernetes 系统所需的期望状态(Desired State)。
操作对象:使用k8s API
对象的描述:使用 Kubernetes API 创建对象时(或者直接创建,或者基于kubectl),API 请求必须在请求体中包含 JSON 格式的信息。大多数情况下在.yaml中提供。.yaml的必需字段:
- apiVersion - 创建该对象所使用的 Kubernetes API 的版本
- kind - 想要创建的对象的类型
- metadata - 帮助识别对象唯一性的数据,包括一个 name 字符串、UID 和可选的 namespace
- +对象的 spec 字段
架构
一个K8S系统,通常称为一个K8S集群(Cluster)。集群主要包括两个部分:一个Master节点(主节点)和一群Node节点(计算节点)。Master节点主要负责管理和控制;Node节点是工作负载节点,里面是具体的容器。
- 一个Master节点(主节点)
Master节点包括API Server、Scheduler、Controller manager、etcd、(cloud-controller-manager)。
API Server是整个系统的对外接口,供客户端和其它组件调用。
Scheduler负责对集群内部的资源进行调度(监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行)。调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
Controller manager负责管理控制器,包含四部分:1)Node Controller负责在节点出现故障时进行通知和响应;2)Replication Controller负责为系统中的每个副本控制器对象维护正确数量的 Pod;3)Endpoints Controller:填充端点(Endpoints)对象;4)Service Account & Token Controllers:为新的命名空间创建默认帐户和 API 访问令牌。
etcd是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
cloud-controller-manager 运行与基础云提供商交互的控制器。
- 一群Node节点(计算节点)
Node节点包括Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod。
Pod是Kubernetes最基本的操作单元。一个Pod代表着集群中运行的一个进程,它内部封装了一个或多个紧密相关的容器。
Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
Kube-proxy,主要负责为Pod对象提供代理。
Fluentd,主要负责日志收集、存储与查询。