【Kubernets】配置类型资源 Etcd, Secret, ConfigMap

文章目录

    • 所有资源概览
    • Etcd详细说明
      • 一、基本概念
      • 二、主要功能
      • 三、架构与组件
      • 四、数据模型与操作
      • 五、安全与认证
      • 六、集群部署与管理
    • Secret详细说明
      • 一、Secret 的类型
      • 二、Secret 的创建
      • 三、Secret 的使用
      • 四、Secret 的更新与删除
      • 五、Secret 的安全性
    • ConfigMap详细说明
      • 一、ConfigMap的基本概念
      • 二、ConfigMap的主要作用
      • 三、ConfigMap的声明
      • 四、ConfigMap的使用
      • 三、注意事项
    • 三者区别
      • 一、etcd
      • 二、Secret
      • 三、ConfigMap
      • 四、总结

所有资源概览

kube-resource

Etcd详细说明

Kubernetes中的etcd是一个高度可用的分布式键值存储系统,它在Kubernetes集群中扮演着至关重要的角色。以下是对etcd的详细介绍:

一、基本概念

etcd是一个专为配置共享服务发现分布式锁等场景设计的分布式键值存储系统。它采用Raft一致性算法,确保集群内部数据的一致性,并提供高可用、高性能的存储服务。

二、主要功能

  1. 分布式键值存储:etcd以键值对的形式存储数据,客户端可以通过HTTP/HTTPS或gRPC接口与etcd交互,进行数据的读写操作。
  2. 配置存储与动态更新:etcd可以存储和分发应用的配置信息,并支持版本控制和历史回溯。客户端可以监听特定键的变化,实现配置的实时更新。
  3. 服务发现:通过在etcd中注册服务实例及其元数据(如IP地址、端口等),客户端可以通过查询etcd获取服务实例列表,实现服务的发现与定位。
  4. 分布式锁与协调:etcd提供分布式锁服务,允许多个分布式系统组件安全地协调对共享资源的访问。它还支持分布式选举、队列等高级协调功能。
  5. 事件通知:客户端可以对键进行Watch(监视),当键值发生变化时,etcd会向客户端发送事件通知,实现数据变更的实时响应。

三、架构与组件

  1. 节点(Member):etcd集群中的单个服务器实例,每个节点都有一个唯一的ID和角色(Follower或Leader)。节点间通过Raft协议进行通信和数据复制。
  2. Raft协议:etcd使用Raft作为共识算法,负责集群内节点间的领导选举、日志复制、心跳检测等。Raft保证了在给定时间内,集群内只有一个有效的Leader,且所有节点上的数据最终一致。
  3. gRPC服务:etcd通过gRPC提供服务接口,支持客户端的远程调用。gRPC提供了高效、跨语言的通信能力。
  4. 存储引擎:etcd内部使用专门设计的存储引擎(如BoltDB或RocksDB)持久化数据,保证数据的高效读写和持久化存储。

四、数据模型与操作

  1. 键值对:etcd以键值对的形式存储数据,键(Key)是唯一的标识符,值(Value)可以是任意字节序列。
  2. 目录结构:etcd的键可以组织成类似于文件系统的层级结构,支持前缀查询和递归操作。
  3. 数据操作:支持Put(写入数据)、Get(查询数据)、Delete(删除数据)等操作。还支持事务操作(Txn),能够在原子操作中执行多个条件判断和数据修改。
  4. 版本控制:每个键值对都有一个版本号,每次修改都会递增。客户端可以通过版本号进行条件更新,防止竞态条件。
  5. 租约(Lease):为键值对设置有效期,过期后键值对自动删除。租约可以用于实现自动清理过期数据、定时任务等。

五、安全与认证

  1. TLS加密:etcd支持客户端与服务器之间的双向TLS加密,确保数据传输的安全性。
  2. 身份认证:支持多种认证方式,如用户名密码(Basic Auth)、TLS客户端证书、JWT等。
  3. 访问控制:通过Role-Based Access Control(RBAC)系统,可以精细控制不同用户或服务对etcd中资源的访问权限。

