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

news/2025/2/23 3:07:38

文章目录

Kubernets资源概览

<a class=k8s-reources" />

Deployment__4">Kubernetes Deployment 资源类型详细介绍

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

Deployment__8">Deployment 的主要功能

  1. 声明式更新

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

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

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

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

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

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

Deployment__30">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
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__123">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__143">Deployment 的常用操作

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

Deployment__185">Deployment 的适用场景

  1. 无状态应用

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

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

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

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

总结

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

http://www.niftyadmin.cn/n/5862925.html

相关文章

Canva迁移策略深度解析:应对每日5000万素材增长,从MySQL到DynamoDB的蜕变

随着数字化设计的蓬勃发展&#xff0c;Canva作为一款备受欢迎的在线设计平台&#xff0c;面临着日益增长的用户生成内容挑战。每天&#xff0c;平台上新增的素材数量高达5000万&#xff0c;这对数据库系统提出了前所未有的要求。为了应对这一挑战&#xff0c;Canva决定对其数据…

2.21力扣-回溯组合

77. 组合 - 力扣&#xff08;LeetCode&#xff09; 一&#xff1a;JAVA class Solution {List<Integer> list new LinkedList<>();List<List<Integer>> ans new LinkedList<>();public List<List<Integer>> combine(int n, int k)…

day56 第十一章:图论part06

108.冗余连接 注意init初始化 改进&#xff1a; 其实只有一条边冗余&#xff0c;改为&#xff0c;如果两条边在同一个集合里&#xff0c;就输出&#xff0c;不然加入。 #include <iostream> #include <vector> using namespace std;int n 1005; vector<int>…

智能工业相机:重塑现代制造的视觉革命

在工业4.0的浪潮下&#xff0c;智能工业相机正从传统的“图像采集工具”进化为“产线决策大脑”。凭借多模态感知、边缘计算和自主决策能力&#xff0c;它正在颠覆制造业的质量控制、流程优化与生产管理方式。 智能工业相机已超越“替代人眼”的初级阶段&#xff0c;正在进化为…

Linux离线环境安装miniconda并导入依赖包

一、实现目标 在Linux离线环境中安装miniconda后&#xff0c;将联网环境中的依赖包导入到离线miniconda中&#xff0c;使得python项目在Linux离线环境中正常运行 二、前置条件 设备需要拷贝的文件联网Linux虚拟机miniconda安装包、依赖包、项目文件离线Linux虚拟机/ 三、实…

Linux 在云计算中的应用有哪些?

目录 Linux 在云计算中的应用 1. 云计算基础设施的核心 2. 虚拟化技术的基础 3. 容器化与微服务 4. 大数据与人工智能 5. 开源生态与社区支持 6. 在 Google Cloud 上运行 Linux 的优势 7. 边缘计算与物联网 总结 Linux 在云计算中的应用 Linux 作为开源操作系统的代表…

springboot的 nacos 配置获取不到导致启动失败及日志不输出问题

前言 问题 1. 本地启动应用时&#xff0c;一切正常&#xff0c;但是部署 docker 后&#xff0c;会因为获取不到 nacos 中的配置导致服务启动失败。 2.当 docker 中的服务一直重启&#xff0c;可能会突然某一次启动成功&#xff0c;之后只要不重新构建 docker 镜像&#xff0c…

《深度剖析:人工智能与元宇宙构建的底层技术框架》

在科技飞速发展的当下&#xff0c;人工智能与元宇宙成为了备受瞩目的前沿领域。它们不仅是科技进步的象征&#xff0c;更预示着未来社会和经济发展的新方向。而要深入理解这两大领域&#xff0c;关键在于掌握其构建的底层技术框架。 一、人工智能的底层技术核心 &#xff08;…