[k8s] 常见yml配置和详细解释

news2024/11/26 18:46:15

在 Kubernetes (K8s) 中,常见的 YAML 文件配置包括:

文章目录

  • Pod
  • Deployment
  • Service
  • Ingress
  • ConfigMap
  • Secret
  • Volume
    • 访问模式
  • StatefulSet
  • DaemonSet
  • Job
    • 容器的重启策略
  • ConJob

Pod

apiVersion: v1
kind: Pod
metadata:
  name: my-pod  # Pod 的名称
  labels:
    app: my-app  # Pod 的标签,可用于选择器和服务发现
spec:
  containers:
  - name: my-container  # 容器的名称
    image: nginx  # 使用的容器镜像
    ports:
    - containerPort: 80  # 容器内部暴露的端口号
      protocol: TCP  # 端口的协议类型
    resources:  # 容器所需的资源限制和需求
      limits:
        cpu: "0.5"  # CPU 使用上限
        memory: "256Mi"  # 内存使用上限
      requests:
        cpu: "0.2"  # CPU 最小需求
        memory: "128Mi"  # 内存最小需求
    env:  # 容器的环境变量
    - name: ENV_VAR1
      value: value1
    - name: ENV_VAR2
      valueFrom:
        secretKeyRef:
          name: my-secret  # 引用的 Secret 对象的名称
          key: secret-key  # 从 Secret 对象中获取的键名
    volumeMounts:  # 容器的挂载路径
    - name: data-volume  # 挂载的卷的名称
      mountPath: /data  # 挂载的路径
  volumes:  # Pod 的卷
  - name: data-volume  # 卷的名称
    emptyDir: {}  # 空的卷,生命周期与 Pod 相关联
    
#可以添加 metadata.annotations 字段用于存放其他注释信息
metadata:
  annotations:
    description: This is a sample Pod configuration file.  # 描述该配置文件的注释

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment  # Deployment 的名称
spec:
  replicas: 3  # 副本数
  selector:
    matchLabels:
      app: my-app  # 用于选择 Pod 的标签
  template:
    metadata:
      labels:
        app: my-app  # Pod 的标签,用于与选择器匹配
    spec:
      containers:
      - name: my-container  # 容器的名称
        image: nginx  # 使用的容器镜像
        ports:
        - containerPort: 80  # 容器内部暴露的端口号
          protocol: TCP  # 端口的协议类型
        resources:  # 容器所需的资源限制和需求
          limits:
            cpu: "0.5"  # CPU 使用上限
            memory: "256Mi"  # 内存使用上限
          requests:
            cpu: "0.2"  # CPU 最小需求
            memory: "128Mi"  # 内存最小需求
        env:  # 容器的环境变量
        - name: ENV_VAR1
          value: value1
        - name: ENV_VAR2
          valueFrom:
            secretKeyRef:
              name: my-secret  # 引用的 Secret 对象的名称
              key: secret-key  # 从 Secret 对象中获取的键名
        volumeMounts:  # 容器的挂载路径
        - name: data-volume  # 挂载的卷的名称
          mountPath: /data  # 挂载的路径
      volumes:  # Pod 的卷
      - name: data-volume  # 卷的名称
        emptyDir: {}  # 空的卷,生命周期与 Pod 相关联

# 可以添加 metadata.annotations 字段用于存放其他注释信息
metadata:
  annotations:
    description: This is a sample Deployment configuration file.  # 描述该配置文件的注释

Service

apiVersion: v1
kind: Service
metadata:
  name: my-service  # Service 的名称
spec:
  selector:
    app: my-app  # 选择要路由到的 Pod 的标签
  ports:
  - name: http  # 端口的名称
    protocol: TCP  # 端口的协议类型
    port: 80  # Service 暴露的端口号
    targetPort: 8080  # 路由到的 Pod 的端口号
  type: LoadBalancer  # Service 的类型,可以是 ClusterIP、NodePort 或者 LoadBalancer

Ingress

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress  # Ingress 的名称
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$1  # 添加 NGINX Ingress 控制器的注解,用于重写 URL
spec:
  rules:
  - host: example.com  # 定义要匹配的域名
    http:
      paths:
      - path: /appA  # URL 路径
        pathType: Prefix  # 路径匹配类型,可以是 Prefix 或 Exact
        backend:
          service:
            name: appA-service  # 要路由到的 Service 的名称
            port:
              number: 80  # 路由到的 Service 的端口号
      - path: /appB(/|$)(.*)  # 使用正则表达式匹配 URL 路径
        pathType: Prefix  # 路径匹配类型,可以是 Prefix 或 Exact
        backend:
          service:
            name: appB-service  # 要路由到的 Service 的名称
            port:
              number: 80  # 路由到的 Service 的端口号
              

