通过Kubernetes(k8s)部署应用、释放应用,是为了更好地集成k8s服务。通过k8s,应用可以更快的进行版本更新和打包部署,且更新时无需中断服务,即使服务器故障也不用停机整顿重来,让应用从开发环境到测试环境到生产环境的迁移变得极其方便。同时通过k8s创建集群节点、删除集群节点,具有减少管理开销(利用集群节点来管理机器)和允许运行资源应用程序的优点,减少数据库负载和提高资源利用率。

那什么是k8s呢?
Kubernetes(k8s)是自动化容器操作的开源平台。这些容器操作包括:部署、调度和节点集群间扩展。具备自动装箱、扩展集群、滚动升级回滚、弹性伸缩、自动治愈、密钥和配置管理、批量处理执行、服务发现和负载均衡等多种特性能力。具体功能包括:自动化容器部署和复制、实时弹性收缩容器规模、容器编排成组,并提供容器间的负载均衡,自由调度容器运行机器。

运用K8S容器编排调度引擎具有简化应用部署,提高硬件资源利用率,自动进行健康检查和自我修复、自动扩容缩容、服务发现和负载均衡等优势。

下面开始介绍一下有关k8s的组成以及和k8s相关的名词概念解释,k8s与这些名词的相互关系如下图所示。
在这里插入图片描述

k8s集群由Master节点和Node(Worker)节点组成。Master节点指的是集群控制节点,管理和控制整个集群,基本上k8s的所有控制命令都发给它,它负责具体的执行过程。除了master以外的节点被称为Node或者Worker节点,可以在master中使用命令 kubectl get nodes查看集群中的node节点。

在k8s中,最小的单位是Pod。一个pod可以包含多个容器,但通常情况下我们在每个pod中仅使用一个容器。如果我们想要为每个容器单独扩容,只需添加一个容器到Pod中即可。同一个Pod里的容器之间仅需通过localhost就能互相通信。

k8s中的资源标签(Label)是将资源进行分类的标识符,资源标签其实就是一个键值型数据,其作用是标注指定对象(Pod)辨识性的属性。一个对象可拥有多个标签,一个标签也可以赋予多个对象。

Service是建立在一组Pod对象之上的资源抽象,它通过标签选择器选定一组Pod对象,并为这组Pod对象定义一个统一的固定访问入口。到达Service IP的请求将被负载均衡至其后的端点----各个Pod对象之上,因此Service从本质上来讲是一个四层代理服务。Service还可以将集群外部流量引入到集群中来。

kubelet运行在每个计算节点上,作为agent,接收分配该节点的Pods任务及管理容器,周期性获取容器状态,反馈给kube-apiserver。

一个可选的DNS服务,用于为每个Service对象创建DNS记录,这样所有的Pod就可以通过DNS访问服务了。

etcd负责节点间的服务发现和配置共享。

Volume是存储卷,在Pod中可以声明卷来问访问文件系统,同时Volume也是一个抽象层,其具体的后端存储可以是本地存储、NFS网络存储、云存储(阿里云盘、AWS云盘、Google云盘等)、分布式存储。声明在Pod中容器可以访问的文件系统,可以被挂载在Pod中一个或多个容器的指定路径下,支持多种后端储存。

K8s架构图:
在这里插入图片描述
k8s提供了更优的方式进行服务发环境变量。即可以通过cluster add-on的方式轻松创建KubeDNS来对集群内的Service进行服务发现。

k8s集群还依赖于一组称为“附件”的组件以提供完整的功能,它们通常是由第三方提供的特定应用程序,且托管运行于k8s集群之上。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