K8S 哲学 - yaml文件

selector:

Pod 对象不应该有 selector 字段。selector 字段通常用于 ServiceDeploymentReplicaSet 等对象,用于选择匹配的 Pod。在 Pod 对象中,这个字段是无效的

apiVersion: apps/v1
kind: Deployment
metadata:
  name: gyk
  labels:  
    age: "18"
    gender: "man"
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pod-demo
  template:
    metadata:
      labels:
        app: pod-demo
    spec:
      containers:
      - name: pod-demo
        image: nginx:1.14.2
        command: ['sh', '-c', 'curl 127.0.0.1:80']
        workingDir: /gyk/pod-demo
        ports:
        - name: http
          containerPort: 80 
          protocol: TCP

  1. matchLabels:这是 Kubernetes 选择器(Selector)的一部分,用于确定哪些 Pod 属于这个 Deployment。在这个例子中,任何带有标签 app: pod-demo 的 Pod 都会被视为这个 Deployment 的一部分。这意味着 Deployment 在创建新的 Pod 时会添加这个标签,并且在确定要更新哪些 Pod 时会查找带有这个标签的 Pod。

  2. template:这是 Deployment 的一部分,定义了 Deployment 创建的 Pod 的模板。这个模板包含了 Pod 的 metadata 和 spec

    • metadata:这是 Pod 的元数据,包含了 Pod 的标签和注解。在这个例子中,每个由这个 Deployment 创建的 Pod 都会带有 app: pod-demo 的标签。

    • spec:这是 Pod 的规格,定义了 Pod 的内容,例如容器、卷等。在这个例子中,每个 Pod 包含一个名为 pod-demo 的容器,这个容器使用 nginx:1.14.2 镜像,并监听 80 端口。

 

在 Kubernetes 中,DeploymentReplicaSet 和 Pod 是三个核心的资源对象,它们之间的关系如下:

  • Deployment:这是最高级别的对象,用于管理一组基本相同的 Pod。Deployment 会确保在任何时候都有指定数量的 Pod 在运行。如果一个 Pod 崩溃或被删除,Deployment 会创建一个新的 Pod 来替换它。Deployment 还可以用于更新 Pod 的版本,例如更改 Pod 使用的 Docker 镜像。

  • ReplicaSet:这是 Deployment 创建的对象,用于确保在任何时候都有指定数量的 Pod 副本在运行。每个 Deployment 都会创建一个或多个 ReplicaSet,每个 ReplicaSet 管理一组版本相同的 Pod。当 Deployment 更新 Pod 的版本时,它会创建一个新的 ReplicaSet,并逐渐增加新 ReplicaSet 的大小,同时减少旧 ReplicaSet 的大小,直到新 ReplicaSet 完全替代了旧 ReplicaSet。

  • Pod:这是 Kubernetes 中最小的部署单元,每个 Pod 包含一个或多个容器。Pod 可以由 Deployment 或 ReplicaSet 创建,也可以直接由用户创建。每个由 Deployment 或 ReplicaSet 创建的 Pod 都会带有一些标签,这些标签用于让 Deployment 或 ReplicaSet 识别它管理的 Pod。

在你的 YAML 文件中,你定义了一个 Deployment,它有一个 replica,这意味着 Kubernetes 会确保始终有一个 Pod 在运行。这个 Pod 的配置在 template 字段中定义。如果这个 Pod 崩溃或被删除,Deployment 会创建一个新的 Pod 来替换它。

 

deployment的 metadata 

在 Kubernetes 的资源对象中,metadata 是一个非常重要的字段,它包含了资源的元数据,例如名称、命名空间、标签和注解等。

在你的 Deployment 对象中,metadata 字段包含以下信息:

  • name:资源的名称,这是资源的唯一标识符。在这个例子中,Deployment 的名称是 gyk

  • labels:这是一个键值对的集合,用于给资源添加描述性信息。标签可以被 Kubernetes 的其他部分(例如 selector)用于选择和操作资源。在这个例子中,你的 Deployment 有两个标签:age 和 gender

