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 的配置项,可以满足大部分应用的需求。
  • 在实际应用中,你可以根据具体需求修改这些字段,如镜像名称、资源配置、卷配置等。
相关推荐
天空属于哈夫克33 天前
企业微信二次开发:精准实现关键词自动回复
架构·企业微信
晨米酱3 天前
AGENTS.md:Agent 的上下文策略层
面试·架构·agent
这个DBA有点耶3 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
码流子3 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
moMo3 天前
从固定流程到问题路由:让 LangGraph RAG 按需检索
架构
白远山3 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
LorryJovens3 天前
【LAAP科研】双系统具身AGI范式研究——基于LAAP认知架构与Jev概率决策模型的系统性技术调研与范式验证
人工智能·gpt·安全·架构
JQweryuiop3 天前
中小型游戏陪练工作室数字化管理实践:基于七彩屋电竞护航小程序订单、履约与绩效系统的落地复盘
大数据·游戏·小程序·架构
LONGZETECH3 天前
一线职教实测:风光 580 汽车故障诊断仿真系统,破解实车实训四大核心痛点
人工智能·学习·安全·架构·汽车
萧瑟余晖3 天前
Netty 核心组件与 Reactor 模型详解
网络·架构