首页 > 其他分享 >Kubernetes中Deployment、ReplicaSet、Pod、Service的概念及关系

Kubernetes中Deployment、ReplicaSet、Pod、Service的概念及关系

时间:2023-06-13 18:55:17浏览次数:39  
标签:ReplicaSet Service Label Deployment pod Pod name

Kubernetes中Deployment、ReplicaSet、Pod、Service的概念及关系

  • Pod:k8s管理的最小单位,包括一个或多个容器,是提供实际业务服务的组件。
  • ReplicaSet:是Pod的管理控制组件,监控Pod的健康状况,保障Pod按照用户的期望去运行。rs是ReplicationController组件的升级版,增加了标签选择器的范围选择功能。
  • Deployment:可管理ReplicaSet、Pod,实现Pod应用的滚动升级和回滚、扩容和缩容。
  • Service:集群中Pod的数量和访问地址可能是变化的,这些Pod中的业务应用需要对外提供服务,可通过Service对外提供统一服务地址,Service通过标签选择器,匹配一组提供服务的Pod,从而对客户端隔离了后端Pod的变化。

一、Pod

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。Pod中包含了一个或多个容器,还包括了存储、网络等各个容器共享的资源。Pod支持多种容器环境,Docker则是最流行的容器环境。
简单来说k8s不想直接操作container,因为操作container的事情是docker来做的,k8s中要有自己的最小操作单位,称之为Pod。说白了,Pod就是一个或多个Container的组合。

每个Pod中都有一个pause容器,pause是Kubernetes基础设施的一部分,Kubernetes管理的所有pod里,pause容器是第一个启动的,用于实现Kubernetes集群里pod之间的网络通讯。

二、ReplicaSet

ReplicaSet 的目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的 Pod 的可用性。(确保任何时间都有指定数量的 Pod 副本在运行)
先说下Replication Controller。Replication Controller的作用是确保Pod以指定的副本个数运行。
ReplicaSet是Replication Controller升级版。ReplicaSet和Replication Controller之间的唯一区别是对选择器支持。Replication Controller只支持基于等式的selector(env=dev或environment!=qa),但ReplicaSet还支持新的,基于集合的selector(version in (v1.0,v2.0)或env notin (dev, qa))

2.1 Label(标签)

Label是Kubernetes系统中的一个核心概念。
Label以key/value键值对的形式附加到各种对象上,如Pod、Service、RC、Node等。
Label定义了这些对象的可识别属性,用来对它们进行管理和选择。Label可以在创建时附加到对象上,也可以在对象创建后通过API进行管理。

2.2 Label Selector(标签选择器)

在为对象定义好Label后,其他对象就可以使用Label Selector(选择器)来定义其作用的对象了。
Label Selector的定义由多个逗号分隔的条件组成。

“labels”: {
“key1”: “value1”,
“key2”: “value2”
}

当前有两种Label Selector:
基于等式的(Equality-based)和基于集合的(Set-based),在使用时可以将多个Label进行组合来选择。

  1. 基于等式的Label Selector使用等式类的表达式来进行选择:
    name = redis-slave: 选择所有包含Label中key="name"且value="redis-slave"的对象;
    env != production: 选择所有包括Label中的key="env"且value不等于"production"的对象。

  2. 基于集合的Label Selector使用集合操作的表达式来进行选择:
    name in (redis-master, redis-slave): 选择所有包含Label中的key="name"且value="redis-master"或"redis-slave"的对象;
    name not in (php-frontend): 选择所有包含Label中的key=“name"且value不等于"php-frontend"的对象。
    ps:在某些对象需要对另一些对象进行选择时,可以将多个Label Selector进行组合,使用逗号”,"进行分隔即可。
    基于等式的LabelSelector和基于集合的Label Selector可以任意组合。
    例如:
    name=redis-slave,env!=production
    name not in (php-frontend),env!=production

三、Deployment

Deployment用于管理Pod、ReplicaSet,可实现滚动升级和回滚应用、扩容和缩容。

四、Service

试想一个问题,ReplicaSet定义了pod的数量是2,当一个pod由于某种原因停止了,ReplicaSet会新建一个pod,以确保运行中的pod数量始终是2。但每个pod都有自己的ip,前端请求不知道这个新pod的ip是什么,那前端的请求如何发送到新pod中呢?
答案是使用Service

k8s的Service定义了一个服务的访问入口地址,前端的应用通过这个入口地址访问其背后的一组由Pod副本组成的集群实例,来自外部的访问请求被负载均衡到后端的各个容器应用上。Service与其后端Pod副本集群之间则是通过Label Selector实现关联。
简单来说前端请求不是直接发送给Pod,而是发送到Service,Service再将请求转发给pod。

上图可能太抽象,我们可以看看下面这张图。
假设我们把一个服务做了高可用,这个服务分别部署在了两个节点上,当我们想访问该服务时,则此时访问的不是pod而是service,service会再给我们做负载均衡。

k8s中的service中有三种类型:

  • ClusterIP:提供一个集群内部的虚拟IP以供Pod访问。
  • NodePort:在每个Node上打开一个端口以供外部访问。
  • LoadBalancer:通过外部的负载均衡器来访问。

