【Kubernetes】三证集齐 Kubernetes实现资源超卖(附镜像包)
目录
- 插叙
- 前言
- 一、思考和原理
- 二、实现步骤
- 0. 资料包
- 1. TLS证书签发
- 2. 使用 certmanager 生成签发证书
- 3. 获取secret的内容 并替换CA_BUNDLE
- 4.部署svc + deploy
- 三、测试验证
- 1. 观察pod情况
- 2. 给node 打上不需要超售的标签【可以让master节点资源不超卖】
- 3. 资源实现超卖
- 4. 删除还原
- 四、总结
插叙
友友们好久不见,插播一个最近get的证书,完成了第一步,一起努力鸭~
前言
小涛运维时遇到一个问题,发现:容器在Kubernetes中,使用率要远低于申请率
比如:申请了1G内存,实际只用了200M左右,
就会产生这种情况:node上还有资源,但是不能调度了(Why?因为k8s默认调度器是 按allocate算的,并不是真实剩余的)
那么怎么办呢?
- 用scheduler extender写一个调度器 ,用usage调度pod
- 按照namespace 把业务分开,在每个ns上设置resourceQuota -->相对最容易实现【yaml文件限制】
- 把pod的request降低
- 基于MutatingWebhook 把node的 allocatable 调高
今天,小涛讲解的方法,是第四种----基于MutatingWebhook 把node的 allocatable 调高
下面和小涛看看吧~
一、思考和原理
思想:基于MutatingWebhook将allocatable调高
,实现node资源超卖
#查看某个node节点当前资源情况
kubectl get nodes node2 -o yaml |grep allocatable: -A6
核心点:动态修改节点Node对象的allocatable字段值
- 而我们看到allocatable字段属于Status字段
- 显然不能直接通过kubectl edit命令来直接修改。
- 因为Status字段和Spec字段不同,Spec是用户设置的期望数据
- 而Status是实际数据(Node节点通过不断向apiServer发送心跳来更新自己的实时状态,最终存在etcd中)。那么怎么去修改Stauts字段呢?
二、实现步骤
0. 资料包
链接:https://pan.baidu.com/s/12AmYn5h_c_XrlH6iS-gSDQ
提取码:sell
- 实现的核心步骤
- 证书和签名:tls双向认证需要
- 编写go项目代码,实现webhook服务器,对node status字段更改
- 部署webhook服务,编写MutatingWebhookConfiguration 测试【把node 的status推送到中间件服务中】
1. TLS证书签发
借助certmanager 签发证书
#安装部署
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml#================================================================
#如果是内网环境,将yaml文件 wget后,再docker pull 对应的镜像后,再导入到离线环境的镜像仓库【资料包里有相关镜像资料】
wget https://github.com/cert-manager/cert-manager/releases/download/v1.8.2/cert-manager.yaml
docker pull quay.io/jetstack/cert-manager-cainjector:v1.8.2
docker pull quay.io/jetstack/cert-manager-controller:v1.8.2
docker pull quay.io/jetstack/cert-manager-webhook:v1.8.2
docker pull registry.cn-beijing.aliyuncs.com/dbatao/k8s-node-oversell:v1
检查certmanager服务是否正常
$ kubectl apply -f cert-manager.yaml
$ kubectl get pod -n cert-manager
2. 使用 certmanager 生成签发证书
# cat cert.yaml
---
apiVersion: v1
kind: Namespace
metadata:name: node-oversell-webhook
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:name: selfsigned-issuernamespace: node-oversell-webhook
spec:selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:name: serving-certnamespace: node-oversell-webhook
spec:dnsNames:- node-oversell-webhook.node-oversell-webhook.svc- node-oversell-webhook.node-oversell-webhook.svc.cluster.localissuerRef:kind: Issuername: selfsigned-issuersecretName: webhook-server-cert
---# kubectl apply -f cert.yaml
查看证书是否已签发完成
$ kubectl get certificate -n node-oversell-webhook
3. 获取secret的内容 并替换CA_BUNDLE
CA_BUNDLE=$(kubectl -n node-oversell-webhook get secrets webhook-server-cert -o jsonpath="{.data.ca\.crt}")echo ${CA_BUNDLE}
sed -i "s|\${CA_BUNDLE}|${CA_BUNDLE}|g" mutating_webhook.yamlcat mutating_webhook.yaml
kubectl apply -f mutating_webhook.yaml
4.部署svc + deploy
kubectl apply -f webhook_deployment.yamlkubectl apply -f svc.yaml
curl -k https://svc_ip:443/readyz #预期---返回ok
三、测试验证
1. 观察pod情况
kubectl logs -n node-oversell-webhook node-oversell-webhook-7b75dd467b-hs9m9 --tail 10
2. 给node 打上不需要超售的标签【可以让master节点资源不超卖】
#将<node_name>更换为不用超卖节点的名称,非常智能!!
$ kubectl label node <node_name> node-oversell/disable=true#例如
kubectl label node master01 node-oversell/disable=true#如果需要这个节点超卖,将标签去掉即可
kubectl label node master01 node-oversell/disable-
3. 资源实现超卖
$ kubectl get nodes node2 -o yaml |grep allocatable: -A6#在Prometheus里用PromeQL也能查看到
kube_node_status_allocatable{} #QL查询语句
4. 删除还原
$ kubectl delete deploy -n node-oversell-webhook node-oversell-webhook
$ kubectl delete mutatingwebhookconfigurations node-oversell-webhook
四、总结
-
我们再来回顾一下大致步骤
-
API-Server支持准入控制器中,准入控制器中有一个“修改性质的控制器”
- 监听node status的服务资源,牵引到某个服务上【这个服务中,把10G改成20G,再推送API-Server中】
- Admission controller是拦截(经过身份验证)API Server请求的网关,并且可以修改请求对象或拒绝请求。
- k8s在Api-Server中就提供Admission Controller(准入控制器)的机制,包括MutatingAdmissionWebhook,通过这个webhook,所有在集群中和Api-Sever交互的请求都被发送到一个指定的接口中,我们只要提供一个这样的接口,就可以获取到Node往ApiServer发送心跳的Staus数据了。然后将这个数据进行我们的自定义修改,再往后传给etcd,就能让etcd以为我们修改过的Status数据就是节点的真实Status,最终实现资源的超卖。
- MutatingAdmissionWebhook 作为kubernetes的 ApiServer中Admission Controller的一部分,提供了非常灵活的扩展机制,通过配置MutatingWebhookConfiguration对象,理论上可以监听并修改任何经过ApiServer处理的请求。
-
形象的通俗理解:古代时,大臣(node资源汇报)想汇报情况给皇帝(ETCD),需要通过太监进行传达,那么太监可以修改奏本(allocatable)再传给皇帝,以达到以假乱真的情形。
- 而 k8s在Api-Server中就提供Admission Controller(准入控制器)的机制(可以修改性质的控制器)
今天也是充实的一天呢,有问题欢迎大家评论区交流,咱们下篇文章再见了~ 😉
相关文章:

