ConfigMap-secrets-静态pod
一.ConfigMap
1.概述
ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中
应用场景:主要是对应用程序的配置
pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源
官方解释:
configMap 卷提供了向 Pod 注入配置数据的方法。 ConfigMap 对象中存储的数据可以被 configMap 类型的卷引用,然后被 Pod 中运行的容器化应用使用。
引用 configMap 对象时,你可以在卷中通过它的名称来引用。 你可以自定义 ConfigMap 中特定条目所要使用的路径。 下面的配置显示了如何将名为 log-config 的 ConfigMap 挂载到名为 configmap-pod 的 Pod 中
2.查看k8s集群系统中都有哪些资源类型
[root@master demo]# kubectl api-resources

3.ConfigMap资源管理
· 创建工作目录
[root@master demo]# mkdir configmap
[root@master demo]# cd configmap
· 创建ConfigMap资源
1.声明式创建ConfigMap资源
· 编辑ConfigMap资源清单
[root@master a]# cat 01-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: cm01#声明cm资源的数据
data:#第一种写法【key:value】demo: demo-cmk8s: kubernets#第二种写法【key:| value value value...】test: |a=ab=bc=c
· 创建查看configMap资源
[root@master a]# kubectl apply -f 01-cm.yaml
configmap/cm01 created
[root@master a]# kubectl get cm cm01
NAME DATA AGE
cm01 3 15s
2.响应式创建ConfigMap资源
· 命令行创建ConfigMap资源
[root@master a]# kubectl create cm cm02 --from-literal=test=111 --from-literal=d=ddd
configmap/cm02 created
· 查看cm资源
[root@master a]# kubectl get cm cm02
NAME DATA AGE
cm02 2 14s
3.指定文件方式创建cm资源
· 编辑一个文件
[root@master a]# cat > 1.txt <<EOF
> aaaa
> bbbb
> cccc
> dddd
> 1111
> 2222
> 3333
> 4444
> EOF
·创建查看ConfigMap资源
[root@master a]# kubectl create cm cm03 --from-file=1.txt=1.txt
configmap/cm03 created
[root@master a]# kubectl get cm cm03
NAME DATA AGE
cm03 1 8s
4.查看cm资源的详细信息
[root@master a]# kubectl describe cm cm03
Name: cm03
Namespace: default
Labels: <none>
Annotations: <none>Data
====
1.txt:
----
aaaa
bbbb
cccc
dddd
1111
2222
3333
4444BinaryData
====Events: <none>
5.删除cm资源
[root@master a]# kubectl delete cm --all
configmap "cm01" deleted
configmap "cm02" deleted
configmap "cm03" deleted
configmap "kube-root-ca.crt" deleted
4.pod引入CM资源
pod引入cm资源的方式,有两种,env变量引入和volume挂载卷引入
·env变量引入
1.编辑并创建cm资源
[root@master a]# cat 01-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: cm01#声明cm资源的数据
data:#第一种写法【key:value】demo: demo-cmk8s: kubernets#第二种写法【key:| value value value。。。】test: |a=ab=bc=c
[root@master a]# kubectl apply -f 01-cm.yaml
configmap/cm01 created
2.创建pod资源,env变量引入cm
[root@master a]# cat pod-env.yaml
apiVersion: v1
kind: Pod
metadata:name: demo111
spec:containers:- name: demo-eimage: nginx:1.20.1-alpineenv:#引入一个变量- name: env-cm01#从其他位置引入变量valueFrom:#声明从ConfigMap中引入变量configMapKeyRef:#引入变量ConfigMap的名称name: cm01key: demo#引入第二个变量- name: env-cm02valueFrom:configMapKeyRef:name: cm01#引用ConfigMap中的哪个keykey: test
[root@master a]# kubectl apply -f pod-env.yaml
pod/demo111 created
[root@master a]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo 1/1 Running 1 (48m ago) 52m
demo111 1/1 Running 0 9s
3.进入容器查看变量是否引入成功
[root@master a]# kubectl exec demo111 -it -- sh
/ # env

