Kubernetes(K8S第三部分之资源控制器)

news/2024/7/27 10:34:36/文章来源:https://blog.csdn.net/weixin_54689506/article/details/136416380

资源控制器

什么是控制器

Kubernetes中内建了很多controller(控制器),这些相当于一个状态机,用来控制Pod的具体状态和行为。

控制器类型

ReplicationController和ReplicaSet

Deployment

DaemonSet

StateFulSet

Job/CronJob

Horizontal Pod Autoscaling

ReplicationController和ReplicaSet

ReplicationController(RC)用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出。会自动创建新的Pod来替代。而如果异常多出来的容器也会自动回收。

在新版本的Kubernetes中建议使用ReplicaSet来取代ReplicationController。ReplicaSet跟ReplicationController没有本质的不同。只是名字不一样。并且ReplicaSet支持集合式的selector;

标签

Deployment

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法。用来替代以前的ReplicationController来方便的管理应用。典型的应用场景包括;

定义Deployment来创建Pod和ReplicaSet

滚动升级和回滚应用

扩容和缩容

暂停和继续Deployment

DaemonSet

DaemonSet确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod使用DaemonSet的一些典型用法。

运行集群存储daemon,例如在每个Node上运行glusterd。ceph。

在每个Node上运行日志收集deamon,例如fluentd,logstash

在每个Node上运行监控daemon,例如Prometheus Node,Exporter,coolectd,Datadog代理。

New Relic代理。或Ganglia gmond

滚动更新。回滚操作。

Job

Job负责批处理任务。即仅执行一次的任务。它保证批处理任务的一个或多个Pod成功结束。

CronJob   在特定的时间循环创建Job

Cron Job管理基于时间的Job,即

在给定时间点只运行一次。

周期性地在给定时间点运行。

使用前提条件:当前使用的Kubernetes集群,版本>=1.8(对CronJob)。对于先前版本的集群,版本<1.8,启动APIServer时,通过传递选项 --runtime-config=batch/v2alpha1=true  可以开启batch/v2alpha1   API**

典型的用法如下图。

在给定的时间点调度Job运行

创建周期性运行的Job,例如:数据库备份,发送邮件。

StatefulSet

StatefulSet作为Controller为Pod提供唯一的标识。它可以保证部署和scale的顺序。

StatrfulSet是为了解决有状态服务的问题。(对应Deployments和ReplicaSets是为了无状态服务而设计),其应用场景包括。稳定的持久化存储。即Pod重新调度后环视能访问到相同的持久化数据。基于PVC来实现

稳定的网络标致。即Pod重新调度后其PodName和HostName不变。基于Headless Service(即没有Cluster IP 的Service)来实现

有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行。(即从0到N-1)在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现

有序收缩。有序删除,(即从N-1到0)

Horizontal Pod Autoscaling

应用的资源使用率通常有高峰和低谷的时候。如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放。

RS与RC与Deployment关联

RC(ReplicationController)主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数。即如果容器异常退出。会自动创建新的Pod来代替。而如果异常多出来的容器也会自动回收。

Kubernetes官方建议使用RS(ReplicaSet)替代RC(ReplicationController)进行部署。RS跟RC没有本质的不同。只是名字不一样。并且RS支持集合式的selector。

RS与Deployment的关联

Deployment

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法。用来替代以前的ReplocationController来方便的管理应用。典型的应用场景包括。

1,定义Deployment来创建Pod和ReplicaSet

2,滚动升级和回滚应用

3,扩容和缩容。

4,暂停和继续Deployment

1,部署一个简单的Nginx应用

apiVersion:extensions/v1beta1

kind:Deployment

metadata:

  name: nginx-deployment

spec:

replicas: 3

template:

metadata:

labels:

app: nginx

spec:

containers:

-name: nginx

image:nginx:1.7.9

ports:

- containerPort: 80

kubectl create -f https://kubernets.io/docs/user-guide/nginx-deployment.yaml --record

## --record参数可以记录命令。我们可以很方便的查看每次revision的变化

二。扩容

kubectl scale deployment nginx-deployment --replicas 10

三。如果集群支持horizontal pod autoscaling的话,还可以为Deployment设置自动扩展

kubectl autoscale deploument nginx-deployment --min=10 --max=15 --cpu-percent=80

四。更新镜像也比较简单

kubectil set image deployment/nginx-deployment nginx=nginx:1.9.1

五。回滚

kubectl rollout undo deployment/nginx-deployment

Deployment更新策略

deployment可以保证在升级时只有一定数量的Pod是down的。默认的,他会确保至少有比期望的Pod数量少一个是up状态(最多一个不可用)

Deployment同时也可以确保只创建出超过期望数量的一定数量的Pod。默认的,他会确保最多比期望的Pod数量多一个的Pod是up的(最多一个surge)

未来的Kuberentes版本中,将从1-1变成25%-25%

$kubectl describe deployments

Rollover (多个rollout并行)

