性能测试和调优思路
2024-01-17 08:46:07 5 举报
AI智能生成
性能测试梳理
作者其他创作
大纲/内容
技术架构、部署
了解被测试系统的技术架构和组件,包括系统的硬件、网络、操作系统、数据库、中间件、应用程序框架等,以便更好地理解系统的运行机制和测试需求。
中间件是指位于操作系统和应用程序之间的软件组件,用于管理和协调应用程序之间的通信和交互
Web服务器:用于处理HTTP请求和响应,主要用于Web应用程序的部署和访问,如Apache、Nginx、IIS等。
应用服务器:用于托管应用程序并提供服务,主要用于支持分布式应用程序的部署和管理,如Tomcat、WebSphere、WebLogic等。
数据库中间件:用于优化和管理数据库访问,主要用于提高数据库性能和可用性,如MySQL Proxy、Oracle Data Integrator等。
消息中间件:用于支持应用程序之间的异步通信,主要用于解耦应用程序之间的依赖关系,如ActiveMQ、RabbitMQ、Kafka等。
缓存中间件:用于提供高速缓存服务,主要用于提高应用程序的性能和可伸缩性,如Redis、Memcached等。
RPC框架:用于支持远程过程调用,主要用于实现分布式应用程序之间的通信,如gRPC、Dubbo等。
API网关:用于管理和路由API请求,主要用于支持微服务架构和API管理,如Kong、API Gateway等。
日志收集和分析:用于收集和分析应用程序日志,主要用于监控应用程序的运行状态和排查问题,如ELK Stack、Logstash等。
redis 缓存原理
内存存储:Redis 将数据存储在内存中,这使得它能够快速读取和写入数据。相比于传统的磁盘存储系统,内存存储使得 Redis 具备了出色的性能。
键值存储:Redis 是一个键值存储系统,每个数据项都由一个唯一的键和对应的值组成。通过键来访问和操作数据,这使得数据的读写效率非常高。
缓存加载策略:当客户端请求数据时,Redis 首先检查该数据是否已经存在于缓存中。如果存在,则将缓存中的数据返回给客户端。如果不存在,则需要从其他数据源(如数据库)中加载数据,并将数据存储到缓存中,以供将来使用。
缓存淘汰策略:由于内存资源有限,当缓存中的数据达到一定大小时,Redis 需要采取一些策略来决定哪些数据应该被淘汰,以腾出空间存储新的数据。常见的缓存淘汰策略有最近最少使用(LRU)、最少使用(LFU)和随机淘汰等。
缓存更新策略:当数据源发生变化(如数据库中的数据被修改或删除)时,缓存中的对应数据也需要被更新或删除,以保证数据的一致性。常见的缓存更新策略有主动更新和被动更新。主动更新是指在数据源更新后,Redis 自动更新缓存中的数据。被动更新是指在下一次访问缓存数据时,发现数据已过期或不存在时,才从数据源中重新加载数据。
缓存失效时间:为了避免缓存中的数据过期,Redis 提供了设置缓存失效时间的功能。当数据的失效时间到达时,缓存会自动将该数据标记为无效,下一次访问时会重新加载数据。
缓存命中率:缓存命中率是衡量缓存效果的重要指标,它表示从缓存中获取数据的次数与总的数据访问次数之间的比例。高缓存命中率意味着更多的数据被成功地从缓存中获取,减轻了对数据源的访问压力,提高了系统的性能。
消息队列的原理
消息生产者:负责创建并发送消息到消息队列中。
消息队列:负责存储消息,保证消息的可靠传递。
消息消费者:负责从消息队列中获取消息并进行处理。
消费者可以通过订阅特定的主题(topic),从而只接收到自己关心的消息
高并发分布式系统性能测试经验
性能压测
核心三指标
单机服务吞吐量(TPS QPS)
服务响应时间
服务响应错误率
资源指标
资源占用率
CPU
内存
磁盘空间
网络
吞吐量持续波动,需要找原因,进行性能调优
全链路压测
链路分析
隔离管控
链路验证
压测管理
压测执行(压力机)
链路监控
压测报告
链路优化(性能调优)
数据隔离
影子表 影子库
数据流量打标 header中做标记
影子topic(消息队列)
影子消费者
压力测试配置
压测指标
发压配置
阶梯式压测
流量回放工具GoReplay
可以捕获现有用户流量,在测试环境进行回放,可以进行负载测试或生产问题重现和分析
原理
抓包:GoReplay使用libpcap库进行数据包抓取,可以在Linux、Windows和MacOS等操作系统上运行。它可以通过网络接口、PCAP文件或stdin等方式抓取数据包,并进行过滤、分流和处理。
存储:GoReplay使用内存映射文件(mmap)方式将抓取的数据包存储到磁盘上,以便后续的回放和分析。这种方式可以避免数据拷贝和内存占用等问题,提高了性能和可靠性。
mmap指的是内存映射文件(Memory-mapped file)技术,是一种特殊的I/O操作方式。它允许一个进程将一个文件或其他对象映射到它的地址空间中,从而可以像访问内存一样访问这个文件或对象
回放:GoReplay使用多线程方式对存储的数据包进行回放,模拟客户端的请求和服务器的响应。它可以根据需要进行过滤、修改和重定向等操作,以便模拟各种场景和测试需求。
基础能力
监听模式 可以监听端口流量(默认http 流量 grpc流量需要安装插件)
转发模式 转发流量到指定环境
重放模式 把流量存入文件 然后进行重放
性能模式 重放模式的基础上 可以调整流量回放的速度 从而达到性能压测的效果
调优思路
数据缓存性能调优(redis)
注意事项
缓存预热
缓存预热是指在系统启动或高峰期之前,提前将热点数据加载到缓存中。
通过预热,可以避免系统启动时大量请求导致缓存穿透和缓存雪崩问题,从而提高系统的性能和稳定性。
缓存雪崩
缓存雪崩是指在缓存中大量的数据同时过期或者缓存节点意外宕机,导致大量请求落到数据库上,从而导致数据库负载过高,甚至崩溃的现象
缓存雪崩是缓存系统中的一种灾难性问题,需要通过多节点部署、缓存失效时间随机化、热点数据异地多副本等方式来避免
缓存击穿
缓存击穿是指某一个缓存失效后,恰好在失效的时间点有大量的请求访问这个缓存,导致大量请求落到数据库上,从而导致数据库负载过高,甚至崩溃的现象
为了避免缓存击穿,可以使用互斥锁、布隆过滤器等方法来解决。
缓存之前再加一层布隆过滤器,在查询的时候先去布隆过滤器查询 key 是否存在,如果不存在就直接返回
性能测试中以上场景 会导致系统崩溃
redis性能测试
不同硬件设备,会导致redis性能有很大区别
最常用方式 redis -banchmark -q -n 100000
该命令会在Redis中运行基准测试,并输出测试结果,例如每秒钟可以处理的请求数量、平均响应时间等。这些测试结果可以帮助用户了解Redis的性能瓶颈和优化方向,从而进行系统优化和性能提升。
测试指定操作(场景)的性能
设置10万随机key 连续set 100万次 贴合实际使用
参数说明
redis自己的性能 不代表自己的产品去操作redis也能达到此性能
高并发系统架构
读多 写少 用缓存技术
分布式架构:将系统分解为多个独立的组件,每个组件运行在不同的服务器上,以提高系统的性能和可扩展性。可以使用消息队列、负载均衡、分布式缓存等技术来实现分布式架构。
缓存优化:使用缓存技术来加速系统的响应速度,减轻数据库和应用服务器的负载。可以使用分布式缓存(redis)、本地缓存、CDN(通过将静态资源(例如图片、视频、脚本等)缓存到全球各地的节点上,以提高用户的访问速度和体验)等技术来实现缓存优化。
子主题
异步处理:使用异步处理技术来提高系统的并发处理能力,例如使用消息队列、多线程、协程等技术来实现异步处理。
数据库优化:对数据库进行优化,以提高数据库的性能和可用性。可以使用数据库分库分表、索引优化、读写分离(读写分离是指将数据库的读操作和写操作分离到不同的服务器上,以提高数据库的并发处理能力和可用性)等技术来实现数据库优化。
负载均衡:使用负载均衡技术来分发用户请求,以提高系统的性能和可用性。可以使用硬件负载均衡、软件负载均衡、DNS负载均衡等技术来实现负载均衡。
安全防护:对系统进行安全防护,以防止恶意攻击和数据泄露。可以使用防火墙、反向代理、SSL证书等技术来实现安全防护。
监控和日志:对系统进行监控和日志记录,以及时发现和解决系统故障和异常。可以使用监控工具、日志分析工具、异常监控工具等技术来实现监控和日志记录。
Prometheus 部署到节点上,做性能监控,一般配合数据可视化工具(如Grafana、Kibana等)使用
ELK 日志查询,分布式服务会统一上报到elk上
APM
APM是一种应用程序性能管理技术,常见的APM工具包括New Relic、AppDynamics、Dynatrace等。这些工具可以监控应用程序的性能指标,例如响应时间、吞吐量、错误率等,并提供分析和报告功能
Trace技术或工具
Trace技术或工具可以对应用程序的请求进行跟踪和分析,以了解请求在系统中的流转情况、耗时情况等。常见的Trace技术或工具包括Zipkin、Jaeger等
skywalking
。Skywalking可以提供应用程序的性能指标、调用链跟踪、异常监控、服务依赖分析等功能,帮助用户深入了解应用程序的性能瓶颈和问题,从而进行精细化优化
redis性能调优
Redis内存溢出:由于Redis是内存数据库,如果内存占用超过最大内存限制,就会导致内存溢出,进而导致Redis崩溃。需要通过监控Redis的内存占用和调整Redis最大内存大小等方法来解决。
最大内存限制(maxmemory)
Redis连接数过多:如果Redis的连接数过多,就会导致Redis的性能下降,甚至影响应用程序的稳定性。需要通过调整Redis参数和优化应用程序代码等方法来解决。
连接数限制(maxclients)
并发执行命令数(maxmemory-samples
Redis命令执行时间过长:如果Redis的命令执行时间过长,就会导致Redis的性能下降,影响应用程序的响应时间。需要通过优化Redis命令和数据结构等方法来解决。
慢查询阈值(slowlog-log-slower-than
JVM调优
内存泄漏:JVM中的内存泄漏是一个常见的问题,会导致内存占用不断增加,最终导致JVM崩溃。需要通过分析GC日志和代码,找出内存泄漏的原因,并进行修复。
GC过长:长时间的GC会导致应用程序的性能下降,甚至影响应用程序的稳定性。需要通过调整JVM参数和分析GC日志,优化GC的效率。
线程饥饿:服务端应用程序中,线程饥饿是一个常见的问题,会导致线程池中的线程无法得到充分利用,从而影响应用程序的性能。需要通过调整线程池大小和分析代码,优化线程的使用。
线程饥饿(Thread Starvation)是指线程无法获得足够的资源或优先级低于其他线程,从而无法得到充分的调度和执行,导致线程一直得不到处理的机会,从而影响应用程序的性能和稳定性
信号量(Semaphore):信号量是一种计数器,用于控制对共享资源的访问。通过设置信号量的计数器和等待队列,可以实现对共享资源的互斥访问和防止线程饥饿。
互斥锁(Mutex):互斥锁是一种基本的同步机制,用于保护共享资源。通过设置互斥锁,只允许一个线程访问共享资源,从而避免线程饥饿的问题。
读写锁(ReadWrite Lock):读写锁是一种高级的同步机制,可以同时支持多个线程对共享资源的读访问,但只支持一个线程的写访问。通过合理使用读写锁,可以避免线程饥饿的问题。
条件变量(Condition Variable):条件变量是一种用于线程间通信的同步机制,可以实现线程的阻塞和唤醒。通过合理使用条件变量,可以避免线程饥饿的问题。
无锁算法(Lock-Free Algorithm):无锁算法是一种基于CAS(Compare-and-Swap)原子操作的同步机制,可以避免使用锁带来的线程饥饿和死锁等问题。但是无锁算法的实现难度较大,需要谨慎使用。
合理设置线程池大小,确保线程足够
合理设置线程优先级,确保高优先级的线程任务能够被优先执行
服务端代码性能调优
频繁的数据读写:如果业务代码中频繁地读写数据库、文件等数据源,就会导致性能下降。需要通过缓存技术、异步IO等方法,减少数据读写,提高性能。
循环嵌套和递归调用:如果业务代码中存在循环嵌套和递归调用,就会导致性能下降。需要通过代码优化和重构,减少循环嵌套和递归调用,提高性能。
不必要的计算和操作:如果业务代码中存在不必要的计算和操作,就会导致性能下降。需要通过优化和重构,减少不必要的计算和操作,提高性能。
并发控制:在多线程和多进程程序中,需要进行并发控制,以避免数据竞争和死锁等问题。可以使用锁、信号量、条件变量等方法进行并发控制,从而提高性能和稳定性。
数据结构选择:不同的数据结构具有不同的性能特点,需要根据实际情况和应用程序特点,选择合适的数据结构。例如,对于需要快速查找和插入的数据,可以使用哈希表;对于需要按顺序遍历的数据,可以使用链表等。
内存管理:在服务端应用程序中,需要进行内存管理,避免内存泄漏和内存碎片等问题。可以使用内存池等方法进行内存管理,从而提高性能和稳定性。
网络通信:在服务端应用程序中,网络通信往往是性能瓶颈之一。可以使用异步IO、多路复用等方法,提高网络通信的效率和性能。
数据库设计:在服务端应用程序中,数据库设计往往是性能影响因素之一。可以通过合理的数据库设计、优化查询语句等方法,提高数据库的性能和稳定性。
mysql性能调优
硬件优化:可以通过升级硬件、使用SSD硬盘等方法,优化MySQL的硬件环境,从而提高性能。
查询优化:可以通过优化查询语句、使用索引、避免JOIN操作等方法,优化MySQL的查询性能,从而提高性能。
联表查询 SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;
锁优化:可以通过采用更高效的锁机制,如行级锁、读写锁等,避免锁等待,从而提高MySQL的并发性能。
索引优化:可以通过设计合理的索引、使用覆盖索引等方法,优化MySQL的索引性能,从而提高性能。
选择适当的列:需要选择最常用于查询的列,通常是出现在 WHERE 子句或 JOIN 子句中的列,而不是那些很少使用的列。
索引列的顺序:通常将选择性最高的列放在索引列的前面,选择性可以用唯一性来表示,即该列的值越唯一,选择性就越高。这样可以减少索引的扫描范围,提高查询性能。
多列索引和单列索引:多列索引可以包含多个列,可以提高查询的效率,但也会增加索引的存储和维护成本。需要根据实际情况和查询特点,选择使用多列索引还是单列索引。
覆盖索引:覆盖索引是指索引包含所有需要查询的数据,不必再去访问数据表,可以大大提高查询性能。需要选择适当的列和顺序,并使用包含需要查询的所有数据的索引。
索引的长度:索引的长度可以影响索引的存储和维护成本,过长的索引会增加这些成本。需要根据实际情况和索引列的数据类型、长度等因素,选择适当的索引长度。
避免过度索引:过度索引会增加索引的存储和维护成本,并且可能会影响更新和插入操作的性能。需要根据实际情况和查询特点,选择适当的索引,避免过度索引。
nginx集群调优思路
负载均衡不均:如果负载均衡不均,可能会导致一些Nginx节点的负载过高,而其他节点的负载过低。需要调整负载均衡算法、权重等参数,保证负载均衡的均衡性。
网络瓶颈:如果网络带宽不足,可能会导致Nginx节点之间的通信延迟增加,从而影响集群的性能。需要优化网络架构,增加带宽、降低延迟等。
单点故障:如果Nginx集群中存在单点故障,可能会导致整个集群的性能下降甚至瘫痪。需要采用高可用架构、备份节点等方式,避免单点故障。
配置错误:如果Nginx集群的配置存在错误,可能会导致集群性能下降。需要根据实际情况和应用程序特点,选择合适的配置,并进行测试和优化。
缓存大小
连接数
超时时间
测试数据应该具有代表性,包括请求量、请求类型、请求参数等方面。需要根据实际情况和应用程序特点,选择合适的测试数据,并进行充分测试
消息队列性能调优
集群化部署:将消息队列集群化部署,增加集群的可扩展性和可靠性,避免单点故障。
数据持久化:采用持久化存储方式,将消息存储到磁盘上,避免消息丢失和重复,并支持消息的恢复和重试。
消息分片:将消息分片存储,避免单个消息队列的负载过高,增加系统的并发能力和吞吐量。
负载均衡:采用负载均衡算法,将消息分配到不同的队列或者节点上,避免消息堆积和资源瓶颈。
异步处理:采用异步处理方式,将消息的生产和消费分离开来,避免消息处理速度的瓶颈。
确认消息堆积的原因:首先需要确认消息堆积的原因,可能是消费者处理速度慢,也可能是生产者过度生产消息等等。
增加消费者数量:如果消息堆积的原因是消费者处理速度慢,可以增加消费者数量,将消息分配给更多的消费者,从而提高消费速度。
调整消费者的处理能力:如果消费者数量已经足够,但是消费者的处理能力不足,可以尝试调整消费者的处理能力,如优化代码、增加机器配置等。
减少生产者的生产速度:如果消息堆积的原因是生产者过度生产消息,可以尝试减少生产者的生产速度,如减少消息生产频率、增加消息批量大小等。
增加消息队列的容量:如果消息堆积的原因是消息队列的容量不足,可以尝试增加消息队列的容量,从而减少消息堆积的可能性。
消息重试机制:如果消息消费失败,可以尝试采用消息重试机制,将消息重新发送给消费者进行处理,避免消息丢失和堆积。
监控和告警:在消息堆积的情况下,需要及时监控和告警,发现问题并及时处理,避免消息堆积导致系统的崩溃。
监控和调优:采用监控系统,实时监控消息队列的状态、性能等指标,及时发现和解决性能问题,进行调优。
cpu 性能调优
代码优化:对服务的代码进行性能分析和优化,如使用高效的算法、采用异步编程等方式来提高代码的执行效率,减少CPU占用率
硬件升级,采用容器技术,给分布式服务合理分配CPU资源
内存性能调优
优化内存回收机制,垃圾回收
检查代码中是否存在导致内存泄露的代码
升级硬件,扩充内存配置
网络带宽性能调优
优化网络协议:网络协议可能会导致网络占用率过高,可以优化网络协议,如使用压缩算法、使用二进制协议等方式来减少网络占用率。
缓存网络请求结果:如果服务需要频繁进行网络通信,可以缓存网络请求结果,减少不必要的网络请求,从而减少网络占用率。
增加网络带宽:如果服务的网络占用率过高,可能需要考虑增加网络带宽来提高网络的传输速度。
负载均衡:如果服务的负载过重,可以通过增加服务实例数量、负载均衡等方式来分摊服务的负载,从而减少网络占用率。
采用异步编程:采用异步编程可以减少网络请求的阻塞时间,从而提高网络吞吐量,减少网络占用率。
硬件升级:如果服务的网络占用率过高,可能需要考虑对硬件进行升级,如增加网络接口卡数量、增加网络带宽等方式来提高服务器的性能。
CDN--合理存储静态文件,降低单一网路的网络压力
io性能调优
采用异步I/O:采用异步I/O可以减少I/O操作的阻塞时间,从而提高I/O吞吐量,减少I/O占用率。
缓存I/O操作结果:如果服务需要频繁进行I/O操作,可以缓存I/O操作结果,减少不必要的I/O操作,从而减少I/O占用率。
优化磁盘访问:如果服务需要频繁访问磁盘,可以优化磁盘访问效率,如增加磁盘缓存、使用SSD硬盘等方式来提高磁盘访问速度,从而减少I/O占用率。
代码优化:对服务的代码进行性能分析和优化,如使用高效的算法、采用异步编程等方式来减少I/O占用率。
负载均衡:如果服务的负载过重,可以通过增加服务实例数量、负载均衡等方式来分摊服务的负载,从而减少I/O占用率。
硬件升级:如果服务的I/O占用率过高,可能需要考虑对硬件进行升级,如增加磁盘数量、增加磁盘缓存、使用高速磁盘等方式来提高服务器的性能。
常见问题
缓存热key
同时访问同一条缓存数据,导致请求都落到同一个数据分片,造成分片负载过高
超时雪崩
下游服务超时后,导致上游服务不断重试,瞬间多几倍的请求会压垮服务
日志写入过多
日志分级不合理,写入内容过多也会导致性能问题,比如现网打开了debug log
sql语句慢查询
联表查询未做优化,没有合理的索引等
索引是关系数据库中对某⼀列或多个列的值进⾏预排序的数据结构。通过使⽤索引,可以让数据库系统不必扫描整个表,
⽽是直接定位到符合条件的记录,这样就⼤⼤加快了查询速度
⽽是直接定位到符合条件的记录,这样就⼤⼤加快了查询速度
合理的分库分表,表越小查询越快
课堂性能问题实例
大促玩法-加入团队接口压测报错:
bug原因:风控事务加团, 并发执行事务插入和更新同一条记录的操作, 造成死锁
解决方案:尝试插入团信息不需要与更新团人数在一个事务内, 两者可独立开, 避免锁升级造成的死锁
bug原因:风控事务加团, 并发执行事务插入和更新同一条记录的操作, 造成死锁
解决方案:尝试插入团信息不需要与更新团人数在一个事务内, 两者可独立开, 避免锁升级造成的死锁
go_xxx服务存在并发性问题,调用SecCheck接口异常:超时和拒绝连接:
bug原因:RPC调用超时设置太短,导致tcp链接异常
解决方案:timeout从100ms调整到500ms,解决问题
bug原因:RPC调用超时设置太短,导致tcp链接异常
解决方案:timeout从100ms调整到500ms,解决问题
播放上报接口每秒钟1000QPS生产消息,KAFKA消息堆积:
bug原因:kafka消费端需要些更新db,消费慢,导致kafka服务端消息堆积
解决方案:使用kafka消费协程池解决,协程池数量Apollo可配置
bug原因:kafka消费端需要些更新db,消费慢,导致kafka服务端消息堆积
解决方案:使用kafka消费协程池解决,协程池数量Apollo可配置
协程池,简单来说就是由多个协程实现的池化技术
连接池是指预先分配一批连接,并将它们放入一个缓冲区中循环使用,形成池化效应
“内存池”和“进程池”都带有“池”字?其实,这两种技术都属于“池化技术”。
它通常是由系统预先分配一批资源并循环利用,达到资源“池化”的目的,以解决高并发下,
由于大量分配资源,导致性能开销过大的问题
它通常是由系统预先分配一批资源并循环利用,达到资源“池化”的目的,以解决高并发下,
由于大量分配资源,导致性能开销过大的问题
性能测试类型
基准测试
负载测试
压力测试
稳定性测试
可扩展测试
高可用测试
容器化技术
Docker是一种容器化技术,它可以将应用程序和它的依赖项打包成一个可移植的容器,以便在不同的环境中运行
Kubernetes(通常简称为K8s)是一个开源的容器编排平台,可以用于自动化部署、扩展和管理容器化应用程序
特点:Kubernetes提供了高可用性、弹性、自动化、可扩展和可移植等特点。Kubernetes可以自动处理容器的部署、扩展、负载均衡、容错处理、自动化升级和滚动回滚等操作,可以减少运维成本和提高应用程序的可靠性。
组件:Kubernetes由多个组件组成,包括Master节点和Worker节点。Master节点包括API Server、Scheduler、Controller Manager和etcd等组件,用于管理和控制集群的状态和配置。Worker节点包括kubelet、kube-proxy和容器运行时等组件,用于运行和管理容器。
资源对象:Kubernetes将应用程序抽象为一组资源对象,包括Pod、Service、Deployment、StatefulSet、ConfigMap、Secret和Volume等。通过这些资源对象,可以定义应用程序的部署、扩展、负载均衡、容错处理和自动化升级等操作。
Pod:Pod是Kubernetes中最小的可部署对象,它是一个或多个容器的集合,这些容器都共享同一个网络命名空间和存储卷。Pod提供了一个抽象层,用于封装应用程序的部署、运行和管理。
Service:Service是一组逻辑上相关的Pod的访问方式,它提供了稳定的IP地址和端口号,以便其他应用程序可以访问这组Pod。Service还提供了负载均衡功能,可以将请求分发到多个Pod中。
Deployment:Deployment是一种控制器,用于管理Pod的多个副本的创建、更新和删除。Deployment可以根据应用程序的期望状态,自动调整Pod的副本数,并通过滚动更新和回滚策略实现无宕机更新。
StatefulSet:StatefulSet是一种控制器,用于管理有状态应用程序的多个Pod的创建、更新和删除。StatefulSet为每个Pod分配一个唯一的标识符和稳定的网络标识符,以便在Pod重新启动时保持持久化数据的一致性。
ConfigMap:ConfigMap是一种用于存储应用程序配置数据的资源对象,它可以存储键值对、属性文件或者JSON格式的数据。ConfigMap可以通过卷或者环境变量的方式被挂载到Pod中,以便应用程序可以读取这些配置数据。
Secret:Secret是一种用于存储敏感数据(例如密码、证书等)的资源对象,它可以存储base64编码的数据或者加密的数据。Secret可以通过卷或者环境变量的方式被挂载到Pod中,以便应用程序可以读取这些敏感数据
扩展和自定义:Kubernetes提供了丰富的扩展和自定义功能,包括自定义资源对象、自定义控制器、自定义插件和自定义API等。可以通过这些扩展和自定义功能,满足不同的应用程序需求和业务场景。
0 条评论
下一页