当前位置: 首页 > article >正文

Kubernetes 存储 Downward API

1.介绍

1.提供容器元数据

比如我们 golang语言 我们说他会根据当前CPU的数量 以此去确认我们的进程 线程 和协程之间的关系 以此去释放我们当前CPU的更大的  这么一个并行任务的能力 但是这里会出现一个问题 容器它是把当前的应用 封装在我们固定的名称空间了 而且给它以特定的资源 当然它的背后是基于我们的 cgroup  我们叫控制组 换句话的意思 它看起来 这里有4个CPU 那我就通过我们的四个线程 的方式去创建更多协程 以此去占用更多的CPU资源 但其次呢 其实我只给它限制允许使用两个CPU 那这里是不是就不搭了 可能会出现一些我们的运行的缓慢啊 还不如不优化的结果 那再包括我们类似nginx的服务 它的工作进程数量 叫 worker processes 它需要根据当前的CPU数量 去进行绑定的 那如果我们看起来现在有4个CPU 实际上只有两个在用 那我们worker processes是不是设定也会有问题 那我们怎么把当前的真实的CPU数量 内存数量 传递给容器内部的进程 或应用呢 ,就可以通过Downward API 来使用

2.动态配置 

我们有时候会根据当前的pod名称 或 pod标签去修改我们的配置参数 难在需要你给我提供准确的数那这个数据怎么提供  就由 downwardAPI 

3.与 kubernetes 环境集成

我们可以调取当前kubernetes内部的一些需要的数据  以此去修改 让我得到一个最稳妥的恰当的运行方式 这都是我们的 downward API 可以去实现可以去用到的的一种情况 比如我们的CPU实际的真实数量的传入

2.案例1 env案例

创建 12.pod.yaml

apiVersion: v1
kind: Pod
metadata:name: downward-api-env-example
spec:containers:- name: my-containerimage: wangyanglinux/myapp:v1.0env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: CPU_REQUESTvalueFrom:resourceFieldRef:resource: requests.cpu- name: CPU_LIMITvalueFrom:resourceFieldRef:resource: limits.cpu- name: MEMORY_REQUESTvalueFrom:resourceFieldRef:resource: requests.memory- name: MEMORY_LIMITvalueFrom:resourceFieldRef:resource: limits.memoryrestartPolicy: Never
 kubectl create -f 12.pod.yaml
 kubectl exec -it downward-api-env-example -- /bin/bash
env

3.案例2 volume 案例

 如果对当前资源不做限制,默认是可以使用当前机器的所有资源,如果你觉得太多了你想加资源限制你可以使用 resources 下的 limits 和 requests关键字

apiVersion: v1
kind: Pod
metadata:name: downward-api-volume-example
spec:containers:- name: my-containerimage: wangyanglinux/myapp:v1.0resources:limits:cpu: "1"memory: "512Mi"requests:cpu: "0.5"memory: "256Mi"volumeMounts:- name: downward-api-volumemountPath: /etc/podinfovolumes:- name: downward-api-volumedownwardAPI:items:- path: "annotations"fieldRef:fieldPath: metadata.annotations- path: "labels"fieldRef:fieldPath: metadata.labels- path: "name"fieldRef:fieldPath: metadata.name- path: "namespace"fieldRef:fieldPath: metadata.namespace- path: "uid"fieldRef:fieldPath: metadata.uid- path: "cpuRequest"resourceFieldRef:containerName: my-containerresource: requests.cpu- path: "memoryRequest"resourceFieldRef:containerName: my-containerresource: requests.memory- path: "cpuLimit"resourceFieldRef:containerName: my-containerresource: limits.cpu- path: "memoryLimit"resourceFieldRef:containerName: my-containerresource: limits.memoryrestartPolicy: Never

requests含义初识资源

limits 最大资源

kubectl create -f 13.pod.yaml
 kubectl exec -it downward-api-volume-example -- /bin/bash
cd /etc/podinfo
ls -l

1.给加标签这文件的值会更新

kubectl get po --show-labels

 kubectl label pod downward-api-volume-example jmj=admin

这样就加载过来了 热更新 

cat labels

 

 