· volume挂载卷引入cm
1.编辑pod资源清单
[root@master a]# cat pod-env.yaml
apiVersion: v1
kind: Pod
metadata:name: demo111
spec:#声明pod存储卷volumes:- name: vol-cm#声明挂载cm资源configMap:#指定cm组员名称name: cm01#如果不写items,则引用cm资源中全部的key:value作为文件挂载items:#cm资源的key是什么- key: demo#key的value值挂载到容器中变成文件内容,文件名叫什么path: demo.txt- key: testpath: test.txtcontainers:- name: demo-dimage: nginx:1.20.1-alpinevolumeMounts:- name: vol-cmmountPath: /demo
2.创建查看资源
[root@master a]# kubectl apply -f pod-env.yaml
pod/demo111 created
[root@master a]# kubectl get pods
NAME READY STATUS RESTARTS AGE
demo111 1/1 Running 0 35s
3. 进入pod容器查看是否挂载成功,变成文件
[root@master a]# kubectl exec demo111 -it -- sh
/ # ls
bin docker-entrypoint.sh media root sys
demo etc mnt run tmp
dev home opt sbin usr
docker-entrypoint.d lib proc srv var
/ # cd demo
/demo # ls
demo.txt test.txt
/demo # cat demo.txt
demo-cm
/demo # cat test.txt
a=a
b=b
c=c
注:当pod挂载cm资源到容器的目录后,若容器的原目录中有文件,则会被清空,那么如何做到,及把cm资源挂载成为文件到容器的指定目录,又能保证容器原目录中的文件不清空呐?
subPath
[root@master a]# cat pod-env.yaml
apiVersion: v1
kind: Pod
metadata:name: demo111
spec:volumes:- name: vol-cmconfigMap:name: cm01items:- key: demopath: demo.txt- key: testpath: test.txtcontainers:- name: demo-dimage: nginx:1.20.1-alpinevolumeMounts:- name: vol-cmmountPath: /demo#如果subPath不指定任何值(默认),则默认容器挂载路径为空,表示清空挂载点;#如果subPath指定名称和cm的Path相同,表示仅仅挂载这个文件,不清空挂在的目录保留原本容器路径的文件;#也就是说volumes>>configMap>items>path只有与subPath的值相等时,才是挂载文件;否则就是挂载目录;会清空目录; subPath: test#resdOnly: true #只读设置;表示不允许容器内编辑或删除这个文件;
二.secrets
secrets资源,类似于configmap资源,只是secrets资源是用来传递重要的信息的;
secret資源就是將value的值使用base64编译后传输,当pod引用secret后,k8s会自动将其base64的编码,反编译回正常的字符串;
官方解释:
Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。
由于创建 Secret 可以独立于使用它们的 Pod, 因此在创建、查看和编辑 Pod 的工作流程中暴露 Secret(及其数据)的风险较小。 Kubernetes 和在集群中运行的应用程序也可以对 Secret 采取额外的预防措施, 例如避免将敏感数据写入非易失性存储。
1.创建secrets资源
·准备将“想要的数据”使用base64进行编码
#正向编码
[root@worker2 ~]# echo demotest | base64
ZGVtb3Rlc3QK
[root@worker2 ~]# echo kubernets | base64
a3ViZXJuZXRzCg==#反向编码
[root@worker2 ~]# echo ZGVtb3Rlc3QK | base64 -d
demotest
·声明式创建secrets资源
1.编辑secrets资源清单
[root@master secrets]# cat 01-secret.yaml
apiVersion: v1
kind: Secret
metadata:name: demo1#用户自定义的类型(Opaque为自定义类型)
type: Opaque
data:demotest: ZGVtb3Rlc3QKkubernets: a3ViZXJuZXRzCg==
2.创建查看secret资源
[root@master secrets]# kubectl apply -f .
secret/demo1 created
[root@master secrets]# kubectl get secrets
NAME TYPE DATA AGE
default-token-rnwqs kubernetes.io/service-account-token 3 9d
demo1 Opaque 2 2m40s
·响应式创建secret
[root@master secrets]# kubectl create secret generic demo2 --from-literal=testa=dGVzdGEK --from-literal=testb=dGVzdGIK
查看secrets资源
[root@master secrets]# kubectl get secrets
NAME TYPE DATA AGE
default-token-rnwqs kubernetes.io/service-account-token 3 9d
demo1 Opaque 2 2m40s
demo2 Opaque 2 15s
Opaque为自定义类型
generic: 从本地file, directory或者literal value创建一个 secret(这是大多数情况使用的)
也就是资源清单中的type:Opaque是一个意思
docker-registry:创建一个给Docker registry容器镜像仓库使用的secret
tls: 创建一个TLS secret
原文链接:https://blog.csdn.net/flq18210105507/article/details/120749275
2.pod引用secret资源
· pod资源env环境变量引用secret资源
1.编辑pod资源
[root@master secrets]# cat 01-pod.yaml
apiVersion: v1
kind: Pod
metadata: name: demo323
spec:containers:- name: nginx-dimage: nginx:1.20.1-alpineenv:- name: secret-env01valueFrom:#声明引用sercetsecretKeyRef:#声明secret名称name: demo1#声明secret的keykey: demotest- name: secret-env02valueFrom:secretKeyRef:name: demo1key: kubernets
2.创建查看pod
[root@master secrets]# kubectl apply -f 01-pod.yaml
pod/demo323 created
[root@master secrets]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo323 1/1 Running 0 13s 10.100.1.35 worker1 <none> <none>
3.登录pod资源查看env变量
[root@master secrets]# kubectl exec demo323 -it -- sh
/ # env

