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 的配置项,可以满足大部分应用的需求。
  • 在实际应用中,你可以根据具体需求修改这些字段,如镜像名称、资源配置、卷配置等。
相关推荐
刘立军38 分钟前
前后端分离:约束 AI 分工,避免接口耦合与职责错乱
人工智能·架构·ai编程
匠测AI说1 小时前
Selenium 工作原理深度解析:从架构到实践
selenium·测试工具·架构
行业研究员1 小时前
TDSQL-C:云原生架构与AI能力解析
人工智能·云原生·架构·云原生数据库·ai能力解析
人间凡尔赛2 小时前
当 AI Agent 攻陷网关:Istio agentgateway 与 Gateway API Inference Extension 实战解析
后端·云原生·架构
郝学胜-神的一滴3 小时前
系统设计 023:三大核心表Sharding设计思路与最优解决方案
java·开发语言·python·架构·php·软件开发
mldong3 小时前
流程定义设计:一份 LogicFlow JSON 全解
java·架构
AI产品测评官12 小时前
突破系统割裂困局:2026企业级AI招聘架构如何迈向“原生全流程”?
大数据·微服务·架构
寒草13 小时前
【寒草呈献】当巴菲特走进 AI 投研助手
人工智能·架构
ltl13 小时前
推理服务化:Triton、Ray Serve、KServe 与 PD 分离
架构