注意,metadata 字段还可以包含其他的字段,例如 namespace(资源所在的命名空间)、annotations(用于存储非标识性的元数据)等,但在你的 Deployment 中并没有使用这些字段。

deployment的spec

在 Kubernetes 的 Deployment 对象中,metadata 和 spec 是两个非常重要的字段。

  • spec:这是 Deployment 的规格,定义了 Deployment 的行为。

    • replicas:这是 Deployment 应该维护的 Pod 副本的数量。在这个例子中,Deployment 将确保始终有 1 个 Pod 在运行。

    • selector:这是一个选择器,用于确定哪些 Pod 属于这个 Deployment。在这个例子中,任何带有标签 app: pod-demo 的 Pod 都会被视为这个 Deployment 的一部分。

    • template:这是 Pod 的模板,Deployment 会使用这个模板来创建新的 Pod。这个模板包含了 Pod 的 metadata 和 spec

      • metadata:这是 Pod 的元数据,包含了 Pod 的标签。在这个例子中,每个由这个 Deployment 创建的 Pod 都会带有 app: pod-demo 的标签。

      • spec:这是 Pod 的规格,定义了 Pod 的内容,例如容器、卷等。在这个例子中,每个 Pod 包含一个名为 pod-demo 的容器,这个容器使用 nginx:1.14.2 镜像,并监听 80 端口。

为什么 template 下有 metadata 但是 deployment下 还有 metadata

在 Kubernetes 中,metadata 字段用于存储资源对象的元数据,例如名称、标签和注解等。不同级别的资源对象都有自己的 metadata

  • Deployment 的 metadata:这是 Deployment 对象的元数据。它包含了 Deployment 的名称、标签等信息。这些信息用于识别和组织 Deployment 对象。

  • Template 的 metadata:这是 Pod 模板的元数据。当 Deployment 创建新的 Pod 时,这些元数据会被复制到新的 Pod 中。这包括 Pod 的标签,这些标签用于让 Deployment 识别和管理它创建的 Pod。

所以,Deployment 的 metadata 和 Template 的 metadata 是用于不同目的的。Deployment 的 metadata 是用于管理 Deployment 对象的,而 Template 的 metadata 是用于管理由 Deployment 创建的 Pod 的。

为什么 spec.selector.matchLables 必须要和 spec.template.metadata.lable 匹配

在 Kubernetes 中,Deployment 的 spec.selector.matchLabels 和 spec.template.metadata.labels 必须匹配,这是因为 matchLabels 用于确定哪些 Pod 属于这个 Deployment。

当 Deployment 创建新的 Pod 时,它会使用 Pod 模板中的 metadata.labels 为新的 Pod 设置标签。然后,Deployment 会使用 spec.selector.matchLabels 来找到和管理带有匹配标签的 Pod。

如果 spec.selector.matchLabels 和 spec.template.metadata.labels 不匹配,Deployment 将无法找到和管理它创建的 Pod,这将导致 Deployment 无法正常工作。

所以,spec.selector.matchLabels 和 spec.template.metadata.labels 必须匹配,以确保 Deployment 可以正确地找到和管理它创建的 Pod。

在 Kubernetes 中,Deployment 的 spec.selector.matchLabels 和 spec.template.metadata.labels 必须匹配的原因是,这样 Deployment 才能正确地找到和管理它创建的 Pod。

Deployment 是 Kubernetes 中的一个资源对象,它的主要作用是维护一组基本相同的 Pod。当 Deployment 创建新的 Pod 时,它会使用 Pod 模板中的 metadata.labels 为新的 Pod 设置标签。然后,Deployment 会使用 spec.selector.matchLabels 来找到和管理带有匹配标签的 Pod。

如果 spec.selector.matchLabels 和 spec.template.metadata.labels 不匹配,Deployment 将无法找到和管理它创建的 Pod。这可能会导致 Deployment 无法正常工作,例如无法保证 Pod 的数量始终等于 spec.replicas,无法更新 Pod 的版本等。

所以,spec.selector.matchLabels 和 spec.template.metadata.labels 必须匹配,以确保 Deployment 可以正确地找到和管理它创建的 Pod。这是 Kubernetes 的设计原则,旨在确保资源对象的稳定性和可预测性。

