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

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

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

本章我还是使用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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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五 …

邮件协议(SMTP、POP3、IMAP4)

电子邮件系统 1、概述 (1)网络电子邮件系统,好处在于价格低廉,速度非常快 (2)形式多样化(文字、图像、声音……) 2、电子邮件系统组成部分 用户代理 MUA(Mail User …

【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras

【调参】如何为神经网络选择最合适的学习率lr-LRFinder-for-Keras_学习率选择-CSDN博客文章浏览阅读9.2k次,点赞6次,收藏55次。keras 版本的LRFinder,借鉴 fast.ai Deep Learning course。前言学习率lr在神经网络中是最难调的全局参数&#x…

java抽象类的作用及解析

在 Java 中,抽象类是一种特殊的类,它可以用于定义一些抽象的方法和属性,这些方法和属性可能在子类中有不同的实现。 抽象类的主要作用包括: 提供抽象方法:抽象类可以包含一些没有具体实现的抽象方法,这些…

德人合科技 | 公司办公终端、电脑文件资料 \ 数据透明加密防泄密管理软件系统

天锐绿盾是一款全面的企业级数据安全解决方案,它专注于为企业办公终端、电脑文件资料提供数据透明加密防泄密管理。 首页 德人合科技——www.drhchina.com 这款软件系统的主要功能特点包括: 1. **透明加密技术**: 天锐绿盾采用了透明加密技…

〔理论与代码分析〕Fast-SCNN:Fast Semantic Segmentation Network(语义分割、经典网络、速度、高效、实时)

论文地址:Fast-SCNN: Fast Semantic Segmentation Network论文提出时间:2019 年 2 月 12 日官方代码:作者并没有放出源代码,因此下面是一些第三方的实现 PaddleSeg 复现代码:百度飞桨团队复现的代码MMSegmentation 复现…

Spring Boot+Vue前后端分离项目如何部署到服务器

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

jeesite列表jqGrid表格底部汇总,基于onSelectRow和onSelectAll实现选中行汇总合计

一、最终效果图 二、表格启用复选框并初始化赋值 onSelectAll: function() { calc_sum(); }, onSelectRow: function() { calc_sum(); },// 加载成功后执行事件 ajaxSuccess: function(data){var dy 0;var glbzqmrsdtyg 0;var glbzqmrsschyg 0;var glbzqmrsqtcy 0;…

鸿蒙-自定义组件的生命周期

目录 自定义组件的生命周期 1.aboutToAppear 2.aboutToDisappear 3.onPageShow 4.onPageHide 5.onBackPress 日志输出 1.显示页面 2.页面点击返回按钮 3.页面跳转 4.页面返回 自定义组件的生命周期 先来一段列子 import router from ohos.router Entry Component…

IO Watch:用 Arduino UNO 制造的可编程手表

MAKER:mblaz/译:趣无尽 Cherry(转载请注明出处) 关于手表的项目,之前我们已经介绍过一款《Arduino + 3D 打印 DIY 电子手表》。本期的项目同样的一款基于 Arduino UNO 的可编程的手表,相比之下制造门槛更高一些。同时它更成熟、实用,外形也很有设计感,非常的漂亮! 这…

Linux系列

安装系列 1.MySQL安装 我们要通过rpm,进行MySQL数据库的安装,主要的步骤如下: rpm -qa 查询当前系统中安装的所有软件 rpm -qa | grep mysql 查询当前系统中安装的名称带mysql的软件 rpm -…

YOLOv9(3):YOLOv9损失(Loss)计算

1. 写在前面 YOLOv9的Loss计算与YOLOv8如出一辙,仅存在略微的差异。多说一句,数据的预处理和导入方式都是一样的。因此如果你已经对YOLOv8了解的比较透彻,那么对于YOLOv9你也只是需要多关注网络结构就可以。 YOLOv9本身也是Anchor-Free的&a…

密码CTF

一、[SWPUCTF 2021 新生赛]crypto8——unencode编码 1.题目 73E-30U1&>V-H965S95]I<U]P;WE<GT 特征&#xff1a;有-&#xff0c;是uuencode编码&#xff0c;使用python脚本或者在线网站 二、[AFCTF 2018]Vigenre——维吉尼亚密码 1.题目&#xff1a; 给了一个…

vue使用elementPlus ui框架,如何给Dialog 对话框添加Loading 自定义类名显示隐藏

vue使用elementPlus ui框架时&#xff0c;如何给Dialog 对话框添加Loading 自定义类名&#xff0c;想要实现dialog对话框区域有loading效果 官方给出的这个API配置项customClass&#xff0c;使用不太明确。暂时无法实现绑定class。 最后的实现方式&#xff1a; <template&…

产品之美8| 壁纸中的图案随着用户行为变化

上一篇写了壁纸中的图案随着时间和季节变化&#xff0c;留下一个问题&#xff0c;如果壁纸随用户行为该怎样变化&#xff1f; 这一篇就是折叠手机中的壁纸&#xff0c;其中图案随着用户打开手机而动态变化。具体见图&#xff1a; 随着折叠手机的打开&#xff0c;壁纸中的小鱼进…

深度强化学习01

Random variable Probability Density Function 学习视频 这绝对是我看过最好的深度强化学习&#xff01;从入门到实战&#xff0c;7小时内干货不断&#xff01;_哔哩哔哩_bilibili

Java多线程实战-基于注解和AOP切面的异步操作日志记录解决方案

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️本系列源码仓库&#xff1a;多线程并发编程学习的多个代码片段(github) &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正…

K8S日志收集方案-EFK部署

EFK架构工作流程 部署说明 ECK (Elastic Cloud on Kubernetes)&#xff1a;2.7 Kubernetes&#xff1a;1.23.0 文件准备 crds.yaml 下载地址&#xff1a;https://download.elastic.co/downloads/eck/2.7.0/crds.yaml operator.yaml 下载地址&#xff1a;https://download.e…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:FormLink)

提供静态卡片交互组件&#xff0c;用于静态卡片内部和提供方应用间的交互&#xff0c;当前支持router、message和call三种类型的事件。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件仅可…

Spring Cloud Alibaba微服务从入门到进阶(六)(声明式HTTP客户端-Feign)

Feign是Netflix开源的声明式HTTP客户端&#xff08;只要声明一个接口&#xff0c;Feign就会通过你定义的接口自动给你构造请求的目标地址&#xff0c;并帮助你请求&#xff09; 用Feign重构前面RestTemplate方式的服务间调用 想回顾一下RestTemplate调用 加依赖 项目集成Feig…