Kubernetes控制平面组件:etcd常用配置参数

云原生学习路线导航页(持续更新中)

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes架构原则和对象设计(二)
    • Kubernetes架构原则和对象设计(三)
    • Kubernetes控制平面组件:etcd(一)
    • Kubernetes控制平面组件:etcd(二)
    • Kubernetes控制平面组件:etcd高可用集群搭建
    • kubectl 和 kubeconfig 基本原理
    • kubeadm 升级 k8s集群 1.17到1.20
    • Kubernetes常见问题解答
    • 查看云机器的一些常用配置

本文主要介绍 Etcd 的常用配置,包括:成员参数、集群参数、安全参数、灾备参数、容量管理参数 和 碎片整理参数,并对核心参数进行讲解

1.参数分类

1.1.成员相关参数

在这里插入图片描述

1.2.集群相关参数

在这里插入图片描述

1.3.安全相关参数

在这里插入图片描述

1.4.灾备相关参数

在这里插入图片描述

1.5.容量管理相关参数

1.5.1.容量参数详情

  • 一些规范
    在这里插入图片描述
  • 对应参数
    # 限制单个请求的最大字节数。单个键值对的大小超过 1.5MB 可能会影响 etcd 的性能。
    --max-request-bytes 1572864  # 1.5MB(1.5 * 1024 * 1024)# 设置后端存储的最大容量。可能不足以满足生产环境需求
    --quota-backend-bytes 2147483648  # 2GB(2 * 1024 * 1024 * 1024)
    # 可以调整,但是建议不要超过8GB,etcd 的存储容量超过 8GB 可能会导致性能下降
    --quota-backend-bytes 8589934592  # 8GB(8 * 1024 * 1024 * 1024)
    

1.5.2.Etcd容量超过8GB会发生什么

  • 内存占用过大
    • etcd 的存储引擎(BoltDB)是基于内存映射文件的,数据量越大,内存占用越高。
    • 内存映射原理:
      • 使用 Linux mmap 系统调用
      • 数据库文件完全映射到内存(8GB文件 => 至少占用8GB内存)
      • 实际内存占用可能更高(考虑序列化开销和KV索引)
  • KV索引内存开销
    • 每个键值对会产生额外索引数据
    • 索引内存消耗 ≈ (总键数量 × 300字节)
  • GC压力
    // Go语言GC特点示例
    type tempObject struct {key   []bytevalue []byte  // 频繁创建导致GC压力
    }
    
    • 大量临时对象影响垃圾回收效率
    • GC停顿可能影响读写性能

1.5.3.Etcd磁盘空间耗尽实验

1.5.3.1.模拟写满过程
# 启动带容量限制的etcd
docker run -d \--name my-etcd \-p 2579:2379 \-p 2580:2380 \quay.io/coreos/etcd:v3.5.0 \/usr/local/bin/etcd \--name my-etcd \--data-dir /etcd-data \--listen-client-urls http://0.0.0.0:2379 \--advertise-client-urls http://0.0.0.0:2379 \--listen-peer-urls http://0.0.0.0:2380 \--initial-advertise-peer-urls http://0.0.0.0:2380 \--initial-cluster my-etcd=http://0.0.0.0:2380 \--quota-backend-bytes=16777216# 进入容器
docker exec -it 9fe6cb8a00e7 /bin/sh# 持续写入测试(使用随机值)
while true; dodd if=/dev/urandom bs=1024 count=1024 | base64 | etcdctl put key
done# 成功写了9条后就报错:
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0262849 s, 39.9 MB/s
OK
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.0271854 s, 38.6 MB/s
{"level":"warn","ts":"2025-02-16T04:13:46.947Z","logger":"etcd-client","caller":"v3/retry_interceptor.go:62","msg":"retrying of unary invoker failed","target":"etcd-endpoints://0xc0000d2a80/#initially=[127.0.0.1:2379]","attempt":0,"error":"rpc error: code = ResourceExhausted desc = etcdserver: mvcc: database space exceeded"}
Error: etcdserver: mvcc: database space exceeded
1.5.3.2.故障现象
  • 写入报错
    • Error: rpc error: code = ResourceExhausted desc = etcdserver: mvcc: database space exceeded
  • 查看告警
    # etcdctl alarm list
    memberID:128088275939295631 alarm:NOSPACE
    
  • 查看集群状态
    # etcdctl endpoint status -w table
    +----------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
    |    ENDPOINT    |       ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX |             ERRORS             |
    +----------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
    | 127.0.0.1:2379 | 1c70f9bbb41018f |   3.5.0 |   20 MB |      true |      false |         2 |        123 |                123 |    memberID:128088275939295631 |
    |                |                 |         |         |           |            |           |            |                    |                 alarm:NOSPACE  |
    +----------------+-----------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------------------------------+
    
  • 在ERROR中 输出显示 NO SPACE 告警
  • 集群自动切换为只读模式
