首页 > 其他分享 >k8s入门篇-Kubernetes的基本概念和术语

k8s入门篇-Kubernetes的基本概念和术语

时间:2023-04-06 13:09:58浏览次数:40  
标签:容器 副本 Kubernetes Volume 入门篇 Job Pod k8s

1.k8s基本概念概述

Kubernetes中的大部分概念如Node、Pod、Replication Controller、 Service等都可以被看作一种资源对象,几乎所有资源对象都可以通过 Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查 等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes 其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存 的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控 制和自动纠错的高级功能。

2.Master

2.1.Master描述

Kubernetes里的Master指的是集群控制节点,在每个Kubernetes集群 里都需要有一个Master来负责整个集群的管理和控制,基本上 Kubernetes的所有控制命令都发给它,它负责具体的执行过程,我们后 面执行的所有命令基本都是在Master上运行的。

2.2.Master运行关键组件

  • Kubernetes API Server(kube-apiserver):提供了HTTP Rest接 口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作 的唯一入口,也是集群控制的入口进程。
  • Kubernetes Controller Manager(kube-controller-manager):Kubernetes所有资源对象的自动化控制中心,可以将其理解为资源对 象的“大总管”。
  • Kubernetes Scheduler(kube-scheduler):负责资源调度(Pod 调度)的进程,相当于公交公司的“调度室”。
  • Kubernetes ETCD:在Master上通常还需要部署etcd服务,因为Kubernetes里的所 有资源对象的数据都被保存在etcd中。

3.Node

3.1.Node描述

Kubernetes集群中的其他机器被称为Node,与Master一样,Node可以是一台物理主机,也 可以是一台虚拟机。Node是Kubernetes集群中的工作负载节点,每个 Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机 时,其上的工作负载会被Master自动转移到其他节点上。

3.2.Node运行关键组件

  • kubelet:负责Pod对应的容器的创建、启停等任务,同时与 Master密切协作,实现集群管理的基本功能。
  • kube-proxy:实现Kubernetes Service的通信与负载均衡机制的 重要组件。
  • Docker Engine(docker):Docker引擎,负责本机的容器创建 和管理工作。

4.Pod

4.1.Pod描述

Kubernetes 的基本调度单位,Pod 是一组紧密关联的容器集合,它们共享 PID、IPC、Network 和 UTS namespace。Pod 的设计理念是支持多个容器在一个 Pod 中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。我们知道容器本质上就是进程,那么 Pod 实际上就是进程组了,只是这一组进程是作为一个整体来进行调度的。

4.2.Pod与容器的关系

在docker环境中每个容器都是一个进程,在k8s中pod就是一组进程。当通过k8s创建一个pod资源时,schedule调度器会调用某个node节点的kubelet控制docker启动两个容器,一个是业务的容器,一个就是pod容器。在一个pod上创建的多个业务容器都会共用这个pod上的ip地址。

k8s入门篇-Kubernetes的基本概念和术语_Pod在这里插入图片描述

  • 查看pod上启动的两个类型的容器

nginx -g:pod中的业务容器每个pod中可以有多个。
/pod:是pod的根容器共享pod中容器的IP和Volume

5.Label

5.1.Label描述

Label(标签)是Kubernetes系统中另外一个核心概念。一个Label是一个key=value的键值对,其中key与value由用户自己指定。Label可以被 附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对 象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的 资源对象上。Label通常在资源对象定义时确定,也可以在对象创建后 动态添加或者删除。

6.Replication Controller

6.1.Replication Controller描述

RC(Replication Controller)是Kubernetes系统中的核心概念之一,简单来说,它其实定义了 一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预 期值,所以RC的定义包括如下几个部分。

  • Pod期待的副本数量。
  • 用于筛选目标Pod的Label Selector。
  • 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板 (template)。

7.Deployment

7.1.Deployment描述

Deployment是Kubernetes在1.2版本中引入的新概念,用于更好地解 决Pod的编排问题。为此,Deployment在内部使用了Replica Set来实现目 的,无论从Deployment的作用与目的、YAML定义,还是从它的具体命 令行操作来看,我们都可以把它看作RC的一次升级,两者的相似度超 过90%。Deployment相对于RC的一个最大升级是我们可以随时知道当前 Pod“部署”的进度。实际上由于一个Pod的创建、调度、绑定节点及在目 标Node上启动对应的容器这一完整过程需要一定的时间,所以我们期待 系统启动N个Pod副本的目标状态,实际上是一个连续变化的“部署过 程”导致的最终状态。

8.Horizontal Pod Autoscaler

8.1.Horizontal Pod Autoscaler描述

