当前位置: 首页 > article >正文

Kubernetes实战:构建高可用Zookeeper集群(3节点)的完整指南

1. 为什么要在Kubernetes上部署Zookeeper集群Zookeeper作为分布式系统的大脑在微服务架构中扮演着关键角色。它负责维护配置信息、命名服务、分布式同步和集群管理等核心功能。传统物理机部署Zookeeper集群时我们需要手动配置每台服务器维护复杂的网络拓扑而Kubernetes提供的StatefulSet控制器完美解决了这些问题。我在实际项目中发现使用Kubernetes部署Zookeeper至少带来三个明显优势首先是自动化运维Pod故障后会自动重建并保持原有身份其次是资源隔离不同业务线的Zookeeper集群可以共享同一套Kubernetes基础设施最后是弹性扩展只需修改replicas参数就能快速扩容集群规模。2. 部署前的关键准备工作2.1 基础设施检查在动手部署之前建议先运行以下命令检查Kubernetes集群状态kubectl get nodes -o wide kubectl get storageclass特别是要确认StorageClass配置正确因为Zookeeper作为有状态应用依赖持久化存储。我遇到过因为StorageClass配置错误导致Pod不断重启的案例最终发现是nfs-client-provisioner的权限设置有问题。2.2 镜像准备技巧官方文档推荐的registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10镜像在国内可能拉取困难。这里分享一个实用技巧可以先用阿里云等国内镜像源拉取再重新打标签docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/zookeeper:3.4.10 docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/zookeeper:3.4.10 registry.k8s.io/kubernetes-zookeeper:1.0-3.4.103. 详解Zookeeper集群部署配置3.1 剖析StatefulSet核心配置Zookeeper的集群特性决定了它必须使用StatefulSet而非Deployment。下面是我们调整后的关键配置片段apiVersion: apps/v1 kind: StatefulSet metadata: name: zk spec: serviceName: zk-hs replicas: 3 podManagementPolicy: OrderedReady updateStrategy: type: RollingUpdate template: spec: containers: - name: kubernetes-zookeeper image: registry.k8s.io/kubernetes-zookeeper:1.0-3.4.10 ports: - containerPort: 2181 name: client - containerPort: 2888 name: server - containerPort: 3888 name: leader-election command: - sh - -c - start-zookeeper \ --servers3 \ --data_dir/var/lib/zookeeper/data \ --conf_dir/opt/zookeeper/conf \ --client_port2181 \ --heap512M这里有几个容易踩坑的点podManagementPolicy必须设置为OrderedReady确保Pod按顺序启动每个容器需要暴露三个端口2181用于客户端连接2888用于节点间数据同步3888用于Leader选举command中的启动参数要根据实际资源情况调整特别是heap大小3.2 网络服务配置要点Zookeeper集群需要两类Service# 无头服务用于Pod间直接通信 apiVersion: v1 kind: Service metadata: name: zk-hs spec: clusterIP: None ports: - port: 2888 name: server - port: 3888 name: leader-election selector: app: zk # 普通服务用于外部访问 apiVersion: v1 kind: Service metadata: name: zk-cs spec: ports: - port: 2181 name: client selector: app: zk特别注意无头服务(zk-hs)的clusterIP: None设置这使得Pod可以通过稳定的DNS名称直接互相访问格式为pod-name.service-name。4. 集群验证与故障演练4.1 基础状态检查部署完成后建议按以下步骤验证# 查看Pod运行状态 kubectl get pods -l appzk -w # 检查各节点角色 for i in {0..2}; do kubectl exec zk-$i -- zkServer.sh status done # 验证DNS解析 kubectl run dns-test --imagebusybox:1.28 --rm -it --restartNever -- nslookup zk-0.zk-hs正常情况下应该看到1个Leader和2个Follower。我曾经遇到所有节点都显示Follower的情况最后发现是防火墙规则阻塞了3888端口。4.2 数据持久化测试验证数据持久化的正确姿势# 在zk-0创建测试数据 kubectl exec zk-0 -- zkCli.sh create /test-data hello # 删除zk-0 Pod模拟节点故障 kubectl delete pod zk-0 # 等待Pod重建后验证数据 kubectl exec zk-0 -- zkCli.sh get /test-data这个测试能验证PV/PVC是否正常工作。如果数据丢失首先要检查storageClass的配置是否正确。4.3 模拟Leader节点故障高可用测试的关键步骤# 找出当前Leader节点 LEADER$(for i in {0..2}; do kubectl exec zk-$i -- zkServer.sh status | grep Leader echo $i done) # 删除Leader Pod kubectl delete pod zk-$LEADER # 观察Leader切换过程 watch -n 1 for i in {0..2}; do kubectl exec zk-$i -- zkServer.sh status | grep -E Mode|ZooKeeper done正常情况下剩余的Follower会在几秒内完成新Leader选举。我建议至少进行3次这样的测试确保集群在各种情况下都能保持稳定。5. 生产环境优化建议5.1 资源限制与调优默认配置中的资源请求可能不适合生产环境建议根据实际负载调整resources: requests: memory: 1Gi cpu: 500m limits: memory: 2Gi cpu: 1Zookeeper对内存比较敏感如果看到频繁的GC日志就需要增加heap大小。可以通过修改command中的--heap参数来调整。5.2 监控与告警配置推荐使用Prometheus监控Zookeeper集群需要在Pod模板中添加ports: - containerPort: 7000 name: metrics env: - name: ZK_METRICS_PORT value: 7000然后配置Prometheus的scrape_config- job_name: zookeeper static_configs: - targets: [zk-0.zk-hs:7000,zk-1.zk-hs:7000,zk-2.zk-hs:7000]关键监控指标包括zookeeper_avg_latency请求平均延迟zookeeper_outstanding_requests排队请求数zookeeper_znode_count节点数量5.3 备份策略设计虽然Zookeeper本身具有高可用性但定期备份snapshot仍是必要措施# 手动备份示例 kubectl exec zk-0 -- bash -c tar czvf /tmp/backup.tar.gz /var/lib/zookeeper/data kubectl cp zk-0:/tmp/backup.tar.gz ./zk-backup-$(date %Y%m%d).tar.gz对于生产环境建议编写CronJob定期执行备份并将备份文件上传到对象存储。记住要同时备份数据和事务日志。