4.案例3  Pod之间传递元数据 基于ApiServer访问集群

 1.创建一个RBAC的基于角色的权限

1.rbac.yaml 

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: test-api-cluster-admin-binding
subjects:
- kind: ServiceAccountname: test-apinamespace: default
roleRef:kind: ClusterRolename: cluster-adminapiGroup: rbac.authorization.k8s.io
kubectl create -f 1.rbac.yaml

2.创建 一个Service Account 简称 sa  test-api 

kubectl create sa test-api

3.创建pod

apiVersion: v1
kind: Pod
metadata:name: curl
spec:serviceAccountName: test-apicontainers:- name: mainimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/curlimages/curl:8.9.1command: ["sleep", "9999"]

赋予权限等会访问Api服务器

kubectl apply -f 1.pod.yaml
root@curl:/# TOKEN=$( cat /var/run/secrets/kubernetes.io/serviceaccount/token )
root@curl:/# CAPATH="/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
root@curl:/# NS=$( cat /var/run/secrets/kubernetes.io/serviceaccount/namespace )
root@curl:/# curl -H "Authorization: Bearer $TOKEN" --cacert $CAPATH 
https://kubernetes/api/v1/namespaces/$NS/pods

这是另一种获取pod相关属性的方式

5.kubernetes api文档

kubectl proxy --port=8080

相当于把我们apiserver 服务器做了 类似于nginx 在外面桥接一次 把https 转化为 http 你就不需要提供证书了 而且基于这样的端口访问的时候 是不需要做授权的判断的 更简单 

curl localhost:8080/openapi/v2 > k8s-swagger.json
cat k8s-swagger.json

用图形化界面去读取 这个json文件

docker run --rm -d -p 80:8080 -e SWAGGER_JSON=/k8s-swagger.json -v $(pwd)/k8s-swagger.json:/k8s-swagger.json swaggerapi/swagger-ui

这样就获取到官方的接口文档了

 

相关文章:

Kubernetes 存储 Downward API

1.介绍 1.提供容器元数据 比如我们 golang语言 我们说他会根据当前CPU的数量 以此去确认我们的进程 线程 和协程之间的关系 以此去释放我们当前CPU的更大的 这么一个并行任务的能力 但是这里会出现一个问题 容器它是把当前的应用 封装在我们固定的名称空间了 而且给它以特定的…...

使用ctags+nvim自动更新标签文件

ctags是一个强大的语言分析工具,可以分析多种语言并生成语法结构文件,通过这些文件可以快速进行函数跳转,但是这有一个缺点,就是每次在项目里更新了代码之类的比如新增了一个函数,都需要重新使用ctags -R .来重新更新标…...

RK3568 gpio模拟i2c 配置hym8563 RTC时钟

1、使用模拟i2c,确认使用的gpio未被占用,为gpio功能 以GPIO0_C6 GPIO0_C7为例,查看管脚的复用关系。 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins2、使用内核模块i2c-gpio.c 内核make menuconfig 开启i2c_gpio支持 Device Drivers->I2C sup…...

HANA如何在存储过程里执行动态SQL

业务场景需求: 在HANA里如何实现动态的SQL控制,比如需要多个单据里,实现某个自定义字段不允许重复 一般的写法是需要在每个业务单据里加对应的存储过程控制,这样的话,需要在每个业务单据里进行控制,SQL维…...

01人工智能基础入门

一、AI应用场景和发展历程 1.1行业应用 1、deepdream图像生成、yolo目标检测 2、知识图谱、画风迁移 3、语音识别、计算机视觉 4、用户画像 5、百度人工智能布局 1.2发展历程 人工智能的发展经历了 3 个阶段: 1980年代是正式成形期,尚不具备影响力。 …...

嵌入式AI的本地化部署的好处

嵌入式AI本地化处理(即边缘计算)的核心优势在于将AI算力下沉至设备端,直接处理数据而非依赖云端,这种模式在多个维度上展现出显著价值: 一、数据隐私与安全性提升 1. 敏感数据本地存储 金融、医疗等涉及隐私的行业…...

进程和内存管理

