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

【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-deployment
  labels:
    app: myapp
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp-container
        image: myapp:1.0
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        livenessProbe:
          httpGet:
            path: /healthz
            port: 80
          initialDelaySeconds: 3
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /ready
            port: 80
          initialDelaySeconds: 5
          periodSeconds: 10
      restartPolicy: Always
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 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.kler.cn/a/556841.html

相关文章:

  • 图数据库Neo4j面试内容整理-深度优先搜索(DFS)和广度优先搜索(BFS)
  • C语言03
  • 可编辑112页PPT | DeepSeek行业应用实践报告
  • 【TOT】Tree-of-Thought Prompting
  • day16_推荐系统和总结
  • ARM64 Trust Firmware [四]
  • 开启开源新时代:DeepSeek引领人工智能技术开放化
  • 科普:你的笔记本电脑中有三个IP:127.0.0.1、无线网 IP 和局域网 IP;两个域名:localhost和host.docker.internal
  • 电力通信物联网应用,国密网关守护电力数据安全
  • Java 表达式、语句和块
  • nginx配置:nginx.conf配置文件
  • spring中事务为什么会回滚?什么原理?
  • Vue 和 React 响应式的区别
  • 植物大战僵尸杂交版v3.2.1最新版本(附下载链接)
  • 1、Window Android 13模拟器 将编译的映像文件导入Android Studio
  • 《Zookeeper 分布式过程协同技术详解》读书笔记-2
  • [Android]AppCompatEditText限制最多只能输入两位小数
  • 在 VS Code 远程连接服务器时遇到 “Bad permissions“ 错误的解决方案
  • 如何在 Ubuntu 上安装 Docker:详细步骤指南
  • 关闭超时订单和七天自动确认收货+RabbitMQ规范