k8s~关于非常啰嗦的标签和选择器

news/2024/12/4 15:15:04/文章来源:https://www.cnblogs.com/lori/p/18586395

总感觉k8s中定义的deplyment和service非常的啰嗦,尤其是在选择器的定义上,但没办法,它的设计总有它的道理。

  • svc(spec.selector.app)
    • deployment(metadata.labels.app,spec.selector.matchLabels.app)
      • pods(metadata.labels.app)

nginx的部署

下面是一个 Kubernetes YAML 文件示例,用于部署一个 Nginx 服务。该文件包括 Deployment 和 Service 的定义,Service 类型设置为 ClusterIP。

Nginx 部署 YAML 示例

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 1  # 设置副本数为 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:stable-alpine  # 使用最新的 Nginx 镜像ports:- containerPort: 80   # 容器内部的端口
---
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: ClusterIP  # 使用 ClusterIP 类型selector:app: nginx  # 根据标签选择 Podports:- port: 80          # Service 的端口targetPort: 80    # 转发到容器的端口

说明

  • Deployment

    • apiVersion: apps/v1:指定 API 版本。
    • kind: Deployment:表示这是一个 Deployment 对象。
    • metadata:包含对象的元数据,如名称和标签。
    • spec:定义 Deployment 的规格,包括副本数量、选择器和 Pod 模板。
    • replicas:设置运行的 Pod 副本数量。
    • selector:用于选择与 Deployment 相关的 Pods。
    • template:定义 Pod 的模板,包括元数据和容器规格。
    • containers:定义容器的名称、镜像和要暴露的端口。
  • Service

    • apiVersion: v1:指定 API 版本。
    • kind: Service:表示这是一个 Service 对象。
    • metadata:包含对象的元数据,如名称。
    • spec:定义 Service 的规格,包括类型、选择器和端口配置。
    • type: ClusterIP:指定 Service 类型为 ClusterIP,表示只在集群内部可访问。
    • selector:根据标签选择与之关联的 Pods。
    • ports:定义 Service 的端口和目标端口。

部署步骤

  1. 将上述 YAML 内容保存到一个文件中,例如 nginx-deployment.yaml

  2. 使用以下命令在 Kubernetes 集群中应用该配置:

    kubectl apply -f nginx-deployment.yaml
    
  3. 检查 Deployment 和 Service 是否成功创建:

    kubectl get deployments
    kubectl get services
    

通过以上步骤,你将能够在 Kubernetes 中成功部署一个 Nginx 服务,并通过 ClusterIP 类型的 Service 来访问它。如果你有其他问题或需要进一步的帮助,请随时告诉我!

关于特别啰嗦的labels的解释

在 Kubernetes 中,Deployment 的定义中确实存在多个地方使用了相同的标签(如 metadata.labels.app=nginx),这有其特定的目的和意义。下面是对这些标签的详细解释及其用意:

1. Metadata Labels

  • 位置:在 metadata 部分。
  • 作用
    • 用于为 Deployment 对象本身打标签,这些标签可以用于标识、选择或组织 Kubernetes 对象。
    • 可以通过这些标签来查询和过滤 Deployment 对象,例如使用 kubectl get deployments -l app=nginx 来列出所有带有 app=nginx 标签的 Deployments。
    • 在service定义时,它的spec.selector.app会指向被关联的deployment的.metadata.labels.app的名字

2. Spec Selector

  • 位置:在 spec.selector 部分。
  • 作用
    • 定义了该 Deployment 控制器所管理的 Pods 的选择标准。
    • Kubernetes 使用此选择器来确定哪些 Pods 是由这个 Deployment 创建和管理的。
    • 选择器中的标签必须与 Pods 的标签匹配,以确保 Deployment 能够正确地找到和管理这些 Pods。

3. Template Metadata Labels

  • 位置:在 template.metadata.labels 部分。
  • 作用
    • 定义将要创建的 Pods 的标签。
    • 当 Deployment 创建 Pods 时,这些标签会被附加到新创建的 Pods 上。
    • 这些标签用于与 spec.selector 中定义的选择器进行匹配,从而使 Deployment 能够跟踪并管理这些 Pods。

为什么要重复定义?

  1. 一致性

    • Deployment 的不同部分使用相同的标签确保了它们之间的一致性。这种一致性对于 Kubernetes 的操作至关重要,因为它依赖于这些标签来管理对象。
  2. 可管理性

    • 通过使用相同的标签,可以更方便地进行筛选和管理。例如,你可以快速找到所有与特定应用程序(如 nginx)相关的 Deployments、Pods 和 Services。
  3. 避免错误

    • 确保 Pods 的标签与 Deployment 的选择器相匹配,可以避免由于标签不一致导致的管理问题。如果选择器未能正确匹配 Pods,Deployment 将无法管理这些 Pods。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/846680.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows11中安装SQL Server 2019

