k8s中ConfigMap、Secret创建使用演示、配置文件存储介绍

目录

一.ConfigMap(cm)

1.适用场景

2.创建并验证configmap

(1)以yaml配置文件创建configmap,验证变化是是否同步

(2)--from-file以目录或文件

3.如何使用configmap

(1)使用env或envfrom来替代环境变量

(2)configmap与volume搭配使用

4.配置configmap触发deployment滚动更新

二.Secret

1.常用场景

2.创建secret

3.使用secret

(1)env变量

(2)volume挂载


 

一.ConfigMap(cm)

在Kubernetes中,ConfigMap是一种用于存储配置数据的对象,它提供了一种将配置数据与容器分离的方式,使得容器的配置可以独立于容器镜像进行管理和修改。ConfigMap可以在部署应用程序时,将配置信息注入到容器中,从而使得容器可以动态地适应不同的环境和需求。

1.适用场景

(1)容器化应用程序的配置管理:将应用程序的配置数据存储到ConfigMap中,从而使得容器可以在运行时根据需要获取这些配置数据,进而动态地适应不同的环境和需求。

(2)多个容器共享配置数据:将多个容器所需的公共配置数据存储到ConfigMap中,从而避免了重复存储和管理配置数据的问题,同时也方便了对配置的修改和更新。

(3)管理Kubernetes资源的配置数据:将Kubernetes资源的配置数据存储到ConfigMap中,从而可以通过修改ConfigMap来对资源进行配置和管理。

接下来介绍configmap的存储使用方式

2.创建并验证configmap

(1)以yaml配置文件创建configmap,验证变化是是否同步

[root@k8s-master volume]# cat mycm.yaml 
apiVersion: v1
kind: ConfigMap
metadata:name: my-configmapnamespace: myns
data:   #用data代替specusername: sulibaopasswd: slb317418 
​
---
​
apiVersion: v1
kind: Pod
metadata:name: my-nginx-configmapnamespace: myns
spec:containers:- name: nginximage: nginxports:- name: nginx-portcontainerPort: 80volumeMounts:- name: myvolumemountPath: /root/mymsgvolumes:- name: myvolumeconfigMap:   #指定volume类型为configmapname: my-configmap 
​
​
[root@k8s-master volume]# kubectl apply -f mycm.yaml 
configmap/my-configmap created
pod/my-nginx-configmap created
​
[root@k8s-master volume]# kubectl get pods,cm -n myns   #pod创建成功
NAME                     READY   STATUS    RESTARTS   AGE
pod/my-nginx-configmap   1/1     Running   0          67s
​
NAME                         DATA   AGE
kube-root-ca.crt             1      40m
configmap/my-configmap       2      67s
​
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/username"   
#内容一致,创建成功
sulibao
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/passwd"
slb317418
​
​
#接下来edit这个configmap中的内容,使passwd产生变化,再验证pod中是否变化,结果成功
[root@k8s-master volume]# kubectl edit cm my-configmap -n myns
[root@k8s-master volume]# kubectl get cm my-configmap -n myns -o yaml | grep passwdpasswd: num123456{"apiVersion":"v1","data":{"passwd":"slb317418","username":"sulibao"},"kind":"ConfigMap","metadata":{"annotations":{},"name":"my-configmap","namespace":"myns"}}
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/passwd"
num123456

(2)--from-file以目录或文件