【Kubernetes】三证集齐 Kubernetes实现资源超卖(附镜像包)
目录 插叙前言一、思考和原理二、实现步骤0. 资料包1. TLS证书签发2. 使用 certmanager 生成签发证书3. 获取secret的内容 并替换CA_BUNDLE4.部署svc deploy 三、测试验证1. 观察pod情况2. 给node 打上不需要超售的标签【可以让master节点资源不超卖】3. 资源实现超卖4. 删除还…...

国产Sora免费体验-快手旗下可灵大模型发布
自从OpenAI公布了Sora后,震爆了全世界,但由于其技术的不成熟和应用的局限性,未能大规模推广,只有零零散散的几个公布出来的一些视频。昨日,快手成立13周年,可灵(Kling)大模型发布&am…...

linux嵌入式设备测试wifi信号强度方法
首先我们要清楚设备具体链接在哪个wifi热点上 执行:nmcli dev wifi list rootubuntu:/home/ubuntu# nmcli dev wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS > * 14:EB:08:51:7D:20 wifi22222_5G Infr…...
【名词解释】Unity的Inputfield组件及其使用示例
Unity的InputField组件是一个UI元素,它允许用户在游戏或应用程序中输入文本。InputField通常用于创建表单、登录界面或任何需要用户输入文本的场景。它提供了多种功能,比如文本验证、占位符显示、输入限制等。 功能特点: 文本输入ÿ…...

Android 安装调试 TelephonyProvider不生效
直接安装TelephonyProvider的时候,(没有重启)发现数据库没有生效。 猜测应该是原本的数据库没有删除后重建更新。 解决方法:杀掉phone进程 adb shell am force-stop com.android.phone 查看device进程 adb shell ps | grep <…...

【C++】STL中List的基本功能的模拟实现
前言:在前面学习了STL中list的使用方法,现在我们就进一步的讲解List的一些基本功能的模拟实现,这一讲博主认为是最近比较难的一个地方,各位一起加油。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 …...

