K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件
当谈到 Kubernetes 集群中的应用程序部署和管理时,Deployment、ReplicaSet 和 Pod 是三个重要的概念。它们之间存在一定的关系和层次结构。下面是对 Deployment、ReplicaSet 和 Pod 的详细解释以及它们之间的关系。
Deployment(部署)
Deployment(部署)是 Kubernetes 中用于管理应用程序部署的资源对象。它定义了一组 Pod 和关于如何更新这些 Pod 的规范。Deployment 提供了声明式的方式来创建和更新应用程序,以便实现高可用性和故障恢复。
Deployment 的主要目标是确保指定数量的 Pod 副本处于运行状态,并且可以根据需要自动扩展或缩减副本数量。它还提供了滚动更新的功能,允许在不中断应用程序服务的情况下逐步更新应用程序版本。
一个 Deployment 资源通常与一个或多个 ReplicaSet 资源关联。
但是为了方便管理, 我们通常只让1个deployment 对应1个 ReplicaSet!
ReplicaSet(副本集)
ReplicaSet(副本集)是 Kubernetes 中的一个资源对象,用于确保指定数量的 Pod 副本正在运行。ReplicaSet 可以看作是 Deployment 的实现机制之一,它负责创建和维护一组 Pod 副本。
ReplicaSet 通过标签选择器来选择要管理的 Pod。它会监控 Pod 的运行状态,并根据需要创建新的 Pod 副本或删除不需要的副本,以确保所需的副本数量保持稳定。如果 Pod 发生故障或被删除,ReplicaSet 会自动创建新的 Pod 来替代它们。
ReplicaSet 具有一个模板,定义了所管理的 Pod 的规范。当需要创建新的 Pod 时,ReplicaSet 使用该模板来生成 Pod 的副本。
Pod(容器组)
Pod(容器组)是 Kubernetes 中最小的可部署和管理的单元。它是一个由一个或多个容器组成的组合,共享相同的网络命名空间和存储卷。Pod 是部署在节点上的实际应用程序实例。
Pod 中的容器一般是紧密耦合的,它们共享相同的生命周期和资源。它们可以通过本地主机名(localhost)和端口进行通信。Pod 可以包含多个容器,这些容器可以共享相同的存储和网络资源。
Deployment 和 ReplicaSet 负责创建和管理 Pod,确保所需数量的 Pod 副本正在运行,并根据需要进行扩展或缩减。它们提供了更高级别的抽象和控制,使得应用程序的部署和更新变得更加方便和可靠。
综上所述,Deployment 是对应用程序的高级描述,ReplicaSet 是为 Deployment 提供实现机制的对象,而 Pod 是实际运行的容器组。这三者之间的关系构成了 Kubernetes 中应用程序的部署和管理的层次结构。通过使用 Deployment、ReplicaSet 和 Pod,我们可以轻松地管理应用程序的生命周期、可扩展性和可靠性。
yaml 文件内容
apiVersion: apps/v1
kind: Deployment
metadata:labels: # label of this deploymentapp: bq-api-service # custom definedname: bq-api-service-deploy-samplenamespace: default
spec:replicas: 10 # desired replica count, Please note that the replica Pods in a Deployment are typically distributed across multiple nodes.selector: # label of the Pod that the Deployment is managing,, it's mandatory, without it , we will get this error # error: error validating data: ValidationError(Deployment.spec.selector): missing required field "matchLabels" in io.k8s.apimachinery.pkg.apis.meta.v1.LabelSelector ..matchLabels:app: bq-api-servicestrategy: # Strategy of upodatetype: RollingUpdate # RollingUpdate or RecreaterollingUpdate:maxSurge: 25% # The maximum number of Pods that can be created over the desired number of Pods during the updatemaxUnavailable: 25% # The maximum number of Pods that can be unavailable during the updatetemplate: # Pod templatemetadata:labels:app: bq-api-service # label of the Pod that the Deployment is managing. must match the selector, otherwise, will get the error Invalid value: map[string]string{"app":"bq-api-xxx"}: `selector` does not match template `labels`spec:containers:- image: europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1 # image of the containerimagePullPolicy: IfNotPresentname: bq-api-service-containerrestartPolicy: Always # Restart policy for all containers within the PodterminationGracePeriodSeconds: 10 # The period of time in seconds given to the Pod to terminate gracefully
配置项解读
apiVersion:指定使用的 Kubernetes API 的版本。在这个示例中,我们使用的是 apps/v1 版本。
kind:指定资源类型,这里是 Deployment。
metadata:元数据信息部分,包含标签、名称和命名空间等信息。labels:Deployment 的标签,用于识别和组织资源。在这个示例中,我们使用了自定义标签 app: bq-api-service。name:Deployment 的名称,这里命名为 bq-api-service-deploy-sample。
namespace:Deployment 所在的命名空间,这里使用默认命名空间 default。
spec:Deployment 的规范部分,定义了 Deployment 的行为和特性。replicas:指定期望的副本数量。在这个示例中,我们设置为 10,表示我们希望有 10 个 Pod 的副本。selector:用于选择所管理的 Pod 的标签选择器,是必需的配置项。在这个示例中,我们使用了标签选择器 app: bq-api-service。strategy:指定 Deployment 的更新策略。type:更新策略的类型,可以是 RollingUpdate(滚动更新)或 Recreate(重新创建)。rollingUpdate:滚动更新的配置项。maxSurge:更新期间可创建的最大 Pod 数量,超过期望数量。在这个示例中,我们设置为 25%,表示最多可以创建超过 25% 的额外 Pod。maxUnavailable:更新期间可不可用的最大 Pod 数量。在这个示例中,我们设置为 25%,表示最多可以有 25% 的 Pod 不可用。template:Pod 的模板部分,定义了创建 Pod 的规范。metadata:Pod 的元数据信息,包括标签等。labels:Pod 的标签,用于识别和组织资源。在这个示例中,我们使用了标签 app: bq-api-service。 注意这里的标签必须与上面selector 的标签匹配, 否则ReplicaSet 会找不到相应的Pod, 这个Deployment yaml执行时也会出错spec:Pod 的规范部分,定义了 Pod 的行为和特性。containers:容器的定义部分。image:容器的镜像。在这个示例中,我们使用了镜像 europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1。imagePullPolicy:镜像拉取策略。在这个示例中,我们设置为 IfNotPresent,表示如果本地没有该镜像时才去拉取。name:容器的名称,这里命名为 bq-api-service-container。restartPolicy:所有容器的重启策略。在这个示例中,我们设置为 Always,表示容器始终会被重启。terminationGracePeriodSeconds:Pod 正常终止的时间间隔(秒)。在这个示例中,我们设置为 10,表示在终止 Pod 之前等待 10 秒钟。 通常用于预留时间让preStop hook执行
部署
root@k8s-master:~/k8s-s/deployments# kubectl apply -f bq-api-service-sample.yaml
deployment.apps/bq-api-service-deploy-sample createdroot@k8s-master:~/k8s-s/deployments# kubectl get replicaSet -o wide
NAME DESIRED CURRENT READY AGE CONTAINERS IMAGES SELECTOR
bq-api-service-deploy-sample-9f8d9c988 10 10 10 30m bq-api-service-container europe-west2-docker.pkg.dev/jason-hsbc/my-docker-repo/bq-api-service:1.1.1 app=bq-api-service,pod-template-hash=9f8d9c988root@k8s-master:~# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
bq-api-demo-2 1/1 Running 5 (5h39m ago) 10d 10.244.3.20 k8s-node3 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-25tqr 1/1 Running 0 92s 10.244.1.20 k8s-node1 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-67psf 1/1 Running 0 92s 10.244.3.30 k8s-node3 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-cvm4z 1/1 Running 0 92s 10.244.3.32 k8s-node3 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-f77tx 1/1 Running 0 92s 10.244.1.23 k8s-node1 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-f98s6 1/1 Running 0 92s 10.244.2.82 k8s-node0 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-g6627 1/1 Running 0 92s 10.244.1.22 k8s-node1 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-jlc9w 1/1 Running 0 92s 10.244.3.31 k8s-node3 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-mnqmf 1/1 Running 0 92s 10.244.2.80 k8s-node0 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-pw468 1/1 Running 0 92s 10.244.2.81 k8s-node0 <none> <none>
bq-api-service-deploy-sample-9f8d9c988-v565f 1/1 Running 0 92s 10.244.1.21 k8s-node1 <none> <none>
nginx-test-post-start 1/1 Running 1 (39h ago) 3d15h 10.244.2.70 k8s-node0 <none> <none>
nginx-test-pre-stop 1/1 Running 1 (39h ago) 41h 10.244.2.69 k8s-node0 <none> <none>
可以见到有1个 RS 和 10个POD 被创建出来了, 而且会分配在多个nodes 中
相关文章:
K8S Deployment 简介, 1个简单的Kubernetes Deployment YAML 文件
当谈到 Kubernetes 集群中的应用程序部署和管理时,Deployment、ReplicaSet 和 Pod 是三个重要的概念。它们之间存在一定的关系和层次结构。下面是对 Deployment、ReplicaSet 和 Pod 的详细解释以及它们之间的关系。 Deployment(部署) Deploy…...
win11安装WSL UbuntuTLS
win11安装WSL WSL 简介WSL 1 VS WSL 2先决要求安装方法一键安装通过「控制面板」安装 WSL 基本命令Linux发行版安装Ubuntu初始化相关设置root用户密码网络工具安装安装1panel面板指导 WSl可视化工具问题总结WSL更新命令错误Ubuntu 启动初始化错误未解决问题 WSL 简介 Windows …...
第十题:金币
题目描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到…...
Windows 11 中Docker的安装教程
选择正确的Docker版本 在Windows上,你可以安装两种类型的Docker:Docker Desktop和Docker Toolbox。Docker Desktop是针对Windows 10 Pro、Enterprise和Education版本的,这些版本内置了Hyper-V虚拟化支持。对于旧版本的Windows,比…...
纯C代码模板
一、快排 void QuickSort(int *a,int left,int right){if(left>right) return;else{int low left,high right;int pivot a[low];while(low<high){while(a[high] > pivot && low < high){high--;}a[low] a[high]; //必须先动a[low]while(a[low] < …...
二、GitLab相关操作
GitLab相关操作 一、组、用户、项目管理1.创建组2.创建项目3.创建用户并分配组3.1 创建用户3.2 设置密码3.3 给用户分配组 二、拉取/推送代码1.配置ssh(第一次需要)1.1 创建一个空文件夹1.2 配置本地仓账号和邮箱1.3 生成ssh公钥密钥1.4 gitlab配置公钥 2.拉取代码3.推送代码3.…...
【详细注释+流程讲解】基于深度学习的文本分类 TextCNN
前言 这篇文章用于记录阿里天池 NLP 入门赛,详细讲解了整个数据处理流程,以及如何从零构建一个模型,适合新手入门。 赛题以新闻数据为赛题数据,数据集报名后可见并可下载。赛题数据为新闻文本,并按照字符级别进行匿名…...
Day.21
interface MyInterface{public final static int PI 3;void show();public default void printX(){System.out.println("接口默认方法");}public static void printY(){System.out.println("接口静态方法");}}class MyClass implements MyInterface{publi…...
Spring-IoC 基于注解
基于xml方法见:http://t.csdnimg.cn/dir8j 注解是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理,简化 Spring的 XML配置。 格式:注解(属性1"属性值1",...) 可以加在类上…...
Spring声明式事务以及事务传播行为
Spring声明式事务以及事务传播行为 Spring声明式事务1.编程式事务2.使用AOP改造编程式事务3.Spring声明式事务 事务传播行为 如果对数据库事务不太熟悉,可以阅读上一篇博客简单回顾一下:MySQL事务以及并发访问隔离级别 Spring声明式事务 事务一般添加到…...
【C语言数据库】Sqlite3基础介绍
1. SQLite简介 SQLite is a C-language library that implements a small, fast, self-contained, high-reliability, full-featured, SQL database engine. SQLite is the most used database engine in the world. SQLite is built into all mobile phones and most computer…...
el-upload上传图片图片、el-load默认图片重新上传、el-upload初始化图片、el-upload编辑时回显图片
问题 我用el-upload上传图片,再上一篇文章已经解决了,el-upload上传图片给SpringBoot后端,但是又发现了新的问题,果然bug是一个个的冒出来的。新的问题是el-upload编辑时回显图片的保存。 问题描述:回显图片需要将默认的 file-lis…...
【拓扑空间】示例及详解1
例1 度量空间的任意两球形邻域的交集是若干球形邻域的并集 Proof: 任取空间的两个球形邻域、,令 任取,令 球形领域 例2 规定X的子集族,证明是X上的一个拓扑 Proof: 1. 2., (若干个球形邻域的并集都是的元素,元素…...
linux安装jdk8
上传到某个目录,例如:/usr/local/ tar -xvf jdk-8u144-linux-x64.tar.gz配置环境变量: export JAVA_HOME/usr/local/java export PATH$PATH:$JAVA_HOME/bin设置环境变量: source /etc/profile...
Spring重点知识(个人整理笔记)
目录 1. 为什么要使用 spring? 2. 解释一下什么是 Aop? 3. AOP有哪些实现方式? 4. Spring AOP的实现原理 5. JDK动态代理和CGLIB动态代理的区别? 6. 解释一下什么是 ioc? 7. spring 有哪些主要模块?…...
HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)
前言:在学习前端基础时,必不可少的就是三大件(html、css、javascript ),而HTML(超文本标记语言——HyperText Markup Language)是构成 Web 世界的一砖一瓦,它定义了网页内容的含义和…...
如何借助Idea创建多模块的SpringBoot项目
目录 1.1、前言1.2、开发环境1.3、项目多模块结构1.4、新建父工程1.5、创建子模块1.6、编辑父工程的pom.xml文件 1.1、前言 springmvc项目,一般会把项目分成多个包:controler、service、dao、utl等,但是随着项目的复杂性提高,想复用其他一个模…...
爬虫 新闻网站 并存储到CSV文件 以红网为例 V1.0
爬虫:红网网站, 获取当月指定关键词新闻,并存储到CSV文件 V1.0 目标网站:红网 爬取目的:为了获取某一地区更全面的在红网已发布的宣传新闻稿,同时也让自己的工作更便捷 环境:Pycharm2021&#…...
CentOS 使用 Cronie 实现定时任务
CentOS 使用 Cronie 实现定时任务 文章目录 CentOS 使用 Cronie 实现定时任务一、简介二、基本使用1、常用命令2、使用示例第一步:创建脚本/home/create.sh第二步:添加定时任务第三步:重启 cronie 服务额外:查看 cronie 运行状态定…...
java生成word
两种方案 一、poi-tl生成word <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency> public static void main(String[] args) throws Exception {String…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
