k8s 的 Deployment控制器

news2024/11/26 7:36:06

1. RS与RC与Deployment关联

  • RC(Replication Controller)主要作用就是用来确保容器应用的副本数始终保持在用户定义的副本数。即如果有容器异常退出,会自动创建新的pod来替代;而如果异常多出来的容器也会自动回收。
  • K8S官方建议使用RS(ReplicaSet)替代RC(Replication Controller)进行部署,RS跟RC没有本质的不同,只是名字不一样,并且RS支持集合式的selector.

2. 实例:

  • 使用deployment来创建pod
vim  nginx-rs.yaml

apiVersion: apps/v1    #指定要使用的 Kubernetes API 版本,这里使用的是 apps/v1
kind: ReplicaSet   #指定要创建的对象类型,这里是 ReplicaSet
metadata:          #元数据信息,包括对象的名称、标签等信息
  name: my-nginx   #对象的名称,这里是 my-nginx
spec:              #指定 ReplicaSet 对象的配置信息
  replicas: 3      #指定需要运行的副本数,这里是 3
  selector:        #指定选择器,用于选择需要管理的 Pod
    matchLabels:   #匹配标签,这里是 app: nginx-www,表示选择具有 app=nginx-www 标签的Pod
      app: nginx-www
  template:        #指定 Pod 的模板,用于创建和管理 Pod
    metadata:      #Pod 元数据信息,包括标签等信息
      labels:      #Pod 标签,这里是 app: nginx-www
        app: nginx-www
    spec:         #Pod 配置信息
      containers: #容器列表,这里只有一个 Nginx 容器
      - name: my-nginx  #容器名称,这里是 my-nginx
        image: nginx:latest  #容器镜像名称,这里是 nginx:latest,表示使用最新版本的 Nginx 镜像
        imagePullPolicy: IfNotPresent  #本地不存在镜像时才尝试拉取新镜像
        ports:  #容器对外暴露的端口号,这里是 80,表示将容器的 80 端口映射到集群中的一个随机端口上。
        - containerPort: 80

2.1. 创建RS

kubectl apply -f nginx-rs.yaml
----过几分钟查看一下pod状态:
kubectl get pod
NAME             READY   STATUS    RESTARTS   AGE
my-nginx-5pbm6   1/1     Running   0          5m47s
my-nginx-9q8hh   1/1     Running   0          5m47s
my-nginx-cp6st   1/1     Running   0          5m47s
--查看RS my-nginx的状态:
[root@master1 ~]# kubectl get rs my-nginx
NAME       DESIRED   CURRENT   READY   AGE
my-nginx   3         3         3       8m19s

3. RS与Deployment的关联

在这里插入图片描述

3.1. Deployment

  • Deployment为pod和RS提供了一个声明式定义(declarative)方法,用来替代以前的RC来方便的管理应用。典型的应用场景包括:
    1. 定义Deployment来创建pod和RS
    2. 滚动升级和回滚应用
    3. 扩容和缩容
    4. 暂停和继续Deployment

  • 使用Deployment部署一个简单的Nginx应用:

 vim  nginx-deployment.yaml
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-deployment
  template:
    metadata:
      labels:
        app: nginx-deployment
    spec:
      containers:
      - name: my-nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

  • 创建deployment:
kubectl apply -f nginx-deployment.yaml --record
--record 参数可以记录命令,我们可以很方便的查看每次 revision的变化。
  • 查看状态:
