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

news2024/9/23 7:22:20

目录

一、常用的发布方式

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)

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

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

相关文章

C语言中灵活多变的动态内存,malloc函数 free函数 calloc函数 realloc函数

文章目录 🚀前言🚀管理动态内存的函数✈️malloc函数✈️free函数✈️calloc函数✈️realloc函数 🚀在使用动态内存函数时的常见错误✈️对NULL指针的解引用✈️ 对动态开辟空间的越界访问✈️对非动态开辟内存使用free释放✈️使用free释放一…

三、C语言中的分支与循环—for循环 (6)

本章分支结构的学习内容如下: 三、C语言中的分支与循环—if语句 (1) 三、C语言中的分支与循环—关系操作符 (2) 三、C语言中的分支与循环—条件操作符 与逻辑操作符(3) 三、C语言中的分支与循环—switch语句(4)分支结构 完 本章循环结构的…

【SpringBoot框架篇】34.使用Spring Retry完成任务的重试

文章目录 简要1.为什么需要重试?2.添加maven依赖3.使用Retryable注解实现重试4.基于RetryTemplate模板实现重试 简要 Spring实现了一套重试机制,功能简单实用。Spring Retry是从Spring Batch独立出来的一个功能,已经广泛应用于Spring Batch,…

Linux 进程和计划任务管理

一 内核功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等 1 程序 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具 用于描述进程要完成的功能,是控制进程执行的指令集 2…

LeetCode 82:删除排序链表中的重复元素 II

一、题目描述 给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5]示例 2: 输入&#xff1a…

B01、类加载子系统-02

JVM架构图-英文版 中文版见下图: 1、概述类的加载器及类加载过程 1.1、类加载子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engi…

炫酷按钮制作(HTML+CSS+Javascript)

实现效果&#xff1a; 当鼠标点击按钮时&#xff1a; 实现代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>div{margin-top: 20px;margin-left: 20px;}.button{border: soli…

力扣热题100道-矩阵篇

矩阵 73.矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法**。** 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例…

CSS 顶部位置翻转动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ rotate-hor-top: isAnimating }"><!-- 元素内容 --><…

stable diffusion 基础教程-图生图

界面 图生图大概有以下几个功能: 图生图涂鸦绘制局部绘制局部绘制(涂鸦蒙版)其常用的也就上面四个,接下来逐步讲解。 以图反推提示词 图生图可以根据反推提示词来获取相应图片的提示词,目前3种主流方式,如下: CLIP反推提示词:推导出的文本倾向于自然语言的描述方式,…

Hive详解、配置、数据结构、Hive CLI

一、Hive 认识 1. Hive 应用 问题&#xff1a;公司的经营状况&#xff1f; 主题一&#xff1a;财务现金流指标1.1&#xff1a;净现金流入/流出量指标1.2&#xff1a;现金转换周期预算执行状况指标2.1&#xff1a;预算内成本控制指标2.2&#xff1a;预算与实际支出的差异 主题…

电路笔记 :自激振荡电路笔记 电弧打火机

三极管相关 三极管的形象描述 二极管 简单求解&#xff08;理想&#xff09; 优先导通&#xff08;理想&#xff09; 恒压降 稳压管&#xff08;二极管plus&#xff09; 基础工作模块 理想稳压管的工作特性 晶体管之三极管(“两个二极管的组合” ) 电弧打火机电路 1.闭合开…

docker 安装可视化工具 Portainer 以及 汉化

安装portainer是最新版本&#xff0c;汉化指定版本2.9.1 。如果要安装汉化版&#xff0c;可直接跳转步骤四 一、拉去镜像 安装网址&#xff1a;Install Portainer BE with Docker on Linux - Portainer Documentation docker pull portainer/portainer二、根据portainer镜像创建…

Centos7 安装zabbix6.0.25, agent2

Centos 7 版本&#xff08;不支持yum安装zabbix服务端&#xff0c;只能编译安装服务端&#xff09;zabbix 6.0 版本 版本6.0支持年限&#xff1a; Nginx 1.22.1 版本php 7.2.34 版本mariadb 10.5.19 版本 #关闭防火墙 [rootzabbix ~]# systemctl stop firewalld [rootzabbix…

STL-string

目录 &#x1f4a1;介绍 &#x1f4a1;string的基本操作 &#x1f4a1;string的构造函数 &#x1f4a1;string赋值操作 &#x1f4a1;string字符串拼接 &#x1f4a1;string的查找和替换 &#x1f4a1;string字符串比较 &#x1f4a1;string字符存取 &#x1f4a1;str…

Spark---RDD介绍

文章目录 1.Spark核心编程2.RDD介绍2.1.RDD基本原理2.2 RDD特点1.弹性2.分布式 &#xff1a;数据存储在大数据集群的不同节点上3.数据集 &#xff1a;RDD封装了计算逻辑&#xff0c;并不保存数据4.数据抽象 &#xff1a;RDD是一个抽象类&#xff0c;具体实现由子类来实现5. 不可…

C语言实例_math.h库函数功能及其用法详解

一、前言 数学在计算机编程中扮演着至关重要的角色&#xff0c;C语言的math.h头文件提供了一系列的函数和工具&#xff0c;用于数学计算和常用数学函数的实现。这些函数包括数值运算、三角函数、指数对数函数等&#xff0c;为开发人员提供了强大的数学处理能力。本文将对math.…

字符编码转换

宽窄字符和字符编码的关系 多字节(窄)字符&#xff1a;在C/C中&#xff0c;char是一种数据类型&#xff0c;规定sizeof(char)1&#xff0c;即一个char占用一个字节&#xff0c;1Byte8bit。并没有规定一个char就要与ASCII对应&#xff0c;不过&#xff0c;通常情况下char值与AS…

LeetCode 每日一题 Day 32 ||递归单调栈

2487. 从链表中移除节点 给你一个链表的头节点 head 。 移除每个右侧有一个更大数值的节点。 返回修改后链表的头节点 head 。 示例 1&#xff1a; 输入&#xff1a;head [5,2,13,3,8] 输出&#xff1a;[13,8] 解释&#xff1a;需要移除的节点是 5 &#xff0c;2 和 3 。…

【RocketMQ每日一问】RocketMQ SQL92过滤用法以及原理?

1.生产端 public class SQLProducer {public static int count 10;public static String topic "xiao-zou-topic";public static void main(String[] args) {DefaultMQProducer producer MQUtils.createLocalProducer();IntStream.range(0, count).forEach(i -&g…