通过手工执行kubectl scale命令,我们可以实现Pod扩容或缩容。如 果仅仅到此为止,显然不符合谷歌对Kubernetes的定位目标—自动化、 智能化。在谷歌看来,分布式系统要能够根据当前负载的变化自动触发 水平扩容或缩容,因为这一过程可能是频繁发生的、不可预料的,所以 手动控制的方式是不现实的。因此,在Kubernetes的1.0版本实现后,就有人在默默研究Pod智能 扩容的特性了,并在Kubernetes 1.1中首次发布重量级新特性— Horizontal Pod Autoscaling(Pod横向自动扩容,HPA)。在Kubernetes 1.2中HPA被升级为稳定版本(apiVersion: autoscaling/v1),但仍然保留 了旧版本(apiVersion: extensions/v1beta1)。Kubernetes从1.6版本开 始,增强了根据应用自定义的指标进行自动扩容和缩容的功能,API版 本为autoscaling/v2alpha1,并不断演进。HPA与之前的RC、Deployment一样,也属于一种Kubernetes资源对 象。通过追踪分析指定RC控制的所有目标Pod的负载变化情况,来确定 是否需要有针对性地调整目标Pod的副本数量,这是HPA的实现原理。

8.2.HPA度量指标方式

当前,HPA有以下两种方式作为Pod负载的度量指标。

  • CPUUtilizationPercentage是一个算术平均值,即目标Pod所有副本自 身的CPU利用率的平均值。
  • 应用程序自定义的度量指标,比如服务在每秒内的相应请求数 (TPS或QPS)。

9.Service

9.1.Service描述

Service服务也是Kubernetes里的核心资源对象之一,Kubernetes里的 每个Service其实就是我们经常提起的微服务架构中的一个微服务,之前 讲解Pod、RC等资源对象其实都是为讲解Kubernetes Service做铺垫的

9.2.Pod、RC与Service的逻辑关系

k8s入门篇-Kubernetes的基本概念和术语_Docker_02在这里插入图片描述

从图中可以看到,Kubernetes的Service定义了一个服务的访问 入口地址,前端的应用(Pod)通过这个入口地址访问其背后的一组由 Pod副本组成的集群实例,Service与其后端Pod副本集群之间则是通过 Label Selector来实现无缝对接的。RC的作用实际上是保证Service的服务 能力和服务质量始终符合预期标准。

10.Job

10.1.Job描述

批处理任务通常并行(或者串行)启动多个计算进程去处理一批工 作项(work item),在处理完成后,整个批处理任务结束。从1.2版本 开始,Kubernetes支持批处理类型的应用,我们可以通过Kubernetes Job 这种新的资源对象定义并启动一个批处理任务Job。与RC、 Deployment、ReplicaSet、DaemonSet类似,Job也控制一组Pod容器。从 这个角度来看,Job也是一种特殊的Pod副本自动控制器。

10.2. Job与RC等控制pod副本区别

  • Job所控制的Pod副本是短暂运行的,可以将其视为一组 Docker容器,其中的每个Docker容器都仅仅运行一次。当Job控制的所 有Pod副本都运行结束时,对应的Job也就结束了。Job在实现方式上与 RC等副本控制器不同,Job生成的Pod副本是不能自动重启的,对应Pod 副本的RestartPoliy都被设置为Never。因此,当对应的Pod副本都执行完 成时,相应的Job也就完成了控制使命,即Job生成的Pod在Kubernetes中 是短暂存在的。Kubernetes在1.5版本之后又提供了类似crontab的定时任 务——CronJob,解决了某些批处理任务需要定时反复执行的问题。
  • Job所控制的Pod副本的工作模式能够多实例并行计算,以 TensorFlow框架为例,可以将一个机器学习的计算任务分布到10台机器 上,在每台机器上都运行一个worker执行计算任务,这很适合通过Job 生成10个Pod副本同时启动运算。

11.Volume

11.1.Volume描述

Volume(存储卷)是Pod中能够被多个容器访问的共享目录。Kubernetes的Volume概念、用途和目的与Docker的Volume比较类似,但 两者不能等价。首先,Kubernetes中的Volume被定义在Pod上,然后被 一个Pod里的多个容器挂载到具体的文件目录下;其次,Kubernetes中的 Volume与Pod的生命周期相同,但与容器的生命周期不相关,当容器终 止或者重启时,Volume中的数据也不会丢失。最后,Kubernetes支持多 种类型的Volume,例如GlusterFS、Ceph等先进的分布式文件系统。

11.2.Volume类型

  • 1.emptyDir

