K8S 哲学 - yaml文件

2024-04-20 09:52
文章标签 云原生 k8s yaml 哲学

本文主要是介绍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

apiVersion: v1 和 apiVersion: app/v1

在 Kubernetes 中,apiVersion 字段用于指定你要使用的 Kubernetes API 的版本和组。不同的资源类型可能属于不同的 API 组和版本。

  • apiVersion: v1:这是 Kubernetes 核心 API 的版本,包括 Pod、Service、Volume 等核心资源类型。

  • apiVersion: apps/v1:这是 Kubernetes apps API 组的 v1 版本,包括 Deployment、DaemonSet、StatefulSet 等应用相关的资源类型。

所以,如果你要创建一个 Deployment,你应该使用 apiVersion: apps/v1。如果你要创建一个 Pod 或 Service,你应该使用 apiVersion: v1

这篇关于K8S 哲学 - yaml文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/919938

相关文章

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

云原生之高性能web服务器学习(持续更新中)

高性能web服务器 1 Web服务器的基础介绍1.1 Web服务介绍1.1.1 Apache介绍1.1.2 Nginx-高性能的 Web 服务端 2 Nginx架构与安装2.1 Nginx概述2.1.1 Nginx 功能介绍2.1.2 基础特性2.1.3 Web 服务相关的功能 2.2 Nginx 架构和进程2.2.1 架构2.2.2 Ngnix进程结构 2.3 Nginx 模块介绍2.4

用Cri-O,Sealos CLI,Kubeadm方式部署K8s高可用集群

3.6 Cri-O方式部署K8s集群 注意:基于Kubernetes基础环境 3.6.1 所有节点安装配置cri-o [root@k8s-all ~]# VERSION=1.28[root@k8s-all ~]# curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensu

Redis的设计哲学和实现方式

‌ Redis是一个可用性和分区容忍性优先的系统。 Redis的设计和实现强调了高可用性和高性能,而不是严格的数据一致性。 这一点可以从Redis的分布式设计、数据压缩支持、以及异步IO机制等方面看出。 ‌分布式设计与数据一致性‌:Redis的分布式设计中采用了异步复制,这意味着当某个节点上的数据发生改变时,这个修改操作会被发送给其他节点,但由于网络传输延迟等原因,这些操作不一定

培训第九周(部署k8s基础环境)

一、前期系统环境准备 1、关闭防火墙与selinux  [root@k8s-master ~]# systemctl stop firewalld[root@k8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.servi

k8s 存储(PV、PVC、SC、本地存储、NFS)

存储持久化相关三个概念: PersistentVolume (PV) 是对具体存储资源的描述,比如NFS、Ceph、GlusterFS等,通过PV可以访问到具体的存储资源;PersistentVolumeClaim (PVC) Pod想要使用具体的存储资源需要对接到PVC,PVC里会定义好Pod希望使用存储的属性,通过PVC再去申请合适的存储资源(PV),匹配到合适的资源后PVC和PV会进行绑定

k8s调度(pod亲和、反亲和、污点、容忍度)

pod亲和性 针对对象为Pod,目的是实现,新建Pod和目标Pod调度到一起,在同一个Node上。 示例: apiVersion: v1kind: Podmetadata:name: testpod01labels:app: myapp01env: test1spec:containers:- name: testpod01image: nginx:1.23.2---apiVersio