Linux:kubernetes(k8s)有状态的服务部署(14)

news2024/12/23 12:53:12

之前我都是对无状态进行的一个操作,我们想扩容就扩容,想缩容就缩容,根本不用去考虑他的一个网络环境,本地储存环境啥的一个状态

当我们做有状态的服务的操作,肯定要申请一个持久化的一个空间,以及网络,确保我数据的一个稳定性和安全性

本章我还是使用nginx进行一个演示,nginx的网页是储存在/usr/share/nginx/html/  中,这个目录在容器内是一个不可靠的东西,所以我要把他存储到容器外,通过一个voluem进行一个存储,并且可以通过服务名进行一个访问


创建

我这里准备了一个配置文件用于等会的使用

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx
---
apiVersion: apps/v1
kind: StatefulSet       # 类型资源
metadata:
  name: web     # statefulSet 对象的名字
spec:
  serviceName: "nginx"  # 使用哪个 service 来管理dns
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:  # 容器卷内部要暴露的端口
        - containerPort: 80     # 具体暴露的端口号
          name: web     # 该端口配置的名字
kubectl create -f web.yaml 

这样我就创建好一个了

去访问一下试试,我们需要再去搞一个容器再去访问主机

run -it --image busybox:1.28.4 dns-test /bin/sh 

这个意思是搞一个 busybox,这个容器他里面包含着很多的工具,然后耐心等待他的下载

这样就成功进入了

进入测试一下


 扩容缩容

kubectl get sts

可以看到这里有2个

scale sts web --replicas=5

可以看到他的一个详细信息

如果要是缩容也是一样的

kubectl scale sts web --replicas=2

可以看到他又缩减下来的一个信息


镜像更新

kubectl patch sts web --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/image", "value":"nginx:1.9.1"}]'

使用json格式进行一个修改

kubectl rollout history sts web

 可以看到历史的一个更新记录

查看一下第二个

可以看到就是更新的镜像

他是倒叙的更新方式

他更新也有两种方式一种是RollingUpdate  另外一种是OnDelete

RollingUpdate是什么:StatefulSet  也可以采用滚动更新策略,同样是修改 pod template 属性后会触发更新,但是由于 pod 是有序的,在 StatefulSet 中更新时是基于 pod 的顺序倒序更新的

 OnDelete:只 有在 pod 被删除时会进行更新操作


 灰度发布(金丝雀发布)

我们在发布项目到线上的时候,没法确保他的一个安全性以及测试覆盖性达到一个非常补充的状态,我们使用灰度发布的目的就是确保产品上线后对产品的影响降到最低

当我们在更新的时候,大部分采用滚动更新,一下把所有的容器全更新完,确实可以让用户无法察觉到更新,但是如果遇到bug那么全部的容器都将收到牵连,当我们使用了金丝雀发布,他只会对其中的一个或者一半的容器进行更新

 当有问题的时候直接回滚一小部分,这对我们的损失还是降到很小了

利用滚动更新中的 partition 属性,可以实现简易的灰度发布的效果

例如我们有 5 个 pod,如果当前 partition 设置为 3,那么此时滚动更新时,只会更新那些 序号 >= 3 的 pod

利用该机制,我们可以通过控制 partition 的值,来决定只更新其中一部分 pod,确认没有问题后再主键增大更新的 pod 数量,最终实现全部 pod 更新 

kubectl scale sts web --replicas=5

 先把个数给他调到5

现在无论我们查看那个pod他都是1.9.1镜像版本

kubectl edit sts web

再去修改web

把这个值改为3,意为这>=3的

再把他的镜像改为1.7.9

现在我去看一下web4

这个0,1,2还都是1.9.1

假如现在我们还要扩大更新

现在我将他改为1,就是0以外的全部更新了

现在0以外的pod都进行了更新

也可以看到sts的详细信息

现在我更新成0

可以看到全部进行了更新


当删除时候才更新(更新策略)

直接编辑sts

kubectl edit sts web

直接将更新策略改为OnDelete

再保存退出

然后再去编辑sts

kubectl edit sts web

