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 ...
随机推荐
- Spring —— bean生命周期
bean生命周期 生命周期:从创建到消亡的完整过程 bean生命周期:bean从创建到销毁的整体过程 bean生命周期控制:在bean创建后到销毁前做一些事情 方式一:配置控制生命周期 <b ...
- 信创环境经典版SuerMap iManager启动崩溃
一.问题环境 操作系统:银河麒麟kylin V10 CPU:鲲鹏920 SuperMap iManager 10.2.1 硬件:16H64G机器 二.现象 磁盘和内存都有空闲,首次启动SuperMap ...
- 《Vue.js 设计与实现》读书笔记 - 第10章、双端 Diff 算法
第10章.双端 Diff 算法 10.1 双端比较的原理 上一章的移动算法并不是最优的,比如我们把 ABC 移动为 CAB,如下 A C B --> A C B 按照上一章的算法,我们遍历新的数 ...
- 共124篇!墨天轮“高可用架构”干货文档分享(含Oracle、MySQL、PG)
大家期待的高可用篇来啦!在上期<墨天轮高分技术文档分享-Oracle升级迁移篇>中大家对数据库高可用架构相关文档呼声较高,这不就来啦! 数据库的高可用架构能够在发生宕机或意外中断等故障时起 ...
- 反射获取Exception的所有类
var test = "test"; $"{test} 喜喜".Dump(); // 反射 var types = Assembly .GetAssembly( ...
- druid连接池报错:sql injection violation, multi-statement not allow
druid连接池报错:sql injection violation, multi-statement not allow 需要配置druid的 multi-statement-allow属性为tru ...
- 基于 KubeSphere 部署 KubeBlocks 实现数据库自由
作者:尹珉, KubeSphere Contributor & Ambassador,KubeSphere 社区用户委员会杭州站站长. KubeSphere 是什么? KubeSphere 是 ...
- 倒计时 3 天!10.23 相约杭州,云原生 Meetup 等你来!
云原生技术交流 Meetup 杭州站开启,快来报名吧! 活动简介 随着云原生技术的普及,整个市场已经变成了节奏非常快的软件驱动型市场,使用云原生技术栈来迭代发布应用已经成为常态,但是如何更好的应用云原 ...
- KubeSphere 部署 Zookeeper 实战教程
前言 知识点 定级:入门级 如何利用 AI 助手辅助运维工作 单节点 Zookeeper 安装部署 集群模式 Zookeeper 安装部署 开源应用选型思想 实战服务器配置(架构 1:1 复刻小规模生 ...
- Linux基础常识
1 什么是shell shell是Linux系统的用户界面,提供了用户与内核交互的一种接口,它接收用户输入的命令并到送到内核去执行,因此也被称为Linux的命令解释器. 显示系统当前使用的shell ...