[root@master1 ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3/3     3            3           3m52s

[root@master1 ~]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-86c547cdd4   3         3         3       3m59s

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-b5d9t   1/1     Running   0          4m4s
nginx-deployment-86c547cdd4-d4sxp   1/1     Running   0          4m4s
nginx-deployment-86c547cdd4-n8t9g   1/1     Running   0          4m4s

3.2. 扩容

[root@master1 ~]# kubectl scale deployment nginx-deployment --replicas=5
deployment.apps/nginx-deployment scaled

[root@master1 ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   5/5     5            5           6m14s

[root@master1 ~]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-86c547cdd4   5         5         5       6m23s

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-b5d9t   1/1     Running   0          6m26s
nginx-deployment-86c547cdd4-d4sxp   1/1     Running   0          6m26s
nginx-deployment-86c547cdd4-flzxw   1/1     Running   0          20s
nginx-deployment-86c547cdd4-n8t9g   1/1     Running   0          6m26s
nginx-deployment-86c547cdd4-t5hzg   1/1     Running   0          20s

3.2.1. 如果集群支持HPA的话,还可以为Deployment设置自动扩展

kubectl  autoscale  deployment nginx-deployment --min=5  --max=10  --cpu-percent=80

3.3. 缩容

[root@master1 ~]# kubectl scale deployment nginx-deployment --replicas=2
deployment.apps/nginx-deployment scaled

[root@master1 ~]# kubectl get deployment
NAME               READY   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   2/2     2            2           7m32s

[root@master1 ~]# kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-86c547cdd4   2         2         2       7m37s

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-b5d9t   1/1     Running   0          7m40s
nginx-deployment-86c547cdd4-d4sxp   1/1     Running   0          7m40s

3.4. 更新镜像

kubectl set image deployment/nginx-deployment my-nginx=nginx:1.9.1

--查看是否更新成功
[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6867c57f58-hdhqc   1/1     Running   0          9m29s
nginx-deployment-6867c57f58-z2smx   1/1     Running   0          8m8s
[root@master1 ~]# kubectl exec nginx-deployment-6867c57f58-hdhqc  -- nginx -v
nginx version: nginx/1.9.1

3.5. 回滚

回滚到上一个版本
[root@master1 ~]# kubectl rollout undo deployment/nginx-deployment
deployment.apps/nginx-deployment rolled back

查看回滚状态
[root@master1 ~]# kubectl rollout status deployment nginx-deployment
deployment "nginx-deployment" successfully rolled out

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-86c547cdd4-52llc   1/1     Running   0          15s
nginx-deployment-86c547cdd4-jv25d   1/1     Running   0          9s
[root@master1 ~]# kubectl exec nginx-deployment-86c547cdd4-52llc -- nginx -v
nginx version: nginx/1.25.1


3.6. 回退

查看回滚历史版本
[root@master1 ~]# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION  CHANGE-CAUSE
2         kubectl apply --filename=nginx-deployment.yaml --record=true
3         kubectl apply --filename=nginx-deployment.yaml --record=true

回退到版本2
[root@master1 ~]# kubectl rollout undo deployment/nginx-deployment  --to-revision=2
deployment.apps/nginx-deployment rolled back

[root@master1 ~]# kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-6867c57f58-g8bw2   1/1     Running   0          19s
nginx-deployment-6867c57f58-hbwng   1/1     Running   0          16s

[root@master1 ~]# kubectl exec nginx-deployment-6867c57f58-g8bw2 -- nginx -v
nginx version: nginx/1.9.1

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

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

相关文章

JDBC BasicDAO详解(通俗易懂)

目录 一、前言 二、BasicDAO的引入 1.为什么需要BasicDAO? 2.BasicDAO示意图 : 三、BasicDAO的分析 1.基本说明 : 2.简单设计 : 四、BasicDAO的实现 0.准备工作 : 1.工具类 : 2.JavaBean类 : 3.BasicDAO类 / StusDAO类 : 4.测试类 : 一、前言 第七节内容…

一文读懂物联网平台如何搞定80%以上的物联网项目

太卷了!一套物联网平台就能搞定80%以上的项目?! 在刚刚结束的AIRIOT4.0物联网平台发布会上,航天科技控股集团股份有限公司智慧物联事业部总经理田淼给出答案。 在主题演讲环节,田总以【80%的物联网项目服务商都会面临…

分组函数group by使用技巧

一、需求:获取销售版本组合 颜色(属性名) (黑色,白色…) 属性值集合 Datapublic static class ItemSaleAttrsVo{private Long attrId;private String attrName;//当前属性有多少种版本:黑色,白色,蓝色,这里…

奇妙敏捷之旅·青岛站,真的太酷啦!

高手的世界里,一块小小的积木,也能立刻感受敏捷的乐趣! 2023奇妙敏捷之旅青岛站,希望将理论知识、实践应用融入互动过程,实现思维的交流、碰撞以及面对面的沟通。因此,大家看到的奇妙敏捷之旅的现场&#…

Linux:课后习题及其答案

第一章 Linux系统初步了解 Q1:简述Linux系统的应用领域 Linux服务器、嵌入式Linux系统、软件开发平台、桌面应用 Q2:Linux系统的特点 开放性、多用户、多任务、良好的用户界面、设备独立性、丰富的网络功能、可靠的系统安全、良好的可移植性 Q3&#…

oracle19c rac、nfs部署教程

本文基于19c进行部署,使用centos7.9,nfs做共享存储 一、首先进行网络规划和配置 该实验一共三台机器一台是nfs,另外两台做rac 1.每台机器至少2块网卡,网卡名字必须一样(publicip和VIP使用的是同一张网卡,privilegeip是另外一张网卡改ip 仅做r…

C语言中断言库与断言函数assert()的用法总结

断言库与断言函数的相关使用总结! 断言函数的使用断言函数及断言库总结#define NDEBUG 断言函数在实现常见算法中的使用 断言函数的使用 话不多说,先来个例子感受一番断言函数assert()到底有什么功能。 由上面例子可知,assert()函数中在z的…

快速开发框架:一招解锁企业流程化管理!

在流程化管理时代,什么样的平台可以帮助企业实现高效率发展?在信息化爆炸式发展的今天,有很多企业期望能通过专用的快速开发框架实现提质增效发展。目前,低代码技术平台是较为盛行的平台,拥有易操作、灵活、增效等优势…

AntDB数据库灾备方案介绍

AntDB灾备方案(双中心方案) AntDB数据库节点分布于两个机房,并使用 patroni etcd 组件进行HA管理,主节点故障时能自动切换。切换时优先选择同机房的同步slave节点选举为new master。 部署图中相关组件说明: ⚫patroni:通过参…

Revit中楼梯该怎么画?包教包会!

绘制楼梯是室内装修中必不可少的一部分,因为楼梯的安装不仅仅是为了连接不同楼层,更是装饰整个室内空间的重要组成部分。 在楼梯的绘制过程中,需要结合实际情况进行设计,包括楼层高度、楼梯数量、台阶宽度、扶手高度等因素&#…

AntDB数据冷热分离方案

数据冷热分离 数据的存在价值,在于其被使用的程度,即被查询或更新的频率。在不同的业务系统中,人们对处于不同时期的数据有着不同的使用需求。比如,在网络流量行为分析系统中,客户会对最近一个月公司发生的安全事件和…

树莓派系统卸载桌面环境及系统瘦身

在我们刚入门树莓派时使用都是带桌面环境的系统,系统自带了非常多的实用软件,在学习和使用了一段时间后,我发现已经完全用不到桌面环境了,平时几乎都是通过 ssh 远程工具进行交互,并以命令形式来对系统进行操作。 Ras…

PHP日期时间函数date() 详解

**date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考. 日期时间函数是PHP 的核心组成部分。无需安装即可使用这些函数。下面来详细说说date函数的具体用法&a…

Python(request)爬虫有多强大?

requests是Python中的一种HTTP客户端库,用于发送HTTP请求并获取服务器响应。使用requests库可以轻松地进行常见的HTTP操作,如GET、POST、PUT、DELETE等,支持HTTPS和HTTP连接以及摘要验证、基本认证等身份验证方式。 因此,Python的…

嵌入式QT 树形浏览 - navListView

目录 1、什么是树形浏览 2、示例 3、树形浏览设计依赖文件 4、navListView 使用过程 4.1 添加文件 4.2 QListView提升为树形浏览 4.3 树形浏览设计 4.4 树形浏览功能实现 4.5 界面切换 4.6 树形浏览实现界面切换 1、什么是树形浏览 像下图这种左侧带有可以点击切换…

“小白“如何理解数据库

目录 前言 1.什么是数据库 2.数据库的用处 2.1数据库与文件的对比 3.使用数据库 3.1建立数据库 3.2建立表 3.3存储数据 4.服务器,数据库,表关系 5.数据库的分类 5.1MySQL架构 5.2SQL分类 5.3存储引擎 5.3.1什么是存储引擎 5.3.2如何查看存…

Lucene(9):Lucene优化

1 解决大量磁盘IO config.setMaxBufferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。 数值越大索引速度越快, 但是会消耗更多的内存 indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段 …

easyexcel多行不同的表头导出

easyexcel多行不同的表头导出(多表格不同表头) 一、效果展示 二、代码 /*** 导出月度报表数据信息*/ApiOperation(value "导出月度报表数据信息")Log(title "导出月度报表", businessType BusinessType.EXPORT)RequestMapping(…

linux 下 sqlserver 连接 与开发准备

最近需要再linux下开发一个服务链接SQLserver。但是没有相关经验,然后参考了网上的一些博客。有点心得记录如下。 主要参考了这个:linux连接到sqlserver命令行,Linux 下连接sqlserver (上)_廖俊涛的博客-CSDN博客linux连接到sqlserver命令行,Linux 下连…

【网络安全】这份近 200 页应急响应文档,不会还有人没看过吧?

前言 成为伟大黑客的关键在于做自己喜爱的事,要把一件事情做好,你必须热爱它。所以只要你能坚持对安全技术的热爱,到了这种程度,你就会做得更好。 本文档注重理论与实战结合,不仅提供关键源代码供读者快速实践&#…