deployment的 spec 有什么属性

  • replicas:这是 Deployment 应该维护的 Pod 副本的数量。

  • selector:这是一个选择器,用于确定哪些 Pod 属于这个 Deployment。它包含一个或多个标签选择条件,只有当一个 Pod 的标签满足这些选择条件时,这个 Pod 才会被视为属于这个 Deployment。

  • template:这是 Pod 的模板,Deployment 会使用这个模板来创建新的 Pod。这个模板包含了 Pod 的 metadata 和 spec

  • strategy:这是 Deployment 更新 Pod 的策略。它可以是 RollingUpdate(默认)或 RecreateRollingUpdate 策略会逐步替换旧的 Pod,而 Recreate 策略会先删除所有旧的 Pod,然后创建新的 Pod。

  • minReadySeconds:这是 Pod 在被视为可用之前需要等待的最小秒数。

  • revisionHistoryLimit:这是 Deployment 保留的旧版本 ReplicaSet 的数量。这些旧版本 ReplicaSet 可以用于回滚 Deployment。

  • paused:这是一个布尔值,用于暂停或恢复 Deployment 的滚动更新。

  • progressDeadlineSeconds:这是 Deployment 进行滚动更新的最长时间。如果超过这个时间,Deployment 的状态将变为 Progressing

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

轻松点餐|餐饮小程序新玩法,美食触手可及

在企业经营领域,小程序正成为越来越多行业开展线上经营的重要工具。依托小程序等工具自主开发数字化经营平台,已经成为零售、餐饮等日常消费行业的趋势。餐饮行业向智能化快速迭代已势在必行,在此进程中,小程序成为了备受餐饮商家…

Mysql嵌套查询太简单了

1、子查询的分类 不相关查询: 子查询能独立执行 相关查询: 子查询不能独立运行 相关查询的执行顺序: 首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询, 若WHERE子句返回值为真,则取此元组放入结果…

SpringBoot整合PDF动态填充数据并下载

目录 目录 一、准备环境 二、iTextPDF介绍 三、步骤 四、访问查看结果 五、源代码参考 一、准备环境 ①下载一个万兴pdf软件 ②准备一个pdf 文件 二、iTextPDF介绍 这是一个用于生成PDF文档的Java库, 文档创建与修改:iTextPDF能够从零开始创建…

2024红明谷杯——Misc 加密的流量

2024红明谷杯——Misc 加密的流量 写在前面: 这里是贝塔贝塔,照例来一段闲聊 打比赛但赛前一波三折,又是成功签到的一个比赛 说起来比赛全名叫红明谷卫星应用数据安全场景赛,但好像真的跟卫星的关系不大,没有bin方…

面试Spring框架

什么是Spring框架? Spring框架是一个开源的Java应用程序框架,提供了综合的基础设施支持,用于开发Java企业应用程序。它涵盖了从基本的核心容器到全面的企业服务,可以用于构建任何规模的应用程序。 Spring框架的核心特性是什么&am…

Go之map详解

map的结构 map实现的两个关键数据结构 hmap 定义了map的结构bmap 定义了hmap.buckets中每个bucket的结构 // A header for a Go map. type hmap struct {count int // 元素的个数flags uint8 // 状态标记,标记map当前状态,是否正在写入B …

<计算机网络自顶向下> 可靠数据传输的原理(未完成)

可靠数据传输(rdt:Reliable Data Transfer)的原理 rdt在应用层,传输层和数据链路层都很重要是网络TOP10问题之一信道的不可靠特点决定了可靠数据传输rdt的复杂性rdt_send: 被上层(如应用层)调用&#xff0…

41.缺失的第一个正数

1. 解题原理: (1)对于一个有序的、不缺失元素的正数数组nums,元素nums[i]应当位于nums[i]-1的位置处。 (2)nums数组的长度为N,缺失的第一个正数如果不位于[1,N],那么就肯定是N1 2. …

excel表格怎么设置密码?excel文件加密的两个方法

