【云原生_K8S系列】Kubernetes 控制器之 Deployment

在 Kubernetes 中,Deployment 是一种高级控制器,负责管理应用的部署和生命周期。它提供了一种声明性的方式来定义应用的期望状态,并确保实际状态与期望状态保持一致。Deployment 可以自动处理应用的滚动更新、扩展和回滚等任务,是 Kubernetes 中最常用的控制器之一。本文将详细介绍 Deployment 的概念,并结合实际案例阐述其使用方法。

在这里插入图片描述

什么是 Deployment?

Deployment 是 Kubernetes 中的一个控制器,它管理 Pod 的副本集(ReplicaSet)。通过定义 Deployment,用户可以描述一个应用的期望状态,例如需要多少个副本、使用什么镜像以及如何进行滚动更新。Deployment 会根据这些定义自动创建和管理 Pod,确保应用始终处于期望状态。

Deployment 控制器可以确保无状态应用的高可用性和一致性,支持:

  • 动态创建和销毁 Pod
  • 查看升级进度和状态
  • 升级回滚,并具有版本记录
  • 暂停和恢复升级
  • 滚动重启

工作原理

Deployment 控制器通过 ReplicaSet(副本集控制器)来管理 Pod 的生命周期。ReplicaSet 确保指定数量的 Pod 副本始终运行。

Deployment 控制器的工作流程如下:

  • 创建 Deployment:用户创建一个 Deployment 对象,定义了应用的预期状态,包括 Pod 模板、副本数量等
  • 创建 ReplicaSet:Deployment 控制器创建或更新一个 ReplicaSet,以确保 Pod 副本的数量与预期状态一致
  • 创建 Pod:ReplicaSet 根据 Deployment 定义的 Pod 模板创建或更新 Pod
  • 监控 Pod:Deployment 控制器持续监控 Pod 的状态,确保副本数量与预期状态一致
  • 更新 Pod:当用户更新 Deployment 时,控制器会根据定义的更新策略逐步替换旧版本的 Pod

Deployment 的实际案例

接下来,通过一个实际案例来演示如何使用 Deployment 管理 Nginx 应用。

创建 Nginx Deployment

以下是一个用于创建 Nginx Deployment 的 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.19.6ports:- containerPort: 80
  • apiVersion: apps/v1:定义 API 版本。
  • kind: Deployment:表示我们要创建一个 Deployment 对象。
  • metadata:包含 Deployment 的元数据,如名称和标签。
  • spec:描述 Deployment 的具体配置。
    • replicas: 3:定义期望的 Pod 副本数量。
    • selector:指定 Deployment 关联的 Pod 标签。
    • template:定义 Pod 模板,包含 Pod 的元数据和具体配置。
      • containers:定义 Pod 中的容器。
        • name: nginx:容器的名称。
        • image: nginx:1.19.6:容器使用的镜像。
        • ports:容器暴露的端口。

部署 Nginx Deployment

使用 kubectl 命令可以在 Kubernetes 集群中部署这个 Deployment:

kubectl apply -f nginx-deployment.yaml

这个命令会读取 nginx-deployment.yaml 文件并在 Kubernetes 集群中创建一个 Nginx Deployment。

查看 Deployment 状态

使用以下命令查看 Deployment 的状态:

kubectl get deployments

输出示例:

这表明 Nginx Deployment 已成功创建并运行了三个副本。

更新 Nginx Deployment

假设我们需要将 Nginx 镜像更新到新版本 nginx:1.20.0,可以编辑 nginx-deployment.yaml 文件,修改镜像版本:

...containers:- name: nginximage: nginx:1.20.0ports:- containerPort: 80
...

然后再次应用配置:

kubectl apply -f nginx-deployment.yaml

Kubernetes 会自动执行滚动更新,逐步替换旧版本的 Pod 为新版本的 Pod。
[外链图片转存中…(img-PqQ8vFl5-1717643635578)]

回滚 Deployment

在Kubernetes中,你可以使用kubectl rollout undo命令来回滚一个deployment到其前一个版本。如果你想要回滚到特定的版本,你可以使用--to-revision参数。
以下是回滚deployment到其前一个版本的命令:

kubectl rollout undo deployment/nginx-deployment

可以通过以下命令查看可回滚版本的版本:

kubectl rollout history deployment nginx-deployment

执行上述的命令后,输出结果如下:

这个命令会将 Nginx Deployment 回滚到之前的版本,确保应用正常运行。

扩展和缩减 Deployment

可以根据需要调整 Pod 的副本数量。例如,将副本数量扩展到 5:

kubectl scale deployment/nginx-deployment --replicas=5

查看 Deployment 状态:

kubectl get deployments

输出示例:

NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5/5     5            5           10m

总结

Kubernetes Deployment 是管理应用生命周期的强大工具。通过声明性的方式定义 Deployment,可以轻松实现应用的滚动更新、回滚和扩展等操作。本文通过 Nginx 的实际案例展示了如何使用 Deployment,希望能帮助读者更好地理解和应用 Kubernetes Deployment。

如果你对 Kubernetes 和云原生技术感兴趣,欢迎关注我们后续的文章。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI 第二讲 之 Chat Model API 第九节 watsonx.ai Chat