· pod资源volume存储卷引用secret资源
1.编辑pod资源
[root@master secrets]# cat 01-pod.yaml
apiVersion: v1
kind: Pod
metadata: name: demo333
spec:volumes:- name: vol-secretsecret:secretName: demo1containers:- name: nginx-dimage: nginx:1.20.1-alpinevolumeMounts:- name: vol-secretmountPath: /demos
2.创建查看pod
[root@master secrets]# kubectl apply -f 01-pod.yaml
pod/demo333 created
[root@master secrets]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo333 1/1 Running 0 11s 10.100.1.36 worker1 <none> <none>
3.进入容器内查看是否挂在为文件
[root@master secrets]# kubectl exec demo333 -it -- sh
/ # ls
bin docker-entrypoint.sh media root sys
demos etc mnt run tmp
dev home opt sbin usr
docker-entrypoint.d lib proc srv var
/ # cd demos
/demos # ls
demotest kubernets
/demos # cat demotest
demotest
/demos # cat kubernets
kubernets
3.secret类型之-私有镜像仓库使用
创建Docker harbor的secret信息:
因为,k8s拉取镜像与Docker拉取镜像是不同的方式,所以k8s需要创建一个属于自己的拉取镜像的方式

generic: 从本地file, directory或者literal value创建一个 secret(这是大多数情况使用的)
也就是资源清单中的type:Opaque是一个意思
docker-registry:创建一个给Docker registry容器镜像仓库使用的secret
tls: 创建一个TLS secret
·harbor创建私有仓库
harbor创建私有仓库