相关文章:

Kubernetes实战:构建高可用Zookeeper集群(3节点)的完整指南

1. 为什么要在Kubernetes上部署Zookeeper集群? Zookeeper作为分布式系统的"大脑",在微服务架构中扮演着关键角色。它负责维护配置信息、命名服务、分布式同步和集群管理等核心功能。传统物理机部署Zookeeper集群时,我们需要手动配置…...

突破单人游戏限制:Nucleus Co-op焕新本地多人游戏体验

突破单人游戏限制:Nucleus Co-op焕新本地多人游戏体验 【免费下载链接】splitscreenme-nucleus Nucleus Co-op is an application that starts multiple instances of a game for split-screen multiplayer gaming! 项目地址: https://gitcode.com/gh_mirrors/spl…...

从ChatGLM到DeepSeek-V2:我用LLaMA-Factory一站式搞定5种大模型的高效微调

从ChatGLM到DeepSeek-V2:我用LLaMA-Factory一站式搞定5种大模型的高效微调 在开源大模型技术快速迭代的今天,工程师和研究者面临着一个幸福的烦恼:如何在ChatGLM、DeepSeek、Qwen、Yi、LLaMA等不同架构的模型之间高效切换和实验?传…...

跨平台创意工坊下载工具:突破游戏平台限制的开源解决方案

跨平台创意工坊下载工具:突破游戏平台限制的开源解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 当你在Epic Games平台免费领取了《求生之路2》&#xff0c…...

突破限制:旧Mac设备升级最新macOS全流程指南

突破限制:旧Mac设备升级最新macOS全流程指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac设备被官方系统升级列表排除在外时&#xf…...

【读书笔记】《反倦怠能量站》

《反倦怠能量战》:从低迷内耗到轻松行动的科学方法核心主张 这本书不是励志鸡汤,不靠鞭策意志力。它的核心是:搭建一个有能量的行动体系——在不需要太多意志力的情况下,让自己保持可持续的工作与生活节律。一、能量是什么&#x…...