六、集群部署与管理

  1. 集群部署:etcd集群通常由奇数个节点组成,以确保在部分节点故障时仍能维持多数派。节点间通过预共享的加密密钥或TLS证书建立信任关系。
  2. 监控与告警:通过etcd提供的metrics接口,可以对接Prometheus等监控系统,监控集群的健康状况、性能指标等,并设置告警阈值。
  3. 备份与恢复:定期进行数据备份以应对灾难恢复。etcd提供snapshot工具进行数据快照,并支持增量备份。恢复时可通过导入快照和重放WAL(Write-Ahead Log)文件恢复数据。
  4. 升级与扩容:etcd支持平滑升级和在线扩容,通过增加或替换节点来调整集群规模或更新软件版本。

总之,etcd作为Kubernetes等云原生平台的核心组件,凭借其强一致、高可用、高性能的特点,成为云原生架构中的关键基础设施。通过精细的安全控制和丰富的数据操作接口,etcd为构建复杂的分布式系统提供了坚实的数据存储基石。

Secret详细说明

Kubernetes Secret 是 Kubernetes 集群中用于存储敏感信息(如密码、OAuth 令牌和 ssh 密钥)的对象。这些信息需要以安全的方式处理,并且不应该被直接暴露在 pod 的配置文件或容器镜像中。以下是 Kubernetes Secret 的详细介绍:

一、Secret 的类型

Kubernetes Secret 支持多种类型,但最常见的是 Opaque 类型。其他类型包括:

  • Service Account Tokens:自动为 Service Account 创建的 Secret,包含用于 API 访问的令牌。
  • kubernetes.io/dockerconfigjson:用于存储 Docker 镜像仓库的认证信息。
  • kubernetes.io/tls:用于存储 TLS 证书和私钥。

二、Secret 的创建

Secret 可以通过命令行工具 kubectl 或 YAML 配置文件创建。

  • 使用 kubectl 创建

    kubectl create secret generic my-secret --from-literal=username=admin --from-literal=password=123456
    

    这将创建一个名为 my-secret 的 Secret,包含两个键值对:usernamepassword

  • 使用 YAML 配置文件创建

    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      username: YWRtaW4=  # base64 编码的 "admin"
      password: MTIzNDU2= # base64 编码的 "123456"
    

    注意:在 YAML 文件中,Secret 的数据字段需要是 base64 编码的。

三、Secret 的使用

Secret 可以通过多种方式在 Kubernetes 集群中使用:

  • 环境变量:将 Secret 数据注入到 Pod 的环境变量中。
apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod  
spec:  
  containers:  
  - name: my-container  
    image: busybox  
    env:  
    - name: MY_USERNAME  
      valueFrom:  
        secretKeyRef:  
          name: my-secret  
          key: username  
    - name: MY_PASSWORD  
      valueFrom:  
        secretKeyRef:  
          name: my-secret  
          key: password
  • Volume:将 Secret 数据挂载为 Pod 中的卷(Volume),以文件的形式提供访问。
apiVersion: v1  
kind: Pod  
metadata:  
  name: my-pod-with-volume  
spec:  
  containers:  
  - name: my-container  
    image: busybox  
    volumeMounts:  
    - name: my-secret-volume  
      mountPath: "/etc/secrets"  
      readOnly: true  
  volumes:  
  - name: my-secret-volume  
    secret:  
      secretName: my-secret
  • ConfigMaps 与 Secrets 结合使用:虽然 ConfigMap 通常用于存储非敏感配置数据,但有时也会与 Secret 结合使用,以区分敏感和非敏感信息。

四、Secret 的更新与删除

  • 更新 Secret:更新 Secret 通常涉及创建一个新的 Secret 并更新引用该 Secret 的 Pod 或其他 Kubernetes 资源。对于挂载为卷的 Secret,Kubernetes 会在 Secret 更新后自动将其更新到 Pod 中(取决于 Kubernetes 的版本和配置)。但是,对于注入为环境变量的 Secret,需要重启 Pod 才能使更新生效。
  • 删除 Secret:使用 kubectl delete secret <secret-name> 命令可以删除指定的 Secret。删除后,所有引用该 Secret 的 Pod 或其他 Kubernetes 资源将无法再访问该 Secret 中的数据。

