【K8S 资源管理】声明式资源管理

目录

一、常用的发布方式

1、蓝绿发布:

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

3、滚动更新(deployment的默认更新方式):

二、声明式管理方法(yaml文件)

1、三种发布命令:

2、三种常用的yaml文件:

2.1、deployment的yaml文件:

2.2、service的yaml文件:

2.3、port的yaml文件:


一、常用的发布方式

三种常见的项目发布方式:

蓝绿发布、金丝雀发布(灰度发布)、滚动发布

应用程序升级,面临的最大的问题是新旧业务之间的切换。

立项—定稿—需求发布—开发—测试—发布

测试之后上线,在完美也会有问题。为了不让发生的问题影响所有用户,产生了上述的三种发布方式

1、蓝绿发布:

工作方式:

1、把应用服务集群标记为两个组,蓝组和绿组。先升级蓝组,要把蓝组从负载均衡当中移除,绿组继续提供服务

2、蓝组升级完毕,再把绿组从负载均衡中移除,绿组升级,然后都加入回负载均衡中去,完成对外服务

蓝绿发布对硬件资源要求很高,但是有了云计算和微服务,现在的成本也大大降低了

蓝绿发布的特点:

  1. 一旦出现问题,问题的影响范围很大
  2. 发布策略简单
  3. 基于现在的云计算和微服务,用户是无感知的
  4. 升级和回滚都比较方便

缺点:

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

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

必须是基于deployment控制器创建的服务,才可以使用这种发布方式。相当于测试服

工作方式:

实际上也是一种滚动更新,发布的过程中,暂时停止,只有一部分的pod先升级,其他的pod还是处于老的版本。只有一部分用户可以访问新的版本,绝大多数用户还是老版本。确定无问题之后,再把剩下的老版本升级成新版本,把暂停取消,继续发布。如果有问题,可以立即回滚。暂停不是回滚,一旦取消暂停,只能全部升级完毕之后再回滚

#K8S的金丝雀暂停发布,只会更新一个

kubectl set image deployment nginx nginx=nginx:1.24 --record && kubectl rollout pause deployment nginx

#统一更新

kubectl rollout resume deployment nginx

#全部升级完毕后才能回滚

kubectl rollout history deployment nginx

kubectl rollout undo deployment nginx --to-revision=1

若想回滚,只能全部升级完毕之后,才能回滚

灰度发布特点:

  1. 自动化的要求比较高,对运维人员的要求比较高
  2. 方便发现问题,及时解决,影响范围比较小
  3. 用户无感知,可以实现一个平滑的过度。节约资源
  4. 发布策略比较复杂
  5. 不易回滚,必须等到全部发布成功之后,才能回滚

3、滚动更新(deployment的默认更新方式):

deployment的默认更新方式

一般灰度和滚动发布即可

一般用滚动,特殊场景用灰度(要准备场景)

二、声明式管理方法(yaml文件)

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

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

3、编辑好的yml文件还是要靠陈述式命令发布到K8S集群中

K8S中支持两种声明式的资源管理方式:

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

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

1、三种发布命令:

kubectl create

#create只能创建,不能更新。从指定的yml文件中读取配置,创建服务。不能更新

kubectl apply -f

#既可以创建资源对象,也可以更新资源对象。如果yml文件更改了,apply可以直接更新资源对象(用的最多的方式)

kubectl delete -f

#删除yml文件中声明的资源对象

yaml文件如何生成:

两种方式:
1、手打

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

kubectl get deployments.apps nginx -o yaml

kubectl get deployments.apps nginx -o yaml > /opt/test.yaml

调用yaml文件

kubectl apply -f test.yaml

改过一次的yaml文件再次调用会报错,重新导出yaml文件才行

若修改之后,想再调用加--force 强制调用

kubectl apply -f test.yaml --force

2、三种常用的yaml文件:

  1. deployment的yaml文件(daemonset、statefulset)
  2. service的yaml文件
  3. 不基于控制器的pod的yaml文件

2.1、deployment的yaml文件:


 

#deployment的yaml文件模版
kubectl explain deployment


vim deployment

apiVersion: apps/v1
#声明api版本的标签
kind: Deployment
#定义资源的类型(Service/Pod/Deployment/Job/Ingress/Daemonset/Statefulset)
metadata:
  name: nginx1 
  namespace: test1
  labels: 
    test: nginx1
#定义资源的元数据信息,比如资源名称、资源对象、部署的命名空间、标签等信息
spec:
#定义deployment的资源需要的参数属性
  replicas: 3
#定义副本数
  selector: 
#定义标签选择器
    matchLabels: 
      test: nginx1
#选择匹配的标签
  template:
#定义业务模版,如果定义了多个副本,所有的副本属性都会按照模版的配置进行匹配
    metadata: 
      labels: 
        test: nginx1
#定义了pod的副本都使用元数据的标签和属性来进行匹配
    spec:
      containers: 
      - name: nginx
        image: nginx:1.10
        #ports: 
        #- containerPort: 80