一、加密码的原理​ Excel加密码的原理主要基于加密算法和密钥管理。当用户为Excel文件或工作表设置密码时,Excel会采用一种加密算法对文件或工作表进行加密处理。这种加密算法通常是对称加密算法,如AES(高级加密标准)或DES(数据加密标准)。 二&#x…

海外住宅代理:推特账号为何容易被关小黑屋?

推特是全球最受欢迎的社交媒体之一,每天都有数以百万计的用户在这个平台上发布信息、分享观点和交流互动。然而,有些用户可能会发现他们的推特账号不幸陷入了所谓的“关小黑屋”状态,即账号被限制了可见度,导致发布的内容无法被其…

【数据分析面试】24.20个数据库问答题 (考察数据开发和实际应用能力)

作为数据从业者,日常工作除了对各类业务数据进行分析挖掘,也需要经常和数据库打交道、甚至也少不了要承担一些数据开发、数仓管理的工作。掌握数据库管理的基本概念和技术是至关重要的。无论是初学者还是从业者,理解数据库索引、范式、事务、…

四.音视频编辑-音频混合-概述

引言 当我们在前两篇博客中成功地构建了一个媒体组合,并且略过了音频部分时,我们意识到了我们需要对这个项目进行更详细的探讨。在本篇博客中,我们将会展示如何创建一个包含视频轨道、配音音频轨道以及背景音频轨道的完整媒体组合。更进一步…

游泳耳机哪个牌子好?体验与口碑兼顾的4大游泳耳机汇总!

最近的天气越来越炎热了,许多人选择游泳作为一种既能锻炼身体又能享受清凉的活动。而随着科技的发展,越来越多的运动爱好者希望在游泳时也能享受到音乐的乐趣。因此,游泳耳机应运而生,成为市场上的热门产品。然而,面对…

项目中的解耦小能手-观察者模式

目录 1.使用场景 2.什么是观察模式 3.观察者模式结构图 4.代码实现案例 4.1 subject代码实现 4.2 Observer类代码实现 5. 回顾总结 1.使用场景 当一个对象的改变需要同事改变其他对象的时候,如:订单中心-下单成功需要通知库存、物流和积分去做相应…

交流回馈老化测试负载优点和应用

交流回馈老化测试负载是用于模拟真实环境下设备运行状态的测试工具,通过对设备进行长时间的连续工作,以检测其性能的稳定性和可靠性。这种测试负载具有许多优点,并且在实际应用中有着广泛的用途。 在实际应用中,设备往往需要在各种…

Flask实战

from flask import Flask appFlask(__name__)点击Flask同时点击键盘ctrl即可查看Flask的默认初始化函数 def __init__(self,import_name: str,static_url_path: str | None None,static_folder: str | os.PathLike[str] | None "static",static_host: str | None …

产品心理学:为什么管钱的都是女生?

大家发现了吗?大部分公司女财务居多,而在家庭中,多数也是女生管钱。 为什么管钱的都是女生?答案文尾揭晓。 问题的答案,要从一个心理学名词“过度自信偏差”说起 用人话说,就是“迷之自信” 过度自信的例…

【剪映专业版】11音频的全流程剪辑操作

视频课程:B站有知公开课【剪映电脑版教程】 1.音乐素材 可能包含人声,音乐素材普遍比较长,几十秒到几分钟。要点击倒三角才会出现分类。 点击下载箭头下载素材;点击加号将素材增加到轨道;时间指示器在哪个地方&#…

Python | Leetcode Python题解之第35题搜索插入位置

题目&#xff1a; 题解&#xff1a; class Solution:def searchInsert(self, nums: List[int], target: int) -> int:left, right 0, len(nums) #采用左闭右开区间[left,right)while left < right: # 右开所以不能有,区间不存在mid left (right - left)//2 # 防止溢出…

UE5增强输入系统 Enhanced Input

关键字&#xff1a; Enhanced Input 、 输入、映射、事件、鼠标、键盘、键鼠、动作、Trigger、触发器、 疑问&#xff1a; 新输入系统怎么做一个基础的案例&#xff1f;Trigger修改器中每个项都是什么功能&#xff1f;InputAction和InputMappingContext中都有修改器&#xff…