假如您创建了一个有5个nginx:1.7.9replica的Deployment,但是当还只有3个nginx:1.7.9的replica创建出来的时候您就开始更新含有5个nginx:1.9.1replica的Deployment。在这种情况下。Deployment会立即杀掉已创建的3个nginx:1.9.1的Pod,并开始创建nginx:1.9.1的Pod。它不会等到所有的5个nginx:1.7.9的Pod都创建完成后才开始改变航道。

回退Deployment

kubectl set image deployment/nginx-deployment nginx=nginx:1.91

kubectl rollout status deployments nginx=deployment

清理Policy

您可以通过设置  .spec.revisonHistroyLimit  项来制定deployment最多保留多少revision历史记录。默认的会保留所有的revision;如果将该项设置为0,Deployment就不允许回退了。

什么是DaemonSet

DaemonSet确保全部(或者一些)Node上运行一个Pod副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收,删除DaemonSet将会删除它创建的所有Pod,使用DaemonSet的一些典型用法。

1,运行集群存储daemon,例如在每个Node上运行glusterd,ceph

2,在每个Node上运行日志收齐daemon,例如fluentd,logstash

3,在每个Node上运行监控daemon,例如Prometheus Node Exporter,collectd,Datadog代理。New Relic代理,或Ganglia gmond

CronJob Spec

1,spec.template格式同Pod

2,RestartPolicy仅支持Never或OnFailure

3,单个Pod时,默认Pod成功运行后Job即结束。

4,    .spec.completions标志Job结束需要成功运行的Pod个数。默认为1.

5,    .spec.parallelism标志并行运行的Pod的个数,默认为1.

6,    .spec.activeDeadlineSeconds标志失败Pod的重试最大时间。超过这个时间不会继续重试。

CronJob

Cron Job 管理基于时间的Job,即:

在给定时间点只运行一次。

周期性地在给定时间点运行。

使用条件:当前使用的Kubernetes集群。版本>=1.8(对CronJob)

典型的用法如下所示:

1,在给定的时间点调度Job运行

2,创建周期性运行的Job,例如:数据库备份。发送邮件。

CronJob Spec

.spec.schedule:调度,必需字段,制定任务运行周期,格式同Cron。

.spec.jobTemplate:Job模版,必需字段,指定需要运行的任务,格式同Job。

.spec.startingDeadlineSconds:启动Job的期限(秒级别),该字段是可选的。如果因为任何原因而错过了被调度的时间,那么错过执行时间的Job将被认为是失败的。如果没有指定。则没有期限

CrondJob本身的一些限制

创建Job操作应该是幂等的

无法判断他的成功状态

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

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

相关文章

【ArcPy】游标访问几何数据