Win11Debloat效能革命:Windows系统极限释放的开源优化方案

Win11Debloat效能革命:Windows系统极限释放的开源优化方案 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...

C++ lambda 捕获机制剖析

C lambda 捕获机制剖析 在现代C编程中,lambda表达式因其简洁性和灵活性成为开发者常用的工具之一。lambda的核心特性之一是其捕获机制,它允许在匿名函数内部访问外部变量。理解捕获机制不仅能提升代码效率,还能避免潜在的内存和逻辑错误。本…...

C++ 多线程同步机制详解

C多线程同步机制详解 在现代计算机系统中,多线程编程已成为提升程序性能的重要手段。多线程环境下的资源共享与竞争问题也随之而来,稍有不慎便会导致数据不一致、死锁等问题。C提供了丰富的多线程同步机制,帮助开发者高效管理线程间的协作与…...

告别DataGridView!用ReoGrid在C#中打造Excel级表格编辑功能(支持粘贴/样式保留)

告别DataGridView!用ReoGrid在C#中打造Excel级表格编辑功能(支持粘贴/样式保留) 在传统C#桌面应用开发中,DataGridView一直是表格数据显示的默认选择。但当我们面对制造业成本核算、财务报表生成等需要处理复杂Excel数据的场景时&…...

Minecraft源码反编译终极指南:DecompilerMC完整使用教程

Minecraft源码反编译终极指南:DecompilerMC完整使用教程 【免费下载链接】DecompilerMC This repository allows you to decompile any minecraft version that was published after 19w36a without any 3rd party mappings, you just need to execute the script o…...

COMSOL超声仿真:检测焊缝缺陷的实践与探索

COMSOL超声仿真:检测焊缝缺陷 版本为5.6一、引言在制造业中,焊缝的质量和完整性是产品性能的重要保证。然而,由于焊缝的复杂性和微小缺陷的隐蔽性,传统的检测方法往往难以准确、高效地识别出潜在问题。近年来,随着计算机仿真技术的…...

提升数据采集效率:用快马AI生成支持异步与代理的新闻监控爬虫

最近在做一个新闻监控项目,需要实时跟踪多个新闻网站的头条更新。传统爬虫开发中,反爬机制、数据清洗这些重复性工作特别耗时,经过一番摸索,我发现用InsCode(快马)平台可以快速生成结构优化的爬虫代码,效率提升非常明显…...

[推荐]生产环境部署: docker+gitea+jenkins+jenkinsfile+ansible+钉钉 实现多机批量部署及其推送通知

1)打包机: giteapostgres、jenkins软件安装 (注意jenkins镜像中自动安装python和ansible环境)mkdir data, 在此目录下放好docker-compose.yml然后用docker compose up -d 在打包机部署好环境 其它工作机器什么都不用做后续都是用ansible自动完成!!![rootlocalhost soft]# cat d…...

甩掉作图焦虑,我把商业级出图压缩到10分钟,设计团队必备AI工具推荐

作为一个在设计行业熬了快十年的工作室主理人,我无数次在甲方的要求下气的想撞墙——不是因为脑子里没有创意,而是因为团队的视觉交付效率根本跟不上客户“朝令夕改”的节奏。你如果是设计师一定懂这种窒息感:早会刚定下的视觉方向&#xff0…...

什么是KCP?QUIC?Websocket?

KCPKCP是一个基于UDP的可靠传输协议,其核心目标是在牺牲一定带宽利用率的前提下,尽可能降低传输延迟。它并非一个全新的传输层协议,而更像是在应用层对UDP数据包进行可靠性、顺序和流量控制的“增强外壳”。其底层具体来说就是在UDP的基础之上…...

B Tree

二叉树、AVL树、红黑树使得查找、插入、删除数据的效率降到了O(logN)级别,但通常是把数据全部加载到内存中进行处理的,数据量通常没有特别大。当有超大规模的数据量时,大到内存都存不下的时候,只能存储在硬盘里。由于二叉树、AVL树…...

终极Win11优化指南:用Win11Debloat快速清理系统,性能提升70%