#spec声明的是容器的相关参数,虽然指定了容器的暴露端口是80,如果镜像默认的端口不是80,80也访问不了,端口这里可以忽略,默认的不用加,即使指定了其他端口,也不会改变容器的端口,要改只能进容器改.

2.2、service的yaml文件:
vim service.yaml


#定义api版本
apiVersion: v1
kind: Service
metadata:
  name: nginx1-service
  namespace: test1
  labels:
    test: nginx1
#元数据信息包括,service的名称(不能重复),所属的命名空间,以及要匹配的deployment的标签(要和之前的deployment标签一致,否则会重新生成新的service)

spec:
  type: NodePort
  ports: 
  - port: 80
    targetPort: 80
    nodePort: 30000
  selector: 
    test: nginx1
#匹配所有的标签都是test:nginx1的pod后端提供服务

2.3、port的yaml文件:
vim pod.yaml


#pod的yaml模版
kubectl explain pod

#定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称,所属的命名空间,标签等
metadata:
  name: centos1
  namespace: test1

spec:
  restartPolicy: Always
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:Always、Never、Onfailure(只有异常>
退出才会重启,状态码非0重启,为0不重启),restartPolicy指的是容器的重启策略,资源类型定义为deplo
yment,容器的重启策略只能是Always,可以不加。
  containers:
  - name: centos
    image: centos:7

运行一次之后,centos会直接退出

想要持续运行要添加两个参数:

command、args

定义容器运行的命令参数,类型与docker的CMD和ENTRYPOINT

args可以理解为CMD,可以给command传参

CMD可以给ENTRYPOINT传参

command和args都会覆盖原容器的标准输出(CMD和ENTRYPOINT都会覆盖)

持续运行:

#定义pod的apiversion
apiVersion: v1
#定义资源的类型
kind: Pod
#定义元数据信息,pod的名称,所属的命名空间,标签等
metadata:
  name: centos1
  namespace: test1

spec:
  restartPolicy: Never
#restartPolicy指的是pod内的容器启动失败或者有问题的重启策略:Always、Never、Onfailure(只有异常>
退出才会重启,状态码非0重启,为0不重启),restartPolicy指的是容器的重启策略,资源类型定义为deplo
yment,容器的重启策略只能是Always,可以不加。
  containers:
  - name: centos
    image: centos:7
    args: 
    - /bin/bash
    - -c
    - while true; do sleep 3600; done
#多个命令用;分号隔开

3600秒后自动退出

也可以在一行定义多个命令:用,逗号和空格隔开

command的多条命令一起执行必须是 /bin/bash -c 开头

格式:

command和args只能有一个。会把容器的标准输出覆盖。不论是args和command都会覆盖CMD和ENTRYPOINT

command和args不要同时出现,除非传参时。都会覆盖容器的标准输出(CMD和ENTRYPOINT)

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

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

相关文章

深度学习框架输出可视化中间层特征与类激活热力图

有时候为了分析深度学习框架的中间层特征,我们需要输出中间层特征进行分析,这里提供一个方法。 (1)输出中间特征层名字 导入所需的库并加载模型 import matplotlib.pyplot as plt import torch import torch.nn as nn from torch.nn import functiona…

【快速全面掌握 WAMPServer】06.整明白 PHP

网管小贾 / sysadm.cc 我们今天就要来学习了解一下作为 LAMP 四剑客之一的 PHP 。 PHP 是 Hypertext Preprocessor 即“超文本预处理器”的缩写,是在服务端执行的一种脚本程序语言。 通常它被用于 Web 开发,并可以嵌入 HTML 中,是具有交互功…

显化的跨渠道整合:迅腾文化助力企业拓展销售渠道

显化的跨渠道整合:迅腾文化助力企业拓展销售渠道 在数字化浪潮的推动下,企业的销售渠道日趋多元化。面对复杂多变的市场环境,企业需要一种有效的方式来整合各个销售渠道,以实现更高效的销售拓展。广州迅腾文化传播有限公司的显化…

【C++ Primer Plus学习记录】switch语句

假设要创建一个屏幕菜单,要求用户从5个选项中选择一个,例如,便宜、适中、昂贵、奢侈、过度。虽然可以扩展if else if else序列来处理这5种情况,但是C的switch语句能够更容易地从大型列表中进行选择。 下面是switch语句的通用格式…

每天五分钟计算机视觉:为什么要去GitHub寻找开源代码实现方案?

计算机视觉技术是当前人工智能领域的热门方向之一,其在许多领域都有着广泛的应用,如自动驾驶、智能安防、医疗诊断等。由于计算机视觉技术涉及到的算法和数据处理较为复杂,因此对于初学者来说,从零开始编写代码实现相关算法可能会…

【MPC学习笔记】02:MPC详细简介(Lecture 1_1 Unconstrained MPC)

本笔记来自北航诸兵老师的课程 课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC 接上一篇:【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC) 文章目录 1 详细介绍1.1 状…