一个emptyDir Volume是在Pod分配到Node时创建的。从它的名称就 可以看出,它的初始内容为空,并且无须指定宿主机上对应的目录文 件,因为这是Kubernetes自动分配的一个目录,当Pod从Node上移除 时,emptyDir中的数据也会被永久删除。

  • 2.hostPath

hostPath为在Pod上挂载宿主机上的文件或目录,容器应用程序生成的日志文件需要永久保存时,可以使用宿主 机的高速文件系统进行存储。

  • 3.gcePersistentDisk

使用这种类型的Volume表示使用谷歌公有云提供的永久磁盘
(Persistent Disk,PD)存放Volume的数据,它与emptyDir不同,PD上 的内容会被永久保存,当Pod被删除时,PD只是被卸载(Unmount), 但不会被删除。需要注意的是,你需要先创建一个PD,才能使用 gcePersistentDisk。

  • 4.awsElasticBlockStore

与GCE类似,该类型的Volume使用亚马逊公有云提供的EBS Volume存储数据,需要先创建一个EBS Volume才能使用 awsElasticBlockStore。

  • 5.NFS

使用NFS网络文件系统提供的共享目录存储数据时,我们需要在系 统中部署一个NFS Server。

12.Persistent Volume

12.1.Persistent Volume描述

Volume是被定义在Pod上的,属于计算资源的一部分, 而实际上,网络存储是相对独立于计算资源而存在的一种实体资源。比 如在使用虚拟机的情况下,我们通常会先定义一个网络存储,然后从中 划出一个“网盘”并挂接到虚拟机上。Persistent Volume(PV)和与之相 关联的Persistent Volume Claim(PVC)也起到了类似的作用。

12.2.PV与Volume区别

  • PV只能是网络存储,不属于任何Node,但可以在每个Node上 访问。
  • PV并不是被定义在Pod上的,而是独立于Pod之外定义的。
  • PV目前支持的类型包括:gcePersistentDisk、 AWSElasticBlockStore、AzureFile、AzureDisk、FC(Fibre Channel)、 Flocker、NFS、iSCSI、RBD(Rados Block Device)、CephFS、 Cinder、GlusterFS、VsphereVolume、Quobyte Volumes、VMware Photon、Portworx Volumes、ScaleIO Volumes和HostPath(仅供单机测 试)。

13.Namespace

13.1.Namespace描述

Namespace(命名空间)是Kubernetes系统中的另一个非常重要的概 念,Namespace在很多情况下用于实现多租户的资源隔离。Namespace 通过将集群内部的资源对象“分配”到不同的Namespace中,形成逻辑上 分组的不同项目、小组或用户组,便于不同的分组在共享使用整个集群 的资源的同时还能被分别管理。

14.Annotation

14.1.Annotation描述

Annotation(注解)与Label类似,也使用key/value键值对的形式进 行定义。不同的是Label具有严格的命名规则,它定义的是Kubernetes对 象的元数据(Metadata),并且用于Label Selector。Annotation则是用户 任意定义的附加信息,以便于外部工具查找。在很多时候,Kubernetes 的模块自身会通过Annotation标记资源对象的一些特殊信息。

14.2.Annotation使用场景

  • build信息、release信息、Docker镜像信息等,例如时间戳、 release id号、PR号、镜像Hash值、Docker Registry地址等。
  • 日志库、监控库、分析库等资源库的地址信息。
  • 程序调试工具信息,例如工具名称、版本号等。
  • 团队的联系信息,例如电话号码、负责人名称、网址等。

15.ConfigMap

15.1.ConfigMap描述

为了能够准确和深刻理解Kubernetes ConfigMap的功能和价值,我 们需要从Docker说起。我们知道,Docker通过将程序、依赖库、数据及 配置文件“打包固化”到一个不变的镜像文件中的做法,解决了应用的部 署的难题,但这同时带来了棘手的问题,即配置文件中的参数在运行期 如何修改的问题。我们不可能在启动Docker容器后再修改容器里的配置 文件,然后用新的配置文件重启容器里的用户主进程。为了解决这个问 题,Kubernetes提供了一种内建机制,将存储在etcd中的 ConfigMap通过Volume映射的方式变成目标Pod内的配置文件,不管目 标Pod被调度到哪台服务器上,都会完成自动映射。进一步地,如果 ConfigMap中的key-value数据被修改,则映射到Pod中的“配置文件”也会 随之自动更新。于是,Kubernetes ConfigMap就成了分布式系统中最为 简单(使用方法简单,但背后实现比较复杂)且对应用无侵入的配置中 心。