ConfigMap

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-configmap  # ConfigMap 的名称
data:
  server.conf: |
    # Server 配置文件
    port=8080
    host=localhost
  client.conf: |
    # Client 配置文件
    timeout=5000
    retries=3

需要注意的是,
ConfigMap 的配置文件可以包含多个键值对,键名和对应的值可以是任意字符串类型,
例如文件内容、环境变量、命令行参数等。
在使用 ConfigMap 时,可以将其挂载到 Pod 中的容器内,从而使容器可以轻松地访问配置信息。
为了更好地管理和维护 ConfigMap,建议使用有意义的名称和注释对其进行命名和描述。

Secret

apiVersion: v1
kind: Secret
metadata:
  name: my-secret  # Secret 的名称
type: Opaque  # Secret 类型(Opaque 表示任意类型)
data:
  username: dXNlcm5hbWU=  # 加密后的用户名
  password: cGFzc3dvcmQ=  # 加密后的密码

Secret 的配置文件包含敏感信息,如用户名、密码等,需要进行加密处理。在 YAML 文件中,可以将敏感信息以 base64 编码的方式保存在 data 字段中,以保证安全性。

Volume

apiVersion: v1
kind: Pod
metadata:
  name: my-pod  # Pod 的名称
spec:
  containers:
    - name: my-container  # 容器的名称
      image: nginx  # 容器的镜像
      volumeMounts:
        - name: data-volume  # 挂载卷的名称
          mountPath: /data  # 挂载到容器中的路径
  volumes:
    - name: data-volume  # 卷的名称
      emptyDir: {}  # 空目录卷

Volume 的配置文件可以包含多个卷定义,每个卷可以是不同类型的卷(如 emptyDir、hostPath、persistentVolumeClaim 等)。在上述示例中,使用的是 emptyDir 类型的卷,它会在 Pod 运行时创建一个空目录,并将其挂载到容器内的指定路径。


访问模式

在 Kubernetes 中,访问模式(Access Modes)是用来定义持久化存储卷(Persistent Volume)的访问方式的。下面是 Kubernetes 支持的三种访问模式:

ReadWriteOnce(RWO):该访问模式表示该存储卷可以被单个节点以读写方式挂载。这意味着同一时间内只能有一个 Pod 能够挂载并对存储卷进行读写操作。当存储卷被某个节点上的 Pod 挂载时,它将成为该节点的专属卷,在其他节点上不可见。

ReadOnlyMany(ROX):该访问模式表示该存储卷可以以只读方式被多个节点挂载。多个 Pod 可以共享对存储卷的只读访问权限,但不能进行写入操作。

ReadWriteMany(RWX):该访问模式表示该存储卷可以以读写方式被多个节点挂载。多个 Pod 可以同时挂载并对存储卷进行读写操作,即具有读写共享的功能。


StatefulSet

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: my-statefulset  # StatefulSet 的名称
spec:
  selector: 
    matchLabels:
      app: my-app  # 匹配标签,用于选择要管理的 Pod
  serviceName: my-service  # Headless Service 的名称
  replicas: 3  # 副本数
  template:
    metadata:
      labels:
        app: my-app  # Pod 的标签
    spec:
      containers:
        - name: my-container  # 容器的名称
          image: nginx  # 容器的镜像
          ports:
            - containerPort: 80  # 容器监听的端口号
          volumeMounts:
            - name: data-volume  # 挂载卷的名称
              mountPath: /data  # 挂载到容器中的路径
  volumeClaimTemplates:
    - metadata:
        name: data-volume  # 持久化存储卷模板的名称
      spec:
        accessModes:
          - ReadWriteOnce  # 访问模式
        resources:
          requests:
            storage: 1Gi  # 存储容量

StatefulSet 是用于管理有状态应用程序的控制器,它保证 Pod 的唯一性和稳定性,并按照序号进行命名。

在上述示例中,创建了一个包含 3 个副本的 StatefulSet,每个副本都会被命名为 my-statefulset-{0…2}。

StatefulSet 是用于管理有状态应用程序的控制器,它保证 Pod 的唯一性和稳定性,并按照序号进行命名。