· 推送镜像到私有仓库
[root@worker2 ~]# docker login -uadmin -p111aaa.. harbor.test.com[root@worker2 ~]# docker tag nginx:1.20.1-alpine harbor.test.com/demo/nginx:1.20.1-alpine
[root@worker2 ~]# docker push harbor.test.com/demo/nginx:1.20.1-alpine
The push refers to repository [harbor.test.com/demo/nginx]
9d5b000ce7c7: Pushed
b8dbe22b95f7: Pushed
c39c1c35e3e8: Pushed
5f66747c8a72: Pushed
15d7cdc64789: Pushed
7fcb75871b21: Pushed
1.20.1-alpine: digest: sha256:34c4a6f3b4d5e5f886bfa6a32642ecf023282c82c03d37901bc1f30823abbd5d size: 1568
· 创建拉取镜像的secret资源
1.响应式创建secret资源
[root@master secrets]# kubectl create secret docker-registry demo-harbor --docker-username=admin --docker-password=111aaa.. --docker-email=123@qq.com --docker-server=harbor.test.com
[root@master secrets]# kubectl get secret
NAME TYPE DATA AGE
default-token-rnwqs kubernetes.io/service-account-token 3 9d
demo-harbor kubernetes.io/dockerconfigjson 1 11s
· 创建pod引用拉取镜像的secret资源
[root@master secrets]# cat 01-pod.yaml
apiVersion: v1
kind: Pod
metadata: name: demo-harbor00
spec:imagePullSecrets:- name: demo-harborcontainers:- name: harbortestimage: harbor.test.com/demo/nginx:1.20.1-alpine
[root@master secrets]# kubectl apply -f 01-pod.yaml
pod/demo-harbor00 created
[root@master secrets]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
demo-harbor00 1/1 Running 0 14s 10.100.1.37 worker1 <none> <none>
三.静态pod
pod创建流程
用户通过 kubectl create 命令(或其他等效方式)向 Kubernetes API Server 发起一个创建 Pod 的请求。这个请求包含了 Pod 的定义,通常是一个 YAML 或 JSON 格式的文件。 API Server 接收请求并处理:
Kubernetes API Server 接收到创建 Pod 的请求后,会对请求进行验证和授权检查。 API Server 不会直接创建 Pod,而是将这个请求转化为一个内部表示(如一个含有 Pod 创建信息的 YAML 格式的对象)。 写入 Etcd 数据库:
API Server 将这个 Pod 对象的信息写入到 Etcd 数据库。Etcd 作为 Kubernetes 的数据存储,保存了集群的状态和配置。 Scheduler 进行调度:
Kubernetes Scheduler 持续监视 API Server,检查新的或未被调度的 Pod。 当 Scheduler 发现一个新的 Pod(pod.spec.Node == null 表示这个 Pod 还没有被调度到任何节点),它将根据资源需求、亲和性规则、污点和容忍度等因素选择一个合适的节点。 一旦选择了节点,Scheduler 将更新该 Pod 的信息,指定其运行在选择的节点上,并将这个更新写回到 Etcd。 Kubelet 监听并创建 Pod:
每个节点上的 Kubelet 进程持续监视 Etcd,查找分配给自己节点的新任务。 当 Kubelet 发现有新的 Pod 分配到它所在的节点,它会根据 Pod 定义开始创建和启动 Pod 中的容器。 Kubelet 调用容器运行时(如 Docker)来实际启动容器,并设置必要的网络和存储配置。 Pod 状态更新和汇报:
在 Pod 创建过程中,Kubelet 将 Pod 的状态更新回 API Server。这些状态信息包括 Pod 是否成功启动,运行中的容器等。 API Server 更新 Etcd 中的状态信息,确保集群状态的一致性。
原文链接:https://blog.csdn.net/weixin_48126010/article/details/136690275
1.查看静态pod的路径
[root@master ~]# vim /var/lib/kubelet/config.yaml ......
staticPodPath: /etc/kubernetes/manifests
2.静态pod的查看与含义
这里面的名称都是我们的k8s集群中master节点的组成组件
[root@master secrets]# ll /etc/kubernetes/manifests/
总用量 16
-rw------- 1 root root 2274 7月 5 14:44 etcd.yaml
-rw------- 1 root root 3403 7月 10 20:26 kube-apiserver.yaml
-rw------- 1 root root 2880 7月 5 14:44 kube-controller-manager.yaml
-rw------- 1 root root 1465 7月 5 14:44 kube-scheduler.yaml
静态pod就是kubelet自己监视的目录,如果这个目录有pod资源清单,则会在当前节点自动创建pod;不需要手动kubectl apply -f xxx.yaml
静态pod的创建,只在当前节点上创建,pod的名称会自动给你加一个当前节点名称后缀;
静态pod,只要有yaml文件在这个目录,就无法删除;
· 示例
[root@master pod]# mv 01-pod-nginx.yaml /etc/kubernetes/manifests/
[root@master pod]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
m-nginx-master 0/1 ContainerCreating 0 9s <none> master <none> <none>

