【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载本文围绕 Helm Charts 仓库中stable/mcrouter图表展开系统讲解如何通过 Helm 在 Kubernetes 集群中部署 Mcrouter——一款用于横向扩展 Memcached 部署的 Memcached 协议路由器。文中将完整覆盖图表的全部可配置参数、两种 Pod 控制器DaemonSet / StatefulSet的选型逻辑、自动生成与自定义配置文件的机制以及从安装到 telnet 实测的完整验证流程并深入源码揭示其内部实现细节。仓库归档提示本仓库已于 2020 年 11 月 13 日起停止更新stable/mcrouter图表本身也带有明确的废弃DEPRECATED标记请结合这一前提评估其生产可用性。Mcrouter 与图表定位McrouterMemcached Router是 Facebook 开源的 Memcached 协议路由器核心用途是在客户端与 Memcached 服务之间加入一层路由从而支持 Memcached 集群的水平扩展、流量切分与故障转移。本仓库中的 stable/mcrouter 图表即用于把 Mcrouter 以容器化方式部署到 Kubernetes 中并将 Memcached 作为可选依赖一并安装。从 Chart.yaml 可以确认图表的元信息name: mcrouterversion: 1.0.6appVersion: 0.36.0description: DEPRECATED - Mcrouter is a memcached protocol router for scaling memcached deployments图片来源为jphalip/mcrouter:0.36.0第三方镜像官方源码指向 facebook/mcrouterdeprecated: true模板引擎为engine: gotpl也就是说Mcrouter 本身是久经考验的开源组件但这份 Kubernetes 图表已被标记为废弃社区也不再维护更新。若要在生产环境使用建议基于官方 Dockerfile 自行构建更新版本的镜像并自行维护部署清单。配置参数全览图表的核心配置集中在 values.yamlREADME.md 给出了完整的参数对照表以下逐一展开说明参数描述默认值controller部署 Mcrouter Pod 所使用的控制器可选daemonset或statefulsetdaemonsetdaemonset.hostPortDaemonSet 控制器使用的宿主机端口5000image容器镜像jphalip/mcrouter:0.36.0mcrouterCommandParams.configFilemcrouter 命令使用的配置文件路径若不提供则根据 Memcached 图表的参数自动生成无默认值mcrouterCommandParams.port监听端口支持逗号分隔多个端口5000memcached.enabled若为 trueMemcached 图表将作为依赖安装trueresources.limits.cpuCPU 资源上限256mresources.limits.memory内存资源上限512Miresources.requests.cpuCPU 资源请求100mresources.requests.memory内存资源请求128Mistatefulset.antiAffinityStatefulSet 控制器的 Pod 反亲和策略可选hard或softhardstatefulset.replicasStatefulSet 控制器的副本数1values.yaml 中其余可调项除 README 参数表外values.yaml 还暴露了以下配置入口imagePullPolicy镜像拉取策略模板中以default .Values.imagePullPolicy兜底未设置时交由 kubelet 默认行为决定memcached.replicaCountMemcached 副本数默认3该值直接参与自动配置文件的生成memcachedServiceMemcached 服务相关信息包含serviceName注释状态、replicaCount注释状态、port: 11211、namespace: defaultnameOverride通过_helpers.tpl支持用于覆盖资源命名中的名称部分控制器选型DaemonSet 与 StatefulSet图表的核心设计允许用户通过controller参数在两种控制器之间切换二者在 templates/daemonset.yaml 与 templates/statefulset.yaml 中分别实现并以{{- if eq .Values.controller daemonset }}/{{- if eq .Values.controller statefulset }}条件渲染互斥生效。DaemonSet 模式默认默认使用 DaemonSet 控制器即每个 Kubernetes 节点上运行一个 Mcrouter Pod。每个 Mcrouter Pod 通过hostPort默认5000绑定到所在节点的宿主机端口。客户端应用 Pod 只需连接自身所在节点的5000端口即可访问 Mcrouter无需感知具体 Pod IP要获取节点名称可通过应用 PodSpec 中的spec.nodeName以环境变量方式注入容器该模式的天然优势是负载随节点分布流量就近转发适合每节点一代理的边缘路由场景从 daemonset.yaml 的模板实现看容器启动命令为command: [mcrouter] args: - -p {{ .Values.mcrouterCommandParams.port }} - --config-file/etc/mcrouter/config.json即 mcrouter 以-p 5000监听端口、--config-file指向挂载的 ConfigMap 配置文件启动。同时定义了portscontainerPort取mcrouterCommandParams.porthostPort取daemonset.hostPortlivenessProbeTCP 探活initialDelaySeconds: 30、timeoutSeconds: 5readinessProbeTCP 就绪探针initialDelaySeconds: 5、timeoutSeconds: 1volumes将同名的 ConfigMap 挂载到/etc/mcrouterStatefulSet 模式当controller: statefulset时使用 StatefulSet 控制器副本数由statefulset.replicas默认1控制。集群内部可通过如下 DNS 名称访问服务release name-mcrouter.namespace.svc.cluster.local默认端口仍为5000。StatefulSet 模式还引入了 Pod 反亲和antiAffinity策略hard默认使用requiredDuringSchedulingIgnoredDuringExecution以topologyKey: kubernetes.io/hostname强制将副本调度到不同节点soft使用preferredDuringSchedulingIgnoredDuringExecution权重5尽力分散副本从 statefulset.yaml 可看到反亲和 labelSelector 匹配app: fullname与release: release name标签确保同一次 release 的副本之间彼此隔离。两种控制器的模板还通过 _helpers.tpl 中定义的daemonset.apiVersion/statefulset.apiVersion辅助函数自动选择 API 版本Kubernetes 1.9时使用extensions/v1beta1 1.9时使用apps/v1兼顾了不同集群版本的兼容性。配置文件的自动生成与自定义mcrouter 依赖一份 JSON 格式的路由配置pools、route 等。图表提供了两条路径路径一自动生成默认若mcrouterCommandParams.configFile未设置且memcached.enabled: truetemplates/configmap.yaml 会根据 Memcached 副本数自动生成配置。生成的 ConfigMapdata.config.json内容形如{ pools: { A: { servers: [ release-memcached-0.release-memcached.namespace.svc.cluster.local:11211, release-memcached-1.release-memcached.namespace.svc.cluster.local:11211, release-memcached-2.release-memcached.namespace.svc.cluster.local:11211 ] } }, route: PoolRoute|A }模板中通过until (.Values.memcached.replicaCount | int)循环生成memcached.replicaCount个后端地址每个地址的构成规则为release-memcached-i.release-memcached.namespace.svc.cluster.local:11211这里隐含了命名约定依赖的 Memcached StatefulSet 副本pod-0..N由 headless Servicerelease-memcached提供稳定的 DNS 名端口为 Memcached 默认的11211。PoolRoute|A表示将请求路由到名为A的服务器池。路径二自定义配置若要精细控制路由策略例如多池切分、故障转移、哈希策略等可设置mcrouterCommandParams.configFile指向仓库内一个自定义 JSON 文件。模板会读取该文件内容并逐行写入 ConfigMap{{- if .Values.mcrouterCommandParams.configFile }}{{ range .Files.Lines .Values.mcrouterCommandParams.configFile }}mcrouter 配置的完整语法与能力PoolRoute、HashRoute、FailoverRoute 等可参考 mcrouter 官方的 Config Files 文档仓库 values.yaml 中注释给出了相关指引此处不再展开。无论走哪条路径生成的 ConfigMap 都会作为卷挂载进 Pod 的/etc/mcrouter目录并由--config-file/etc/mcrouter/config.json参数引用daemonset 与 statefulset 模板还通过checksum/config注解对 ConfigMap 内容取 SHA256 校验和配置变更会触发 Pod 滚动更新。依赖管理Memcached 子图表图表通过 requirements.yaml 声明了依赖dependencies: - name: memcached version: 3.1.0 repository: https://charts.helm.sh/stable condition: mcrouter.memcached.enabled要点依赖版本锁定为memcached: 3.1.0requirements.lock 记录了对应 digestcondition: mcrouter.memcached.enabled实现条件安装当memcached.enabled: false时不会安装 Memcached此时必须通过mcrouterCommandParams.configFile提供指向外部 Memcached 集群的自定义配置若 Memcached 已由外部或其他 release提供可设置memcached.enabled: false并利用memcachedService参数port: 11211、namespace: default配合自定义配置文件指向既有服务。安装与端到端测试安装图表helm install stable/mcrouter --namemyproxy该命令以 release 名myproxy部署 Mcrouter默认 DaemonSet 模式并连带安装 Memcached 依赖。安装完成后Pod 标签为appmyproxy-mcrouterfullname由_helpers.tpl定义为release-chart。连接 Pod 并启动 telnet 会话获取首个 Mcrouter Pod 的 IP并启动一个临时 alpine 容器进行 telnet 测试MCROUTER_POD_IP$(kubectl get pods -l appmyproxy-mcrouter -o jsonpath{.items[0].status.podIP}) kubectl run -it --rm alpine --imagealpine --restartNever telnet $MCROUTER_POD_IP 5000在 telnet 提示符中输入以下命令验证读写链路set mykey 0 0 5 hello get mykey quit命令语义说明set mykey 0 0 5设置键mykey后接标志位、过期时间0 表示永不过期、字节长度5随后输入hello5 字节作为值get mykey读取刚写入的值应返回VALUE mykey 0 5及helloquit退出 telnet这一流程验证了客户端 → Mcrouter → Memcached 全链路的写入与读取。由于默认自动生成的配置将请求路由到 Memcached 池A成功get回刚才set的值即证明路由、转发与后端存储均工作正常。服务暴露与集群内访问templates/svc.yaml 定义了 headless ServiceclusterIP: None端口5000mcrouterCommandParams.porttargetPort: mcrouter-port通过app: fullname选择器关联 Mcrouter Pod配合 StatefulSet 控制器Mcrouter 实例可获得稳定 DNS 名release-mcrouter-0.release-mcrouter.namespace.svc.cluster.local及 Service 域名release name-mcrouter.namespace.svc.cluster.local供集群内应用按名称访问。模板实现速查仓库内stable/mcrouter/templates/目录结构如下文件职责_helpers.tplname/fullname命名辅助函数及 DaemonSet / StatefulSet 的 API 版本兼容选择configmap.yaml生成 mcrouter JSON 路由配置自动生成或取自自定义文件daemonset.yamlDaemonSet 控制器模板默认statefulset.yamlStatefulSet 控制器模板含反亲和策略svc.yamlHeadless ServiceNOTES.txt安装后提示信息包含 telnet 测试指引结语stable/mcrouter图表完整呈现了一个路由层 存储层的 Kubernetes 编排范本通过单一controller参数在 DaemonSet按节点就近路由与 StatefulSet按副本 反亲和的高可用路由之间切换配合自动或自定义的 JSON 路由配置把 Mcrouter 的横向扩展能力与 Kubernetes 的调度能力结合起来。需要再次强调的是该图表已标记废弃deprecated: true仓库自 2020 年 11 月起不再更新本文内容仅适用于存量环境参考或作为自建部署清单的设计蓝本新部署建议基于 facebook/mcrouter 官方 Dockerfile 构建镜像并自行维护高可用方案。赞分享【免费下载链接】charts⚠️(OBSOLETE) Curated applications for Kubernetes项目地址https://gitcode.com/gh_mirrors/chart/charts点击查看免费下载相关推荐Kubernetes 上部署高可用 Consul 集群基于 StatefulSet 的 Helm Chart 实战指南Kubernetes 上部署高可用 Consul 集群基于 StatefulSet 的 Helm Chart 实战指南 本指南以 Kubernetes 官方Goldpinger Helm Chart 部署指南基于 Kubernetes DaemonSet 的集群网络可视性与告警监控Goldpinger Helm Chart 部署指南基于 Kubernetes DaemonSet 的集群网络可视性与告警监控 本文以 Helm Charts基于 Bun 运行时的 Nitro 服务端框架模板零配置部署 Vercel 的实战指南基于 Bun 运行时的 Nitro 服务端框架模板零配置部署 Vercel 的实战指南 本指南围绕当前仓库中的 framework boilerplates/上一篇Docker一键部署AutoBangumi容器化方案与最佳实践下一篇Umi-OCR免费离线 OCR3 步把截图和扫描件变成可搜索文字创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考