当前位置: 首页 > news >正文

【Kubernets】Kubernets资源类型Deployment详细介绍

文章目录

      • Kubernets资源概览
      • Kubernetes Deployment 资源类型详细介绍
      • Deployment 的主要功能
      • Deployment 的核心字段
      • 字段详解
        • 1. **`metadata`**
        • 2. **`spec`**
        • 3. **`template`**
        • 4. **`containers`**
        • 5. **`strategy`**
        • 6. **`restartPolicy`**
      • Deployment 的生命周期
      • Deployment 的常用操作
        • 1. 创建 Deployment
        • 2. 查看 Deployment 状态
        • 3. 查看 Pod 状态
        • 4. 更新 Deployment(修改镜像版本)
        • 5. 回滚 Deployment
        • 6. 查看更新历史
        • 7. 扩缩容
        • 8. 删除 Deployment
      • Deployment 的适用场景
      • 总结

Kubernets资源概览

k8s-reources

Kubernetes Deployment 资源类型详细介绍

Deployment 是 Kubernetes 中用于管理 无状态应用 的核心资源类型之一。它提供了一种声明式的方式来定义应用的期望状态,并确保 Pod 的副本数、更新策略和回滚机制等都能按照预期运行。

Deployment 的主要功能

  1. 声明式更新

    • 定义应用的期望状态(如副本数、镜像版本等),Kubernetes 会自动调整实际状态以匹配期望状态。
  2. 副本管理

    • 确保指定数量的 Pod 副本始终运行。
    • 支持动态扩缩容。
  3. 滚动更新

    • 支持无缝更新应用版本,逐步替换旧版本的 Pod。
    • 可以配置更新策略(如最大不可用 Pod 数和最大超出副本数)。
  4. 回滚机制

    • 如果更新失败,可以快速回滚到之前的稳定版本。
  5. 健康检查

    • 结合 Readiness ProbeLiveness Probe,确保只有健康的 Pod 才会接收流量。
  6. 版本历史

    • 记录每次更新的历史,方便回滚和审计。

Deployment 的核心字段

以下是一个典型的 Deployment 配置文件示例:

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deploymentlabels:app: myapp
spec:replicas: 3selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myapp-containerimage: myapp:1.0ports:- containerPort: 80resources:requests:memory: "64Mi"cpu: "250m"limits:memory: "128Mi"cpu: "500m"livenessProbe:httpGet:path: /healthzport: 80initialDelaySeconds: 3periodSeconds: 10readinessProbe:httpGet:path: /readyport: 80initialDelaySeconds: 5periodSeconds: 10restartPolicy: Alwaysstrategy:type: RollingUpdaterollingUpdate:maxUnavailable: 1maxSurge: 1

字段详解

1. metadata
  • name:Deployment 的名称。
  • labels:为 Deployment 添加标签,用于组织和选择资源。
2. spec
  • replicas:指定 Pod 的副本数。例如,replicas: 3 表示运行 3 个 Pod。
  • selector:定义 Deployment 如何选择管理的 Pod。
    • matchLabels:通过标签选择 Pod。必须与 template.metadata.labels 匹配。
3. template
  • 定义 Pod 的模板,用于创建 Pod。
  • metadata:Pod 的元数据,包括标签。
  • spec:Pod 的规格,定义容器、卷、环境变量等。
4. containers
  • 定义 Pod 中的容器。
  • name:容器名称。
  • image:容器镜像。
  • ports:容器暴露的端口。
  • resources:资源请求和限制。
    • requests:容器启动所需的最小资源。
    • limits:容器可以使用的最大资源。
  • livenessProbe:健康检查,用于判断容器是否存活。
  • readinessProbe:就绪检查,用于判断容器是否准备好接收流量。
5. strategy
  • 定义更新策略。
  • type:更新类型,默认为 RollingUpdate
    • RollingUpdate:滚动更新,逐步替换旧 Pod。
    • Recreate:先删除所有旧 Pod,再创建新 Pod。
  • rollingUpdate:滚动更新的详细配置。
    • maxUnavailable:更新过程中允许的最大不可用 Pod 数(可以是数字或百分比)。
    • maxSurge:更新过程中允许的最大超出副本数(可以是数字或百分比)。