目录 一.进程的基本信息 1.1进程的定义 1.2进程的特征 1.3进程的组成 1.4线程产生的背景 1.5线程的定义 1.6进程与线程的区别 1.7进程的类别 1.8进程的优先级 1.8.1进程优先级的概念 1.8.2PRI和NI 1.9僵尸进程 1.9.1僵尸进程的定义 1.9.2僵尸进程产生的原因 1.9…...

001 vue

https://cn.vuejs.org/ 文章目录 v-bindv-modelv-on修饰符条件渲染/控制:v-if v-show列表渲染 M:即Model,模型,包括数据和一些基本操作 V:即View,视图,页面渲染结果 VM:即View-Mode…...

css动态设置div宽高,calc函数

在css中使用calc函数 calc() 是 CSS 中的一种函数,用于动态计算长度值。它允许你在 CSS 属性中进行数学运算,结合不同的单位(如 px、%、em 等),从而创建更加灵活和响应式的布局 表达式规则 运算符:支持加…...

MySQL篇(四)事务相关知识详解

MySQL篇(四)事务相关知识详解 MySQL篇(四)事务相关知识详解一、事务的特性(ACID)原子性(Atomicity)一致性(Consistency)隔离性(Isolation)持久性(…...

React 项目使用 pdf.js 及 Elasticpdf 教程

摘要:本文章介绍如何在 React 中使用 pdf.js 及基于 pdf.js 的批注开发包 Elasticpdf。简单 5 步可完成集成部署,包括数据的云端同步,示例代码完善且简单,文末有集成代码分享。 1. 工具库介绍与 Demo 1.1 代码包结构 ElasticP…...

性能测试之jmeter的基本使用

简介 Jmeter是Apache的开源项目,基于Java开发,主要用于进行压力测试。 优点:开源免费、支持多协议、轻量级、功能强大 官网:https://jmeter.apache.org/index.html 安装 安装步骤: 下载:进入jmeter的…...

CAD插件实现:所有文字显示到列表、缩放、编辑——CAD-c#二次开发

当图中有大量文字,需要全部显示到一个列表时并缩放到需要的文字时,可采用插件实现,效果如下: 附部分代码如下: private void BtnSelectText_Click(object sender, EventArgs e){var doc Application.DocumentManager.…...

【Git】“warning: LF will be replaced by CRLF”的解决办法

一、原因分析 不同操作系统的换行符标准不同: • Windows:使用 CRLF(\r\n)表示换行; • Linux/Mac:使用 LF(\n)表示换行 Git 检测到本地文件的换行符与仓库设置或目标平台不兼容时…...

vue2(13) 组件注册的学习笔记

文章目录 Vue2 组件注册学习笔记一、组件注册的基本概念二、全局注册三、局部注册四、组件名的命名规范五、在模块系统中注册组件六、基础组件的自动化全局注册七、总结Vue2 组件注册学习笔记 一、组件注册的基本概念 在Vue中,组件是可复用的Vue实例,具有封装的模板和逻辑。…...

【spring Cloud Netflix】OpenFeign组件

1.概述 Feign旨在使编写Java Http客户端变得更容易。前面在使用RibbonRestTemplate进行服务的远程调用 时,利用RestTemplate对Http请求的封装处理,形成了一套模板化的调用方法。但是在实际开发中,由 于对服务的依赖调用可不止一处&#xff0…...

go游戏后端开发20:房间消息推送处理

创建房间逻辑前的概念梳理及代码实现 在编写创建房间的逻辑之前,我们需要先创建几个关键概念。 第一个概念是“联盟”。联盟可以理解为一个组织,它持有多个房间。一个联盟下可能挂载多个房间,这是我们的第一个概念。 第二个概念是“管理”…...

Oracle数据库数据编程SQL<8 文本编辑器Notepad++和UltraEdit(UE)对比>

首先,用户界面方面。Notepad是开源的,界面看起来比较简洁,可能更适合喜欢轻量级工具的用户。而UltraEdit作为商业软件,界面可能更现代化,功能布局更复杂一些。不过,UltraEdit支持更多的主题和自定义选项&am…...

Linux驱动开发练习案例

1 开发目标 1.1 架构图 操作系统:基于Linux5.10.10源码和STM32MP157开发板,完成tf-a(FSBL)、u-boot(SSBL)、uImage、dtbs的裁剪; 驱动层:为每个外设配置DTS并且单独封装外设驱动模块。其中电压ADC测试,采用linux内核…...

Windows程序中计时器WM_TIMER消息的使用

本文章是对《Windows程序设计》这本书第八章计时器的总结,如果有时间,可以去看书里的讲解,如果时间不充裕,想马上知道计时器该如何使用,欢迎阅读本文,本文已经将计时器的干货整理完毕! 什么是计…...

Apache httpclient okhttp(1)

学习链接 Apache httpclient & okhttp(1) Apache httpclient & okhttp(2) httpcomponents-client github apache httpclient文档 apache httpclient文档详细使用 log4j日志官方文档 【Java基础】- HttpURLConnection…...

微信小程序—路由

关于 app.json 中的配置 app.json 主要是对整个小程序进行一个全局的配置。 pages:在这个配置项目中,就可以配置小程序里面的页面,小程序默认显示 pages 数组中的第一个页面windows:主要配置和导航栏相关的 当然,在…...

人工智能驱动的数据仓库优化:现状、挑战与未来趋势

1. 引言:数据仓库的演进与人工智能驱动优化的兴起 现代数据仓库的复杂性和规模正以前所未有的速度增长,这主要是由于数据量、种类和产生速度的急剧增加所致。传统的数据仓库技术在应对这些现代数据需求方面显得力不从心,这催生了对更先进解决…...

LVS高可用负载均衡

一、项目图 二、主机规划 主机系统安装应用网络IPclientredhat 9.5无NAT192.168.72.115/24lvs-masterredhat 9.5ipvsadm,keepalivedNAT192.168.72.116/24 VIP 192.168.72.100/32lvs-backupredhat 9.5ipvsadm,keepalivedNAT192.168.72.117/24 VIP 192.168…...

脑影像分析软件推荐 | JuSpace

目录 1. 软件界面 2.工具包功能简介 3.软件安装注意事项 参考文献: Dukart J, Holiga S, Rullmann M, Lanzenberger R, Hawkins PCT, Mehta MA, Hesse S, Barthel H, Sabri O, Jech R, Eickhoff SB. JuSpace: A tool for spatial correlation analyses of magne…...

集合框架——常用类

集合框架的理解 就是一个常用类 集合主要有三种类型【集合与集合之间可以互转】 List(列表,是接口)Set(集合,是接口)Map(键值对,是接口)Collection是以上及所有集合的根接口,其里面的子类,一部分支持集合有序元素可重复,一部分支持集合无序元素不重复 可重复和不…...

【NLP 面经 7、常见transformer面试题】

目录 1. 为何使用多头注意力机制? 2. Q和K使用不同权重矩阵的原因 3. 选择点乘而非加法的原因 4. Attention进行scaled的原因 5. 对padding做mask操作 6. 多头注意力降维原因 7. Transformer Encoder模块简介 8. 乘以embedding size的开方的意义 9. 位置编码 10. 其…...

分布式事务解决方案全解析:从经典模式到现代实践

前言 在分布式系统中,数据一致性是一个核心问题。随着微服务架构的普及,跨服务、跨数据库的操作变得越来越普遍,如何保证这些操作的原子性、一致性、隔离性和持久性(ACID)成为了一个极具挑战性的任务。本文将全面介绍…...

软件工程面试题(二十七)

1、j a v a 对象初始化顺序 1.类的初始化(initialization class & interface) 2.对象的创建(creation of new class instances) 顺序:应为类的加载肯定是第一步的,所以类的初始化在前。大体的初始化顺序是: 类初始化 -> 子类构造函数 -> 父类构造函数 -&g…...

fastGPT—nextjs—mongoose—团队管理之部门相关api接口实现

创建部门或者子部门 import type { NextApiRequest, NextApiResponse } from next; import { NextAPI } from /service/middleware/entry; import { MongoOrgModel } from fastgpt/service/support/permission/org/orgSchema;async function handler(req: NextApiRequest, res…...