k8s yaml文件案例

下面是一个完整的 Kubernetes Deployment 配置文件,包含了常见的配置项,最后会附带详细解释。

yaml 复制代码
apiVersion: apps/v1  # API版本号,表示部署的资源类型是 Deployment,版本为 apps/v1
kind: Deployment  # 资源类型为 Deployment,用于定义应用的副本和更新策略
metadata:
  name: my-nginx  # 部署的名称,用于标识该资源对象
  namespace: default  # Kubernetes命名空间,默认是 default,意味着该部署将存在于默认命名空间中
  labels:
    app: my-nginx  # 标签,用于标识该部署,可以用于选择器(selector)等操作
spec:
  replicas: 3  # 定义部署的副本数量,也就是期望运行的 Pod 数量
  selector:
    matchLabels:
      app: my-nginx  # 选择器,用于匹配 Pod 的标签,确保 Deployment 管理这些 Pods
  template:
    metadata:
      labels:
        app: my-nginx  # 为 Pods 设置标签,Deployment 会根据这个标签来管理 Pods
    spec:
      containers:
        - name: my-nginx  # 容器的名字,用于标识该容器
          image: nginx:latest  # 容器镜像,可以是 Docker Hub 或私有镜像仓库中的镜像
          ports:
            - containerPort: 80  # 容器内的端口,Pod 会暴露这个端口供外界访问
          resources:
            limits:
              memory: "512Mi"  # 容器的内存限制
              cpu: "500m"  # 容器的 CPU 限制
            requests:
              memory: "256Mi"  # 容器请求的内存资源量,Kubernetes 会保证至少分配这么多内存
              cpu: "250m"  # 容器请求的 CPU 资源量,Kubernetes 会保证至少分配这么多 CPU
          env:
            - name: ENV_VAR_NAME  # 环境变量,容器内的环境变量
              value: "some_value"
          volumeMounts:
            - name: my-volume  # 容器挂载的卷
              mountPath: /usr/share/nginx/html  # 卷挂载到容器的路径
      volumes:
        - name: my-volume  # 卷的名称
          configMap:
            name: my-config  # 使用 ConfigMap 作为卷的来源
            items:
              - key: config-file  # 配置文件的 key
                path: config-file  # 文件路径
  strategy:
    type: RollingUpdate  # 更新策略,表示滚动更新
    rollingUpdate:
      maxSurge: 1  # 最多可以多出 1 个 Pod
      maxUnavailable: 1  # 最多可以不可用 1 个 Pod
  minReadySeconds: 10  # Pod 启动后,至少需要10秒才能被认为是就绪的
  revisionHistoryLimit: 5  # 保留之前的更新版本的数量,最多保存5个历史版本
  progressDeadlineSeconds: 600  # 超过这个时间没有进展,则认为部署失败

各字段解释:

  1. apiVersion: apps/v1

    表示资源使用的 Kubernetes API 版本。apps/v1 是 Deployment 的稳定版本。

  2. kind: Deployment

    定义资源类型为 Deployment。Deployment 是用来管理无状态应用的,确保所期望的 Pod 副本数可以持续运行。

  3. metadata

    资源的元数据:

    • name:定义该 Deployment 的名称,标识 Kubernetes 中的这个资源。
    • namespace:指定 Deployment 所在的 Kubernetes 命名空间,默认为 default。
    • labels:为 Deployment 添加标签,用于选择、过滤等操作。
  4. spec

    Deployment 的规格:

    • replicas:定义期望的 Pod 副本数量。这里设置为 3,表示期望有 3 个 Pod 运行。

    • selector:通过标签选择 Pod 来管理它们。Deployment 会确保选择的 Pod 数量和类型与 replicas 中定义的副本数一致。

    • template:Pod 模板,定义将要运行在 Deployment 中的 Pod 的详细配置。

      • metadata:为 Pod 设置标签。

      • spec:Pod 的详细配置,包括容器的定义。

        • containers:定义容器配置项,包含容器名称、镜像、端口、资源等。
        • volumes:卷配置,定义 Pod 中的存储。
  5. resources

    定义容器资源的限制和请求:

    • limits:容器的资源限制,超过这个限制容器会被强制终止。
    • requests:容器请求的资源量,Kubernetes 会尝试为容器分配这些资源。
  6. env

    为容器设置环境变量,容器内的进程可以通过这些环境变量获取相关信息。

  7. volumeMounts 和 volumes

    • volumeMounts:定义容器挂载的卷的位置和名称。
    • volumes:在 Pod 级别定义卷的来源,可以是多种类型,如 ConfigMap、Secret、PersistentVolume 等。
  8. strategy

    设置滚动更新策略:

    • type: RollingUpdate:表示使用滚动更新的方式来逐个更新 Pod。
    • rollingUpdate:设置具体的滚动更新策略,maxSurge 表示最多可以创建的额外 Pod 数量,maxUnavailable 表示最多可以不可用的 Pod 数量。
  9. minReadySeconds

    设置 Pod 启动并健康后,至少需要保持多少秒才算成功,就绪的 Pod 需要持续稳定一段时间。

  10. revisionHistoryLimit

    保留的历史版本数量,控制 Deployment 更新历史的数量。这里设置为 5,表示最多保存 5 次版本记录。

  11. progressDeadlineSeconds

    如果 Deployment 在指定时间内没有进展(例如没有足够的 Pod 可用),Kubernetes 将认为该部署失败。

小结:

  • 这个 YAML 文件非常全面地展示了 Kubernetes Deployment 的配置项,可以满足大部分应用的需求。
  • 在实际应用中,你可以根据具体需求修改这些字段,如镜像名称、资源配置、卷配置等。
相关推荐
衡石科技1 小时前
衡石高性能分析架构:HQL、查询下推与多层加速的协同设计
架构·数据分析
Tokenfree2 小时前
换模型也要灰度:10% → 50% → 100%,每一档只看三个指标
架构
vivo互联网技术3 小时前
把 Agent 的判断与行动变成可恢复的软件事实|KDC 系列 工程篇
架构·agent·ai编程
用户094248568033 小时前
第19章:库存扣减与秒杀系统:Redis 扛峰值流量
redis·架构·源码
leo在掘金3 小时前
2.8万亿MoE跑昇腾:0 Day适配改了啥
后端·架构
广凌科技5 小时前
广凌校园物联网中台整体解决方案:三层架构驱动校园数字化智治
物联网·架构
这个DBA有点耶6 小时前
Merge还是Materialize?一文讲透MySQL 8.0 CTE底层的执行计划博弈与性能陷阱
数据库·mysql·架构
一条Go6 小时前
四个进程,一把锁:Alioth 的告警评测为什么不需要消息队列
后端·设计模式·架构
得物技术6 小时前
多 Agent 架构的三次反转:从中心调度到自驱协作|得物技术
程序员·架构·llm
Decay__9 小时前
19_MySQL 告警与自动化运维 —— 告警分级收敛 / Webhook / 定时巡检 / 脚本库
运维·数据库·sql·mysql·架构