贝莱德等巨头将通过最终考验!ETF获批是涨是跌?交易数据背后的博弈信号已经显现!

还记得摩根大通((J.P.Morgan)首席执行长杰米-戴蒙(Jamie Dimon)说「如果他是政府,他就会关闭比特币」,加密货币的唯一「真正用途是犯罪、贩毒、洗钱和避税」吗? 然而,最新消息显示&a…

【MySQL】数据库之高级SQL查询语句补充

目录 一、补充正则表达式的查询regexp 二、补充case的用法 三、补充空值和null值的区别 一、补充正则表达式的查询regexp 要知道 在MySQL中使用正则表达式,一定要在前面加上regexp 正则表达式 ^ 匹配文本的开始字符 ‘^bd’ 匹配以 bd 开头的字符串 …

MFC编程技巧与范例详解01

目录 1、MFC概述 (1)、MFC为什么不用C语言使用C (2)、MFC的开发模型文档-视图模型 (3)、一个完善的MFC程序应该包括 (4)、MFC常用的类 2、MFC的特性 (1&#xff09…

Java虚拟机介绍

JVM是一种用于计算设备的规范,它是一个虚拟出来的计算机,是通过在实际的计算机上仿真模拟计算机的各个功能来实现的。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。每个Java虚拟机都着一个清晰的任务&#x…

78 Python开发-多线程FuzzWaf异或免杀爆破

这里写目录标题 本课知识点:学习目的:演示案例:Python开发-简单多线程技术实现脚本Python开发-利用FTP模块实现协议爆破脚本Python开发-配合Fuzz实现免杀异或Shell脚本 涉及资源: 本课知识点: 协议模块使用,Request爬虫技术,简易多线程技术,…

freeCodeCamp:编程学习之旅的起点

一、产品介绍 freeCodeCamp是一个提供免费编程课程的学习平台。它包含了数百个编程挑战,覆盖了从基础的HTML、CSS和JavaScript到高级的算法和数据结构等各个方面的知识。freeCodeCamp不仅提供了丰富的学习资源,还帮助我通过实践提高编程技能。 二、应用…

【操作系统xv6】学习记录2 -RISC-V Architecture

说明:看完这节,不会让你称为汇编程序员,知识操作系统的前置。 ref:https://binhack.readthedocs.io/zh/latest/assembly/mips.html https://www.bilibili.com/video/BV1w94y1a7i8/?p7 MIPS MIPS的意思是 “无内部互锁流水级的微…

RuoYi-Cloud-Plus使用minio进行文件上传图片后无法预览解决_修改minio配置minio桶权限---SpringCloud工作笔记198

在文件管理的位置,发现刚刚上传的图片文件,会显示 预览图片失败 后来经过多方查看,发现是minio的配置的问题 可以从这里: 可以看到首先登录RuoYi-Cloud-Plus系统然后,打开文件管理页面可以看到,当上传了图片文件以后 显示文件展示中,文件预览失败,那么这个时候,去修改minio的配…

test ui-04-testcomplete 入门介绍

About TestComplete TestComplete是一款适用于各种应用程序类型和技术的自动化测试环境,包括(但不限于)Windows、.NET、WPF、Visual C、Visual Basic、Delphi、CBuilder、Java以及Web应用程序和服务。 TestComplete既适用于功能测试&#x…

2023机器人行业总结,2024机器人崛起元年(具身智能)

2023总结: 1.Chatgpt引爆了通用人工智能,最大的受益者或是机器人,2023年最热门的创业赛道便是人形机器人,优必选更是成为人形机器人上市第一股, 可以说2023年是机器人开启智能化的元年,而2024则将成为机器…

Win10 开机突然时出现0xc000014c错误怎么办?

环境: Win10 专业版 问题描述: Win10 开机突然时出现0xc000014c错误怎么办? 尝试F8模式也进不了还是这个画面 文件:\Windows\System32\config\system 状态:0xc000014c 信息:无法加载操作系统&#xff…

numpy数组05-numpy的索引和切片

numpy中可以对其中的某一行(列)进行数据处理。 上节课我们已经取出了CSV文件中的二维数组,本次对这个二维数组为例,进行练习操作。 示例代码如下: import numpy as npus_file_path "US_video_data_numbers.cs…

Linux学习记录——삼십삼 http协议

文章目录 1、URL2、http协议的宏观构成3、详细理解http协议1、http请求2、http响应1、有效载荷格式2、有效载荷长度3、客户端要访问的资源类型4、修改响应写法5、处理不同的请求6、跳转 3、请求方法(GET/POST)4、HTTP状态码(实现3和4开头的&a…

【日积月累】Java中 正则表达式

目录 日积月累】Java中 正则表达式 1.前言2.基本语法3.Pattern和Matcher类4.校验的表达式大全5.参考文章所属专区 日积月累 1.前言 正则表达式是一种用于匹配文本模式的语法,它通常与编程语言一起使用。在Java中,正则表达式用于匹配字符串,可以使用Pattern和Matcher类来实…