k8s声明式资源管理

三种常见的项目发布方式

1、蓝绿发布

2、金丝雀发布(灰度发布)

3、滚动发布

应用程序升级,面临的最大的问题是新旧业务之间的切换,立项-----定稿------需求发布-----开发------测试------发布,测试之后上线,再完美也会有问题的,为了不让发生的问题影响所有用户,上述的三种发布方式

什么是蓝绿发布?

蓝绿发布:把应用服务集群标记为两个组,蓝组和绿组,先升级蓝组从负载均衡当中移除,绿组继续提供服务,蓝组升级完毕,在把绿组从负载均衡当中移除,绿组升级,然后都加入回负载均衡当中去,完成对外服务(硬件资源要求很高,但是有了云计算和微服务,现在的成本也大大降低了)

蓝绿发布的特点

1、一旦出现问题,问题的影响范围很大

2、发布策略简单

3、基于现在的云计算和微服务,用户无感知的

4、升级和回滚都比较方便

缺点

在发布升级的过程之中,只有一部分集群在对外提供服务,可能会是集群的负载能力下降,响应变慢,需要注意给集群增加负载能力(一般来说没有什么特殊需要),短时间内可能会浪费一定的资源成本

金丝雀发布(灰度发布)

deployment控制器创建的服务,才可以使用这种发布方式,滚动更新,暂停,发布的过程中,暂时停止,只有一部分的pod先升级,其他的pod还是处于老的版本,只有一部分用户可以访问新的版本,绝大多数用户还是在老版本,确定无问题之后,再把剩下的老版本,升级成新的版本,把暂停取消,继续发布,如果有问题,可以立刻回滚,暂停不是回滚,一旦取消只能全部升级完毕之后,在回滚

灰度发布的特点

1、自动化的要求比较,对运维人员的要求比较高

2、方便问题,及时解决,影响范围比较小

3、用户无感知,平滑过度,节约资源

4、发布策略比较复杂

5、不易回滚,必须要全部发布成功之后才能回滚

滚动更新

deployment的默认就是滚动更新

声明式

声明式管理方式(yaml)文件

1、适合对资源的修改操作

2、声明式管理依赖于yaml文件,所有的内容都在yaml文件当中

3、编辑好的yaml文件,还是要依靠陈述式的命令发布到k8s集群当中

kubectl create  只能创建,不能更新,从指定yaml文件中读取配置,创建服务,不能更新
kubectl apply -f	既可以创建资源对啊ing也可以更新资源对象,如果yaml文件更改了,apply可以直接更新资源对象
kubectl delete -f	删除yaml文件中声明的资源对象
yaml文件如何生成

1、手打

2、可以根据已有的资源,直接生成

kubectl get deployment.apps nginx -o yaml 展示yaml文件
kubectl get deployment.apps nginx -o yaml >> test.yaml  导出修改
kubectl apply -f test.yaml  更新
第二次更新必须导出之后才能更新1、deployment的yaml文件  daemonset sratefulset
2、service的yaml文件
3、不基于控制器的pod的yaml文件

在k8s当中支持两种声明式的资源管理方式

1、yaml格式,用于配置和管理资源对象

2、json格式,只要用于在api接口之间消息的传递

声明式的格式
deployment
kubectl explain deployment  声明deployment的语法(格式)vim nginx.yml
apiVersion: apps/v1
#声明API版本的标签
kind: Deployment
#定义资源的类型service  pod  deployment  job  ingress  daemonset  statefulset
metadata:name: nginx1
#定义资源的元数据信息,比较说资源名称,资源对象部署的命名空间,标签等等信息namespace: xiaobulabels:xb: nginx1
spec:
#定义deployment的资源需要的参数属性replicas: 3
#定义副本数selector:
#定义标签选择器matchLables:xb: nginx1
#选择匹配的标签template:
#定义业务模版,如果定义了多个副本,所有的副本的属性都会按照模版的配置进行匹配metadata:labels:xb: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配spec:containers:- name: nginximage: nginx:1.10posts:- containerPort: 80
#spec声明的是容器的相关参数,虽然我指定了容器的暴露端口是80,nginx默认的镜像就是80,即使指定了其他端口,也不会改变容器的端口
kubectl apply -f nginx1.yml
kubectl create ns xiaobu   创建命名空间
nginx-service
vim nginx-service.yml#定义API的版本
apiVersion: v1
kind: Service
metadata:name: nginx-servicenamespace: xiaobulabels:xb: nginx1
#元数据信息包括,service的名称,所属的命名空间,以及要匹配的deployment的标签,要和之前的保持一致
spec:type: NodePortports:- port: 80targetPort: 80
#    nodePort: 30000
#可以指定访问的端口,也可以不指定访问端口(随机分配)selector:xb: nginx1
#匹配所有的标签都是xb:nginx1的pod的后端提供服务kubectl apply -f nginx-service.yml查看指定的控制器的service
kubectl get svc -n xiaobu 
NAME            TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
nginx-service   NodePort   10.96.56.18   <none>        80:31195/TCP   13scurl -I 20.0.0.70:31195
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Tue, 02 Jan 2024 03:18:33 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 31 Jan 2017 15:01:11 GMT
Connection: keep-alive
ETag: "5890a6b7-264"
Accept-Ranges: bytes
pod
定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称,所属的标签
metadata:name: centos1
spec:restartPolicy: Never
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:always 指的是总是重启  never 指的是挂就挂了 Onfailure(只有异常退出才会重启,状态非0,如果状
态码是0,不重启),restartPolicy指的是容器的重启策略,资源类型定义为deployment,容器的重启策略只能是Alwayscontainers:- name: centosimage: centos:7command
args
定义容器运行的命令参数,类型于docker的CMD和entrypoint
args可以理解docker中的cmd 给command传参
command和args都会覆盖原容器的标准输出(cmd)#定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称,所属的标签
metadata:name: centos1
spec:restartPolicy: Always
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:always 指的是总是重启  never 指的是挂就挂了 Onfailure(只有异常退出才会重启,状态非0,如果状
态码是0,不重启),restartPolicy指的是容器的重启策略,资源类型定义为deployment,容器的重启策略只能是Alwayscontainers:- name: centosimage: centos:7args:- /bin/bash- -c- while true; do sleep 3600; done
#多个命令要用分号隔开#定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称,所属的标签
metadata:name: centos1namespace: xiaobu
spec:restartPolicy: Always
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:always 指的是总是重启  never 指的是挂就挂了 Onfailure(只有异常退出才会重启,状态非0,如果状
态码是0,不重启),restartPolicy指的是容器的重启策略,资源类型定义为deployment,容器的重启策略只能是Alwayscontainers:- name: centosimage: centos:7command: ["/usr/bin/test", "-e", "/etc/passwd"]command: ["/bin/bash", "-c", "touch /tmp/live ; sleep 30; rm -rf /tmp/live; slepp 3600"]
#command和args只能有一个,会把容器的标准输出覆盖,不论是args和commmand都会覆盖CMD和ENTYRPOINTcommand和args不要同时出现,除非你要传参,都会容器的标准输出

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

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