在上述示例中,创建了一个包含 3 个副本的 StatefulSet,每个副本都会被命名为 my-statefulset-{0…2}。

DaemonSet

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: my-daemonset  # DaemonSet 的名称
spec:
  selector:
    matchLabels:
      app: my-app  # 匹配标签,用于选择要管理的节点上的 Pod
  template:
    metadata:
      labels:
        app: my-app  # Pod 的标签
    spec:
      containers:
        - name: my-container  # 容器的名称
          image: nginx  # 容器的镜像
          ports:
            - containerPort: 80  # 容器监听的端口号
          volumeMounts:
            - name: data-volume  # 挂载卷的名称
              mountPath: /data  # 挂载到容器中的路径
      nodeSelector:
        disktype: ssd  # 节点的标签选择器,用于选择带有指定标签的节点
  updateStrategy:
    type: RollingUpdate  # 更新策略为滚动更新
    rollingUpdate:
      maxUnavailable: 1  # 在更新期间最多允许一个 Pod 不可用
  volumeClaimTemplates:
    - metadata:
        name: data-volume  # 持久化存储卷模板的名称
      spec:
        accessModes:
          - ReadWriteOnce  # 访问模式
        resources:
          requests:
            storage: 1Gi  # 存储容量

DaemonSet 是用于在每个节点上运行一个 Pod 的控制器,它保证每个节点上都有一个唯一的 Pod 进行运行,并自动适应节点变化。

在上述示例中,创建了一个 DaemonSet,每个节点上都会运行一个 Pod,该 Pod 将被命名为 my-daemonset-{node-name}。

DaemonSet 还包含了 volumeClaimTemplates 字段,用于定义持久化存储卷模板。

在上述示例中,使用了一个名为 data-volume 的持久化存储卷模板,访问模式为 ReadWriteOnce,存储容量为 1GB。Pod 将根据该模板创建一个与之对应的持久化存储卷。

通过使用 DaemonSet 和持久化存储卷,可以在集群的每个节点上运行一个 Pod,并确保应用程序的数据持久化和可靠性存储。

由于 DaemonSet 会自动适应节点变化,因此在增加或删除节点时,应用程序的数据不会丢失或受影响。

Job

apiVersion: batch/v1
kind: Job
metadata:
  name: my-job  # Job 的名称
spec:
  completions: 1  # 完成的任务数
  parallelism: 1  # 并行运行的 Pod 数量
  template:
    metadata:
      name: my-pod  # Pod 的名称
    spec:
      restartPolicy: Never  # 不重启容器
      containers:
        - name: my-container  # 容器的名称
          image: nginx  # 容器的镜像
          command: ["echo", "Hello, world!"]  # 容器启动命令
      volumes:
        - name: data-volume  # 卷的名称
          emptyDir: {}  # 空的临时卷
  backoffLimit: 3  # 重试次数上限

Job 是用于在 Kubernetes 中运行一次性任务的控制器。

在上述示例中,创建了一个 Job,其中包含一个 Pod,Pod 中运行了一个名为 my-container 的容器,该容器使用 nginx 镜像,并执行了 echo “Hello, world!” 命令。

Job 的配置还包括一些重要的字段,如 completions(完成的任务数)和 parallelism(并行运行的 Pod 数量)。completions 字段指定了 Job 完成的任务数,一旦达到该数量,Job 就会被标记为成功。parallelism 字段指定了同时运行的 Pod 数量,可以控制并行执行任务的速度。

另外,还有一些其他常用的字段,例如 restartPolicy(容器的重启策略),volumes(卷的定义)和 backoffLimit(重试次数上限)。这些参数可以根据业务需求进行调整和配置。

通过使用 Job 控制器,可以在 Kubernetes 中运行一次性任务,并确保任务的完成和可靠性运行。由于 Job 可以指定任务数量和并行度,可以很好地适应不同规模和要求的任务场景。

容器的重启策略

在 Kubernetes 中,容器的重启策略可以通过在 Pod 的配置中设置 restartPolicy 字段来定义。以下是常见的三种重启策略:

Always(默认):当容器失败、终止或退出时,总是自动重启容器。这是默认的重启策略。

spec:
  restartPolicy: Always

OnFailure:只有当容器以非零状态码退出时,才会自动重启容器。如果容器正常终止并退出(即零状态码),则不会自动重启容器。

spec:
  restartPolicy: OnFailure