终极Win11优化指南:用Win11Debloat快速清理系统,性能提升70% 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to…...

IAR开发环境配置:解决Fatal Error[Pe1696]头文件缺失问题

1. 初识Fatal Error[Pe1696]:头文件去哪了? 第一次用IAR开发环境的朋友,十有八九会遇到这个让人抓狂的错误提示:"Fatal Error[Pe1696]: cannot open source file core_cm0plus.h"。这就像你照着菜谱做菜,明明…...

GModPatchTool:一站式Garry‘s Mod游戏问题解决方案与优化工具

GModPatchTool:一站式Garrys Mod游戏问题解决方案与优化工具 【免费下载链接】GModPatchTool 🇬🩹🛠 Patches for Garrys Mod. Updates/Improves CEF and Fixes common launch/performance issues (esp. on Linux/Proton/macOS). …...

局域网聊天室终极解决方案:无需互联网的即时通讯工具

局域网聊天室终极解决方案:无需互联网的即时通讯工具 【免费下载链接】LAN-Chat-Room 😉基于QT开发的局域网聊天室 项目地址: https://gitcode.com/gh_mirrors/la/LAN-Chat-Room 在办公室、学校或家庭网络中,你是否曾遇到过需要快速分…...

FreeCAD Sketcher模块实战:从零开始设计一个机械零件(附约束技巧)

FreeCAD Sketcher模块实战:从零开始设计一个机械零件(附约束技巧) 在三维CAD设计领域,参数化建模已经成为现代机械设计的标配技能。作为开源CAD软件中的佼佼者,FreeCAD凭借其强大的Sketcher模块,让用户能够…...

CVPR2025 | 对抗样本攻防前沿:从基础理论到多模态安全新挑战

1. 对抗样本攻防基础理论演进 对抗样本研究最早可以追溯到2013年Szegedy等人的开创性工作,他们发现通过在图像中添加人眼难以察觉的扰动,就能使深度神经网络产生错误分类。这个发现揭示了机器学习模型在输入空间中的脆弱性,也开启了对抗样本研…...

3大核心突破让League-Toolkit成为英雄联盟玩家的智能游戏助手

3大核心突破让League-Toolkit成为英雄联盟玩家的智能游戏助手 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 在快节奏的英雄联盟对局中&#…...

s11_自主代理设计:为什么 Agent 空闲时不该只是等下一条指令

自主代理设计:为什么 Agent 空闲时不该只是等下一条指令 很多人第一次做多智能体系统时,默认采用的都是“派工制”。 也就是说,lead 负责看全局、拆任务、发消息,每个 teammate 只在被明确点名时才开始动。 这个模式能跑起来&a…...

如何用 GitHub Actions 自部署 GitHub Readme Stats,并统计私有仓库数据

目录背景介绍通过 GitHub Actions 自部署 GitHub Readme Stats如何使用 GitHub Actions 配置统计私有仓库数据1. 生成 Personal Access Token (PAT) 以统计私有仓库**如何生成 Personal Access Token (PAT)**:2. 使用 GitHub Secrets 存储 PAT3. 为什么默认配置无法…...

s10_团队协议设计:为什么多智能体协作不能只靠发消息

团队协议设计:为什么多智能体协作不能只靠发消息 很多人第一次做多智能体协作时,直觉都是:只要能让队友之间互相发消息,团队就算搭起来了。 这个想法不算错,但只对了一半。 s09 确实已经把“常驻队友 文件邮箱 线…...

多层循环神经网络|Multi-layer RNNs

----------------------------------------------------------------------------------------------- 这是我在我的网站中截取的文章,有更多的文章欢迎来访问我自己的博客网站rn.berlinlian.cn,这里还有很多有关计算机的知识,欢迎进行留言或…...

QMCDecode终极解决方案:突破QQ音乐加密格式限制的完全指南

QMCDecode终极解决方案:突破QQ音乐加密格式限制的完全指南 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默…...

猫抓浏览器资源嗅探扩展完全指南:从新手到高手的蜕变之路

猫抓浏览器资源嗅探扩展完全指南:从新手到高手的蜕变之路 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 网络上丰富的视频、音频和图片…...