相关文章

OpenHarmony底座升级指南(3.2升级4.0)

前言 本文旨在帮助开发者完成底座升级&#xff0c;文中主要以OpenHarmony 3.2 release 升级至OpenHarmony 4.0 release为模板描述。 一、流程概览&#xff1a; 1.1 准备工作 在准备阶段&#xff0c;需要完整收集所有的定制化修改&#xff0c;明确修改人&#xff1b;并且要将…

CTFshow web入门web127-php特性30

开启环境: extract() 函数从数组中将变量导入到当前的符号表&#xff0c;使用数组键名作为变量名&#xff0c;使用数组键值作为变量值 举例就是?a2&#xff0c;就会变成$a2&#xff0c;这里ctf_show有个_需要构造&#xff0c;前面说过php中变量名只有数字字母下划线&#xff…

Demo:基于elementplus的弹窗嵌套表单进行二次封装

基于elementplus的弹窗嵌套表单进行二次封装 所见即所得&#xff1a;简单封装方便工作 ProForm.vue代码&#xff1a; <!--* Author: 忆往昔* LastEditTime: 2024-01-6 14:36:00* email: 15871856064163.com --> <template><div class"penk-form-contain…

机器学习(四) -- 模型评估(3)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

【LMM 011】MiniGPT-5:通过 Generative Vokens 进行交错视觉语言生成的多模态大模型

论文标题&#xff1a;MiniGPT-5: Interleaved Vision-and-Language Generation via Generative Vokens 论文作者&#xff1a;Kaizhi Zheng* , Xuehai He* , Xin Eric Wang 作者单位&#xff1a;University of California, Santa Cruz 论文原文&#xff1a;https://arxiv.org/ab…

优化|流形优化系列(一)

简介 流形优化是非线性优化的一个分支&#xff0c;它主要关注在特定的几何结构下进行优化。在流形优化中&#xff0c;优化问题通常是在黎曼流形上进行的&#xff0c;而非欧几里得空间。黎曼流形是带有黎曼度量的流形&#xff0c;该度量为流形上的每个点都定义了一个内积。这种…

ThreadLocal线程重用导致用户信息错乱的 Bug

在生产上遇到一个诡异的问题&#xff0c;有时获取到的用户信息是别人的。查看代码后&#xff0c;我发现他使用了 ThreadLocal 来缓存获取到的用户信息。 我们知道&#xff0c;ThreadLocal 适用于变量在线程间隔离&#xff0c;而在方法或类间共享的场景。如果用户信息的获取比较…

Diffusion扩散模型学习2:DDPM前向加噪过程torch实现

参考: https://arxiv.org/pdf/2006.11239.pdf ##论文 https://github.com/dtransposed/code_videos/blob/main/01_Diffusion_Models_Tutorial/Diffusion%20Model.ipynb ##code https://spaces.ac.cn/archives/9119 1、红色框: 前向过程论文公式推出可以从x0原图一步到最终噪声…

软测思考题:自动化测试重运行是好是坏?

测试失败时会发生什么&#xff1f; 如果有人手动运行测试&#xff0c;那么他们会暂停并了解更多信息。但是&#xff0c;当自动测试失败时&#xff0c;其余部分可能会继续运行。在套件完成之前&#xff0c;你是没有办法看到测试报告的&#xff0c;并且自动化程序不会在故障时执…

算法训练第六十天|84.柱状图中最大的矩形

84.柱状图中最大的矩形&#xff1a; 题目链接 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 : 输入&#xff1a;heights [2,1,5,6,2,3] 输出…

Pytest的测试报告——Allure

一、html-report测试报告 html-report测试报告。是pytest下基本的测试报告。要使用pytest-html测试报告&#xff0c;就要确保python版本在3.6及以上即可。本身pytest所提供的测试结果汇总&#xff0c;是基于控制台的文本输出形式。 pytest-html是基于HTML格式实现的测试报告的…

期货日数据维护与使用_日数据维护_合约更新

目录 写在前面 下载最新合约列表 “选择合约所在目录”按钮点击 “执行”按钮点击 sqlite3代码 按钮点击后执行的代码 子线程代码 “新增合约json下载”按钮点击 “追加合约json下载”按钮点击 写在前面 本文默认已经创建了项目&#xff0c;如果不知道如何创建一个…