k8s~service和deployment中的spec.selector
service和deployment中的spec.selector
在 Kubernetes 中,Service
和 Deployment
的 spec.selector
在使用上是有一些不同之处的,下面是对这两者的详细解释:
1. Deployment 中的 Selector
在 Deployment
中,spec.selector
是必需的,并且通常使用 matchLabels
来定义选择器。例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-container
image: my-image
在这个例子中,spec.selector.matchLabels.app
用于指定该 Deployment 应该管理哪些 Pods。它确保 Deployment 知道自己应该控制哪些 Pod 的生命周期。
2. Service 中的 Selector
而在 Service
中,spec.selector
可以直接使用键值对,不需要嵌套在 matchLabels
中。例如:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
在这个例子中,spec.selector.app
直接指定了要路由到的 Pods 的标签,这些 Pods 会根据 app: my-app
的标签进行选择。
总结
- Deployment 的
spec.selector
使用matchLabels
是为了更明确地定义选择器,便于扩展和复杂选择。 - Service 的
spec.selector
则可以直接使用简单的键值对形式,这是因为 Service 的选择逻辑相对简单,主要关注于将流量导向特定标签的 Pods。
因此,你不需要在 Service
中使用 matchLabels
,直接使用键值对即可。希望这个解释能帮助你理解 Kubernetes 中 Service
和 Deployment
的选择器用法!
matchLabels和matchExpressions
在 Kubernetes 中,selector
除了使用 matchLabels
之外,还可以使用 matchExpressions
。这两种方式可以结合使用,以提供更灵活的选择器功能。
1. matchLabels
matchLabels
是一种简单的选择器,它允许你通过精确匹配标签来选择 Pods。例如:
selector:
matchLabels:
app: my-app
这个选择器会选择所有具有标签 app=my-app
的 Pods。
2. matchExpressions
matchExpressions
提供了更复杂的选择逻辑,可以使用以下操作符:
In
: 匹配指定的值列表中的任意一个。NotIn
: 不匹配指定的值列表。Exists
: 检查标签是否存在。DoesNotExist
: 检查标签是否不存在。Gt
: 大于某个数值(适用于数字类型的标签)。Lt
: 小于某个数值(适用于数字类型的标签)。
示例
下面是一个使用 matchExpressions
的示例:
selector:
matchExpressions:
- key: app
operator: In
values:
- my-app
- key: environment
operator: NotIn
values:
- dev
在这个例子中,选择器会选择所有具有标签 app=my-app
且不属于 environment=dev
的 Pods。
3. 组合使用
你可以同时使用 matchLabels
和 matchExpressions
来构建复杂的选择条件,例如:
selector:
matchLabels:
app: my-app
matchExpressions:
- key: environment
operator: NotIn
values:
- dev
总结
- matchLabels: 简单的键值对匹配。
- matchExpressions: 更复杂的条件匹配,支持多种操作符。
这两者可以根据具体需求结合使用,使得 Kubernetes 的资源选择更加灵活和强大。希望这些信息对你有帮助!
k8s~service和deployment中的spec.selector的更多相关文章
- Deployment.spec.selector.matchLables实验解释
原文:https://cloud.tencent.com/developer/article/1394657 Deployment.spec.selector.matchLables实验解释 作者: ...
- K8s Service原理介绍
Service的工作方式有三种: 第一种: 是Userspace方式 如下图描述, Client Pod要访问Server Pod时,它先将请求发给本机内核空间中的service规则,由它再将请求, ...
- 使用nginx 正向代理暴露k8s service && pod ip 外部直接访问
有时在我们的实际开发中我们希望直接访问k8s service 暴露的服务,以及pod的ip 解决方法,实际上很多 nodeport ingress port-forword 实际上我们还有一种方法:正 ...
- k8s service对象
k8s service对象 概述 service服务也是Kubernetes里核心字眼对象之一,Kubernetes里的每一个service其实就是我们经常提起的微服务架构中的一个微服务,之前讲解 ...
- k8s service NodePort 方式向外发布
k8s service NodePort 方式向外发布 k8s 无头service 方式向内发布 k8s service 服务发现 {ServiceName}.{Namespace}.svc.{Clu ...
- k8s service不能访问排错
简介 对于新安装的 Kubernetes,经常出现的一个问题是 Service 没有正常工作.如果您已经运行了 Deployment 并创建了一个 Service,但是当您尝试访问它时没有得到响应,希 ...
- 对k8s service的一些理解
服务service service是一个抽象概念,定义了一个服务的多个pod逻辑合集和访问pod的策略,一般把service称为微服务 举个例子一个a服务运行3个pod,b服务怎么访问a服务的pod, ...
- k8s学习 - 概念 - Deployment
k8s学习 - 概念 - Deployment 有了 ReplicaSet 还需要有 Deployment 的原因是希望有一个控制器能管理部署更新时候的版本控制问题.一个 Deployment 可以管 ...
- 国内不fq安装K8S四: 安装过程中遇到的问题和解决方法
目录 4 安装过程中遇到的问题和解决方法 4.1 常见问题 4.2 常用的操作命令 4.3 比较好的博客 国内不fq安装K8S一: 安装docker 国内不fq安装K8S二: 安装kubernet 国 ...
- k8s Service学习
service的概念 kubernetes service定义了一个抽象概念,一个pod的逻辑分组,一种可以访问的策略---通常称为服务.这组pod能够被service访问到,通常通过label se ...
随机推荐
- ASP.NET Core Library – CsvHelper
前言 平常都是用 Excel 的多, 但这一次遇到 Google Ads. 谷歌嘛, 当然不喜欢微软的 Excel. 硬是要求 CSV. 没办法, 只能找 Library 搞一搞了. 参考 Docs ...
- .NEET跨平台绘图基础库--SkiaSharp
SkiaSharp 是一个跨平台的 2D 图形 API,用于 .NET 平台,基于 Google 的 Skia 图形库.它提供了全面的 2D API,可以在移动.服务器和桌面模型上渲染图像.SkiaS ...
- 将 LLMs 精调至 1.58 比特: 使极端量化变简单
随着大语言模型 (LLMs) 规模和复杂性的增长,寻找减少它们的计算和能耗的方法已成为一个关键挑战.一种流行的解决方案是量化,其中参数的精度从标准的 16 位浮点 (FP16) 或 32 位浮点 (F ...
- laravel框架接口
下面是增删改查的接口,在使用过程中按自己需求对代码进行更改 控制器代码 <?php namespace App\Http\Controllers; use App\Models\Fang; us ...
- springmvc参数传递不给参数值默认值设置方法
@RequestMapping("hello") public voiid test001(@RequestParam(defaultValue = "11") ...
- package.json文件干什么的 ?
package.json 是项目描述文件,记录了当前项目的信息,比如项目的名字,版本,作者,还有所依赖的第三方模块 : dependencies 是项目依赖,是项目上线时要依赖的第三方包 : devd ...
- spring cloud openfeign源码分析
大体流程鱼骨图 1.读取配置 启动类上添加注解@EnableFeignClients,工程启动后会自动读取注解上的配置 1 @Retention(RetentionPolicy.RUNTIME) 2 ...
- 深入理解Java并发读写锁——ReentrantReadWriteLock
ReentrantReadWriteLock使用场景 ReentrantReadWriteLock 是 Java 的一种读写锁,它允许多个读线程同时访问,但只允许一个写线程访问(会阻塞所有的读写线程) ...
- Edge缓存清理操作说明
1. 打开Edge浏览器 2. 点击屏幕右上角三个点的按钮 3. 在出现的菜单里面选择"设置" 4. 在出现页面里面左侧选择"隐私.搜索和服务",然后右侧点击& ...
- go高并发之路——本地缓存
一.使用场景 试想一个场景,有一个配置服务系统,里面存储着各种各样的配置,比如直播间的直播信息.点赞.签到.红包.带货等等.这些配置信息有两个特点: 1.并发量可能会特别特别大,试想一下,一个几十万人 ...