首页 > 其他分享 >【云原生篇】k8s之Deployment详解

【云原生篇】k8s之Deployment详解

时间:2024-04-04 18:32:15浏览次数:18  
标签:状态 部署 更新 详解 应用 Deployment Pod k8s

Kubernetes 的 Deployment 是一种管理声明式更新的资源对象,它允许你描述应用的期望状态,并由 Deployment 控制器自动将当前状态改变为期望状态。Deployment 主要用于无状态应用的部署和扩展,但也可以用于有状态应用。

核心功能

  • 自动化部署与回滚:Deployment 可以自动更新应用的实例(Pods),并在更新过程中保持应用的可用性。如果更新失败,Deployment 也能自动回滚到之前的版本。
  • 声明式更新:你只需要声明应用的目标状态,Deployment 控制器就会负责改变实际状态以匹配目标状态。
  • 扩展和收缩:可以通过修改 Deployment 中的副本数(replicas)来扩大或缩小应用的规模。
  • 自我修复:如果某个 Pod 失败,Deployment 会替换它,确保定义的副本数量不变。

工作原理

  1. 定义 Deployment:通过 YAML 或 JSON 文件定义 Deployment,包括应用的容器镜像、副本数、更新策略等信息。
  2. 创建 Deployment:使用 kubectl apply -f deployment.yaml 命令创建 Deployment。Kubernetes API 服务器接收到创建请求后,记录期望的应用状态。
  3. Deployment 控制器响应:Deployment 控制器观察到期望状态的变化,开始采取行动将当前状态改变为期望状态。这包括启动或停止 Pod 来匹配副本数,或更新 Pod 以匹配新的应用定义。
  4. 创建 ReplicaSet:Deployment 为每次更新创建一个新的 ReplicaSet,并通过它来管理所有的 Pod。如果更新失败,Deployment 可以回滚到之前的 ReplicaSet。
  5. 健康检查和监控:Deployment 依赖 Kubernetes 的健康检查机制来监控 Pod 的健康状态。如果 Pod 不健康,它会被替换。

更新策略

Deployment 支持两种更新策略:

  • RollingUpdate(默认策略):渐进式更新应用的 Pod,新 Pod 会逐渐替换旧的 Pod,确保应用的高可用性。在任何时刻,都有一部分旧的 Pod 和新的 Pod 同时服务。
  • Recreate:先删除所有旧的 Pod,然后创建新的 Pod。这种策略适用于无法同时运行多个版本的应用,但在更新期间应用会暂时不可用。

使用场景

  • 应用部署:快速部署和更新无状态应用。
  • 持续部署/持续交付 (CI/CD):结合 CI/CD 系统自动化应用的构建、测试和部署。
  • 蓝绿部署和金丝雀发布:通过控制流量分配来实现蓝绿部署和金丝雀发布,以减少部署风险。

示例

以下是一个简单的 Deployment 定义示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

这个 Deployment 创建了 3 个副本的 Nginx 服务器,每个副本都是通过一个 Pod 运行的。当这个 Deployment 被应用到集群中时,Deployment 控制器会确保任何时候都有 3 个运行着 Nginx 1.14.2 版本的 Pod。

通过理解和使用 Deployment,你可以轻松地管理 Kubernetes 集群中的应用部署和更新,确保应用的稳定运行和快速迭代。

标签:状态,部署,更新,详解,应用,Deployment,Pod,k8s
From: https://blog.csdn.net/lin819747263/article/details/137288822

相关文章

  • 【云原生篇】K8S之StatefulSet 详解
    在Kubernetes(K8s)中,StatefulSet是一种用于管理有状态应用的工作负载API对象。与Deployment管理无状态应用不同,StatefulSet为每个Pod副本提供了持久性标识符(如名称和网络标识),并且可以保证部署和扩展顺序、以及网络标识和存储的稳定性。核心特性稳定、唯一的网......
  • Python+requests+Pytest+logging+allure+pymysql框架详解
    一、框架目录结构1)tools目录用来放公共方法存储,如发送接口以及读取测试数据的方法,响应断言数据库断言前置sql等方法;2)datas目录用例存储接口用例的测试数据,我是用excel来存储的数据,文件数据图片数据等;3)testcases目录用来存放测试用例,一个python文件对应一个接口模块的......
  • Python常用算法思想--递归算法思想详解【附源码】
    递归算法能够重复性的将问题分解为同类的子问题,然后解决这些子问题,最终达到解决最开始的问题为目的。以下从解决“阶乘”问题、“汉诺塔”问题、“斐波那契数列”问题、“最大公倍数和最小公约数”问题、“小球弹跳”、“深度优先”与“广度优先”问题等六个经典递归算法的案例......
  • 基于深度学习的犬种识别系统详解(网页版+YOLOv8/v7/v6/v5代码+训练数据集)
    摘要:本文深入研究了基于YOLOv8/v7/v6/v5等深度学习模型的犬种识别技术,核心采用YOLOv8并整合了YOLOv7、YOLOv6、YOLOv5算法,进行性能指标对比;详述了国内外研究现状、数据集处理、算法原理、模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视......
  • k8s informer resync机制
    informerFactory创建informerinformer一般由informerFactory创建(支持直接创建informer,一般不这么做),informerFactory支持创建多种资源类型的informer,同一个informerFactory中同一种资源类型只创建一个informer。DeltaFIFOqueue里面保存了KeyOf函数计算得到的存储资源对象的key......
  • 【递推与递归】python例题详解
    文章目录1、递归实现指数型枚举2、递归实现排列型枚举3、递归实现组合型枚举4、简单斐波那契5、带分数6、翻硬币1、递归实现指数型枚举题目从 1∼n这 n个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一......
  • k8s PV和PVC以及StorageClass
    本地盘和云磁盘区别本地盘不支持跨物理机迁移,云磁盘支持跨物理机迁移。本地目录生命周期emptyDir、downwardAPI、configMap、secret:kubelet创建本地目录,该目录会随着Pod的消亡而删除。hostPath:本地目录一直存在。PVC、PV和StorageClass关系PVC是持久卷定义,PV是持久卷即磁盘,St......
  • C语言入门:预处理器指令详解
    目录一宏定义A.不带参数的宏定义:B.带参数的宏定义(宏函数):C.宏定义的注意事项:二条件编译A.#ifdef/#ifndef:B.#if/#elif/#else/#endif:C.#pragmaonce:三头文件包含A.#include:B.头文件包含顺序:C.编译警告:四C语言的优缺点A.C语言的优点:B.C语言的缺点:五C......
  • Liunx中mail详解(centos7 / kylin)
    #下载邮件yuminstall-ymailx一.系统用户之间发送邮件#方法一#发送邮件mail-s"邮件标题"用户名#回车,就可以输入内容,按住ctrl+删除键即可删除输入的内容,换行也使用回车#ctrl+d发送/回车输入一个.再回车也可以进行发送,当然这个点不会放进内容里#方法二echo......
  • SpringSecurity认证和授权流程详解
    什么是SpringSecuritySpringSecurity是一个Java框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。SpringSecurity基于过滤器链的概念,可以轻松地集成到任何基于Spring的应用程序中。它支持多种身份验证选项和授权策略,开发人员......