五、Secret 的安全性

  • 存储安全:Secret 数据在 etcd 中以 base64 编码的形式存储,虽然 base64 不是一种加密方式,但它可以作为一种简单的编码手段,使得敏感信息在传输和存储时不易被直接读取。然而,为了增强安全性,建议将 Secret 数据存储在安全的存储系统中,并在使用时通过 Kubernetes 的访问控制机制进行保护。
  • 访问控制:Kubernetes 通过 RBAC(基于角色的访问控制)机制对 Secret 的访问进行严格控制。只有具有相应权限的用户或 Service Account 才能访问特定的 Secret。
  • 传输安全:在 Kubernetes 集群内部,Secret 数据通过 API Server 进行访问时,会使用 TLS 加密来保护数据的传输安全。

总之,Kubernetes Secret 提供了一种安全存储和管理敏感信息的方法,通过正确使用 Secret,可以保护敏感信息不被未经授权的访问和泄露。

ConfigMap详细说明

Kubernetes中的ConfigMap是一种用于存储配置数据的资源对象,以下是对其的详细说明:

一、ConfigMap的基本概念

ConfigMap是一种API对象,用于将非机密性的数据保存到键值对中。这些数据可以在Pods中作为环境变量、命令行参数或存储卷中的配置文件使用。ConfigMap使得环境配置信息和容器镜像解耦,从而便于应用配置的修改和管理。

二、ConfigMap的主要作用

  1. 分离配置和应用程序:ConfigMap允许将应用程序的配置数据与应用程序本身分离开来。这样,应用程序可以在不重新构建或重新部署的情况下修改配置数据。
  2. 集中管理配置:ConfigMap可以集中存储和管理应用程序所需的所有配置数据。这有助于统一管理和更新配置,而无需修改应用程序的代码或重新构建镜像。
  3. 配置共享:ConfigMap可以在多个Pod之间共享配置数据,确保所有Pod使用相同的配置,从而提高配置的一致性和可维护性。

三、ConfigMap的声明

ConfigMap可以通过多种方式声明,包括直接在命令行中指定Config参数创建、通过文件或目录创建,以及通过YAML文件定义。

  1. 直接在命令行中指定Config参数创建
    使用kubectl create configmap命令,并通过--from-literal指定参数。例如:

    kubectl create configmap mysql-config --from-literal=MYSQL_PORT=3306 --from-literal=MYSQL_ROOT_PASSWORD=passwd
    

    这将创建一个名为mysql-config的ConfigMap,包含两个键值对:MYSQL_PORTMYSQL_ROOT_PASSWORD

  2. 通过文件或目录创建
    如果有一个或多个配置文件,可以使用--from-file参数从文件或目录创建ConfigMap。例如:

    kubectl create configmap nginx-config --from-file nginx/nginx.conf
    

    这将从nginx/nginx.conf文件创建一个名为nginx-config的ConfigMap,其中包含一个键值对,键是文件名nginx.conf,值是文件内容。

    如果有一个目录包含多个配置文件,可以将整个目录作为数据源创建ConfigMap:

    kubectl create configmap my-configmap-files --from-file=config-files/
    

    这将从config-files目录中的每个文件创建一个ConfigMap,每个文件的内容都作为一个键值对存储在ConfigMap中。

  3. 通过YAML文件定义
    可以编写一个YAML文件来定义ConfigMap。例如:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-configmap
    data:
      DATABASE_URL: "mysql://username:password@localhost:3306/mydatabase"
      API_KEY: "your_api_key_here"
      LOG_LEVEL: "info"
    

    然后,使用kubectl apply -f命令应用这个YAML文件来创建ConfigMap。

四、ConfigMap的使用

