【K8S系列】深入解析 Kubernetes 中的 Deployment

在这里插入图片描述

Kubernetes(K8s)是一个开源的容器编排平台,旨在自动化应用程序的部署、扩展和管理。在 Kubernetes
中,Deployment 是一种用于管理无状态应用的工作负载资源,提供了丰富的功能,包括版本控制、滚动更新和回滚。本文将深入探讨
Kubernetes 中 Deployment 的工作机制、滚动更新的实现原理、关键组件、配置策略以及监控和回滚机制。

1. Deployment 的基本概念

1.1 定义与功能

Deployment 是 Kubernetes 中的一个 API 对象,主要用于描述应用程序的期望状态。它能够确保指定数量的 Pod 副本在集群中运行,并能够自动处理 Pod 的创建、更新和删除。

1.2 关键特性

  • 版本控制: Deployment 允许用户跟踪不同版本的应用,并能够轻松回滚到先前的版本。
  • 自愈能力: 如果某个 Pod 失败,Deployment 控制器会自动重启或替换它,以确保系统的稳定性。
  • 无缝更新: 支持滚动更新,避免在更新应用时出现服务中断。

2. 滚动更新机制

2.1 滚动更新的定义

滚动更新是一种逐步替换旧版本 Pod 的策略,确保在更新过程中服务的可用性。Kubernetes 会在更新时逐步创建新 Pod,同时删除旧 Pod,用户在更新过程中不会感知到服务中断。此机制不仅提升了用户体验,还减少了因更新引起的故障风险。

2.2 滚动更新的工作流程

当用户通过 kubectl applykubectl set image 更新 Deployment 时,Kubernetes 开始滚动更新过程,具体步骤如下:

  1. 创建新 ReplicaSet:

    • Deployment 控制器会根据更新后的 Pod 模板创建一个新的 ReplicaSet。
  2. 逐步替换 Pod:

    • 根据 Deployment 的更新策略,逐步创建新 Pod,并在新 Pod 准备好后删除旧 Pod。
    • 通过 maxSurgemaxUnavailable 参数控制更新的速度和可用性。
  3. 健康检查:

    • Kubernetes 使用 Liveness 和 Readiness Probe 来确保新 Pod 健康。在新 Pod 通过健康检查并处于 Ready 状态后,才能删除旧 Pod。
  4. 更新完成:

    • 当所有旧 Pod 都被新 Pod 替换,并且新 Pod 处于健康状态时,滚动更新完成。

2.3 更新策略配置

通过 .spec.strategy 字段,用户可以配置滚动更新策略。以下是配置示例:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-container
        image: my-image:latest
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1        # 允许的超出期望数量的 Pod 数
      maxUnavailable: 1  # 允许不可用的 Pod 数

2.4 参数详解

  • maxSurge:

    • 定义在更新过程中,可以超过期望 Pod 数量的 Pod 数。设置为 1 意味着在更新期间,最多可以有 4 个 Pod 同时运行(如果期望数量为 3)。
  • maxUnavailable:

    • 定义在更新过程中,允许不可用的 Pod 数量。设置为 1 意味着在任何时刻至少有 2 个 Pod 处于可用状态。

2.5 示例场景

假设有一个 Deployment 期望有 3 个 Pod 运行,当前版本的 Pod 使用镜像 my-image:v1,现在需要更新到 my-image:v2

  1. 创建新的 ReplicaSet: 控制器创建一个新的 ReplicaSet,管理新版本的 Pod。
  2. 逐步替换:
    • 假设 maxSurge 设置为 1,maxUnavailable 设置为 1,Kubernetes 会首先创建一个新 Pod(总数增至 4),然后在新 Pod 准备好并通过健康检查后,删除一个旧 Pod(总数降至 3)。
    • 重复这个过程,直到所有旧 Pod 被新 Pod 替换。
  3. 完成更新: 最终,所有旧的 Pod 都被替换为新的 Pod,并且健康检查通过。

3. Deployment 的实现原理

3.1 控制循环

Kubernetes 的核心机制是控制循环。Deployment 控制器持续监控当前状态与期望状态之间的差异,并根据差异采取相应措施。在滚动更新过程中,控制器的主要任务包括:

  1. 创建新的 ReplicaSet: 当检测到需要更新时,控制器会创建新的 ReplicaSet。
  2. 监控新 Pod 的健康状态: 确保新 Pod 通过健康检查。
  3. 逐步替换旧 Pod: 根据配置逐步删除旧 Pod。
  4. 更新 Deployment 状态: 更新 Deployment 的状态,指向新的 ReplicaSet。

