教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载本文基于 kubernetes-handbook 仓库中的 创建高可用 etcd 集群 文档结合仓库内 systemd/etcd.service、etc/etcd/etcd.conf 与 etc/kubernetes/apiserver 等配置系统讲解如何在 Kubernetes master 节点上复用 TLS 证书部署一套三节点高可用 etcd 集群并完成启动、防火墙放行与集群健康验证。读者读完本文后可以独立完成 etcd 集群的规划、证书准备、二进制部署、systemd 托管、安全加固与可用性检查并掌握 etcd 与 kube-apiserver、flannel 的协作方式。Kubernetes 使用 etcd 存储集群的全部对象状态与网络配置数据详见 Etcd 解析etcd 的高可用直接决定了整个控制面的可用性。本文档介绍部署一个三节点高可用 etcd 集群的步骤这三个节点复用 Kubernetes master 机器分别命名为test-001.jimmysong.io、test-002.jimmysong.io、test-003.jimmysong.iotest-001.jimmysong.io172.20.0.113test-002.jimmysong.io172.20.0.114test-003.jimmysong.io172.20.0.115三节点通过 raft 一致性算法选主与复制数据任一节点故障时集群仍可对外提供读写服务。下面按部署顺序逐步展开。1. TLS 认证文件准备etcd 集群内部 peer 通信、客户端访问kube-apiserver、etcdctl都需要加密通信因此需要为 etcd 集群创建 TLS 证书。这里直接复用之前创建 Kubernetes 证书时生成的 CA 与公私钥cp ca.pem kubernetes-key.pem kubernetes.pem /etc/kubernetes/ssl关键前置条件创建kubernetes.pem证书时使用的kubernetes-csr.json文件的hosts字段列表中必须包含上述三台机器的 IP172.20.0.113/114/115否则 etcd 启动后的证书校验会失败。这也是把 etcd 复用 master 节点机器部署时最容易踩的坑。证书就位后各节点证书路径统一为用途文件服务端证书/etc/kubernetes/ssl/kubernetes.pem服务端私钥/etc/kubernetes/ssl/kubernetes-key.pemCA 证书/etc/kubernetes/ssl/ca.pem2. 下载 etcd 二进制文件到 etcd 官方 release 页面下载对应版本的二进制压缩包本文使用 v3.1.5与仓库 concepts/etcd.md 中记录的安装版本一致wget https://github.com/coreos/etcd/releases/download/v3.1.5/etcd-v3.1.5-linux-amd64.tar.gz tar -xvf etcd-v3.1.5-linux-amd64.tar.gz mv etcd-v3.1.5-linux-amd64/etcd* /usr/local/bin或者直接使用 yum 命令安装yum install etcd若使用 yum 安装默认 etcd 命令将被安装在/usr/bin目录下注意修改下面的etcd.service文件中的启动命令地址为/usr/bin/etcd。3. 创建 etcd 的 systemd unit 文件在/usr/lib/systemd/system/目录下创建文件etcd.service内容如下。注意替换 IP 地址为你自己的 etcd 集群的主机 IP。[Unit] DescriptionEtcd Server Afternetwork.target Afternetwork-online.target Wantsnetwork-online.target Documentationhttps://github.com/coreos [Service] Typenotify WorkingDirectory/var/lib/etcd/ EnvironmentFile-/etc/etcd/etcd.conf ExecStart/usr/local/bin/etcd \ --name ${ETCD_NAME} \ --cert-file/etc/kubernetes/ssl/kubernetes.pem \ --key-file/etc/kubernetes/ssl/kubernetes-key.pem \ --peer-cert-file/etc/kubernetes/ssl/kubernetes.pem \ --peer-key-file/etc/kubernetes/ssl/kubernetes-key.pem \ --trusted-ca-file/etc/kubernetes/ssl/ca.pem \ --peer-trusted-ca-file/etc/kubernetes/ssl/ca.pem \ --initial-advertise-peer-urls ${ETCD_INITIAL_ADVERTISE_PEER_URLS} \ --listen-peer-urls ${ETCD_LISTEN_PEER_URLS} \ --listen-client-urls ${ETCD_LISTEN_CLIENT_URLS},http://127.0.0.1:2379 \ --advertise-client-urls ${ETCD_ADVERTISE_CLIENT_URLS} \ --initial-cluster-token ${ETCD_INITIAL_CLUSTER_TOKEN} \ --initial-cluster infra1https://172.20.0.113:2380,infra2https://172.20.0.114:2380,infra3https://172.20.0.115:2380 \ --initial-cluster-state new \ --data-dir${ETCD_DATA_DIR} Restarton-failure RestartSec5 LimitNOFILE65536 [Install] WantedBymulti-user.target3.1 unit 文件关键配置解读工作目录与数据目录指定etcd的工作目录为/var/lib/etcd数据目录同样为/var/lib/etcd。需在启动服务前创建该目录否则启动服务时会报错Failed at step CHDIR spawning /usr/bin/etcd: No such file or directory通信安全为保证通信安全需要同时指定 etcd 客户端通信的公私钥--cert-file、--key-file、Peers 通信的公私钥与 CA 证书--peer-cert-file、--peer-key-file、--peer-trusted-ca-file以及客户端的 CA 证书--trusted-ca-file证书 hosts 字段创建kubernetes.pem证书时使用的kubernetes-csr.json文件的hosts字段必须包含所有 etcd 节点的 IP否则证书校验会出错initial-cluster-state--initial-cluster-state值为new时--name的参数值必须位于--initial-cluster列表中即infra1/infra2/infra3之一Typenotifyetcd 启动完成后通过 sd_notify 通知 systemdsystemd 据此判断服务已就绪LimitNOFILE65536提高进程文件描述符上限支撑高负载下的连接数。仓库中的完整 unit 文件示例见 systemd/etcd.service其中将环境变量直接展开写入了 ExecStart如--name etcd-host0、--initial-cluster-token etcd-cluster-0、--initial-cluster etcd-host0...并默认使用/usr/bin/etcd作为启动命令可作为不使用 EnvironmentFile 的另一种部署写法参考。3.2 环境变量配置文件环境变量配置文件为/etc/etcd/etcd.conf内容如下172.20.0.113 节点示例# [member] ETCD_NAMEinfra1 ETCD_DATA_DIR/var/lib/etcd ETCD_LISTEN_PEER_URLShttps://172.20.0.113:2380 ETCD_LISTEN_CLIENT_URLShttps://172.20.0.113:2379 #[cluster] ETCD_INITIAL_ADVERTISE_PEER_URLShttps://172.20.0.113:2380 ETCD_INITIAL_CLUSTER_TOKENetcd-cluster ETCD_ADVERTISE_CLIENT_URLShttps://172.20.0.113:2379这是 172.20.0.113 节点的配置其他两个 etcd 节点只要将上面的 IP 地址改成相应节点的 IP 地址即可ETCD_NAME换成对应节点的infra1/infra2/infra3。仓库中的完整模板 etc/etcd/etcd.conf 还给出了大量可选的扩展配置项及注释说明便于按需启用配置段环境变量说明memberETCD_WAL_DIRWAL 日志目录默认与数据目录合并memberETCD_SNAPSHOT_COUNT触发快照的事务数默认 10000memberETCD_HEARTBEAT_INTERVALleader 心跳间隔毫秒默认 100memberETCD_ELECTION_TIMEOUT选举超时时间毫秒默认 1000memberETCD_MAX_SNAPSHOTS保留的最大快照数默认 5memberETCD_MAX_WALS保留的最大 WAL 数默认 5memberETCD_CORS跨域请求配置clusterETCD_INITIAL_CLUSTER初始集群成员列表未设置时由服务端自动生成clusterETCD_INITIAL_CLUSTER_STATEnew表示新建集群clusterETCD_DISCOVERY/ETCD_DISCOVERY_SRV集群发现机制token 或 DNS SRVsecurityETCD_CLIENT_CERT_AUTH是否强制校验客户端证书默认 falsesecurityETCD_PEER_CLIENT_CERT_AUTH是否强制校验 peer 客户端证书loggingETCD_DEBUG是否开启调试日志4. 启动 etcd 服务将 unit 文件放到系统目录后依次执行以下命令加载并启动服务mv etcd.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl enable etcd systemctl start etcd systemctl status etcd在所有的 Kubernetes master 节点重复上面的步骤直到所有机器的 etcd 服务都已启动。4.1 防火墙端口放行注意如果日志中出现连接异常信息请确认所有节点防火墙是否开放 2379、2380 端口。以 CentOS 7 为例firewall-cmd --zonepublic --add-port2380/tcp --permanent firewall-cmd --zonepublic --add-port2379/tcp --permanent firewall-cmd --reload其中 2380 为 etcd peer 间通信端口2379 为客户端kube-apiserver、etcdctl访问端口两个端口在三个节点上都必须放行。5. 验证集群健康状态在任一 Kubernetes master 机器上执行如下命令$ etcdctl \ --ca-file/etc/kubernetes/ssl/ca.pem \ --cert-file/etc/kubernetes/ssl/kubernetes.pem \ --key-file/etc/kubernetes/ssl/kubernetes-key.pem \ cluster-health 2017-04-11 15:17:09.082250 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated 2017-04-11 15:17:09.083681 I | warning: ignoring ServerName for user-provided CA for backwards compatibility is deprecated member 9a2ec640d25672e5 is healthy: got healthy result from https://172.20.0.115:2379 member bc6f27ae3be34308 is healthy: got healthy result from https://172.20.0.114:2379 member e5c92ea26c4edba0 is healthy: got healthy result from https://172.20.0.113:2379 cluster is healthy结果最后一行为cluster is healthy时表示集群服务正常三个 member 均通过 TLS 从 https 端点取回健康检查结果。输出中的 ServerName 警告为旧版 CA 兼容行为的提示不影响健康检查结果。6. 与 kube-apiserver 的对接验证etcd 集群启动后kube-apiserver 通过--etcd-servers指向集群客户端端点。仓库中 etc/kubernetes/apiserver 的对应配置为KUBE_ETCD_SERVERS--etcd-servershttps://172.20.0.113:2379,172.20.0.114:2379,172.20.0.115:2379同时在KUBE_API_ARGS中通过--etcd-cafile、--etcd-certfile、--etcd-keyfile指定访问 etcd 所需的 CA 与客户端证书与上文部署 etcd 时使用的证书同一套形成完整的双向 TLS 链路。相关细节可参考 master-installation.md 中对 etcd 健康检查etcd-0/1/2 Healthy与--etcd-prefix默认/registry的说明。etcd 集群部署完成且 apiserver 正常启动后可以进一步用 etcdctl 直接探查 Kubernetes 在 etcd 中存储的数据Kubernetes 1.6 使用 etcd v3 API需设置ETCDCTL_API3例如列出集群中全部 namespaceETCDCTL_API3 etcdctl get /registry/namespaces --prefix -wjson|python -m json.tool更完整的 etcd 数据浏览、base64 key 解码与元数据结构说明请参考 使用 etcdctl 访问 Kubernetes 数据。7. 部署注意事项小结证书先行kubernetes-csr.json的hosts必须覆盖全部三个节点 IP否则集群无法正常握手数据目录预创建/var/lib/etcd需提前创建否则 systemd 因无法进入工作目录而报 CHDIR 错误环境变量与 ExecStart 一致性unit 中通过${ETCD_*}引用 etc/etcd/etcd.confETCD_NAME、--initial-cluster中的名字、各节点的 IP 必须一一对应防火墙三个节点均需放行 2379client与 2380peer端口备份etcd 数据目录/var/lib/etcd是整个集群的元数据唯一权威来源务必做好定期备份详见 Etcd 解析 的Etcd 数据备份一节API 版本差异flannel 等组件通过 etcd v2 API 读写网络配置而 Kubernetes 通过 v3 API 读写对象数据两者数据结构互不兼容访问时需注意ETCDCTL_API环境变量的设置默认值为 2。至此一套由三台 Kubernetes master 节点复用承载、全程 TLS 加密的高可用 etcd 集群即部署完成可支撑 kube-apiserver 高可用如--apiserver-count3场景下的状态存储需求。赞分享教程云原生容器编排【免费下载链接】kubernetes-handbookKubernetes 架构与生态从云原生到 AI 原生基础设施的构建指南项目地址https://gitcode.com/gh_mirrors/ku/kubernetes-handbook点击查看免费下载相关推荐Kubernetes高可用集群实战etcd集群部署指南Kubernetes高可用集群实战etcd集群部署指南 前言 在构建Kubernetes生产环境时etcd作为集群的核心数据存储组件其稳定性和可靠性直接关文档/教程Kubernetes Handbook 云原生本地实验环境快速部署指南基于 Vagrant 的三节点集群实战Kubernetes Handbook 云原生本地实验环境快速部署指南基于 Vagrant 的三节点集群实战 本篇技术指南以《Kubernetes Handb教程云原生容器编排在 Kubernetes 上部署 Spark Standalone 集群基于 kubernetes-handbook 的 Master、Worker 与 Zeppelin 完整实战指南在 Kubernetes 上部署 Spark Standalone 集群基于 kubernetes handbook 的 Master、Worker 与 Ze教程云原生容器编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Hermes widgets 基准测试全解析:类继承、数组方法与 Map 的引擎性能探针 语言运行时编译器移动开发 【免费下载链接】hermes A JavaScript engine optimized for running React Native. 项目地址: https://gitcode.com/gh_mirrors/hermes/hermes 点击查看 免费下载 导读
widgets benchmark 是 Hermes 仓库中一组以"组件树渲染与协调… · 2026/9/24 4:47:59
迪文T5L屏告别SD卡:DGUS II串口下载与在线调试完整实操指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 4:47:59
Jev :Agent 又慢又贵的根因,是决策环节的冗余调用? Agent 每走一步都在做判断:这条消息紧急吗、这个工单转给哪个部门、这条命令该直接执行还是先问人。这些题的答案就是个结构化结论——是/否、A 还是 B——模型根本不需要写一段话来推理。 Agent每做一次判断,就得把整段上下文喂给大模型、等它生成一整段… · 2026/9/24 5:30:56
ENSP校园网组网实战:从VLAN规划到静态路由的完整配置指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 5:30:32
ESP32-C3小彩屏翻页时钟:从硬件选型到动画实现 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 5:30:26
20MB Rust数据库工具dbx:83种数据库协议原生支持 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 5:30:07
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44