Never:当容器失败、终止或退出时,不会自动重启容器。如果容器异常终止,它将保持在该状态,直到手动重启。

spec:
  restartPolicy: Never

通过选择适当的重启策略,您可以根据应用程序的特性和需求来配置容器的行为。请注意,在某些情况下,如在 Job 中使用特定任务执行成功或失败的标志,您可能需要选择适合的重启策略来确保任务按预期运行。

需要注意的是,Pod 的 restartPolicy 字段适用于整个 Pod 中的所有容器。如果多个容器在同一个 Pod 中运行,并且希望它们具有不同的重启策略,可以考虑将它们放置在不同的 Pod 中。


ConJob

apiVersion: batch/v1beta1  # 使用的 API 版本
kind: CronJob  # CronJob 类型
metadata:
  name: my-cronjob  # CronJob 的名称
spec:
  schedule: "*/1 * * * *"  # Cron 表达式,用于定义作业执行的时间表
  jobTemplate:  # 作业模板,指定 CronJob 创建的作业配置
    spec:
      template:
        metadata:
          name: my-job  # 作业的名称
        spec:
          restartPolicy: OnFailure  # 容器的重启策略
          containers:
            - name: my-container  # 容器的名称
              image: nginx  # 容器的镜像
              command: ["echo", "Hello, world!"]  # 容器启动命令
  successfulJobsHistoryLimit: 5  # 历史成功作业保存的数量上限
  failedJobsHistoryLimit: 5  # 历史失败作业保存的数量上限

CronJob 是 Kubernetes 中的一种控制器,用于定期运行作业。在上述示例中,创建了一个 CronJob,其中定义了一个 Cron 表达式 */1 * * * *,表示每分钟执行一次作业。

CronJob 的配置还包括使用 jobTemplate 指定了创建作业的模板。在这个模板中,指定了作业的 Pod 配置,其中包含一个名为 my-container 的容器,使用 nginx 镜像,并执行了 echo “Hello, world!” 命令。

除了基本的配置外,还有一些其他常用的字段。例如,successfulJobsHistoryLimitfailedJobsHistoryLimit 字段分别指定历史成功和失败作业保存的数量上限,可以根据需求进行调整。

通过使用 CronJob 控制器,可以定期运行作业,并对作业的运行情况进行管理和记录。CronJob 的配置文件中的注释可以帮助我们理解每个字段的含义和作用,方便后续管理和维护。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用命令行创建一个vue项目卡住不动如何解决

问题 在使用命令去创建一个vue项目, 出现下面卡住不动的一个状态。 解决方案一 首先先ctrlc停止进入创建好的项目文件手动输入npm install 、npm run dev如果npm run dev 的时候 出现 ‘vite’ 相关的错误查看node版本是否是最新的稳定版本node -v查看安装源是否…

国家网络安全周 | 天空卫士CEO刘霖在《中国网信》杂志发表署名文章

由中共中央网络安全和信息化委员会办公室、中华人民共和国国家互联网信息办公室主管的《中国网信》2023年第9期总第21期,在2023年国家网络安全宣传周开幕式时同期发布。《中国网信》杂志致力于宣传解读中央网络安全和信息化委员会及其办公室的重大决策部署和重点工作…

创建HTTP请求的几种方式

一. HTML表单标签创建 form 的重要参数: action: 构造的 HTTP 请求的 URL 是什么. method: 构造的 HTTP 请求的 方法 是 GET 还是 POST (form 只支持 GET 和 POST). input 的重要参数: type: 表示输入框的类型. text 表示文本, password 表示密码, submit 表示提交按钮. name…

青大数据结构【2013】

关键字: 邻接表空间复杂度、求无向图连通分量(BFS、DFS)、B树根节点最小关键字、平均查找长度最小的排序、二叉树排序叶子结点次序不变、不同次序建立二叉排序树及中序遍历、直接插入排序特点、强连通分量、邻接矩阵邻接表、折半查找判定树、…

Blender批量修改名称

假如在Blender里按顺序添加了多个mesh,名字后缀按照数字1,2,3…编号,此时又要插入一个新的mesh,那么这个mesh之后的其它mesh名字都要加1,此时该怎么办呢? 比较简单的办法是把新mesh后面的mesh名称一个一个手动加1&…

软件工程知识总结梳理

🔥🔥宏夏Coding网站,致力于为编程学习者、互联网求职者提供最需要的内容!网站内容包括求职秘籍,葵花宝典(学习笔记),资源推荐等内容。在线阅读:https://hongxiac.com&…