3.2 健康检查机制

健康检查是确保应用稳定性的关键。Kubernetes 提供两种主要的健康检查机制:

  • Liveness Probe: 用于检查容器是否处于运行状态,失败时会重启容器。
  • Readiness Probe: 用于检查容器是否准备好接收流量,失败时会将 Pod 标记为不可用,直到它准备好为止。

4. 监控与回滚

4.1 监控更新状态

可以使用以下命令监控 Deployment 的更新状态:

kubectl rollout status deployment/my-deployment

该命令会显示当前更新的进度,确保用户及时了解更新过程。

4.2 查看历史版本

用户可以查看 Deployment 的历史版本,以便选择回滚的版本:

kubectl rollout history deployment/my-deployment

4.3 回滚机制

如果更新后出现问题,用户可以快速回滚到之前的版本:

kubectl rollout undo deployment/my-deployment

这个命令会将 Deployment 的状态恢复到之前的 ReplicaSet,确保服务的迅速恢复。

5. 总结

Kubernetes 中的 Deployment 是管理无状态应用的核心组件,提供了版本控制、滚动更新和回滚等重要功能。通过深入理解其工作机制和配置选项,用户能够灵活地管理应用的生命周期,确保应用的高可用性和稳定性。

通过合理地配置 Deployment 和监控其更新状态,运维团队可以有效应对应用的版本迭代,快速响应潜在问题,从而提升整个系统的可靠性。Kubernetes 的这些特性使其成为现代微服务架构中不可或缺的工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923896.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

玩转 Burp Suite (1)

