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 中

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

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

相关文章

js教程(12)——本地储存

一、介绍 前端本地存储是指在浏览器中存储数据的机制&#xff0c;它允许前端开发者将数据保存在用户的浏览器中&#xff0c;以便在用户下次访问网站时可以使用这些数据。 前端本地存储有以下几种方式&#xff1a; Cookie&#xff1a;Cookie 是最早也是最常用的前端本地存储方式…

【Java设计模式】序:设计模式总体概述

目录 什么是设计模式设计模式的分类1 创建型模式1.1. 单例&#xff08;Singleton&#xff09;1.2 原型&#xff08;Prototype&#xff09;1.3 工厂方法&#xff08;FactoryMethod&#xff09;1.4 抽象工厂&#xff08;AbstractFactory&#xff09;1.5 建造者&#xff08;Builde…

31. 下一个排列 —— LeetCode (python) [PS: LeetCode 运行环境疑似出错]

# encoding utf-8 # 开发者&#xff1a;xxx # 开发时间&#xff1a; 20:26 # "Stay hungry&#xff0c;stay foolish."class Solution(object):def nextPermutation(self, nums):import itertoolsl len(nums)a tuple(nums)nums.sort()permutations_lst list(ite…

Android RecycleView 异步缓存 itemView 提升滑动性能

RecyclerView 是 Android 官方推荐的用于展示大量数据列表的控件&#xff0c;具有高度的可定制性和灵活性。我们可以通过自定义 LayoutManager、ItemDecoration、ItemAnimator 等来实现不同的布局和动画效果&#xff0c;满足各种需求。同时&#xff0c;RecyclerView 支持局部刷…

C语言什么是静态变量?如何实现?

一、问题 在编写程序的过程中&#xff0c;对于某些函数的局部变量的值&#xff0c;有时不希望它在函数调⽤结束后消失&#xff0c;也就是不释放该变量所占⽤的存储单元&#xff1b;同样&#xff0c;有时在程序设计中也希望某些外部变量只限于被本⽂件引⽤。这就需要使⽤静态变量…

2024年清明节安装matlab 2024a

下载安装离线支持包SupportSoftwareDownloader_R2024a_win64&#xff0c;地址https://ww2.mathworks.cn/support/install/support-software-downloader.html&#xff0c;运行软件&#xff08;自解压运行&#xff09;&#xff0c;登录账号&#xff08;需要提前在官网注册&#x…

反转链表 - LeetCode 热题 23

大家好&#xff01;我是曾续缘&#x1f497; 今天是《LeetCode 热题 100》系列 发车第 23 天 链表第 2 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 反转链表 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#…

时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测

时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测 目录 时序预测 | Matlab基于CFBP级联前向BP神经网络时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab基于CFBP级联前向BP神经网络时序预测&#xff08;完整源码和数据)&#xff1b; 2.数据集为excel…

iHRM人力资源管理系统

iHRM人力资源管理系统 源码和教程都在此 https://www.yuque.com/aslwr/college/bxcq9npncyspgz9t ‍

开源模型应用落地-chatglm3-6b模型小试-入门篇(三)

一、前言 刚开始接触AI时&#xff0c;您可能会感到困惑&#xff0c;因为面对众多开源模型的选择&#xff0c;不知道应该选择哪个模型&#xff0c;也不知道如何调用最基本的模型。但是不用担心&#xff0c;我将陪伴您一起逐步入门&#xff0c;解决这些问题。 在信息时代&#xf…

5.111 BCC工具之ext4dist.py解读

一,工具简介 ext4dist跟踪ext4的读取、写入、打开和fsync操作,并将其延迟总结为2的幂次方直方图。 二,代码示例 #!/usr/bin/env pythonfrom __future__ import print_function from bcc import BPF from time import sleep, strftime import argparse# symbols kallsyms …

路由Vue-Router使用

Vue Router 是 Vue.js 的官方路由。它与 Vue.js 核心深度集成&#xff0c;让用 Vue.js 构建单页应用变得轻而易举。 介绍 | Vue Router (vuejs.org) 1. 安装 npm install vue-router4 查看安装好的vue-router 2. 添加路由 新建views文件夹用来存放所有的页面&#xff0c;在…

7-42 清点代码库

上图转自新浪微博&#xff1a;“阿里代码库有几亿行代码&#xff0c;但其中有很多功能重复的代码&#xff0c;比如单单快排就被重写了几百遍。请设计一个程序&#xff0c;能够将代码库中所有功能重复的代码找出。各位大佬有啥想法&#xff0c;我当时就懵了&#xff0c;然后就挂…

笔记: javaSE day17天笔记

第十七天课堂笔记 Java常用类 数学类★★★ math java.lang.Math , 数学类 round(x) : 四舍五入 , 把 x加0.5 后向下取整 ceil(x) : 返回大于等于x的最小整数 , 向上取整 floor(x) : 返回小于等于x的最大整数 , 向下取整 sqrt(x) : 平方根 cbrt(x): 立方根 pow(a , b)…

LangChain Demo | Agent X ReAct X wikipedia 询问《三体》的主要内容

背景 LangChain学习中&#xff0c;尝试改了一下哈里森和吴恩达课程当中的问题&#xff0c;看看gpt-3.5-turbo在集成了ReAct和wikipedia后&#xff0c;如何回答《三体》的主要内容是什么这个问题&#xff0c;当然&#xff0c;主要是为了回答这问题时LangChain内部发生了什么。所…

基于大型语言模型的智能体(Agent)研究综述--人大

内容概述 论文地址&#xff1a;https://arxiv.org/pdf/2308.11432.pdf 这篇综述内容有35页&#xff0c;内容很多&#xff0c;俗话说一图胜千言&#xff0c;作者提供了5张精美的图片和3个表格&#xff0c;把这些搞明白后对这篇综述也就理解差不多了。文章的总体结构如下由6部分…

基于GaN的半导体光学放大器SOA

摘要 基于GaN的材料可覆盖很宽的光谱范围&#xff0c;以紫外、紫、蓝、绿和红波发射的激光二极管已经商业化。基于GaN的半导体光学放大器&#xff08;SOA&#xff09;具有提高激光二极管输出功率的能力&#xff0c;因此SOA将有很多潜在应用。未来需要利用短波、超快脉冲特性的…

Linux知识点记录

Linux知识点记录 1. 后台运行应用程序方法一&#xff1a;&方法二&#xff1a;nohup & 2. 一个shell脚本中执行多个应用程序3. 2>&14. shell脚本清除日志5. 通过grep查找匹配字符串 1. 后台运行应用程序 参考文章&#xff1a;https://blog.csdn.net/Pan_peter/…

常见的四种限流算法及基础实现

常见的四种限流算法及基础实现 什么是限流有哪些限流算法&#xff1f;限流算法固定窗口滑动窗口漏桶算法令牌算法 什么是限流 限流是对某一时间窗口内的请求数进行限制&#xff0c;保持系统的可用性和稳定性&#xff0c;防止因流量暴增而导致的系统运行缓慢或宕机。 在高并发…

用kimichat批量识别出图片版PDF文件中的文字内容

图片版的PDF文件&#xff0c;怎么才能借助AI工具来提取其中全部的文字内容呢&#xff1f; 第一步&#xff1a;将PDF文件转换成图片格式 具体方法参见文章&#xff1a;《零代码编程&#xff1a;用kimichat将图片版PDF自动批量分割成多个图片》 第二步&#xff1a;识别图片中的…