然后再去修改他的镜像再保存退出

kubectl describe po web-0

现在我们去查看任意一个pod他都没有去更新,只有在这个pod被删除的时候才会被更新

我现在把web-0删除

kubectl delete po web-0

 我已经把他删除了,再去describe一下

kubectl describe po web-0

发现他已经更新了,现在除了web-0其他都没更新,因为就web-0被删除了,他又自己启动了一个更新的


级联删除与非级联删除

可以看到现在有pod和sts还有svc  ,在实际删除中只需要删除sts和svc

当我们删除的时候他默认是做个级联删除,也就是把pod也一起删掉

非级联就只把sts删除,他的pod会留下

删除service的话直接指定他名字删除即可

 kubectl delete sts web

 现在我直接把sts进行删除

可以看到他那些pod都被带着删除了

kubectl delete svc nginx

这样也把service也删除了,这时平时最常用的删除

现在我再把他创建出来,做个非级联的方式

kubectl delete sts web --cascade=false

可以看到已经没有sts了po还在

现在再想删除pod可以手动去删除了

kubectl delete po web-0 web-1

 

kubectl delete svc nginx

 再去删除一下svc就删除成功的移除的整个sts

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

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

相关文章

Linux环境(Ubuntu)上的防火墙工具使用方法

目录 概述 1 防火墙工具(ufw) 1.1 安装防火墙工具: 1.2 操作防火墙相关命令 2 ufw操作命令的范例 2.1 打开/关闭防火墙 2.1.1 打开防火墙 2.1.2 关闭防火墙 2.1.3 查询当前防火墙状态 2.1.4 允许选择的端口访问 2.1.5 允许选择固定…

自动写作软件哪个好?分享7款独家推荐

随着人工智能技术的不断发展,自动写作软件正逐渐成为现代写作的利器。这些AI写作工具能够帮助用户高效地生成文章、报告、新闻稿等内容,为写作工作带来了极大的便利。然而,市面上的自动写作软件琳琅满目,让人眼花缭乱。为了帮助读…

SpringCloud返回的是xml格式而非JSON数据

一、问题描述: 最近接触eureka,写了一个接口,使用RestController注解修饰了类,预期是返回json格式的数据,但是结果返回的是xml格式的数据。 二、问题分析: 原因是因为直接或间接引入了jackson-dataformat…

相机拍照与摄影学基础

1.相机拍照 相机可能形状和大小不同,但基本功能相同,包括快门速度、光圈和景深,这些是摄影的通用概念。即使是一次性相机也是基于这三个理念工作的。不同类型相机在这三个概念上的唯一区别是你可以控制这些功能的程度。这三个参数被称为相机…

mybatis+thymeleaf登录

目录 一.将页面显示在浏览器中 1.新建项目并导入页面 2.使用th标签 3.新建控制层 4.显示结果 二.将两个页面进行关联 1.提交表单 2.跳转页面 3.结果 三.登录账号名动态改变 1.获取登录表单数据 2.给页面传值 3.页面显示 4.结果 四.连接数据库 1.新建数据库 2.…

tcp/ip协议2实现的插图,数据结构8 (30 - 32章)

(201) 201 三十0 中断优先级补充 (202) 202 三十1 TCP的用户需求 函tcp_usrreq一 (203) 203 三十2 TCP的用户需求 函tcp_usrreq二 (204) 204 三十3 TCP的用户需求 函tcp_usrreq三 (205) 205 三十4 TCP的用户需求 函tcp_usrreq四 (206) 206 三十5 TCP的用户需求 函tcp_usrreq五 …

C语言 内存函数

目录 前言 一、memcpy()函数 二、memmove()函数 三、memset函数 四、memcmp()函数 总结 前言 在C语言中内存是我们用来存储数据的地址,今天我们来讲一下C语言中常用的内存函数。 一、memcpy()函数 memcpy()函数与我们之前讲的strcpy()函数类似,只…

[SAP ABAP] 创建事务码T-CODE