C语言基础——函数
ʕ • ᴥ • ʔ づ♡ど 🎉 欢迎点赞支持🎉 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 前言 一、函数的概念 二、库函数 2.1 库函数和头文件 2.2 库函数的使用/…...

《精通ChatGPT:从入门到大师的Prompt指南》第1章:认识ChatGPT
第1章:认识ChatGPT 1.1 ChatGPT是什么 ChatGPT,全称为Chat Generative Pre-trained Transformer,是由OpenAI开发的一种先进的自然语言处理模型。它利用了深度学习中的一种技术——Transformer架构,来生成类人文本。ChatGPT通过对…...

智慧视觉怎么识别视频?智慧机器视觉是通过什么步骤识别视频的?
智慧视觉功能怎么识别视频?智慧视觉是搭载在智能设备比如手机、AI盒子、机器视觉系统上的一个应用程序或特性,采用计算机视觉和人工智能的技术来识别图像或视频中的内容。如果想了解视频识别,就要明白智慧视觉功能会涉及的以下几个关键步骤和…...

NineData蔡冬者参与编写墨天轮《2023年中国数据库行业年度分析报告》正式发布!
为明晰发展脉络,把握未来趋势,墨天轮于5月29日正式发布 《2023年中国数据库年度行业分析报告》。该报告由墨天轮联合业界专家学者共同编写,共330页,旨在梳理和洞察中国数据库行业的发展趋势、技术创新、市场动态以及面临的挑战&am…...

帝国cms接入腾讯云人脸识别认证代码
利用帝国cms在做一些会员系统的时候,需要做人脸识别认证,之前接入了某api接口,发现身份证识别率真的低,还好充值的少,否则要出问题,后来发现会员注册率降低了不少,最终还是决定使用腾讯云的人脸…...

计算机网络-OSI七层参考模型与数据封装
目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…...

[职场] 为什么不能加薪? #学习方法#知识分享#微信
为什么不能加薪? 不能加薪的根本原因,终于被我找到了! 朋友们!职场这个地方是个很神奇的世界,有些规则并不是你想象的那样。我们都希望能在这个世界里施展自己的才华,获得升职加薪的荣耀。然而,…...

[matlab]折线图之多条折线如何绘制实心圆作为标记点
使用MarkerFaceColor是标记点填充的颜色,b,表示blue,蓝色 plot(x, a, d--, MarkerFaceColor, b); % 绘制仿真结果的曲线如果一张图多条曲线那么每条曲线需要单独调用一次plot,每个plot间用hold on 连接 plot(x, a, d--, MarkerF…...

HTML:认识HTML与基本语法的学习
前言 HTML(超文本标记语言)是用于创建网页的标记语言,由一系列标签组成,定义网页中的元素。由蒂姆伯纳斯 - 李于1990年代初发明,最初用于科研机构间共享文档,迅速演变为Web开发基础。无论是电商、博客、新…...

如何掌握 Java 正则表达式 的基本语法及在 Java 中的应用
正则表达式是一种用于匹配字符串的模式,在许多编程语言中广泛使用。Java 正则表达式提供了强大的文本处理能力,能够对字符串进行查找、替换、分割等操作。 一、正则表达式的基本语法 正则表达式由普通字符和特殊字符组成。普通字符包括字母、数字和标点…...

深度学习(三)
5.Functional API 搭建神经网络模型 5.1利用Functional API编写宽深神经网络模型进行手写数字识别 import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_splitfrom…...

文件系统小册(FusePosixK8s csi)【2 Posix标准】
文件系统小册(Fuse&Posix&K8s csi)【2 Posix】 往期文章:文件系统小册(Fuse&Posix&K8s csi)【1 Fuse】 POSIX:可移植操作系统接口(标准) 1 概念 POSIX:…...
vue 弹出框组件重复打开时,资源重新加载
新增或者编辑内容使用同一个弹出框,如何使数据可以重新加载? 1、绑定时间戳,有副作用,屏幕会闪烁一下 <el-dialog :key"timer" > </el-dialog> 2、v-if和:visible.sync同时使用 <el-dialogv-if"…...

图像的IO操作
代码: import cv2 as cvimport matplotlib.pyplot as plt#读取图像img cv.imread("../data/images/zidane.jpg")#显示图像#2.1 OpenCVcv.imshow("dili",img)cv.waitKey(0)cv.destroyAllWindows()#2.2 matplotlibplt.imshow(img[:,:,::-…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...

技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...