#根据一个目录来创建configmap
[root@k8s-master volume]# kubectl create cm my-cm --from-file=/root/volume/a/ -n myns
configmap/my-cm created
[root@k8s-master volume]# kubeckubec get cm -n myns
-bash: kubeckubec: command not found
[root@k8s-master volume]# kubectl get cm -n myns
NAME               DATA   AGE
kube-root-ca.crt   1      33m
my-cm              2      16s
[root@k8s-master volume]# kubectl describe cm my-cm -n myns
Name:         my-cm
Namespace:    myns
Labels:       <none>
Annotations:  <none>
​
Data
====
passwd:
----
slb317418
​
username:
----
sulibao
​
​
BinaryData
====
​
Events:  <none>
​
​
​
#根据两个文件来创建configmap,和上面以目录创建效果一致
[root@k8s-master a]# ll
total 8
-rw-r--r-- 1 root root 10 Dec 16 16:54 passwd
-rw-r--r-- 1 root root  8 Dec 16 16:54 username
[root@k8s-master a]# kubectl create cm my-cm --from-file=/root/volume/a/username --from-file=/root/volume/a/passwd -n myns
configmap/my-cm created
[root@k8s-master a]# kubectl get cm -n myns
NAME               DATA   AGE
kube-root-ca.crt   1      36m
my-cm              2      8s
[root@k8s-master a]# kubectl describe cm my-cm -n myns
Name:         my-cm
Namespace:    myns
Labels:       <none>
Annotations:  <none>
​
Data
====
passwd:
----
slb317418
​
username:
----
sulibao
​
​
BinaryData
====
​
Events:  <none>
(3)以命令行传递信息创建configmap
[root@k8s-master volume]# kubectl create cm my-cm --from-literal=username=sulibao --from-literal=passwd=slb317418 -n myns
configmap/my-cm created
[root@k8s-master volume]# kubectl get cm -n myns
NAME               DATA   AGE
kube-root-ca.crt   1      40m
my-cm              2      10s
[root@k8s-master volume]# kubectl describe cm my-cm -n myns
Name:         my-cm
Namespace:    myns
Labels:       <none>
Annotations:  <none>
​
Data
====
passwd:
----
slb317418
username:
----
sulibao
​
BinaryData
====
​
Events:  <none>

3.如何使用configmap

(1)使用env或envfrom来替代环境变量

apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap1namespace: myns
data:username: sulibaopasswd: slb317418 
​
---
​
apiVersion: v1
kind: ConfigMap
metadata:name: my-configmap2namespace: myns
data:email: 123.qq.com
​
---
​
apiVersion: v1
kind: Pod
metadata:name: my-nginx-configmapnamespace: myns
spec:containers:- name: busyboximage: busyboxcommand: ["/bin/sh","-c","env;sleep 3000"]env:- name: name   #要被替代的名称,最终的变量名字是这个valueFrom:configMapKeyRef:name: my-configmap1    #指定configmap的名称key: username    #指定configmap中的某个键,该键的值会用来代替上面指定的name原本的值- name: passwdvalueFrom:configMapKeyRef:name: my-configmap1key: passwdenvFrom:- configMapRef:name: my-configmap2    #指定configmap的名称
​
[root@k8s-master volume]# kubectl get pods,cm -n myns
NAME                     READY   STATUS    RESTARTS   AGE
pod/my-nginx-configmap   1/1     Running   0          4m52s
​
NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      123m
configmap/my-configmap1      2      4m52s
configmap/my-configmap2      1      4m52s
​
[root@k8s-master volume]# kubectl logs my-nginx-configmap -n myns | grep -E '(email|passwd|name)'
email=123.qq.com
name=sulibao
passwd=slb317418
​
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh    #进入pod进行验证
/ # 
/ # env
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=my-nginx-configmap
SHLVL=1
HOME=/root
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
email=123.qq.com
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
name=sulibao
passwd=slb317418
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # echo $name
sulibao
/ # echo $email
123.qq.com

(2)configmap与volume搭配使用

