目录

一、核心概念​

​定义​

​核心价值​

​与Secret的区别​

​二、核心特性​

​数据存储​

​生命周期​

​作用域​

什么是 Configmap?

Configmap 能解决哪些问题?

ConfigMap 的主要作用

三、命令行直接创建

四、通过文件创建(常用)

把 configmap 做成 volume,挂载到 pod(常用)

五、指定目录创建 configmap(常用)

六、使用 Configmap

通过环境变量引入

通过环境变量引入


一、核心概念

  1. 定义
    • Kubernetes 资源对象,用于存储非敏感配置数据​(键值对形式)。
    • 核心目标:将配置与容器镜像解耦,实现“一次构建,多处部署”。
  2. 核心价值
    • 集中管理​:所有配置统一存储在集群中,避免散落在各Pod/容器。
    • 动态更新​:修改ConfigMap后,部分场景可无需重启Pod生效。
    • 环境隔离​:不同环境(开发/测试/生产)使用不同ConfigMap。
  3. 与Secret的区别
    特性ConfigMapSecret
    数据类型明文(键值对)加密(Base64编码,非绝对安全)
    典型用途配置文件、环境变量、参数密码、TLS证书、Token
    访问控制无额外加密(依赖RBAC)建议配合加密存储(如kube-apiserver加密插件)

二、核心特性

  1. 数据存储
    • 存储格式:键值对(key: value),支持多行文本(如配置文件)。
    • 大小限制:单个ConfigMap最大 ​1MB​(K8S默认限制,可调整)。
  2. 生命周期
    • 随命名空间存在,​Pod重建时重新挂载​(若Pod使用ConfigMap卷挂载)。
    • 修改ConfigMap后,已运行的Pod需手动重启或通过工具(如Reloader)触发更新。
  3. 作用域
    • 命名空间级别(与Pod同命名空间才能访问)。

什么是 Configmap?

它就是配置文件挂载,就是资源主要是做配置文件挂载的

Configmap 是 k8s 中的资源对象,用于保存非机密性的配置的,数据可以用 key/value 键值对的形式保存,也可通过文件的形式保存

Configmap 能解决哪些问题?

就是将容器内部的应用和外部的配置进行解耦

紧密联系的叫偶合

可以进行拆解的叫解耦

ConfigMap 的主要作用

就是为了让镜像和配置文件解耦,以便实现镜像的可移植性和可复用性。

三、命令行直接创建

直接在命令行中指定 configmap 参数创建,通过--from-literal 指定参数

[root@k8s-master ~]# kubectl  create  configmap  file.txt --from-literal k1=v1 --from-literal k2=v2
configmap/file.txt created
[root@k8s-master ~]# kubectl  get cm
NAME               DATA   AGE
file.txt           2      13s
kube-root-ca.crt   1      6d22h
[root@k8s-master ~]# kubectl describe cm file.txt
Name:         file.txt
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
k1:
----
v1
k2:
----
v2BinaryData
====Events:  <none>

四、通过文件创建(常用)

把 configmap 做成 volume,挂载到 pod(常用)

通过指定文件创建一个 configmap,--from-file=<文件>,若没有定义key,则使用文件名作为key,文件内容作为value。

当通过指定文件创建configmap,要先将服务的配置文件修改,先创建configmap再创建pod

[root@k8s-master ~]# vim nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: pod-test1labels:app: nginx129
spec:containers:- name: nginx129ports:- containerPort: 80image: nginx:latestimagePullPolicy: IfNotPresent