相关文章:
ConfigMap-secrets-静态pod
一.ConfigMap 1.概述 ConfigMap资源,简称CM资源,它生成的键值对数据,存储在ETCD数据库中 应用场景:主要是对应用程序的配置 pod通过env变量引入ConfigMap,或者通过数据卷挂载volume的方式引入ConfigMap资源 官方解释…...
SQL Error: 1406, SQLState: 22001
SQL错误代码1406和SQLState 22001通常表示“列数据过长”错误。这意味着尝试插入或更新列中的值,但该值的长度超过了该列允许的最大长度。 解决此问题的几个步骤: 检查列长度: 确定引起错误的列。检查数据库架构中该列允许的最大长度。 验证…...
【密码学基础】基于LWE(Learning with Errors)的全同态加密方案
学习资源: 全同态加密I:理论与基础(上海交通大学 郁昱老师) 全同态加密II:全同态加密的理论与构造(Xiang Xie老师) 现在第二代(如BGV和BFV)和第三代全同态加密方案都是基…...
Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git)
目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…...
网络安全法律框架更新:最新合规要求与企业应对策略
网络安全法律框架的最新更新 近期,中国的网络安全法律框架经历了重要的更新。2022年,《网络安全法》迎来了首次修改,这一修订主要是为了与《数据安全法》和《个人信息保护法》等新实施的法律进行衔接协调,完善法律责任制度&#x…...
数仓工具—Hive语法之正则表达式函数
正则表达式函数 之前我们介绍过like rlike regexp 这些关键字,都是和匹配有关的,今天我们介绍一下hive 的REGEXP_REPLACE 和REGEXP_EXTRACT 函数,背景是使用Hive正则表达式函数提取数字 在我的其他文章中,我们已经看到了如何使用Hive正则表达式从字符串中提取日期值。正则…...
WKCTF 2024 easy_heap
很经典的house of orange unsortedbin attack FSOP 变量覆盖 不能 free,那首先想到就是 house of orange泄露Libc基址,然后unsortedbin attack。 但是只能show(8),就不能用largebin的套路来泄露堆地址了,那怎么办呢? …...
SQL 多变关联使用子查询去重
不去重状态 select a.*,b.recon_amt from free_settlement_first aleft join free_settlement_second b on a.settlement_first_id b.settlement_first_id 有2条数据出现了重复 使用子查询去重 select a.*,b.recon_amt from free_settlement_first aleft join free_settlem…...
php表单提交并自动发送邮件给某个邮箱(示例源码下载)
只需要将以下代码内容进行复制即可用到自己的程序/API接口中: <?php if(!empty($_POST[is_post]) && $_POST[is_post]1){$url "https://www.aoksend.com/index/api/send_email";$name $_POST[name];$email $_POST[email];$subject $_POS…...
论文翻译:Large Language Models for Education: A Survey
目录 大型语言模型在教育领域的应用:一项综述摘要1 引言2. 教育中的LLM特征2.1. LLMs的特征2.2 教育的特征2.2.1 教育发展过程 低进入门槛。2.2.2. 对教师的影响2.2.3 教育挑战 2.3 LLMEdu的特征2.3.1 "LLMs 教育"的具体体现2.3.2 "LLMs 教育"…...
7.13实训日志
上午 学习网络安全的过程中,我们深入了解了网络的不同层面和技术,从表层网络到深网再到暗网,以及涉及的产业分类和技术工具。这些知识不仅帮助我们理解网络的复杂性,还揭示了如何应对和防范各种网络威胁。 首先,我们…...
【力扣】每日一题—第70题,爬楼梯
题目: 假设你正在爬楼梯。需要n阶你才能到达楼顶。 每次你可以爬1或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 思路: 我开始是写了一个函数计算爬一层和爬二层的个数,之后排列求和,但是超范围了,…...
Docker修改国内镜像源
如果docker已将安装好 参考:https://github.com/cmliu/CF-Workers-docker.io sudo mkdir -p /etc/dockercd /etc/dockersudo vim daemon.json #输入以下内容 { "registry-mirrors": ["https://docker.fxxk.dedyn.io"] } #重启docker服务 su…...
安防监控视频平台LntonCVS视频融合共享平台智慧消防实现远程集中视频监控方案
近年来,电力系统内变电站着火事件频发,这对消防安全管理提出了严峻挑战。我国消防安全基础设施不完善、管理机制不健全、应急处置能力不足及公众消防安全意识淡薄等问题,严重制约了消防安全的提升。因此,加强变电站的消防安全管理…...
【大模型LLM面试合集】大语言模型架构_layer_normalization
2.layer_normalization 1.Normalization 1.1 Batch Norm 为什么要进行BN呢? 在深度神经网络训练的过程中,通常以输入网络的每一个mini-batch进行训练,这样每个batch具有不同的分布,使模型训练起来特别困难。Internal Covariat…...
OpenGL笔记八之EBO和EBO绘制流程
OpenGL笔记八之EBO和EBO绘制流程 —— 2024-07-07 晚上 bilibili赵新政老师的教程看后笔记 code review! 文章目录 OpenGL笔记八之EBO和EBO绘制流程1.EBO2.glDrawElements:如果使用了ebo,最后一个参数可以写03.glDrawElements:如果使用了e…...
maven——(重要)手动创建,构建项目
创建项目 手动按照maven层级建好文件夹,并写上java,测试代码和pom文件 构建项目 在dos窗口中执行如下命令 compile编译 当前maven仓库中什么都没有。 在pom所在层级下,执行: mvn compile 就开始显示下面这些,…...
数学建模·非线性规划
整型规划 适用于一个变量或多个变量的值只能是整型的情况 整形规划的分类 0-1背包问题 对于一个物品来说,只有选和不选两种情况 表现为单下标,单变量问题 例:建设学校问题 对于每个学校来说只有选和不选两种情况,在数学上我们用…...
SpringCloud第三篇(服务中心与OpenFeign)
p 文章目录 一、服务中心二、Nacos注册中心 一、服务中心 在上一章我们实现了微服务拆分,并且通过Http请求实现了跨微服务的远程调用。不过这种手动发送Http请求的方式存在一些问题。 试想一下,假如商品微服务被调用较多,为了应对更高的并发…...
Linux重要知识点
1. 命令行操作 Linux大多数操作都是通过命令行进行的。熟悉常用命令和脚本是使用Linux的基础。 基本命令:如 ls, cd, cp, mv, rm,这些命令用于文件和目录的管理。文件权限和管理:了解如何使用 chmod, chown, chgrp 等命令来管理文件权限和所…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
一些实用的chrome扩展0x01
简介 浏览器扩展程序有助于自动化任务、查找隐藏的漏洞、隐藏自身痕迹。以下列出了一些必备扩展程序,无论是测试应用程序、搜寻漏洞还是收集情报,它们都能提升工作流程。 FoxyProxy 代理管理工具,此扩展简化了使用代理(如 Burp…...