ConfigMap创建后,可以在Pod中以多种方式使用,包括作为环境变量、命令行参数或挂载为文件。

  1. 作为环境变量使用
    在Pod的YAML配置文件中,通过envFromenv字段引用ConfigMap。例如:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: my-container
        image: your-container-image:latest
        envFrom:
        - configMapRef:
            name: my-configmap
    

    这将把my-configmap中的所有键值对作为环境变量注入到Pod中的容器中。

  2. 作为命令行参数使用
    在Pod的YAML配置文件中,通过argscommand字段引用ConfigMap中的值作为命令行参数。不过,这种方式需要手动指定每个要使用的键值对。

  3. 挂载为文件使用
    可以将ConfigMap挂载为Pod中的文件,这样容器就可以像访问普通文件一样访问配置数据了。例如:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod-files
    spec:
      containers:
      - name: my-container-files
        image: your-container-image:latest
        volumeMounts:
        - name: config-volume
          mountPath: /etc/config
      volumes:
      - name: config-volume
        configMap:
          name: my-configmap-files
    

    这将把my-configmap-files中的所有文件挂载到Pod中的/etc/config目录下。

三、注意事项

  1. 命名规则:ConfigMap的名称必须是有效的DNS子域名。
  2. 数据格式:ConfigMap中的数据可以是键值对形式,也可以是完整的配置文件。
  3. 安全性:ConfigMap用于存储非机密性数据。如果需要存储敏感信息,请使用Secret资源。
  4. 更新与删除:ConfigMap更新后,已经使用它的Pod不会自动更新配置。需要手动重启Pod或更新Pod的配置以使更改生效。同样地,删除ConfigMap不会影响已经使用它的Pod,但Pod将无法再访问被删除的数据。

综上所述,ConfigMap为Kubernetes中的应用程序提供了一种灵活且解耦的方式来存储和访问配置数据。通过合理的声明和使用方式,可以简化配置管理并提高应用程序的可维护性。

三者区别

Kubernetes中的etcd、Secret和ConfigMap都是重要的组件,但它们各自承担着不同的角色和功能。以下是它们之间的主要区别:

一、etcd

  1. 定义与角色

    • etcd是一个高可用的分布式键值存储系统,专为配置共享、服务发现和分布式锁等场景设计。
    • 在Kubernetes集群中,etcd是集群的核心组件之一,负责存储集群的所有配置信息、状态数据以及服务注册信息等。
  2. 特性

    • 高可用性:etcd通过Raft一致性算法实现集群的高可用性,确保在部分节点故障时仍能提供服务。
    • 强一致性:etcd保证集群内部数据的一致性,使得各个节点能够获取到最新的配置信息。
    • 数据持久化:etcd支持数据的持久化存储,确保数据的可靠性。

二、Secret

  1. 定义与用途

    • Secret是Kubernetes中用于存储敏感信息的对象,如密码、OAuth令牌、SSH密钥等。
    • 使用Secret可以避免将机密数据直接放在Pod规约或容器镜像中,从而增加应用程序的安全性。
  2. 类型

    • Kubernetes支持多种类型的Secret,包括Opaque(默认类型,用于存储任意数据)、kubernetes.io/service-account-token(用于存储服务账号令牌)、kubernetes.io/dockercfg和kubernetes.io/dockerconfigjson(用于存储Docker仓库的认证信息)等。
  3. 存储与访问

    • Secret中的数据以加密的方式存储,确保敏感信息的安全性。
    • Pod可以通过环境变量、卷挂载等方式访问Secret中的数据。

三、ConfigMap

  1. 定义与用途

    • ConfigMap是Kubernetes中用于存储非敏感配置信息的对象,如应用程序的设置、环境变量等。
    • ConfigMap使环境配置信息和容器镜像解耦,便于应用配置的修改。
  2. 存储与访问

    • ConfigMap中的数据以明文方式存储,因为存储的是非敏感信息。
    • Pod可以通过环境变量、命令行参数、卷挂载等方式访问ConfigMap中的数据。
  3. 限制

    • ConfigMap并不提供加密或保密的功能,因此不适合存储敏感信息。
    • ConfigMap中的数据大小有限制(通常为1MiB),不应存储大量数据。