16.结束语

上述这些组件是Kubernetes系统的核心组件,它们共同构成了 Kubernetes系统的框架和计算模型。通过对它们进行灵活组合,用户就 可以快速、方便地对容器集群进行配置、创建和管理。


标签:容器,副本,Kubernetes,Volume,入门篇,Job,Pod,k8s
From: https://blog.51cto.com/u_15181572/6172650

相关文章

  • 使用 kubeadm 安装单 master kubernetes 集群
    配置要求检查centos/hostname检查网络安装docker及kubelet初始化master节点初始化worker节点获得join命令参数初始化worker常见错误原因移除worker节点并重试检查初始化结果安装IngressController配置要求对于Kubernetes初学者,在搭建K8S集群时,推荐在阿里云或......
  • 深度学习基础入门篇[三]:优化策略梯度下降算法:SGD、MBGD、Momentum、Adam、AdamW
    1.梯度下降算法(优化器)1.1原理解释如果我们定义了一个机器学习模型,比如一个三层的神经网络,那么就需要使得这个模型能够尽可能拟合所提供的训练数据。但是我们如何评价模型对于数据的拟合是否足够呢?那就需要使用相应的指标来评价它的拟合程度,所使用到的函数就称为损失函数(LossFu......
  • Kubernetes 如何安装 NFS-Subdir-External-Provisioner存储插件?
    一、搭建NFS服务器1、背景介绍Kubernetes对Pod进行调度时,以当时集群中各节点的可用资源作为主要依据,自动选择某一个可用的节点,并将Pod分配到该节点上。在这种情况下,Pod中容器数据的持久化如果存储在所在节点的磁盘上,就会产生不可预知的问题,例如,当Pod出现故障,Kubernetes......
  • 深度学习基础入门篇[二]:机器学习常用评估指标:AUC、mAP、IS、FID、Perplexity、BLEU、
    A.深度学习基础入门篇[二]:机器学习常用评估指标:AUC、mAP、IS、FID、Perplexity、BLEU、ROUGE等详解1.基础指标简介机器学习的评价指标有精度、精确率、召回率、P-R曲线、F1值、TPR、FPR、ROC、AUC等指标,还有在生物领域常用的敏感性、特异性等指标。在分类任务中,各指标的计算......
  • neondatabase 开源的k8s postgres autoscaling 工具
    autoscalingneondatabase开源的pg扩展工具(核心是解决neondatabase的一些问题),但是设计上有不少值得学习参考的地方参考架构  说明autoscaling设计上实现了自己的一个vm(支持在线迁移业务影响小),实现了自己的scheduler,也算是一个不错的k8s扩展开发参考项目参考资料......
  • 45、K8S-调度机制-节点调度之nodeAffinity、nodeName、nodeSelector
    Kubernetes学习目录1、配置解析1.1、简介我们知道,默认的调度策略有可能无法满足我们的需求,我们可以根据实际情况,定制自己的调度策略,然后整合到k8s的集群中。1.2、属性解析apiVersion:kubescheduler.config.k8s.io/v1beta1kind:KubeSchedulerConfigurationAlgorithmSou......
  • docker与k8s的区别
    docker:开源的应用容器引擎,允许开发人员将其应用和依赖打包成可移植的镜像,然后发布到任何流行的linux或windows机器上,也能实现虚拟化。kubernetes:谷歌开发的容器集群管理系统。在docker技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高......
  • K8s集群搭建问题
    警告CgroupDriver不一致节点加入集群会警告docker和kubelet的CgroupDriver不一致,但是暂未发现影响,如图:解决办法:修改docker的CgroupDriver为systemdvim/etc/docker/daemon.json加下面配置,注意在上一行配置后加逗号。"exec-opts":["native.cgroupdriver=syst......
  • 在Linux内网搭建K8s集群
    前言本文讲述在Linux内网搭建K8s集群详细步骤,解决搭建过程中的问题。脚本基本可以不修改直接使用。准备工作需要LinuxCentOS7.x两台及以上,本文用的7.6。主机要求有2个核心及以上。安装步骤多个节点可以并行操作,默认所有操作各节点都要执行,某些操作仅主/工作节点执行在标......
  • 四、kubernetes-存储抽象
    1.先搭建nfs服务器2.每台节点都挂载nfs目录文件夹3.使用原生方式挂载的nfs数据,在pod删除后数据不会删除服务器原生方式挂载,将/usr/share/nginx/html挂载到nfs文件夹下apiVersion:apps/v1kind:Deploymentmetadata:labels:app:nginx-pv-demoname:nginx-pv-de......