1.5.3.3.故障恢复方案
  • 碎片整理 (Defrag)
    # 执行碎片整理(需逐个节点操作)
    etcdctl defrag --endpoints=localhost:2379# 清除告警
    etcdctl alarm disarm
    
  • 版本压缩 (Compact)
    # 获取当前版本号
    rev=$(etcdctl endpoint status -w json | grep -o '"revision":[0-9]*' | awk -F: '{print $2}' | head -1)# 压缩历史版本
    etcdctl compact $rev# 执行碎片整理(压缩后必需)
    etcdctl defrag
    
1.5.3.4.启动自动压缩配置
# 启用自动压缩(推荐配置)
--auto-compaction-retention=1h    # 每小时压缩历史版本
--auto-compaction-mode=revision   # 按版本号压缩

1.5.4.生产环境容量规划参考

在这里插入图片描述

1.6.碎片整理

在这里插入图片描述

2.Etcd 常用配置详解

  • 我们以etcd的真实启动命令参数为例,介绍每个参数的含义

    [root@VM-226-235-tencentos ~]# ps -ef | grep etcd
    root      5062  5041  0 Feb10 ?        00:26:48 /usr/local/bin/etcd --name s1 --data-dir /etcd-data --listen-client-urls http://0.0.0.0:2479 --advertise-client-urls http://0.0.0.0:2479 --listen-peer-urls http://0.0.0.0:2480 --initial-advertise-peer-urls http://0.0.0.0:2480 --initial-cluster s1=http://0.0.0.0:2480 --initial-cluster-token tkn --initial-cluster-state new --log-level info --logger zap --log-outputs stderr# 格式化一下
    /usr/local/bin/etcd \--name s1 \--data-dir /etcd-data \--listen-client-urls http://0.0.0.0:2479 \--advertise-client-urls http://0.0.0.0:2479 \--listen-peer-urls http://0.0.0.0:2480 \--initial-advertise-peer-urls http://0.0.0.0:2480 \--initial-cluster s1=http://0.0.0.0:2480 \--initial-cluster-token tkn \--initial-cluster-state new \--log-level info \--logger zap \--log-outputs stderr
    
  • 核心参数解析

    参数类型作用说明典型值示例注意事项
    --name基础节点在集群中的唯一标识名称s11.集群内必须唯一,默认名称为 default。
    2.名称会用于日志标识和与其他节点的通信
    --data-dir存储数据存储目录(WAL文件、快照等)/etcd-data1.需要写权限,建议使用 SSD。
    2.不指定时,默认在etcd的安装目录下基于 --name 参数生成一个目录(如 default.etcd)。
    3.生产环境中建议使用绝对路径(如 /var/lib/etcd)
    --listen-client-urls网络客户端 API 的监听地址列表http://0.0.0.0:24791.默认监听本地的 2379 端口(客户端通过此端口读写数据)。
    2.开放远程访问需配置为 0.0.0.0:2379 并启用 TLS 加密。
    3.0.0.0.0 表示监听所有 IP,生产环境建议绑定具体 IP
    --advertise-client-urls网络客户端访问集群时使用的地址(需能被外部访问)http://0.0.0.0:2479通常与 listen-client-urls 相同,云环境需配置为公网 IP
    --listen-peer-urls网络节点间通信(Raft协议)的监听地址列表http://0.0.0.0:24801.必须与 initial-advertise-peer-urls 一致。
    2.默认监听本地的 2380 端口(用于节点选举、数据同步)
    --initial-advertise-peer-urls网络节点向集群声明的通信地址(需能被其他节点访问)http://0.0.0.0:2480云环境需配置为内网 IP
    --initial-cluster集群初始集群成员列表(格式:name1=url1,name2=url2s1=http://0.0.0.0:2480所有节点启动时必须一致,新增节点时需动态调整
    --initial-cluster-token集群集群唯一标识令牌,防止不同集群意外合并tkn同一集群所有节点必须一致
    --initial-cluster-state集群集群初始状态:
    new-新建集群
    existing-加入已有集群
    new首次启动设为 new,后续扩容节点设为 existing
    --log-level日志日志级别:debug, info, warn, errorinfo调试时可用 debug,生产环境建议 info
    --logger日志日志库实现:zap(结构化日志)或 capnslog(传统日志)zap推荐使用 zap,兼容性更好
    --log-outputs日志日志输出目标:
    stderr(标准错误)
    /path/to/file(文件)
    stderr生产环境建议输出到文件(如 --log-outputs /var/log/etcd.log

3.安全增强示例

  • 安装etcd,默认是不开启安全机制的,需要指定参数来开启
    --listen-client-urls https://192.168.1.100:2379 \
    --advertise-client-urls https://node1.example.com:2379 \
    --cert-file=/path/to/server.crt \
    --key-file=/path/to/server.key \
    --client-cert-auth
    
  • 启用 TLS 加密通信
  • 绑定具体 IP 而非 0.0.0.0

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

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

相关文章

Docker 入门与实战:从安装到容器管理的完整指南

🚀 Docker 入门与实战:从安装到容器管理的完整指南 🌟 📖 简介 在现代软件开发中,容器化技术已经成为不可或缺的一部分。而 Docker 作为容器化领域的领头羊,以其轻量级、高效和跨平台的特性,深…

Android 14输入系统架构分析:图解源码从驱动层到应用层的完整传递链路

一、资料快车 1、深入了解Android输入系统:https://blog.csdn.net/innost/article/details/47660387 2、书籍 - Android系统源代码情景分析 二、Perface 1、参考: 2、系统程序分析方法 1)加入log,并跟着log一步步分析 -logc…

HarmonyOS-ArkTS基础快速入门

目录 ArkTS 快速入门 ArkTS 快速入门 如图,index.etc里面的内容(图中框住的大长方形区域)会渲染到预览区中,而console.log(xx,xxx)用于内容的打印,需要在日志中查看打印的内容

FRRouting配置与OSPF介绍,配置,命令,bfd算法:

文章目录 1、frrouting的配置:2、ospf2.1、检测和维护邻居关系2.2、ospfDR和BDR2.3、odpf邻居表2.4、ospf常用命令2.5、bfd配置 1、frrouting的配置: sudo service zebra start sudo service ospfd start telnet localhost 2604 en configure termina…

2-安装YIUI

YIUI框架:GitHub - LiShengYang-yiyi/YIUI: Unity3D UGUI Framework, 基于UI数据事件绑定为核心 数据驱动的UGUI框架, ETUI框架, ET框架官方推荐UI框架 ET框架:egametang/ET: Unity3D Client And C# Server Framework (github.com) 1 - 安装YIUI框架&a…

001-监控你的文件-FSWatch-C++开源库108杰

fswatch 原理与应用简介fswatch 安装fswatch 实践应用具体应用场景与细节补充 1. 简介 有些知识,你知道了不算厉害,但你要是不知道,就容易出乱。 很多时候,程序需要及时获取磁盘上某个文件对象(文件夹、文件&#xff0…

机器学习--逻辑回归

机器学习–逻辑回归 一、认知革命:从线性回归到逻辑回归 1.1 本质差异对比 维度线性回归逻辑回归输出类型连续值概率值 (0-1)目标函数最小二乘法极大似然估计数学表达式 y w T x b yw^Txb ywTxb p 1 1 e − ( w T x b ) p\frac{1}{1e^{-(w^Txb)}} p1e−(wTxb…

s1K 数据集:是一个用于提升语言模型推理能力的高质量数据集。包含 1,000 个问题,每个问题都配有详细的 推理路径 和 答案。

2025-02-07, 由斯坦福大学、华盛顿大学等研究机构创建了 s1K 数据集,该数据集包含 1,000 个精心挑选的问题,并配以推理轨迹和答案,为语言模型推理能力的提升提供了重要的数据基础。 一、研究背景 1. 研究背景 近年来,…

DockerDesktop更改默认的磁盘镜像地存储位置

DockerDesktop更改默认的磁盘镜像地存储位置 文章目录 DockerDesktop更改默认的磁盘镜像地存储位置1. 默认存储位置2. 新建一个目录3. 将磁盘镜像存储位置改为新建的目录下 1. 默认存储位置 2. 新建一个目录 如:D:\DiskImagelocationData 3. 将磁盘镜像存储位置改为…

ASP.NET Core SixLabors.ImageSharp 位图图像创建和下载

从 MVC 控制器内部创建位图图像并将其发送到浏览器;用 C# 编写并与 Linux 和 Windows 服务器兼容。 使用从 ASP.NET MVC 中的控制器下载任何文件类型File。 此示例创建一个位图 (jpeg) 并将其发送到浏览器。它需要 NuGet 包SixLabors.ImageSharp v1.0.4。 另请参…

容联云联络中心AICC:深度整合DeepSeek,业务验证结果公开

容联云重磅推出AICC3.2版本,实现了智能化的升级与外呼效率的突破——深度整合DeepSeek-R1大模型、预测式外呼在数据分析侧的增强、全渠道路由能力、一键多呼效率的强化。 同时,全面接入DeepSeek-R1的容联云 AICC3.2 ,目前已与某知名汽车金融企…

链表和list

链表和list ‍ ​ ​ ​ ​ ​ ​ ​ ​ ​ 算法题中的经典操作:用空间代替时间​ ​ ​ ​ 双链表头插顺序: 1.先修改新结点的左右指针 2.然后修改结点y的左指针 3.最后修改哨兵位的右指针 双链表在任意位置(p)之后插入…

Junit——白盒测试

Java单元测试框架,主要用于测试Java程序中的各个单元。 1.验证代码功能是否符合预期 2.及时 发现修复 代码中的缺陷,提高代码质量 入门 最早学习java,代码对不对,通过main 方法运行,观看结果是否符合预期。 packa…

1.MySQL概述

1.1 数据模型 介绍完了Mysql数据库的安装配置之后,接下来我们再来聊一聊Mysql当中的数据模型。学完了这一小节之后,我们就能够知道在Mysql数据库当中到底是如何来存储和管理数据的。 在介绍 Mysql的数据模型之前,需要先了解一个概念&#x…

Deep seek学习日记1

Deepseek最强大的就是它的深度思考,并且展现了它的思考过程。 五种可使用Deep seek的方式(应该不限于这五种,后续嵌入deepseek的应该更多,多了解一点因为官网容易崩~~): 1.deep seek官网 2.硅基流动silicon…

JAVA中的异常

一、简介 1.1 什么是异常 异常,是对程序在运行过程中遇到的种种不正常的情况的描述。异常在java中用Exception类来描述。如果程序遇到了未经处理的异常,将会导致程序无法编译或者无法继续运行。 1.2 异常的继承体系 在java中使用类Throwable来描述所有…

数字水印嵌入及提取系统——基于小波变换GUI

数字水印嵌入及提取系统——基于小波变换GUI 基于小波变换的数字水印系统(Matlab代码GUI操作) 【有简洁程序报告】【可作開题完整文档达辩PPT】 本系统主要的内容包括: (1)使用小波变换技术实现二值水印图像的加密、…

Linux_帮助指令

man 获得帮助信息 基本语法: man [命令或配置文件] 在linux下,隐藏文件是以 .开头, 选项可以组合使用, 比如 ls -al, 不如 ls -al /root help 指令 基本语法: help 命令 (功能描述: 获取shell内置命名的帮助信息) 英语不好建议百度

Day4 25/2/17 MON

【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…

redis集群模式

1.集群模式 作用:解决单点故障问题 集群的模式:1.主从模式,2、哨兵模式,3、集群化模式 1.1主从模式 特点:1个主节点多个从节点,主节点负责读写操作,而从节点只能负责读操作,当主…