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 的配置项,可以满足大部分应用的需求。
  • 在实际应用中,你可以根据具体需求修改这些字段,如镜像名称、资源配置、卷配置等。
相关推荐
你我约定有三2 小时前
分布式微服务--万字详解 微服务的各种负载均衡全场景以注意点
java·开发语言·windows·分布式·微服务·架构·负载均衡
wydxry4 小时前
MOE架构详解:原理、应用与PyTorch实现
人工智能·pytorch·架构
Goboy4 小时前
Java 使用 FileOutputStream 写 Excel 文件不落盘?
后端·面试·架构
Dragon online4 小时前
数据仓库深度探索系列:架构选择与体系构建
大数据·数据仓库·分布式·架构·spark·大数据架构·数仓架构
Goboy4 小时前
讲了八百遍,你还是没有理解CAS
后端·面试·架构
数据要素X5 小时前
【数据架构08】数字化转型架构篇
大数据·数据库·数据仓库·架构·数据库架构
数新网络6 小时前
数新智能 CTO 原攀峰:DataCyber 面向 AI 时代的多模态数据湖设计与实践
架构
LogicYarn6 小时前
门开门合皆有度——从寄存器结构解读 Setup 与 Hold 的秘密
架构
数据智能老司机6 小时前
让流浪汉都能学会的大模型教程——用大语言模型设计解决方案
架构·llm·aigc
冒泡的肥皂6 小时前
数据库最近学到的小知识(一
数据库·后端·架构