通过 watsonx.ai,你可以在本地运行各种大型语言模型(LLM),并从中生成文本。Spring AI 通过 WatsonxAiChatModel 支持 watsonx.ai 文本生成。 您首先需要拥有一个 watsonx.ai 的 SaaS 实例(以及一个 IBM 云帐户&#x…

Elasticsearch高效检索:基础查询详解

在当今大数据和云计算的时代,信息的快速检索和高效处理成为了企业竞争的关键。Elasticsearch,作为一款基于Lucene构建的开源、分布式、RESTful搜索引擎,以其强大的全文搜索和结构化搜索能力,赢得了众多开发者和企业的青睐。今天&a…

web前端复试经验:深度解析与实用指南

web前端复试经验:深度解析与实用指南 在Web前端开发领域的求职过程中,复试无疑是一个至关重要的环节。它既是对求职者技术实力的全面检验,也是展现个人能力与潜力的绝佳机会。本文将围绕四个方面、五个方面、六个方面和七个方面,…

C++STL(四)priority_queue的详细用法及仿函数实现

目录 一:🔥介绍二:🔥priority_queue 的基本操作三:🔥priority_queue 的原型定义四:🔥重写仿函数4.1.仿函数的介绍4.2.priority_queue仿函数代码示例 五:🔥pri…

Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)

一、RAM模型介绍 这篇论文介绍了一个名为“Recognize Anything Model”(RAM)的新型基础模型,专用于图像标签识别(图像分类)。这一模型采用大规模图像-文本配对数据进行训练,无需手动注释,能够在…

关于焊点检测(SJ-BIST)模块实现

关于焊点检测(SJ-BIST)模块实现 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于焊点检测(SJ-BIST)模块实现一、引言二、焊点检测功能的实现方法(1) 输入接口&#x…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

oracle linux和ubuntu的区别

Oracle Linux和Ubuntu是两种不同的Linux发行版&#xff0c;它们有一些区别&#xff1a; 背景和支持&#xff1a; Oracle Linux是由Oracle公司开发和支持的&#xff0c;它是基于Red Hat Enterprise Linux (RHEL)的一个分支。Ubuntu是由Canonical Ltd.开发和支持的&#xff0c;它…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…

Vue3 组合式 API:依赖注入(四)

provide() provide() 函数是用于依赖注入的一个关键部分。这个函数允许你在组件树中提供一个值或对象&#xff0c;使得任何子组件&#xff08;无论层级多深&#xff09;都能够通过 inject() 函数来访问这些值。 import { provide, ref } from vue; export default { setup(…

iOS Universal Links 配置

前言 Universal Links 通用链接&#xff0c;我的理解就是通过点击这个链接&#xff0c;能够打开应用&#xff0c;还可以根据配置的路径和参数跳转到App内指定页面和传递参数。我们做微信QQ登录分享时会要求配置这个链接。网上有很多文章介绍了如何配置&#xff0c;但是每次随便…

力扣经典面试题-旋转链表(Java)

1.题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k …

python数据分析-连云港石化基地2023年用电量分析

接下来对连云港石化基地2023年用电量进行分析&#xff0c;首先导入数据分析基本的包&#xff1a; import pandas as pd import matplotlib.pyplot as plt# Load the data from the provided Excel files file_path1 data1.xlsx file_path2 data2.xlsxdata1 pd.read_excel(f…

设计模式之观察者模式ObserverPattern(十一)

一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;又被称为发布-订阅 (Publish/Subscribe) 模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更新…

Leetcode 力扣109. 有序链表转换二叉搜索树 (抖音号:708231408)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高…

arm架构下torch环境的安装(主要是conda,torch,torchvision以及tensorflow)

以前装过arm架构下的深度学习环境还是有点麻烦的&#xff0c;在此记录一下 参考&#xff1a;https://blog.csdn.net/condom10010/article/details/128139401?ops_request_misc&request_id&biz_id102&utm_termorin%E5%B9%B3%E5%8F%B0%E6%9E%B6%E6%9E%84%E9%85%8D%E…

ubuntu22.04防火墙策略

1. 安装和配置UFW 1.1 安装UFW 如果UFW尚未安装&#xff0c;可以使用以下命令进行安装&#xff1a; sudo apt update sudo apt install ufw1.2 启用UFW 启用UFW并允许SSH流量&#xff0c;以防止自己被锁定在系统之外&#xff1a; sudo ufw allow OpenSSH sudo ufw enable2…

2 程序的灵魂—算法-2.2 简单算法举例-【例 2.4】

【例 2.4】求 100 1 - 1/2 - 1/3 … 1/100 算法可表示如下&#xff1a; S1: sigh1 S2: sum1 S3: deno2 S4: sigh(-1)sigh S5: term sigh(1/deno ) S6: termsumterm S7: deno deno 1 S8:若 deno≤100&#xff0c;返回 S4&#xff1b;否则&#xff0c;结束。 double sum 1.0; …

C++11 列表初始化(initializer_list),pair

1. {} 初始化 C98 中&#xff0c;允许使用 {} 对数组进行初始化。 int arr[3] { 0, 1, 2 };C11 扩大了 {} 初始化 的使用范围&#xff0c;使其可用于所有内置类型和自定义类型。 struct Date {int _year;int _month;int _day;Date(int year, int month, int day):_year(year…

线性数据结构-栈

在JavaScript中&#xff0c;栈&#xff08;Stack&#xff09;是一种遵循后进先出&#xff08;Last In First Out, LIFO&#xff09;原则的数据结构。这意味着最后进入栈的元素将会是第一个被移除的元素。栈通常被用于限制线性数据的访问顺序&#xff0c;使得数据的插入和删除操…