五、总结

Pod里是容器,Pod被ReplicaSet管理,ReplicaSet控制pod的数量;ReplicaSet被Deployment管理,Deployment控制pod应用的升级、回滚,当然也能控制pod的数量。Service提供一个统一固定入口,负责将前端请求转发给Pod。
deployment和service yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

---

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 81   
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort

Deployment

① apiVersion 是当前配置格式的版本。
② kind 是要创建的资源类型,这里分别创建了Deployment和Service。
③ metadata 是该资源的元数据,name 是必需的元数据项。
④ spec 部分是 Deployment 的规格说明。
⑤ replicas 指明副本数量,默认为 1。
⑥matchLabels 指匹配的pod的标签是什么。
⑦ template 定义 Pod 的模板,这是配置文件的重要部分。
⑧ metadata 定义 Pod 的元数据,至少要定义一个 label。label 的 key 和 value 可以任意指定。
⑨ spec 描述 Pod 的规格,此部分定义 Pod 中每一个容器的属性,name 和 image 是必需的。

Service

① port Service 服务暴露的端口
② targetPort 容器暴露的端口
③ type Service的类型

标签:ReplicaSet,Service,Label,Deployment,pod,Pod,name
From: https://www.cnblogs.com/JaxYoun/p/17478501.html

相关文章

  • Android的服务Service
    Android学了太久了,都忘了。复习下四大组件之一的Service。介绍Android的Service是一种在后台执行长时间运行操作的组件,它可以在没有用户界面的情况下执行任务,并且可以与应用程序的其他组件进行通信。Service通常用于处理网络请求、音乐播放、数据同步等需要在后台持续运行的任务......
  • HP 288G9 主机安装Esxi6.7报错Shutting down firmware services Using simple offset'
    ShuttingdownfirmwareservicesUsingsimpleoffset'UEFIRTSmappingpolicy找了好多方法都不行,尝试1:添加ignoreHeadless=TRUE参数也没救回我电脑,失败尝试2:BIOS中将PCI64bitResourcesHandling里的Above4GDecoding,找不到失败尝试3:PC主板里有一个设置选项叫CSM兼容性......
  • 使用C#的WebService实现客户端软件的更新
    由于项目原因,要实施的客户离作者太远,考虑提供软件的在线升级功能.我们如何实现呢!先讲下思路.思路:先实现WEB端的开发,主要考虑使用WEBService技术,提供远程服务的调用函数,返回一个文件的字节内容,然后写一个升级程序客户端,分发给客户使用的机器中,(可以随客户的软件一起安装).......
  • 基于.NET的Web Service技术的分布式异构数据库的集成
    摘要:本文分析了WebService的特点,提出了一种基于Microsoft.NET的WebService技术访问分布异构数据库的体系结构,并采用.NET技术实现了原型系统。在原型系统中,使用WebService将分布于Internet上的不同的数据库系统中的数据集成,向访问数据库的应用程序提供统一的数据操作接口,实现......
  • Controller 对应 Service 操作的命名【经验】
    结构层查询新增删除修改ControllerfindaddremovemodifyServiceselectinsertdeleteupdate......
  • Kubernetes Service的研究
    一、Service资源基础1.1介绍在Kubernetes中,Pod资源是应用程序的载体,我们可以通过Pod的ip来访问应用程序,但是Pod的ip地址不是固定的,这就意味着不方便直接采用Pod的ip对服务进行访问。   为了解决这个问题,Kubernetes提供了Service资源,Service会对提供同一个服务的多个Pod进行......
  • service层
    AnswerServicepackagecom.example.academicadministration.service;importcom.example.academicadministration.dao.AnswerDao;importcom.example.academicadministration.pojo.Answer;importorg.springframework.beans.factory.annotation.Autowired;importorg.sp......
  • 使用Axis开发Web Service程序
    今天是感恩节,差点又要在公司加班了。好在WebService程序并不是特别难搞,下午终于在eclipse下调通过了,正确产生了服务器端和客户端的Java代码,apache的东西的确很不错。说道WebService的程序开发,八个月前我加班调试公司和中国电信的商务领航系统的接口的时候,用的就是WebService......
  • webservice: Could not initialize Service NoSuchMethodException getPortClassMap()
    webservicejaxws webservice中碰到的问题:CouldnotinitializeServiceNoSuchMethodExceptiongetPortClassMap()情况如下:A应用是用jaxws编写的webservice客户端,单独运行该客户端成功。B应用是基于xfire的webservice服务,在B中调用A,结果在构造一个Service类的似乎出了上......
  • OpenHarmony系统之Service代码一键生成工具介绍
    作者:苟晶晶前言当开发者为OpenHarmony系统框架开发某些功能时,有时需要将这个功能包装成一个独立的服务进程运行在系统中,为了其它应用进程能够调用此服务,开发人员需要基于系统IPC通信框架编写一套远程接口调用实现。实现Service远程调用接口需要开发人员熟悉IPC通信框架,了解proxy/......