访问质心坐标相关数据 结果展示 代码 import arcpy shppath r"C:\Users\admin\Desktop\excelfile\a2.shp" with arcpy.da.SearchCursor(shppath, ["SHAPE","SHAPEXY","SHAPETRUECENTROID","SHAPEX","SHAPEY",&q…

前端canvas项目实战——简历制作网站(五):右侧属性栏(字体、字号、行间距)

目录 前言一、效果展示二、实现步骤1. 优化代码&#xff0c;提取常量2. 实现3个编辑模块3. 实现updateFontProperty方法4. 一个常见的用法&#xff1a;仅更新当前选中文字的样式 三、Show u the code后记 前言 上一篇博文中&#xff0c;我们扩充了线条对象&#xff08;fabric.…

MongoDB Java实战

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d7;本文收录于MongoDB系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏Rust初阶教程、go语言基础…

蓝色经典免费wordpress模板主题

蓝色经典配色的免费wordpress建站主题&#xff0c;万能的wordpress建站主题。 https://www.wpniu.com/themes/24.html

S4---FPGA-K7板级原理图硬件实战

视频链接 FPGA-K7板级系统硬件实战01_哔哩哔哩_bilibili FPGA-K7板级原理图硬件实战 基于XC7K325TFFG900的FPGA硬件实战框图 基于XILINX 的KINTEX-7 芯片XC7K325FPGA的硬件平台&#xff0c;FPGA 开发板挂载了4 片512MB 的高速DDR3 SDRAM 芯片&#xff0c;另外板上带有一个SODIM…

kafka查看消息两种方式(命令行和软件)+另附发送消息方式

1、命令行方式 ①找到kafka安装文件夹 ②执行命令 #指定offset为指定时间作为消息起始位置 kafka-consumer-groups.sh \ --bootstrap-server 20.2.246.116:9092 \ --group group_1 \ --topic lanxin_qiao \ --reset-offsets \ --to-datetime 2023-07-19T01:00:00.000 \ -exe…

软件测试工程师必备的27个基础技能

混迹于软件测试这么长时间了&#xff0c;一直想写一篇关于软件测试的经验分享的文章&#xff0c;但苦于工作原因迟迟未下笔。最近终于有了些闲余时间&#xff0c;遂决定把自己的心路历程及所感所想记录下来&#xff0c;与各位同行共勉。 以我多年的工作经验来看&#xff0c;软…

图文并茂的讲清楚Linux零拷贝技术

今天我们来聊一聊Linux零拷贝技术&#xff0c;今天我们以一个比较有代表性的技术sendfile系统调用为切入点&#xff0c;详细介绍一下零拷贝技术的原理。 1.零拷贝技术简介 Linux零拷贝技术是一种优化数据传输的技术&#xff0c;它可以减少数据在内核态和用户态之间的拷贝次数&…

乐得瑞 1C to 2C快充线:引领充电数据线新潮流,高效快充解决接口难题

随着科技的不断进步&#xff0c;数据线的接口种类也日渐繁多&#xff0c;但在早些时候&#xff0c;三合一和二合一的数据线因其独特的设计而备受欢迎。这类数据线通常采用USB-A口作为输入端&#xff0c;并集成了Micro USB、Lightning以及USB-C三种接口&#xff0c;满足了当时市…

JeecgBoot Vue3前端项目性能优化按需加载方案

JeecgBoot vue3前端项目在 3.5.5 版本之前&#xff0c;的确存在很严重的性能问题&#xff0c;大家可以参考以下文档进行升级。 按需加载改造方法 1、全局注册地方去掉2、组件改成异步注册3、用不到的大组件可以删掉 【精简项目方案】 大组件 1、富文本 tinyme2、Markdown3、…

数据库压力测试方法概述

一、前言 在前面的压力测试过程中&#xff0c;主要关注的是对接口以及服务器硬件性能进行压力测试&#xff0c;评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说&#xff0c;整个系统的瓶颈在于数据库。 原因很简单&#xff1a;Web应用中的其他因素&#xff0c;…

C++ · 代码笔记5 · 探索多态与虚函数

目录 前言011虚函数_使用基类指针实现覆盖特性012虚函数_使用引用实现覆盖特性013使用多态场景小例程020构成多态的条件030虚析构函数040纯虚函数051typeinfo运算符_获取类型信息052typeinfo_根据不同类型进行不同操作 前言 本笔记所涉及到的编程环境与 《C 代码笔记1 从C到C…

9道软件测试面试题,刷掉90%的测试程序员

没点真本事真技术&#xff0c;没点面试经验&#xff0c;不了解点职场套路&#xff0c;如何过五关斩六将&#xff1f;如何打败面试官&#xff1f;如何拿下那梦寐以求的offer&#xff1f; 如果你的跳槽意向已经很确定&#xff0c;那么请往下看&#xff01; 跳槽最重要的一步自然…

完美解决VMware中配置suse10虚拟机网络

一、注意&#xff01;&#xff01;&#xff01;配置suse10网络&#xff0c;需要在虚拟机关机状态下进行&#xff0c;否则会配置不成功&#xff1b; 二、配置与主机在同一网段(仅主机模式&#xff0c;网卡一)&#xff1b; 在suse系统关机状态下&#xff0c;Vmware中设置”虚拟网…

UE5 文字游戏(2) C++实时读取CSV文件(游戏开始读取本地CSV剧本)

1.结构体代码 // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include "Engine/DataTable.h" #include "MyCharacterStats.generated.h"USTRUCT(BlueprintType) struc…

记录 android studio 通过安装NDK 编译C文件,得到需要的so文件

只怪自己太健忘&#xff0c;每次网上查了一圈&#xff0c;搞定后&#xff0c;再遇到又发现不会操作了&#xff0c;特此记下 不废话直接上步骤 &#xff08;1&#xff09; 进入AS的settinging如下界面 &#xff08;2&#xff09;选中图片箭头两个文件 进行下载 &#xff08;…

ChatGPT高效提问——角色提示

ChatGPT高效提问——角色提示 角色提示技巧是一种通过给模型提供具体的角色扮演&#xff0c;指导ChatGPT输出的方法。这个技巧对一个具体的上下文或者听众定制生成的文本很有用。 要使用角色提示技巧&#xff0c;你需要提供明确具体的模型扮演的角色。 例如&#xff0c;如果…

docker 数据卷 详解与实践

常见的数据卷命令 命令 说明 文档地址 docker volume create 创建数据卷 docker volume create docker volume ls 查看所有数据卷 docs.docker.com docker volume rm 删除指定数据卷 docs.docker.com docker volume inspect 查看某个数据卷的详情 docs.docker.co…

【Python】6. 基础语法(4) -- 列表+元组+字典篇

列表和元组 列表是什么, 元组是什么 编程中, 经常需要使用变量, 来保存/表示数据. 如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可. num1 10 num2 20 num3 30 ......但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候,…

qtvs2022工程cmakelist.txt添加QCharts模块

find_package(QT NAMES Qt5 COMPONENTS Core Gui Widgets OpenGL Concurrent Charts Sql Network REQUIRED) find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Core Gui Widgets OpenGL Charts Concurrent Sql Network REQUIRED)这里find_package只是设置搜索路径&#xff0c;为…