四、总结

  • etcd:是Kubernetes集群的核心组件之一,负责存储集群的所有配置信息、状态数据等,具有高可用性、强一致性和数据持久化的特性。
  • Secret:用于存储敏感信息,如密码、密钥等,以加密方式存储,确保安全性。Pod可以通过多种方式访问Secret中的数据。
  • ConfigMap:用于存储非敏感配置信息,如应用程序设置、环境变量等。ConfigMap使配置信息与容器镜像解耦,便于修改。Pod同样可以通过多种方式访问ConfigMap中的数据。

综上所述,etcd、Secret和ConfigMap在Kubernetes集群中各自扮演着不同的角色,共同维护着集群的稳定性和安全性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【分布式训练(5)】无法 kill PID?如何 kill 休眠中的 GPU 占用进程

【分布式训练 debug】VS Code Debug 技巧&#xff1a;launch.json实用参数 【分布式训练&#xff08;2&#xff09;】深入理解 DeepSpeed 的 ZeRO 内存优化策略 (三阶段的区别) 【分布式训练&#xff08;3&#xff09;】accelerator deepspeed debug 报错 “Timed out waiting…

华为OD机试 - 最大利润 - 贪心算法(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

光伏仿真系统的好处

现在的做光伏电站的项目&#xff0c;很多任务都是后置的&#xff0c;这样的话问题的暴露就会在每个时间段&#xff0c;光伏仿真系统的好处&#xff0c;就是在做每一步工作前&#xff0c;系统已经把每一步的工作都分配好了&#xff0c;有任何问题都可以提前知道&#xff0c; 获…

awk工具的基本使用

awk的作用从整体上来说就是用来分隔文本的。 默认是根据空白字符&#xff0c;将一行文件内容分隔成多部份。 常用选项&#xff1a; 使用-F的选项来指定awk工具使用的分隔符&#xff0c; 在awk内部有类似于$1,$2,$3这样的变量&#xff0c;$1代表第一部分&#xff0c;$2代表第…

密码管理APP系统规格说明书(初版)

这里写目录标题 1 引言1.1 背景1.2 目的1.3 范围 2 系统需求2.1 功能需求2.2 性能需求2.3 安全需求2.4 兼容性需求 3 系统设计3.1 总体架构3.1.1 系统架构概述3.1.2 技术选型 3.2 功能模块设计3.2.1 密码生成模块3.2.2 安全存储模块3.2.3 自动填充模块3.2.4 多平台支持模块3.2.…

开源商城系统crmeb phpstudy安装配置

BOSS让我最快时间部署一套开源商场系统&#xff0c;今天就以crmeb为例。 快速部署在linux中我会首选docker&#xff0c;因为我要在windows中部署&#xff0c;本文就选用phpstudy集成环境做了。 什么是crmeb 我从官网摘点&#xff1a; CRMEB产品与服务 CRMEB通过将CRM&#x…

SPI通信时序

前言&#xff1a; 作为Motorola的又一伟大发明的SPI总线通信协议&#xff0c;在理解和应用上也是十分复杂且难以理解&#xff0c;博主想通过这篇文章想把SPI的原理和应用大概讲一下&#xff0c;同时也是记录自己对于I2C的学习和理解。 SPI概述&#xff1a; SPI 是英语Serial P…

【C语言复习专题】函数调用

【C语言复习专题】函数调用 1.递归是什么&#xff1f;1.1递归的思想&#xff1a;1.2递归的限制条件 2.递归举例2.1eg1&#xff1a;求n的阶乘2.1.1 分析和代码实现2.1.2作图演示过程 2.2 eg2&#xff1a;顺序打印一个整数的每一位2.2.1分析 3.递归与迭代 1.递归是什么&#xff1…

2-124 基于matlab得结构稀疏字典实现SAR图像低秩重建

基于matlab得结构稀疏字典实现SAR图像低秩重建&#xff0c;通过K-SVD和W-KSVD结合OMP进行重建。K-SVD算法是一种字典学习算法&#xff0c;能够对字典进行优化&#xff0c;使其能够更好地表示训练样本集。W-KSVD算法是K-SVD算法的扩展&#xff0c;它能够利用权重信息对字典进行优…

华为---Super VLAN简介及示例配置

目录 1. Super VLAN技术产生背景 2. Super VLAN概念 3. Super VLAN应用场景 4. Super VLAN工作原理 5. Super-VLAN主要配置命令 6. Super-VLAN主要配置步骤 7. 示例配置 7.1 示例场景 7.2 网络拓扑 7.3 配置代码 7.4 代码解析 7.5 测试验证 1. Super VLAN技术产生背…

【开源免费】基于SpringBoot+Vue.JS房屋租赁系统(JAVA毕业设计)

本文项目编号 T 020 &#xff0c;文末自助获取源码 \color{red}{T020&#xff0c;文末自助获取源码} T020&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

ubuntu20.4环境下gcc-aarch64交叉编译器的安装

交叉编译器&#xff08;Linux环境&#xff09;arm gcc 8.3一共有5个版本&#xff0c;常用的有4个版本&#xff08;另外一个为大端linux版本&#xff09;&#xff0c;分别是32bit裸机版本&#xff08;arm-eabi&#xff09;、64bit裸机版本&#xff08;aarch64-elf&#xff09;、…

2015年-2016年 软件工程程序设计题(算法题)实战_c语言程序设计数据结构程序设计分析

文章目录 2015年1.c语言程序设计部分2.数据结构程序设计部分 2016年1.c语言程序设计部分2.数据结构程序设计部分 2015年 1.c语言程序设计部分 1.从一组数据中选择最大的和最小的输出。 void print_maxandmin(double a[],int length) //在一组数据中选择最大的或者最小的输出…

EM算法学习

1.EM算法的介绍 可以发现&#xff1a;计算出θA和θB的值的前提是知道A、B币种的抛掷情况。 所以我们需要使用EM算法&#xff1a;求出每轮选择硬币种类的概率 2.EM算法执行过程&#xff1a; 第一步&#xff1a;首先初始化设置一组PA和PB证明的值。然后通过最大似然估计得到每…

2024软考网络工程师笔记 - 第3章.广域通信网

文章目录 广域网物理层特性1️⃣公共交换电话网 PSTN2️⃣本地回路3️⃣机械特性4️⃣电气特性 &#x1f551;流量与差错控制1️⃣流量与差错控制2️⃣流量控制——亭等协议3️⃣流控机制——滑动窗口协议4️⃣差错控制5️⃣差错控制——停等协议6️⃣差错控制——选择重发ARQ协…

MySQL【知识改变命运】08

数据库约束 1&#xff1a;约束的几个类型2&#xff1a;NOT NULL非空约束3&#xff1a;UNIQUE 唯⼀约束4&#xff1a;PRIMARY KEY 主键约束4.1:回顾 5&#xff1a;FOREIGN KEY 外键约束5.1&#xff1a;创建班级表(主表)&#xff0c;并初始化数据5.2&#xff1a;重构学⽣表(从表)…

【Golang】Go语言http编程底层逻辑实现原理与实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Docker 拉取镜像时配置可用镜像源(包含国内可用镜像源)

文章目录 写在前面一、Docker 官方源二、更换Docker 国内可用镜像源 &#xff08;推荐使用&#xff09;参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04&#xff0c;docker-27.3.1 一、Docker 官方源 打开 /etc/docker/daemon.json文件&#xff1a; sudo gedit …

STM32F4- SD卡和 FATFS文件系统

单片机系统常需大容量存储设备&#xff0c;如U盘、FLASH芯片、SD卡等。 其中&#xff0c;SD卡因容量大、支持SPI/SDIO驱动、尺寸多样&#xff0c;成为单片机系统的优选。 STM32F4开发板自带SD卡接口&#xff0c;使用SDIO接口驱动&#xff0c;支持高速数据传输。 1.1 SDIO 简介…

JavaWeb学习(1)

目录 一、什么是JavaWeb 二、静态web和动态web 三、Web服务器&#xff08;Tomcat&#xff09; 四、Http 4.1 是什么 4.2 两个时代 4.3 Http请求 4.4 Http响应 五、Maven 六、Servlet 七、HttpServletResponse 7.1 常见应用 7.1.1 向浏览器输出消息 7.1.2 下载文件 …