密码学【一】

前言 在区块链的整个体系中大量使用了密码学算法,比如用于 PoW 的哈希算法,用于完整性验证的 Merkle Tree,用于交易签名与验证的数字签名算法,用于隐私保护的零知识证明等等。 可以说密码学是保证区块链安全的基石,而区…

YOLOv5算法改进(17)— 更换损失函数(EIoU、AlphaIoU、SIoU和WIoU)

前言:Hello大家好,我是小哥谈。损失函数(loss function)是机器学习中用来衡量模型预测值与真实值之间差异的函数。它用于度量模型在训练过程中的性能,以便优化模型参数。在训练过程中,损失函数会根据模型的…

C# 扫描并读取图片中的文字(.NET Core)

本文介绍如何通过C# 程序来扫描并读取图片中的文字,这里以创建一个.Net Core程序为例。下面是具体步骤,供参考。 程序测试环境: Visual Studio版本要求不低于2017 图片扫描工具:Spire.OCR for .NET 图片格式:png&…

LCP 50. 宝石补给

文章目录 Tag题目来源题目解读解题思路方法一:模拟 写在最后 Tag 【模拟】【数组】 题目来源 LCP 50. 宝石补给 题目解读 根据 operations 数组将 x 勇士的一半宝石(向下取整)赠送给 y 勇士,最后输出拥有最多宝石的勇士与拥有最…

mac电脑版矢量绘图推荐 Sketch for mac最新中文

Sketch软件特色 1、数字设计工具包 在Sketch中使用暗模式查找焦点。点亮灯光,失去分心,看着你的设计变得生动,让你专注于最重要的事情 - 你的工作。 2、为未来重新设计 Sketch 带来全新外观和更多。完全重新设计的界面使设计过程比以往更加…

【云计算】虚拟私有云 VPC

虚拟私有云 VPC 1.前言1.1 基本介绍1.2 VPC 的作用1.3 VPC 的适用人群 2.VPC 基本概念2.1 VPC 相关基本概念2.2 其他相关基本概念 3.VPC 通信场景3.1 VPC 内部互通3.2 VPC 间互通3.2.1 对等连接3.2.2 Transit Gateway 或者云联网 3.3 访问 Internet3.3.1 Internet 网关3.3.2 NA…

Jmeter系列-监听器Listeners的介绍(9)

简介 用来动态的监控Jmeter执行测试的过程,实时查看测试结果。 JMeter 监听器 查看结果树 查看结果树,显示取样器请求和响应的细节以及请求结果,包括消息头,请求的数据,响应的数据,方便接口调试&#xf…

飞行动力学 - 第27节-短周期模态机理及影响参数 之 基础点摘要

飞行动力学 - 第27节-短周期模态机理及影响参数 之 基础点摘要 1. 短周期的近似2. 短周期特性随重心变化趋势3. 参考资料 1. 短周期的近似 短周期模态仅持续数秒,u几乎不变,故可设 Δ u Δ u ˙ 0 \Delta u \Delta \dot{u} 0 ΔuΔu˙0&#xff0c…

Vue3+ElementUI使用

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"initial-scale1.0,maximum-scale1.0,minimum-scale1.0,user-scalable0, widthdevice-width"/><!-- 引入样式 --><lin…

Markdown编辑器语法说明

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

数据库计算机三级等级考试--数据库技术相关知识点和笔记

数据库计算机三级等级考试–数据库技术 计算机三级等级考试笔记,是博主通过计算机三级数据库技术考试的相关笔记&#xff0c;此篇博客&#xff0c;不仅适合需要考计算机三级考试的各位考生&#xff0c;也适合在职场处理关于数据库的部分操作&#xff0c;个人认为算是一篇使用性…

C++下基于蚁群算法解决TSP问题

c求tsp问题_蚁群算法-求解TSP问题_PM熊叔的博客-CSDN博客 一、原理 二、代码

初识 Linux 文件系统

初识 Linux 文件系统 如果是刚接触 Linux 系统&#xff0c;可能就很难搞清楚 Linux 如何引用文件和目录。对于对已经习惯 使用 Windows 操作系统的人来说&#xff0c;难度更大。所以要想学习 Linux 系统&#xff0c;就必须先了解 Linux 文件系统 文章目录 初识 Linux 文件系统…

计算机竞赛 机器视觉目标检测 - opencv 深度学习

文章目录 0 前言2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 0 前言 &#x1f5…