[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml 
pod/pod-test1 created
[root@k8s-master ~]# kubectl get po
NAME                    READY   STATUS    RESTARTS       AGE
nginx-89f8c6894-jdx6b   1/1     Running   1 (4h5m ago)   5d2h
pod-controller-7nlxv    1/1     Running   1 (4h5m ago)   4d14h
pod-controller-zn82f    1/1     Running   1 (14h ago)    4d14h
pod-test1               1/1     Running   0              6s

#将pod容器里的配置文件拷贝出来
[root@k8s-master ~]# kubectl cp pod-test1:/etc/nginx/conf.d/default.conf ./default.conf
tar: Removing leading `/' from member names
[root@k8s-master ~]# ls
default.conf   	
#把监听端口号改为81
[root@k8s-master ~]# vim default.conf 
server {listen       81;listen  [::]:80;server_name  localhost;[root@k8s-master ~]# vim svc.yaml 
apiVersion: v1
kind: Service
metadata:name: svc-test
spec:type: NodePortports:- targetPort: 81  #要与配置文件里的监听端口号一致port: 808selector:app: nginx129   #这个名要和pod文件里标签名一样

[root@k8s-master ~]# vim nginx-pod.yaml 
#把容器内端口号改为81
apiVersion: v1
kind: Pod
metadata:name: pod-test1labels:app: nginx129
spec:containers:- name: nginx129ports:- containerPort: 81   #修改default.conf 文件里server 监听端口号一致image: nginx:latestimagePullPolicy: IfNotPresent
#添加下面的volumeMounts:    #这个是容器内部的挂载- name: nginx-config     #这个名要和下面名相同mountPath: /etc/nginx/conf.d/volumes:    #这个是外部挂载- name: nginx-config   #这个名要和上面名相同configMap:name: nginx-cm   #这个是自定义configmap的名称

#从文件中加载配置进行挂载
[root@k8s-master ~]# kubectl create cm nginx-cm --from-file default.conf=./default.conf
configmap/nginx-cm created
#查看详细信息
#确认configmap是创建号了的
[root@k8s-master ~]# kubectl describe cm nginx-cm 
Name:         nginx-cm
Namespace:    default
Labels:       <none>
Annotations:  <none>Data   #数据
====
default.conf:
----
server {listen       81;listen  [::]:80;server_name  localhost;........#删除之前的创的pod容器
[root@k8s-master ~]# kubectl get po
NAME                    READY   STATUS    RESTARTS        AGE
nginx-89f8c6894-jdx6b   1/1     Running   1 (4h28m ago)   5d3h
pod-controller-7nlxv    1/1     Running   1 (4h28m ago)   4d14h
pod-controller-zn82f    1/1     Running   1 (14h ago)     4d14h
pod-test1               1/1     Running   0               22m
[root@k8s-master ~]# kubectl delete pod pod-test1 
pod "pod-test1" deleted#在configmap创建好之后,创建pod
[root@k8s-master ~]# kubectl apply -f nginx-pod.yaml 
pod/pod-test1 created
#查看pod详细信息,文件挂载成功
[root@k8s-master ~]# kubectl describe pod pod-test1 
Name:             pod-test1
Namespace:        default
Priority:         0
Service Account:  default
Node:             k8s-node1/192.168.158.34
Start Time:       Mon, 18 Aug 2025 20:24:29 +0800
Labels:           app=nginx129
Annotations:      cni.projectcalico.org/containerID: 70a867289da8c969ed5b8611a8169f7bb6693512fec19993739cec187270ed54cni.projectcalico.org/podIP: 10.244.36.101/32cni.projectcalico.org/podIPs: 10.244.36.101/32
Status:           Running
IP:               10.244.36.101
IPs:IP:  10.244.36.101
Containers:nginx129:   #容器名Container ID:   docker://8a056c4707d85671e6953ec09d4a0639de6f336cc4d9c3dc0df9eee4a3f32e9fImage:          nginx:latestImage ID:       docker-pullable://nginx@sha256:33e0bbc7ca9ecf108140af6288c7c9d1ecc77548cbfd3952fd8466a75edefe57Port:           81/TCP    #端口号Host Port:      0/TCPState:          RunningStarted:      Mon, 18 Aug 2025 20:24:29 +0800Ready:          TrueRestart Count:  0Environment:    <none>Mounts:   #挂载路径/etc/nginx/conf.d/ from nginx-config (rw)   #成功挂载/var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-88695 (ro)
Conditions:Type              StatusInitialized       True Ready             True ContainersReady   True PodScheduled      True 
Volumes:nginx-config:Type:      ConfigMap (a volume populated by a ConfigMap)Name:      nginx-cm    #configmap名称Optional:  falsekube-api-access-88695:Type:                    Projected (a volume that contains injected data from multiple sources)TokenExpirationSeconds:  3607ConfigMapName:           kube-root-ca.crtConfigMapOptional:       <nil>DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300snode.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type    Reason     Age   From               Message----    ------     ----  ----               -------Normal  Scheduled  14s   default-scheduler  Successfully assigned default/pod-test1 to k8s-node1Normal  Pulled     14s   kubelet            Container image "nginx:latest" already present on machineNormal  Created    14s   kubelet            Created container nginx129Normal  Started    14s   kubelet            Started container nginx129
[root@k8s-master ~]# #查看服务端口,外部访问端口号为31807
[root@k8s-master ~]# kubectl get service
svc-test              NodePort       10.110.238.126   <none>            808:31807/TCP   31m
#现在我们可以进行页面访问,可以正常访问到内部容器nginx服务

五、指定目录创建 configmap(常用)

这个是基于文件创建cm

[root@k8s-master ~]# mkdir nginx-test
[root@k8s-master ~]# lsnginx-test[root@k8s-master ~]# cd nginx-test/
[root@k8s-master nginx-test]# ls
[root@k8s-master nginx-test]# echo server_id=1 > nginx1.cnf
[root@k8s-master nginx-test]# echo server_id=2 > nginx2.cnf
[root@k8s-master nginx-test]# ls
nginx1.cnf  nginx2.cnf
[root@k8s-master nginx-test]# cd #创建configmap
[root@k8s-master ~]# kubectl create configmap nginx-cnf --from-file /root/nginx-test/
configmap/nginx-cnf created#查看 configmap 详细信息
[root@k8s-master ~]# kubectl describe cm nginx-cnf
Name:         nginx-cnf
Namespace:    default
Labels:       <none>
Annotations:  <none>Data
====
nginx1.cnf:
----
server_id=1nginx2.cnf:
----
server_id=2BinaryData
====Events:  <none>
[root@k8s-master ~]# kubectl get cm nginx-cnf -o yaml
apiVersion: v1
data:nginx1.cnf: |server_id=1nginx2.cnf: |server_id=2
kind: ConfigMap
metadata:creationTimestamp: "2025-08-18T13:49:36Z"name: nginx-cnfnamespace: defaultresourceVersion: "818058"uid: 40fce74a-1e53-445e-9126-d01c66166e34

六、使用 Configmap

通过环境变量引入

使用 configMapKeyRef变量

环境变量引入,比如mysql不需要指定密码进去之后才行,现在我可以直接在文件中使用环境变量引入就行

好处就是,删除很方便。解耦

#创建一个存储 mysql 配置的 configmap
[root@k8s-master ~]# vim env-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysqllabels:app: mysql
data:log: "1"lower: "1"#更新资源清单文件  
[root@k8s-master ~]# kubectl apply -f env-cm.yaml 
configmap/mysql created
#创建configmap成功
[root@k8s-master ~]# kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      7d1h
mysql              2      82s#创建 pod,引用 Configmap 中的内容
[root@k8s-master ~]# vim env-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: mysql-pod
spec:containers:- name: mysqlimage: busyboximagePullPolicy: IfNotPresentcommand: [ "/bin/sh", "-c", "sleep 3600" ]env:- name: log_bin #定义环境变量 log_binvalueFrom:configMapKeyRef:name: mysql #指定 configmap 的名字key: log #指定 configmap 中的 key- name: lower #定义环境变量 lowervalueFrom:configMapKeyRef:name: mysqlkey: lowerrestartPolicy: Never#更新资源清单文件
[root@k8s-master ~]# kubectl apply -f env-pod.yaml 
pod/mysql-pod created#创建pod成功
[root@k8s-master ~]# kubectl get pod
NAME                    READY   STATUS    RESTARTS       AGE
mysql-pod               1/1     Running   0              8s[root@k8s-master ~]# kubectl exec -it mysql-pod -- /bin/sh
/ # env
log_bin=1
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod
SVC_TEST_PORT_808_TCP_ADDR=10.110.238.126
SHLVL=1
HOME=/root
SVC_TEST_PORT_808_TCP_PORT=808
SVC_TEST_PORT_808_TCP_PROTO=tcp
NGINX_SVC_NODEPORT_SERVICE_HOST=10.105.189.102
SVC_TEST_SERVICE_HOST=10.110.238.126
SVC_TEST_PORT_808_TCP=tcp://10.110.238.126:808
TERM=xterm
lower=1
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
SVC_TEST_SERVICE_PORT=808
NGINX_SVC_NODEPORT_PORT=tcp://10.105.189.102:80
SVC_TEST_PORT=tcp://10.110.238.126:808
NGINX_SVC_NODEPORT_SERVICE_PORT=80
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
NGINX_SVC_NODEPORT_PORT_80_TCP_ADDR=10.105.189.102
NGINX_SVC_NODEPORT_PORT_80_TCP_PORT=80
NGINX_SVC_NODEPORT_PORT_80_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
NGINX_SVC_NODEPORT_PORT_80_TCP=tcp://10.105.189.102:80
/ # exit

通过环境变量引入

#使用 envfrom变量

通过

#使用 envfrom变量 #直接引入之前创建configmap里的变量 data: log: "1" lower: "1"

 #下面使用 envfrom变量#先创建
[root@k8s-master ~]# vim envfrom-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: mysql-pod-envfrom
spec:containers:- name: mysqlimage: busybox:1.28imagePullPolicy: IfNotPresentcommand: [ "/bin/sh", "-c", "sleep 3600" ]envFrom:- configMapRef:name: mysql  #指定configmap的名字restartPolicy: Never#更新资源清单文件[root@k8s-master ~]# kubectl apply -f envfrom-pod.yaml 
pod/mysql-pod-envfrom created#查看pod资源,mysql-pod-envfrom 创建好了
[root@k8s-master ~]# kubectl get pod
NAME                    READY   STATUS    RESTARTS        AGE
mysql-pod               1/1     Running   0               13m
mysql-pod-envfrom       1/1     Running   0               9s[root@k8s-master ~]# kubectl exec -it mysql-pod-envfrom -c mysql -- /bin/sh
/ # env
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT=443
HOSTNAME=mysql-pod-envfrom
SVC_TEST_PORT_808_TCP_ADDR=10.110.238.126
SHLVL=1
HOME=/root
SVC_TEST_PORT_808_TCP_PORT=808
SVC_TEST_PORT_808_TCP_PROTO=tcp
NGINX_SVC_NODEPORT_SERVICE_HOST=10.105.189.102
SVC_TEST_SERVICE_HOST=10.110.238.126
SVC_TEST_PORT_808_TCP=tcp://10.110.238.126:808
TERM=xterm
lower=1      ####
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
SVC_TEST_SERVICE_PORT=808
SVC_TEST_PORT=tcp://10.110.238.126:808
NGINX_SVC_NODEPORT_PORT=tcp://10.105.189.102:80
NGINX_SVC_NODEPORT_SERVICE_PORT=80
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
log=1        ####
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
NGINX_SVC_NODEPORT_PORT_80_TCP_ADDR=10.105.189.102
NGINX_SVC_NODEPORT_PORT_80_TCP_PORT=80
NGINX_SVC_NODEPORT_PORT_80_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_SERVICE_HOST=10.96.0.1
PWD=/
NGINX_SVC_NODEPORT_PORT_80_TCP=tcp://10.105.189.102:80
/ # exit

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

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

相关文章

MySQL InnoDB事务acid特性的原理和隔离级别的实现原理

InnoDB存储引擎 InnoDB存储结构表空间 则每张表都会有一个表空间&#xff08;xxx.ibd&#xff09;&#xff0c;一个mysql实例可以对应多个表空间 系统表空间 存储数据字典&#xff08;表结构定义、索引信息等&#xff09;、Change Buffer、Doublewrite Bufferundo log&#xff…

Linux系统之部署nullboard任务管理工具

Linux系统之部署nullboard任务管理工具一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍1.3 nullboard使用场景二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、安装httpd软件3.1 检查yum仓库3.2 安装httpd软件3.3 启动httpd服务3.4 查看httpd服务状态3.5 防火墙…

Qt设置软件使用期限【新版防修改系统时间】

在工业软件或其他领域中&#xff0c;经常会对软件进行授权&#xff0c;软件需要付费进行有期限的使用。以下是我用Qt设计的设置软件使用期限的两种方案。 主体思想&#xff1a; 1.软件需要绑定机器&#xff0c;让用户无法通过复制在另一台机器上运行。 2.由厂家提供激活码供用户…

【JavaEE】多线程(线程安全问题)

有些代码在单个线程环境下执行正确&#xff0c;如果同样的代码在多个线程下同时执行可能就会出现问题&#xff0c;这个就是线程安全问题&#xff08;或者称线程不安全问题&#xff09;&#xff0c;简而言之就是&#xff1a;线程安全问题是由于多线程出现的问题&#xff0c;原因…

NodeJs 桌面开发学习 electron.js (一)

今天开始学习NodeJs 关于 桌面应用的内容&#xff0c;长期目标是 React electron 实现一个桌面应用。今天先实现一个简单的目标&#xff0c;搭建一个Electron ts 项目架构&#xff0c;并实现主业务线程 和前端渲染线程的交互一、代码结构和配置例子项目结构大致如下&#xff…

diffusion model(1.4) 相关论文阅读清单

以下是阅读清单&#xff1a; 《Deep Unsupervised Learning using Nonequilibrium Thermodynamics》扩散模型&#xff0c;arxiv链接《Denoising Diffusion Probabilistic Models》DDPM论文 arxiv链接

ESP32-C3_SMARTCAR

前言: 前面用stm32f103c8t6 rt-thread 写了个智能小车程序 这章用esp32-c3 重新来遍 1&#xff1a;环境 vscodeidf5.4 esp32-3c 找到一块MIN的底板 凑合用&#xff08;138 cm左右&#xff09; 一个L298N 一个船型开关&#xff0c; 一个665mm 2脚按钮 锂电池 186502 及电池盒&a…

消费者API

目录独立消费者案例&#xff08;订阅主题&#xff09;独立消费者案例&#xff08;订阅分区&#xff09;消费者组案例独立消费者案例&#xff08;订阅主题&#xff09; package com.tsg.kafka.consumer;import org.apache.kafka.clients.consumer.ConsumerConfig; import org.ap…

C# NX二次开发:操作按钮控件Button和标签控件Label详解

大家好&#xff0c;今天介绍ug二次开发过程中的一个叫操作按钮的控件&#xff0c;这个控件在块UI编辑器中可以使用。 ​ Button这个控件的属性和方法如下所示&#xff1a; namespace NXOpen.BlockStyler { public class Label : UIBlock { protected intern…

Vue.prototype 的作用

在 Vue.js 中&#xff0c;Vue.prototype 是用来向所有 Vue 实例添加属性或方法的机制。通过它添加的属性或方法可以在所有 Vue 组件实例中通过 this 访问。主要作用添加全局方法或属性&#xff1a;可以在所有组件中使用的工具方法或常量扩展 Vue 功能&#xff1a;添加 Vue 本身…

Javaee 多线程 --进程和线程之间的区别和联系

文章目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnable(接口)&#xff0c;重写run继承Thread,重写run,但是使用匿名内部类实现Runnable(接口)&#xff0c;重写run&#xff0c;但是使用匿名内部类使用lambda表达式请说明Thread类中run和…

企业如何让内部视频仅限指定域名播放,确保视频不被泄露?

在数字化办公时代&#xff0c;企业内部的培训视频、产品演示或机密会议录像等敏感内容&#xff0c;一旦被非法传播或泄露&#xff0c;可能带来严重的商业风险。如何确保这些视频只能在公司官网或指定域名播放&#xff0c;防止被恶意下载、盗链或二次传播&#xff1f;今天介绍一…

端口映射原理操作详解教程:实现外网访问内网服务,本地路由器端口映射公网ip和软件端口映射域名2种方法

端口映射作为一种不同网络间通信的关键网络技术&#xff0c;在远程访问和内外网连接服务需求日益增长的如今&#xff0c;理解端口映射的原理和设置方法是确保网络服务可用性的必要技能。本文将深入探讨端口映射的基本概念、路由器端口映射设置步骤以及无公网IP用端口映射软件映…

【PyTorch】多对象分割项目

对象分割任务的目标是找到图像中目标对象的边界。实际应用例如自动驾驶汽车和医学成像分析。这里将使用PyTorch开发一个深度学习模型来完成多对象分割任务。多对象分割的主要目标是自动勾勒出图像中多个目标对象的边界。 对象的边界通常由与图像大小相同的分割掩码定义&#xf…

SSH 使用密钥登录服务器

用这种方法远程登陆服务器的时候无需手动输入密码 具体步骤 客户端通过 ssh-keygen 生成公钥和私钥 ssh-keygen -t rsa 生成的时候会有一系列问题&#xff0c;根据自己的需要选择就行。生成的结果为两个文件&#xff1a; 上传公钥至服务器&#xff0c;上述两个文件一般在客户…

MySQL 8.4 企业版启用TDE功能和表加密

一、系统环境操作系统&#xff1a;Ubuntu 24.04 数据库:8.4.4-commercial for Linux on x86_64 (MySQL Enterprise Server - Commercial)二、安装TDE组件前提&#xff1a;检查组件文件是否存在ls /usr/lib/mysql/plugin/component_keyring_encrypted_file.so1.配置全局清单文件…

【Altium designer】导出的原理图PDF乱码异常的解决方法

一、有些电源名字无法显示或器件丢失 解决办法 (1)首先AD18以及以上的新版本AD不存在该问题。 (2)其次AD17以及更旧版本的AD很可能遇到该问题,参考如下博客笔记进行操作即可: 大致的操作如下:DXP → Preferences → Schematic → Options里面“Render Text with GDI+”…

4.Ansible自动化之-部署文件到主机

4 - 部署文件到受管主机 实验环境 先通过以下命令搭建基础环境&#xff08;创建工作目录、配置 Ansible 环境和主机清单&#xff09;&#xff1a; # 在控制节点&#xff08;controller&#xff09;上创建web目录并进入&#xff0c;作为工作目录 [bqcontroller ~]$ mkdir web &a…

Vuex的使用

Vuex 超详细使用教程&#xff08;从入门到精通&#xff09;一、Vuex 是什么&#xff1f;Vuex 是专门为 Vue.js 设计的状态管理库&#xff0c;它采用集中式存储管理应用的所有组件的状态。简单来说&#xff0c;Vuex 就是一个"全局变量仓库"&#xff0c;所有组件都可以…

pytorch 数据预处理,加载,训练,可视化流程

流程定义自定义数据集类定义训练和验证的数据增强定义模型、损失函数和优化器训练循环&#xff0c;包括验证训练可视化整个流程模型评估高级功能扩展混合精度训练​分布式训练​{:width“50%” height“50%”} 定义自定义数据集类 # #1. 自定义数据集类 # class CustomImageD…