如何让用户通过输入事务码T-CODE跳转到Z437_TEST_2024程序输出界面? 1.输入事务码SE39,进入到维护事务的界面 2.输入需要创建的事务码名称(一般情况下用Y或者Z开头),点击【创建】 这里我们创建一个名为ZTEST437的事务代码 3.在创建事务的窗口…

springboot爱看漫画小程序的设计与实现

摘 要 相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低爱看漫画的运营人员成本,实现了爱看漫画的标准化、制度化、程序化的管理,有效地防止了爱看漫画的随意管理,提高了信息的处理速度和精确度,能够及时、…

leetcode代码记录(子集

目录 1. 题目:2. 我的代码:小结: 1. 题目: 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的 子集 (幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 …

MySQL MHA故障切换

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1)什么是 MHA 2)MHA 的组成 3)MHA 的优势 4)MHA 现状 1.3、案例环境 1)本案例环境 ​编辑 2)案例需求 3)案例实现思路…

解读如何打造超高商楼宇智慧公厕

智慧楼宇大厦智慧公厕是近年来兴起的一个创新方案,旨在为现代城市的楼宇建筑提供一种全新的管理与服务模式。这种智慧公厕的最大特点就是将智能化技术与传统楼宇公厕结合,通过各种高科技设备与系统,实现对公厕的全新管理与监控,为…

java serlvet 高校学生画像平台系统Myeclipse开发mysql数据库web结构java编程计算机网页项目echarts图形展现

一、源码特点 java serlvet 高校学生画像平台系统是一套完善的java web信息管理系统 系统采用serlvetdaobean 模式开发本系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCA…

Jmeter+Ant 接口自动化环境配置指南

一 、Jmeter安装与配置 https://blog.csdn.net/tester_sc/article/details/80746405 注:Jmeter5.0的环境变量配置与4.0或历往老版本有部分小差异,笔者用的Jmeter 5.0 二 、Ant的安装与配置 # Ant下载地址(下载到指定目录后,进行解压到当前…

Spark-Transformation以及Action开发实战

文章目录 创建RDDTransformation以及ActionTransformation开发Action开发RDD持久化共享变量创建RDD RDD是Spark的编程核心,在进行Spark编程是,首要任务就是创建一个初始的RDDSpark提供三种创建RDD方式:集合、本地文件、HDFS文件 集合:主要用于本地测试,在实际部署到集群运…

电路方案分析(十八)四开关buck-boost双向同步DC/DC变换器方案

tip是:资料来自网络,仅供学习交流使用! 1.概述 4开关降压升压双向DC-DC电源转换器在很多应用中都有使用。作为一个同步降压或同步升压转换器,其中只有两个开关切换,开关损耗减少到一半。只有当直流母线和电池电压彼此…

【MMDetection3D实战5】Dataset 和 model配置文件解析

文章目录 1. Dataset 配置文件解析1. 1 定义全局变量1. 1 数据处理pipeline(1) train_pipeline(2) test_pipeline(3) eval_pipeline1. 2 data 字典的定义2. model 配置文件解析2. 1 体素化voxel_layer2. 2 voxel_encoder2. 3 middle_encoder2. 4 2D 检测网络(backbone + neck …

C++实验 面向对象编程

一、实验目的: 掌握类中静态成员的定义方法,初始化方法,使用方法; 掌握类的友元说明方法,理解友元的使用特点 二、实验内容: 1、编写程序,统计某旅馆住宿客人的总数,要求输入客人…

hot100 -- 矩阵

👂 Peter Pan - kidult. - 单曲 - 网易云音乐 👂 Bibliothque(图书馆) - Jasing Rye - 单曲 - 网易云音乐 目录 🌼前言 🌼二分模板 🎂矩阵置零 AC 标记数组 AC 标记变量 🚩…

AI成就画质冠军!海信电视U8N Pro的“硬参数”和“软实力”

不得不说,这几年AI落地大有摧枯拉朽之势,也离普通人的生活越来越近了。 如果说,曾经1997年“深蓝”计算机赢下国际象棋世界冠军,还没那么让人印象深刻,2016年Alpha Go战胜围棋世界冠军,即使广泛关注&#…