首页 > 其他分享 >k8s~关于非常啰嗦的标签和选择器

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

时间:2024-12-04 15:23:25浏览次数:4  
标签:Service 标签 app nginx 啰嗦 Deployment k8s Pods 选择器

总感觉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-deployment
  labels:
    app: nginx
spec:
  replicas: 1  # 设置副本数为 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:stable-alpine  # 使用最新的 Nginx 镜像
        ports:
        - containerPort: 80   # 容器内部的端口
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  type: ClusterIP  # 使用 ClusterIP 类型
  selector:
    app: nginx  # 根据标签选择 Pod
  ports:
    - 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。

标签:Service,标签,app,nginx,啰嗦,Deployment,k8s,Pods,选择器
From: https://www.cnblogs.com/lori/p/18586395

相关文章

  • H5-23 关系选择器
    关系选择器分为:后代选择器、子代选择器、相邻兄弟选择器、通用兄弟选择器1、后低选择器定义:选择所有被E元素包含的F元素,中间用空格隔开语法:       EF{} <ul>  <li>1</li>  <li>2</li>  <li>3</li>......
  • k8s阶段05 Operator, DaemonSet, Job, CronJob, Ingress和Ingress Controller(蓝绿/恢
    StatefulSet:编排有状态应用基本要求:需要给每个实例惟一且固定的标识,依赖于一个专用的HeadlessService;需要给每个实例一个专用的PVC卷,该卷要来自volumeTemplateClaim,卷的标识“template_name-pod_name”;PodManagementPolicy:OrderedReady:按顺序,依次......
  • H5-18 选择器2
    1、ID择器选针对某一个特定的标签来使用,只能使用一次。css中的ID选择器以#来定义 <Pid="c">111</P>#c{          color:red;      font-size:30px;    }特别强调ID是唯一的ID不能以数字开头2......
  • 你有没有使用过“形似猫头鹰”(例:`* + *{ ... }`) 的选择器?
    是的,我知道你在说哪种选择器。虽然它被戏称为“形似猫头鹰”,但它实际上是由几个不同的CSS选择器组合而成的,并没有一个单独的“猫头鹰选择器”。你指的可能是以下几种情况,或者它们的组合:通用选择器(*)+相邻兄弟选择器(+)+元素选择器/类选择器/ID选择器等:这通常用......
  • 为什么说css中能用子代选择器的时候不要用后代选择器?
    在CSS中,提倡尽可能使用子代选择器(>)而不是后代选择器(空格),主要是因为性能和可预测性方面的原因:性能更高:子代选择器只选择直接子元素,而后代选择器会选择所有后代元素,包括子元素、孙元素等等。这意味着使用后代选择器时,浏览器需要遍历更多的DOM节点来确定匹配的元素,尤其在......
  • H5-17 选择器
    CSS语法规则由两个主要的部分构成:选择器,以及一条或多条声明(样式)1、全局选择器可以与任何元素匹配,优先级最低,一般做样式初始化*{margin:0;padding:0;} 2、元素选择器HTML文档中的元素,p、b、div、a、img、body等标签选择......
  • css中的选择器、属性、属性值区分大小写吗?
    在CSS中,选择器、属性和属性值(除了少数例外)是区分大小写的。这意味着:选择器区分大小写:#myId和#myid会选择不同的元素。div和DIV会选择相同的元素(HTML标签名不区分大小写)。.myClass和.MyClass会选择不同的元素。属性区分大小写:color:red;和Color:r......
  • k8s诊断与故障排除宝典-Kubernetes运维必备
    这篇文章是一份全面的指南,旨在帮助用户使用kubectl命令行工具来诊断Kubernetes集群中的各种问题,覆盖了从基础的集群信息获取到复杂的故障排除场景,包括但不限于以下几个方面:集群信息:获取Kubernetes版本、集群信息、节点列表、命名空间等关键信息。Pod诊断:列出和描述......
  • 【CSS】我将选择器发挥到极致
    复合选择器后代选择器(空格分隔)概念后代选择器用于选择一个元素内部的所有指定后代元素,这些后代元素可以是子元素、孙元素或者更深层次嵌套的元素。它基于元素在文档结构中的嵌套关系来选择。祖先元素后代元素,中间用空格隔开。例如,“divp”<div><p>这是一个段落......
  • K8S 拉取私有仓库镜像
    K8S拉取私有仓库镜像在使用Kubernetes(k8s)从私有仓库拉取镜像时,会出现无法拉去镜像的情况,私有仓库需要认证才能访问,如果Kubernetes无法通过认证,就会导致拉取失败,这时我们就需要手动创建私有仓库的登录信息。省流版#创建secret#【harbor-docker】自定义名称#【--namespa......