介绍 Microsoft SQL Server 是一种关系数据库管理系统 (RDBMS)。 应用程序和工具连接到 SQL Server 实例或数据库,并使用 Transact-SQL (T-SQL) 进行通信。 SQL Server Management Studio (SSMS) 是一种集成环境,用于管理任何 SQL 基础结构。 使用 SSMS 访问、配置、管理和开…

python项目安装虚拟环境

滴水成冰,世间不存在毫无意义的付出,时间终会给你答案。

边坡检测解决方案,根据实际需求来定制方案

大家好,我是星创易联的林工。今天跟大家聊一聊我们做边坡监测的那些事儿。 ​ (参考:key-iot.com.cn ) 说到边坡监测啊,最重要的就是安全。我们公司这些年一直在这个领域深耕,积累了不少经验。来,我给大家详细说说我们是怎么做的。 首先啊,我们要先摸清楚这个边坡的脾气。用我…

【科普系列】ICMPv6协议基础简介

引言在科普介绍文章《IPv6协议—互联网通信协议第六版》中介绍了IPv6协议,这次的科普主题是ICMPv6(Internet Control Message Protocol version 6),它作为IPv6网络中的核心协议之一,是网络通信中不可或缺的一部分。ICMPv6的设计继承了IPv4中ICMPv4协议的基本功能,然而,它…

ELK常用命令

# 查询 logstash ps -ef|grep logstash # elastic ps -ef|grep elastic # kibana ps -ef|grep kibana# 关闭服务,根据线程id进行kill kill -9 {#线程id}# 进入目录 cd /opt/elk7.17/ # 查看logstash日志 tail -f /opt/elk7.17/logstash/output.log tail -n 1000 logstash/…

三星硬盘维修数据恢复

常见原因: 误删除文件:用户在清理文件时不小心将重要文件误删。 硬盘格式化:用户格式化整个硬盘而忘记提前备份重要数据。 文件系统损坏:导致硬盘中的数据无法正常读取,通常表现为移动硬盘连接电脑后无法识别或提示格式化。 物理损坏:如硬盘摔落、进水、硬盘内部元件损坏…

哪些CRM系统在2024年赢得了国内市场?

在2024年,国内CRM市场呈现出新的发展趋势,其中智能化、体系化和平台化成为主流方向。随着企业数字化转型的加速和对客户关系管理的日益重视,CRM系统的重要性愈发凸显。 在这一背景下,纷享销客等业内领先的供应商依然处于市场前列,凭借其强大的功能和优质的服务赢得了广泛的…

从Delphi到Lazarus——Lazarus编程时可以使用的组件(控件)

0.前言 使用过可视化编程的人都知道在编程时组件的重要性。可以使用的组件越多,编程越方便快捷。 理论上,Delphi中的所有组件在Lazarus中都可以使用。当然,在Windows编程时多数是可以直接使用的,有些需要做适当的修改才能使用。而在Unix或Linux下编程就有些不能使用了,这涉…

# 20222309 2024-2025-1 《网络与系统攻防技术》实验7实验报告

1.实验内容 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法。具体实践有 (1)简单应用SET工具建立冒名网站 (2)ettercap DNS spoof (3)结合应用两种技术,用DNS spoof引导特定访问到冒名网站。 2.实验过程 (1)简单应用SET工具建立冒名网站…

为什么许多项目经理根本无法实现数字化转型?你做对了吗?

在当今数字化时代,数字化转型对于项目经理而言至关重要。随着科技的飞速发展,企业越来越依赖数字化手段来提高效率、降低成本、增强竞争力。项目经理作为项目的核心领导者,其在数字化转型中的作用不可忽视。然而,当前许多项目经理却难以实现数字化转型,这一现象值得我们深…

项目经理必学的6个工具,这些知识能否帮你避免项目管理崩溃?

在当今复杂多变的商业环境中,项目管理的重要性日益凸显。项目经理作为项目的核心领导者,承担着确保项目成功的重大责任。他们需要协调各方资源,把控项目进度、质量和成本,以实现项目的既定目标。一个成功的项目不仅能够为企业带来丰厚的经济效益,还能提升企业的市场竞争力…

多籽西瓜

一斤的西瓜,八两的籽,哈哈哈哈哈哈,这运气也是没谁了🤣恭喜你发现了宝藏,听风看云,做个懒骨头~