内容预览 ≧∀≦ゞ 玩转 Burp Suite (1)声明Burp Suite 简介Dashboard(仪表盘)1. 默认任务管理2. 暂停任务3. 新建扫描任务4. 使用总结 Target(目标)1. SIte Map (站点地图)2. Scope(范围&#…

【ArcGISPro】Sentinel-2数据处理

错误 默认拉进去只组织了4个波段,但是实际有12个波段 解决方案 数据下载 Sentinel-2 数据下载-CSDN博客 数据处理 数据查看 创建镶嵌数据集 在数据管理工具箱中找到创建镶嵌数据集

智慧环保大数据解决方案

1. 智慧环保概述 智慧环保是“数字环保”的延伸,借助物联网技术整合环境监控对象,通过云计算实现环境管理与决策的智能化。其核心在于快速感知城市环境指标,保障人体健康与生命安全。 2. 智慧环保总体目标 智慧环保的总体目标是建立全面感…

【H2O2|全栈】JS进阶知识(八)ES6(4)

目录 前言 开篇语 准备工作 浅拷贝和深拷贝 浅拷贝 概念 常见方法 弊端 案例 深拷贝 概念 常见方法 弊端 逐层拷贝 原型 构造函数 概念 形式 成员 弊端 显式原型和隐式原型 概念 形式 constructor 概念 形式 原型链 概念 形式 结束语 前言 开篇语…

03-微服务搭建

1、搭建分布式基本环境 分布式组件 功能 SpringCloud Alibaba - Nacos 注册中心(服务发现/注册)、配置中心(动态配置管理) SpringCloud Alibaba - Sentinel 服务容错(限流、降级、熔断) SpringCloud …

Vue前端开发2.3.2-4 绑定指令

本文介绍了Vue中的绑定指令,包括属性绑定指令v-bind、事件绑定指令v-on以及双向数据绑定指令v-model。通过创建单文件组件,演示了如何使用这些指令来控制DOM属性、监听事件和实现表单输入与数据的双向同步。同时,探讨了v-model的修饰符如.num…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案: 这个问题应该是支付宝基础库的问题,除了依赖于官方更新之外,开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar,这样即使 tabBar 被渲染出来,但从视觉上也不会有问题 1.官方文…

双向链表、循环链表、栈

双向循环链表 class Node:#显性定义出构造函数def __init__(self,data):self.data data #普通节点的数据域self.next None #保存下一个节点的链接域self.prior None #保存前一个节点饿链接域 class DoubleLinkLoop:def __init__(self, node Node):self.head nodeself.siz…

【大数据学习 | Spark-Core】RDD的缓存(cache and checkpoint)

1. 单应用缓存:cache 1.1 cache算子 cache算子能够缓存中间结果数据到各个executor中,后续的任务如果需要这部分数据就可以直接使用避免大量的重复执行和运算。 rdd 存储级别中默认使用的算子cache算子,cache算子的底层调用的是persist算子…

上海乐鑫科技一级代理商飞睿科技,ESP32-C61高性价比WiFi6芯片高性能、大容量

在当今快速发展的物联网市场中,无线连接技术的不断进步对智能设备的性能和能效提出了更高要求。为了满足这一需求,乐鑫科技推出了ESP32-C61——一款高性价比的Wi-Fi 6芯片,旨在为用户设备提供更出色的物联网性能,并满足智能设备连…

如何选择黑白相机和彩色相机

我们在选择成像解决方案时黑白相机很容易被忽略,因为许多新相机提供鲜艳的颜色,鲜明的对比度和改进的弱光性能。然而,有许多应用,选择黑白相机将是更好的选择,因为他们产生更清晰的图像,更好的分辨率&#…

ubuntu22开机自动登陆和开机自动运行google浏览器自动打开网页

一、开机自动登陆 1、打开settings->点击Users 重启系统即可自动登陆桌面 二、开机自动运行google浏览器自动打开网页 1、安装google浏览器 sudo wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb sudo dpkg -i ./google-chrome-stable…

MVC、EL、JSTL

1.MVC设计模式 三层: MVC: M(Model)模型:负责业务逻辑处理,数据库访问。 V(View)视图:负责与用户交互。 C(Controller)控制器:负责流程…

Python的3D可视化库 - vedo (3)visual子模块 点对象的可视化控制

文章目录 3 PointsVisual的方法3.1 对象属性3.1.1 顶点大小3.1.2 复制属性3.1.3 颜色设置3.1.4透明度设置 3.2 对象光效3.2.1 点的形状3.2.2 点的表面光效 3.3 尾随线和投影3.3.1 尾随线3.3.2 投影 3.4 给对象附加文字说明3.4.1 标注3.4.2 2D标注3.4.3 气泡说明3.4.4 旗标说明3…

MySQL系列之远程管理(安全)

导览 前言Q:如何保障远程登录安全一、远程登录的主要方式1. 用户名/口令2. SSH3. SSL/TLS 二、使用TLS协议加密连接1. 服务端2. 客户端 结语精彩回放 前言 在我们的学习或工作过程中,作为开发、测试或运维人员,经常会通过各类客户端软件&…

交通路口智能监测平台实现

目录 本文所有资源均可在该(https://www.aspiringcode.com/content?id17218996189491&uid3e852f876bcd45a4b3e8cf241260451b)处获取。 1.概述 交通要道的路口上人车穿行,特别是上下班早高峰,且时常发生交通事故。因此对交通路口的车流量和人流量的…

Qt Graphics View 绘图架构

Qt Graphics View 绘图架构 "QWGraphicsView.h" 头文件代码如下&#xff1a; #pragma once#include <QGraphicsView>class QWGraphicsView : public QGraphicsView {Q_OBJECTpublic:QWGraphicsView(QWidget *parent);~QWGraphicsView();protected:void mouseM…

获 2023 年度浙江省科学技术进步奖一等奖 | 网易数智日报

11 月 22 日&#xff0c;加快建设创新浙江因地制宜发展新质生产力动员部署会暨全省科学技术奖励大会在杭州隆重召开。浙江大学、网易数智等单位联合研发的“大规模结构化数据智能计算平台及产业化”项目获得 2023 年度浙江省科学技术进步奖一等奖。 加快建设创新浙江因地制宜发…

C++笔记之构造函数声明只需要写明需要的参数,不需要列出所有成员变量、可以使用成员初始化列表初始化所有需要的成员变量

C++笔记之构造函数声明只需要写明需要的参数,不需要列出所有成员变量、可以使用成员初始化列表初始化所有需要的成员变量 参考笔记 C++新特性探究(七):初始化列表(Initialization List) C++之关于初始化列表(Initialization List)的一个补充示例 C++笔记之构造函数声明只需要…

Element UI 打包探索【1】

目录 第一个命令 第二个命令 node build/bin/iconInit.js node build/bin/build-entry.js node build/bin/i18n.js node build/bin/version.js 总结 最近在接触组件库的项目&#xff0c;所以特意拿来Element UI借鉴学习一下&#xff0c;它算是做前端的同学们离不开的一…