apiVersion: v1
kind: ConfigMap
metadata: name: my-configmapnamespace: myns
data:username: sulibaopasswd: slb317418
​
---
​
apiVersion: v1
kind: Pod
metadata:name: my-nginx-configmapnamespace: myns
spec:containers:- name: busyboximage: busyboxcommand: ["/bin/sh","-c","cd /root/mymsg;sleep 3000"]volumeMounts:- name: myvolumemountPath: /root/mymsgvolumes:- name: myvolumeconfigMap:name: my-configmap
​
[root@k8s-master volume]# kubectl get pods,cm -n myns
NAME                     READY   STATUS    RESTARTS   AGE
pod/my-nginx-configmap   1/1     Running   0          10s
​
NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      145m
configmap/my-configmap       2      10s
​
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/passwd"
slb317418
[root@k8s-master volume]# kubectl exec -it my-nginx-configmap -n myns -- /bin/sh -c "cat /root/mymsg/username"
sulibao

4.配置configmap触发deployment滚动更新

apiVersion: v1
kind: ConfigMap
metadata: name: my-configmapnamespace: myns
data:username: sulibaopasswd: slb317418
​
---
​
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: my-deployname: my-deploynamespace: myns
spec:replicas: 3selector:matchLabels:app: my-deploytemplate:metadata:labels:app: my-deployspec:containers:- image: busyboxcommand: ["/bin/sh","-c","touch /root/a.txt;cat /root/mymsg/username > /root/a.txt;sleep 3000"]name: busyboxvolumeMounts:- name: myvolumemountPath: /root/mymsgvolumes:- name: myvolumeconfigMap:name: my-configmap
​
[root@k8s-master volume]# kubectl get pods,cm -n myns
NAME                             READY   STATUS    RESTARTS   AGE
pod/my-deploy-574476c4d9-85m78   1/1     Running   0          8s
pod/my-deploy-574476c4d9-fghm2   1/1     Running   0          8s
pod/my-deploy-574476c4d9-w4rrj   1/1     Running   0          8s
​
NAME                         DATA   AGE
configmap/kube-root-ca.crt   1      11m
configmap/my-configmap       2      8s
[root@k8s-master volume]# kubectl exec -it my-deploy-574476c4d9-85m78 -n myns -- /bin/sh -c "cat /root/a.txt"
sulibao
​
[root@k8s-master volume]#  kubectl patch deployment my-deploy -n myns --patch '{"spec": {"template": {"metadata": {"annotations": {"update": "2" }}}}}'
deployment.apps/my-deploy patched
#此段命令更新deployment,去触发deployment的滚动更新
​
[root@k8s-master vokubectl edit cm my-configmap -n myns   #更改了配置内容
[root@k8s-master volume]# kubectl get pods -n myns -w  #对比上面的pod,此时已经全部更新完成
NAME                         READY   STATUS    RESTARTS   AGE
my-deploy-664d69c7cf-5zkwz   1/1     Running   0          2m9s
my-deploy-664d69c7cf-dsxkp   1/1     Running   0          2m13s
my-deploy-664d69c7cf-vslz4   1/1     Running   0          2m5s
[root@k8s-master volume]# kubectl exec -it my-deploy-664d69c7cf-5zkwz -n myns -- /bin/sh -c "cat /root/a.txt"
SLB

二.Secret

在Kubernetes中,Secret是一种用于存储和管理敏感数据的对象,它提供了一种安全地存储密码、令牌、证书等敏感信息的机制。Secret的内容是以Base64编码方式存储的,但需要注意的是,Base64编码并不等同于加密,因此使用Secret时要确保对敏感数据进行适当的加密和保护。

1.常用场景

(1)存储认证信息:Secret可以用于存储应用程序所需的用户名、密码、令牌等认证信息。这些认证信息可以被容器在运行时访问,并用于与外部服务进行安全通信。

(2)存储TLS/SSL证书:Secret可以用于存储TLS/SSL证书和私钥,以便在Kubernetes集群中启用加密的通信。这些证书可以被挂载到Pod中,并用于与其他服务进行安全的HTTPS通信。

(3)共享敏感数据:Secret可以用于共享敏感数据,例如API密钥、数据库连接字符串等。通过将Secret挂载到多个Pod中,可以方便且安全地共享这些敏感数据,而无需在每个Pod中手动配置。

(4)配置容器化应用程序:Secret可以用于存储应用程序的配置信息,例如数据库密码、第三方服务的API密钥等。将配置信息存储在Secret中,可以将容器镜像与配置数据分离,并在部署时注入到容器中,从而使容器的配置更加灵活和安全。

接下来介绍secret的存储使用方式

2.创建secret

可以通过yaml、--from-file、--from-literal进行创建,如下

[root@k8s-master volume]# kubectl create secret generic username --from-file=username -n myns
secret/username created
[root@k8s-master volume]# kubectl create secret generic passwd --from-file=passwd -n myns
secret/passwd created
[root@k8s-master volume]# kubectl get secrets -n myns
NAME       TYPE     DATA   AGE
passwd     Opaque   1      6s
username   Opaque   1      10s
​
[root@k8s-master volume]# kubectl create secret generic user --from-literal=user=SLB -n myns
secret/user created
[root@k8s-master volume]# kubectl create secret generic pass --from-literal=pass=123456 -n myns
secret/pass created
[root@k8s-master volume]# kubectl get secrets  -n myns
NAME       TYPE     DATA   AGE
pass       Opaque   1      8s
passwd     Opaque   1      93s
user       Opaque   1      29s
username   Opaque   1      97s
​
apiVersion: v1
kind: Secret
metadata:name: secret1namespace: myns
type: Opaque
data:user1: YWRtaW4=pass1: MWYyZDFlMmU2N2Rm
[root@k8s-master volume]# kubectl get secrets  -n myns
NAME       TYPE     DATA   AGE
pass       Opaque   1      2m31s
passwd     Opaque   1      3m56s
secret1    Opaque   2      5s
user       Opaque   1      2m52s
username   Opaque   1      4m
​
#这里演示如何进行base64的编码和解码
[root@k8s-master volume]# echo -n "freg" | base64
ZnJlZw==
[root@k8s-master volume]# echo -n "ZnJlZw==" | base64 --decode
freg

3.使用secret

(1)env变量

[root@k8s-master volume]# kubectl get pods -n myns
NAME              READY   STATUS    RESTARTS   AGE
my-nginx-secret   1/1     Running   0          10s
[root@k8s-master volume]# kubectl exec -it my-nginx-secret -n myns
error: you must specify at least one command for the container
[root@k8s-master volume]# kubectl exec -it my-nginx-secret -n myns -- /bin/sh
/ # 
/ # env
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.96.0.1:443
HOSTNAME=my-nginx-secret
SHLVL=1
HOME=/root
TERM=xterm
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
name=sulibao
​
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
/ # echo $name
sulibao
​
​
​
[root@k8s-master volume]# kubectl edit secrets username -n myns    #edit过后env没有同步
secret/username edited
[root@k8s-master volume]# kubectl get pods -n myns
NAME              READY   STATUS    RESTARTS   AGE
my-nginx-secret   1/1     Running   0          4m44s
[root@k8s-master volume]# kubectl exec -it my-nginx-secret -n myns -- /bin/sh
/ # 
/ # echo $name
sulibao

(2)volume挂载

apiVersion: v1
kind: Pod
metadata:name: my-nginxnamespace: myns
spec:containers:- name: nginximage: nginxports:- name: nginx-portcontainerPort: 80volumeMounts:- name: myvolumemountPath: /rootvolumes:- name: myvolumeprojected:sources:- secret:name: username- secret:name: passwd
​
[root@k8s-master volume]# kubectl get pods -n myns
NAME       READY   STATUS    RESTARTS   AGE
my-nginx   1/1     Running   0          5s
[root@k8s-master volume]# kubectl exec -it my-nginx -n myns -- /bin/sh -c "cat /root/username"
sulibao
[root@k8s-master volume]# kubectl exec -it my-nginx -n myns -- /bin/sh -c "cat /root/passwd"
slb317418
​
#edit过后通过volume挂载的secret同步了
[root@k8s-master volume]# kubectl exec -it my-nginx -n myns -- /bin/sh -c "cat /root/username"
cenov

 

 

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

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

相关文章

Ubuntu 虚拟机环境,编译AOSP源码

环境 : VMware虚拟机 Ubuntu 20.04.3 LTS 搭建配置开发环境 sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl…

创投课程第五期 | 超越比特币:探索BTC生态的无限可能

协会邀请了来自水滴资本&#xff08;Waterdrip Capital&#xff09;的投资总监——Elaine&#xff0c;作为VC创投课程第5期的嘉宾&#xff0c;在北京时间12月17日(周日)晚上21:00 PM-22:00 PM&#xff0c;届时将与所有对Web3投资、创业心怀热忱的朋友们共同探讨《超越比特币&am…

C语言 文件I/O(备查)

所有案列 跳转到其他。 文件打开 FILE* fopen(const char *filename, const char *mode); 参数&#xff1a;filename&#xff1a;指定要打开的文件名&#xff0c;需要加上路径&#xff08;相对、绝对路径&#xff09;mode&#xff1a;指定文件的打开模式 返回值&#xff1a;成…

模型评估:压力测试 模拟对手 对齐 智能对抗 CAPTCHA(全自动区分计算机和人类的公共图灵测试)

对齐&#xff0c;智能对抗&#xff1a;魔高一尺&#xff0c;道高一丈。用更高的智能去对抗恶意使用。openAI一半的内容都在讲这个&#xff0c;但没有讲具体的方法。 如果认为对方是一个人就通过了图灵测试&#xff0c;真正的实现了智能。 如果智能达到了这种程度&#xff0c;智…

Tapdata 亮相 2023 谷歌出海创业加速器展示日活动,实时数据点亮企业创新之路

12 月 6 日&#xff0c;经过 2023 谷歌出海创业加速器对入营企业为期 3 个月的辅导及培训&#xff0c; 其毕业典礼及展示日活动在北京举行。 经历三个月的沉淀&#xff0c;来自不同行业&#xff0c;包含 Tapdata 在内的 10 家入营企业集中亮相&#xff0c;相互分享各自产品的创…

XUbuntu22.04之npm解决pm WARN deprecated(一百九十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

逛商场。。。

题目名字 逛商场 题意 见到想买的物品&#xff0c;只要能买得起&#xff0c;就一定会买下来之后才会继续往前走&#xff1b;如果买不起就直接跳过 思路 接着&#xff0c;它读取数组 aa 的值&#xff0c;并存储在数组中。然后&#xff0c;程序读取一个整数 m。初始化计数器 cn…

写好 Javascript 的 14 个技巧

以下是我最喜欢的一些编写更干净的 Javascript 代码的技巧&#xff0c;跳过聪明的保持简单。 1. 忘掉 var 使用 const 或 let 声明所有变量。根据经验&#xff0c;默认情况下使用 const&#xff0c;否则如果需要重新赋值变量&#xff0c;请使用 let。 应避免使用 var 关键字…

PostgreSQL常用命令

数据库版本 :9.6.6 注意 :PostgreSQL中的不同类型的权限有 SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTE 和 USAGE。 1. 登录PG数据库 以管理员身份 postgres 登陆,然后通过 #psql -U postgres #sudo -i -u postgres …

数据手套:手势识别技术的多元化应用

科技日新月异&#xff0c;虚拟现实不再局限于依赖头显来探索虚拟世界。数据手套的广泛应用使人们能够更轻松地与虚拟世界产生真实互动。在此之中&#xff0c;手势识别作为一种直观、自然的人机交互方式&#xff0c;受到了广泛关注。数据手套作为一种能够精确捕捉手指运动的人机…

使用React 18和WebSocket构建实时通信功能

1. 引言 WebSocket是一种在Web应用中实现双向通信的协议。它允许服务器主动向客户端推送数据&#xff0c;而不需要客户端发起请求。在现代的实时应用中&#xff0c;WebSocket经常用于实时数据传输、聊天功能、实时通知和多人协作等场景。在本篇博客中&#xff0c;我们将探索如…

Flink系列之:监控Checkpoint

Flink系列之&#xff1a;监控Checkpoint 一、概览二、概览&#xff08;Overview&#xff09;选项卡三、历史记录&#xff08;History&#xff09;选项卡四、历史记录数量配置五、摘要信息&#xff08;Summary&#xff09;选项卡六、配置信息&#xff08;Configuration&#xff…

@RequestMapping注解与其派生注解接收参数详解

一、前言 根据 HTTP 标准&#xff0c;HTTP 请求可以使用多种请求方法。 HTTP1.0 定义了三种请求方法&#xff1a; GET, POST 和 HEAD 方法。 HTTP1.1 新增了六种请求方法&#xff1a;OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。 RequestMapping注解与其派生注解 在…

Qt实现动画的2种方式

由于我之前是写java的所以在学习Qt的时候感觉会有点熟悉&#xff0c;因为Qt就是 用c写&#xff0c;而java底层也是c实现的 先看效果&#xff1a; 一、使用QMovie 这种方式我目前是用来加载gif图的&#xff0c;很简单噢&#xff0c;只不过我是加载的本地的路径&#xff0c;如…

数据安全无阻,轻松远程工作!迅软DSE出差加密指南,让你出差更放心!

文件加密软件是确保内网文件安全使用的重要工具&#xff0c;但在终端脱离内部网络、面对外出或居家办公等情境时&#xff0c;文件加密的挑战也相应增加。为解决这一问题&#xff0c;迅软DSE文件加密软件提供了离线授权功能&#xff0c;确保在终端脱离公司网络后的设定时间内&am…

抖店怎么运营?新手运营方法,这几个流程告诉你!

我是电商珠珠 抖店的热度一直很高&#xff0c;很多新手在入驻抖店的时候&#xff0c;并不知道怎么去运营。 其实&#xff0c;从开店到店铺维护&#xff0c;这几个步骤你们一次就能看懂。 第一步&#xff0c;入驻 入驻的时候需要准备一张个体的营业执照、身份证、银行卡、手…

泽众一站式自动化测试平台TestOne,自动化测试的整体框架和功能介绍

TestOne是泽众软件自主研发的一体化测试系统&#xff0c;基于 B/S 体系的微服务架构&#xff0c;集系统管理、项目管理、测试管理、缺陷管理等功能于一体&#xff0c;覆盖了GUI界面功能自动化测试、接口自动化测试、移动自动化测试类型&#xff0c;完整覆盖自动化测试项目的全过…

LoadRunnder介绍

LoadRunner介绍安装教程LoadRunner三大组件 LoadRunner介绍 性能测试的定义&#xff1a;测试人员借助性能测试工具&#xff0c;模拟系统在不同场景下&#xff0c;对应的性能指标是否达到预期 定义中这个工具是什么呢&#xff1f; 可以使用LoadRunner测试 这个工具相比于其它工…

linux 内核同步互斥技术之每处理器变量

在多处理器系统中&#xff0c;每处理器变量为每个处理器生成一个变量的副本&#xff0c;每个处理器访问自己的副本&#xff0c;从而避免了处理器之间的互斥和处理器缓存之间的同步&#xff0c;提高了程序的执行速度。 每处理器变量分为静态和动态两种。 静态每处理器变量 使…

Flutter开发笔记 —— sqflite插件数据库应用

前言 今天在观阅掘金大佬文章的时候&#xff0c;了解到了该 sqflite 插件&#xff0c;结合官网教程和自己实践&#xff0c;由此总结出该文&#xff0c;希望对大家的学习有帮助&#xff01; 插件详情 Flutter的 SQLite 插件。支持 iOS、Android 和 MacOS。 支持事务和batch模式…