6. restartPolicy
  • 定义 Pod 的重启策略,默认为 Always
  • 可选值:
    • Always:容器退出时总是重启。
    • OnFailure:容器失败时重启。
    • Never:容器退出时不重启。

Deployment 的生命周期

  1. 创建 Deployment

    • 用户通过 kubectl apply -f deployment.yaml 创建 Deployment。
    • Kubernetes 根据 spec.template 创建 Pod。
  2. 更新 Deployment

    • 修改 Deployment 的配置(如镜像版本)并重新应用。
    • Kubernetes 根据更新策略(如滚动更新)逐步替换旧 Pod。
  3. 回滚 Deployment

    • 如果更新失败,可以通过 kubectl rollout undo deployment/<deployment-name> 回滚到之前的版本。
  4. 扩缩容

    • 修改 replicas 字段并重新应用,Kubernetes 会自动调整 Pod 的数量。
  5. 删除 Deployment

    • 通过 kubectl delete deployment/<deployment-name> 删除 Deployment,同时会删除其管理的所有 Pod。

Deployment 的常用操作

1. 创建 Deployment
kubectl apply -f deployment.yaml
2. 查看 Deployment 状态
kubectl get deployments
3. 查看 Pod 状态
kubectl get pods -l app=myapp
4. 更新 Deployment(修改镜像版本)
kubectl set image deployment/myapp-deployment myapp-container=myapp:2.0
5. 回滚 Deployment
kubectl rollout undo deployment/myapp-deployment
6. 查看更新历史
kubectl rollout history deployment/myapp-deployment
7. 扩缩容
kubectl scale deployment/myapp-deployment --replicas=5
8. 删除 Deployment
kubectl delete deployment/myapp-deployment

Deployment 的适用场景

  1. 无状态应用

    • 例如 Web 服务器、API 服务等。
    • 每个 Pod 是独立的,不依赖本地存储或状态。
  2. 滚动更新

    • 需要无缝更新应用版本,避免停机。
  3. 自动恢复

    • 当 Pod 失败时,Deployment 会自动创建新的 Pod 替换。
  4. 多副本负载均衡

    • 通过 Service 将流量负载均衡到多个 Pod。

总结

  • Deployment 是 Kubernetes 中用于管理无状态应用的核心资源。
  • 它支持副本管理、滚动更新、回滚和健康检查等功能。
  • 通过声明式配置,用户可以轻松定义和管理应用的期望状态。
  • 适用于需要高可用性、无缝更新和自动恢复的场景。

http://www.mrgr.cn/news/91867.html

相关文章:

  • DeepSeek vs ChatGPT:AI 领域的华山论剑,谁主沉浮?
  • 人工智能驱动的自动驾驶:技术解析与发展趋势
  • 【笔记ing】C语言补充、组成原理数据表示与汇编实战、操作系统文件实战(高级阶段)
  • 【精调】LLaMA-Factory 快速开始4 自定义个一个sharegpt数据集并训练
  • DeepSeek掘金——调用DeepSeek API接口 实现智能数据挖掘与分析
  • 机器学习实战(12):项目实战—端到端的机器学习项目Kaggle糖尿病预测
  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • Helix——Figure 02发布通用人形机器人控制的VLA:一组神经网络权重下的快与慢双系统,让两个机器人协作干活
  • qt5实现表盘的旋转效果,通过提升QLabel类
  • go 并发 gorouting chan channel select Mutex sync.One
  • 【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)
  • DDD架构实战:用Java实现一个电商订单系统,快速掌握领域驱动设计
  • 一文详解U盘启动Legacy/UEFI方式以及GPT/MBR关系
  • 【工具篇】【深度解析 DeepAI 工具:开启 AI 应用新体验】
  • RNN中远距离时间步梯度消失问题及解决办法
  • Linux----线程
  • 《Keras 3 :使用 Vision Transformers 进行物体检测》:此文为AI自动翻译
  • 《Keras 3 : 使用迁移学习进行关键点检测》:此文为AI自动翻译
  • IO模型与NIO基础--NIO网络传输选择器--字符编码
  • 代码随想录算法训练营第四十五天| 动态规划08