ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Helm 实战:使用 MariaDB 官方 Chart 在 Kubernetes 上部署高可用数据库集群

Helm 实战:使用 MariaDB 官方 Chart 在 Kubernetes 上部署高可用数据库集群 Helm 实战使用 MariaDB 官方 Chart 在 Kubernetes 上部署高可用数据库集群【免费下载链接】helmThe Kubernetes Package Manager项目地址: https://gitcode.com/GitHub_Trending/hel/helm本指南以当前仓库中随测试样例附带的一份经典 Bitnami MariaDB Chart 文档README.md为核心主体完整讲解如何使用 Helm 在 Kubernetes 集群上安装、配置、初始化并持久化 MariaDB 主从复制集群。读完本文你将掌握 Chart 安装/卸载命令、全部核心 values 参数的含义与默认值、--set与-f values.yaml两种传参方式以及初始化脚本与持久化卷的底层实现原理。背景MariaDB 与这份 Chart 文档的来源MariaDB 是全球最流行的数据库服务器之一由 MySQL 的原班开发团队创建并承诺永久开源著名用户包括 Wikipedia、Facebook 和 Google。作为关系型数据库它提供标准 SQL 接口访问数据最新版本还内置了 GIS 与 JSON 能力。本文讲解的这份文档来自仓库中用于 Helm 依赖解析测试的样例 Chartchart-with-uncompressed-dependencies——它模拟的是一个 WordPress 应用 Chartversion 2.1.8通过 requirements.yaml 声明了对mariadb子 Chartversion 4.3.1的依赖并采用未压缩依赖uncompressed dependencies目录形式存放即直接在charts/目录下保留原始目录结构而不是打包成.tgz。该样例被 dependency_test.go 等测试用例用来验证依赖解析逻辑因此这份 MariaDB README 是 Helm Chart 生态中极具代表性的实战文档其中的安装命令、配置参数与模板实现至今仍有很强的参考价值。TL;DR一条命令部署 MariaDB$ helm install stable/mariadb该命令会以默认配置将 MariaDB 部署到当前 Kubernetes 集群。此命令来自 Chart 托管在 Helm 官方 stable 仓库时期的写法如果 Chart 已不在 stable 仓库中可使用helm repo add添加对应仓库后以仓库名/mariadb的形式安装。前置条件Prerequisites部署前需确认集群满足以下条件Kubernetes 1.4且已启用 Beta API本 Chart 的 StatefulSet 模板使用apps/v1beta1API参见 master-statefulset.yaml底层基础设施支持 PV provisioner持久卷动态供应因为默认配置下主从节点都需要持久化存储。安装 ChartInstalling the Chart以 release 名称my-release安装$ helm install --name my-release stable/mariadb命令会在 Kubernetes 集群上以默认配置部署 MariaDB。该命令使用的--name参数是 Helm 2 时代的写法在 Helm 3 中 release 名直接作为位置参数传入例如helm install my-release repo/mariadb。安装后可随时用helm list查看所有已部署的 release。通过--set指定参数配置参数可通过--set keyvalue[,keyvalue]逐项指定。例如$ helm install --name my-release \ --set root.passwordsecretpassword,user.databaseapp_database \ stable/mariadb上述命令将 MariaDBroot账户密码设置为secretpassword并额外创建一个名为app_database的数据库注意README 中此处的root.password、user.database与 values.yaml 中的实际键名rootUser.password、db.user/db.name并不完全一致实际使用时以 values.yaml 中的键名为准。通过 values 文件指定参数也可以准备一个 YAML 文件集中存放参数再用-f传入$ helm install --name my-release -f values.yaml stable/mariadbChart 自带的默认 values.yaml 可以作为编写自定义 values 文件的起点。卸载 ChartUninstalling the Chart$ helm delete my-release该命令会移除与该 release 关联的所有 Kubernetes 组件StatefulSet、Service、ConfigMap、Secret 等并删除 release 记录。对应底层逻辑可参考仓库中的卸载实现 pkg/action/uninstall.go。核心配置参数全解析以下表格列出了 MariaDB Chart 的可配置参数及其默认值默认值以本仓库附带的 values.yaml 为准参数说明默认值image.registryMariaDB 镜像仓库docker.ioimage.repositoryMariaDB 镜像名bitnami/mariadbimage.tagMariaDB 镜像标签本样例为10.1.34-debian-9README 中写作{VERSION}image.pullPolicy镜像拉取策略latest标签为Always否则为IfNotPresentimage.pullSecrets私有镜像仓库拉取密钥nil不注入service.typeKubernetes Service 类型ClusterIPservice.portMySQL 服务端口3306rootUser.passwordroot用户密码随机 10 位字母数字串rootUser.forcePassword强制用户指定密码falsedb.user需要创建的新用户名nildb.password新用户密码定义db.user时随机生成 10 位字母数字串db.name需要创建的新数据库名my_databasereplication.enabled是否启用 MariaDB 复制truereplication.user复制用户replicatorreplication.password复制用户密码随机 10 位字母数字串master.antiAffinityMaster Pod 反亲和策略softmaster.persistence.enabled使用 PersistentVolumeClaim 持久化truemaster.persistence.annotationsPVC 注解{}master.persistence.storageClassPVC 存储类空使用默认 provisionermaster.persistence.accessModesPVC 访问模式[ReadWriteOnce]master.persistence.size持久卷大小8Gimaster.configMaster 服务端 my.cnf 配置values.yaml 中内置默认配置master.resourcesMaster 节点 CPU/内存 requests/limits{}master.livenessProbe.*Master 存活探针enabled/initialDelaySeconds/periodSeconds/timeoutSeconds/successThreshold/failureThresholdtrue/120/10/1/1/3master.readinessProbe.*Master 就绪探针true/15/10/1/1/3slave.replicasSlave 副本期望数量1slave.antiAffinitySlave Pod 反亲和策略softslave.persistence.*Slave 持久化配置与 master 一致true/{}/空/[ReadWriteOnce]/8Gislave.configSlave 副本 my.cnf 配置values.yaml 中内置默认配置slave.resourcesSlave 节点资源请求/限制{}slave.livenessProbe.*Slave 存活探针true/120/10/1/1/3slave.readinessProbe.*Slave 就绪探针true/15/10/1/1/3metrics.enabled启动 Prometheus exporter sidecarfalsemetrics.image.registryExporter 镜像仓库docker.iometrics.image.repositoryExporter 镜像名prom/mysqld-exportermetrics.image.tagExporter 镜像标签v0.10.0metrics.image.pullPolicyExporter 镜像拉取策略IfNotPresentmetrics.resourcesExporter 资源请求/限制nil以上参数与 bitnami/mariadb 镜像的环境变量一一对应更多细节可参考该镜像的官方文档。从模板源码看参数如何生效密码与 Secret 生成secrets.yaml 展示了密码注入的完整逻辑用户显式提供密码时用b64enc编码写入 Secret未提供且forcePassword为false时用randAlphaNum 10生成 10 位随机密码未提供但forcePassword为true时用required强制校验并报错。模板中还会通过existingSecret判断是否跳过 Secret 创建。主从架构master-statefulset.yaml 中可以看到 Master 以 StatefulSet 形式部署固定replicas: 1从环境变量MARIADB_ROOT_PASSWORD、MARIADB_DATABASE、MARIADB_REPLICATION_MODEmaster、MARIADB_REPLICATION_USER等读取配置MARIADB_REPLICATION_PASSWORD通过secretKeyRef从 Secret 引用master.antiAffinity为hard时生成requiredDuringSchedulingIgnoredDuringExecution亲和规则为soft时生成preferredDuringSchedulingIgnoredDuringExecution权重 1规则。探针实现liveness 与 readiness 探针均通过exec执行mysqladmin status -uroot -p$MARIADB_ROOT_PASSWORD来判断数据库可用性探针的各个阈值参数直接来自 values。my.cnf 下发master-configmap.yaml 将master.config渲染为 ConfigMap 中的my.cnf并通过subPath挂载到/opt/bitnami/mariadb/conf/my.cnf。values.yaml 中的默认配置包含[mysqld]skip-name-resolve、explicit_defaults_for_timestamp、max_allowed_packet16M、UTF8 字符集与排序规则等、[client]与[manager]三个段落可直接作为自定义基线。初始化全新实例Initialize a fresh instanceBitnami MariaDB 镜像支持在首次启动时执行自定义初始化脚本。只需将脚本放入 Chart 目录下的files/docker-entrypoint-initdb.d文件夹中脚本便会被渲染成 ConfigMap 供容器消费。本样例 Chart 中对应的目录为 files/docker-entrypoint-initdb.d其中包含一个 README 占位。支持的脚本扩展名.sh.sql.sql.gz底层实现见 initialization-configmap.yaml它通过 Helm 模板函数(.Files.Glob files/docker-entrypoint-initdb.d/*).AsConfig将目录内所有文件整体转换为 ConfigMap 的data字段随后在 StatefulSet 中以custom-init-scripts卷挂载到/docker-entrypoint-initdb.d。这意味着初始化脚本如建库、建表、导入初始数据会在数据库首次初始化时自动按序执行。持久化PersistenceBitnami MariaDB 镜像将 MariaDB 数据与配置存放在容器的/bitnami/mariadb路径下。Chart 会在该位置挂载一个 Persistent Volume 卷默认使用动态卷供应dynamic volume provisioning创建卷——即模板中的volumeClaimTemplates见 master-statefulset.yaml这是 StatefulSet 特有的按副本自动生成 PVC 的机制也可以通过master.persistence.storageClass/slave.persistence.storageClass指定存储类留空使用集群默认 provisionerAWS 上为gp2GKE/AWS/OpenStack 上为standard设为-时模板会渲染出storageClassName: 从而禁用动态供应对应 master-statefulset.yaml 中的eq -判断若persistence.enabled为false模板会退回使用emptyDir数据随 Pod 生命周期结束而丢失仅适合测试环境也可以指定一个已存在的 PersistentVolumeClaim 来复用已有数据卷。与 Helm 仓库源码的印证这份样例 Chart 的作用这份 MariaDB Chart 文档所在目录整体是 Helm 自身的测试数据testdata。从源码结构看pkg/action/dependency_test.go 使用chart-with-uncompressed-dependencies与打包版本chart-with-uncompressed-dependencies-2.1.8.tgz对比验证依赖解析的一致性相关预期输出存放在 pkg/action/testdata/output/list-uncompressed-deps.txt 等文件中。这印证了本文所有命令、参数与模板行为都来自真实可运行的 Helm Chart读者在编写自己的数据库类 Chart尤其是涉及 StatefulSet、Secret 密码生成、ConfigMap 配置下发、PVC 持久化和 Prometheus 监控 sidecar 的场景时完全可以参照本 Chart 的实现模式。小结通过本指南你可以完成 MariaDB 在 Kubernetes 上的完整生命周期管理使用helm install部署主从复制集群、通过--set或 values 文件精细控制镜像、密码、存储、探针与监控等 40 余项参数、利用files/docker-entrypoint-initdb.d目录注入初始化脚本、并通过持久卷保证数据安全。上述每一处配置都可以在仓库样例的 values.yaml 与templates/目录的源码中找到对应实现是一份文档 源码高度自洽的 Helm Chart 实战范本。【免费下载链接】helmThe Kubernetes Package Manager项目地址: https://gitcode.com/GitHub_Trending/hel/helm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表