- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
VoltDB Kubernetes 管理员手册
前言
这本书描述了如何使用Kubernetes和相关产品来创建和管理VoltDB数据库以及承载这些数据库的集群。它是为数据库管理员和操作员设计的,他们负责在一个容器环境中对数据库基础设施进行持续的管理和维护。
这本书不是关于Kubernetes或VoltDB的教程。请参阅下面的第2部分“相关文档”,以了解可以帮助您熟悉这些主题的文档。
本书结构
本书共分3章和1个附录:
第1章,介绍
第2章,配置VoltDB数据库集群
第3章,在Kubernetes中管理VoltDB数据库
附录A, VoltDB Helm Properties
展开查看详情
1 .VOLTDB VoltDB Kubernetes 管 理员手册 摘要 本文档说明如何通过 Kubernetes 创建和管理 VoltDB 数据库集群。 V10.0
2 . 目录 前言.....................................................................................................................................................2 1 本书结构.............................................................................................................................2 2 相关文档.............................................................................................................................2 第一章 概念.......................................................................................................................................3 1.1 概述:在 Kubernetes 中运行 VoltDB.....................................................................................3 1.2 设置 Kubernetes 环境.......................................................................................................... 5 1.2.1 环境要求....................................................................................................................5 1.2.2 配置主机环境和帐户............................................................................................... 6 1.2.3 配置客户端............................................................................................................... 6 1.2.4 授予 Kubernetes 对 Docker 存储库的访问权......................................................... 7 第二章 配置 VoltDB 数据库集群..................................................................................................... 7 2.1 使用 helm 属性.................................................................................................................... 8 2.2 配置集群和数据库............................................................................................................ 10 2.2.1 集群配置................................................................................................................. 10 2.2.2 配置数据库............................................................................................................. 11 第三章 管理 VoltDB 数据库.......................................................................................................... 14 3.1 使用 helm 管理数据库集群.............................................................................................. 15 3.2 管理数据库内容............................................................................................................... 16 附录 A VoltDB helm 属性................................................................................................................. 18 A.1. 如何使用 helm 属性........................................................................................................19 A.2. 顶级 Kubernetes 选项......................................................................................................19 A.3. Kubernetes 集群启动选项................................................................................................19 A.4. 网络选项.......................................................................................................................... 23 A.5. VoltDB 数据库启动选项................................................................................................... 24 A.6. 数据库配置选项.............................................................................................................. 25
3 .前言 这本书描述了如何使用 Kubernetes 和相关产品来创建和管理 VoltDB 数据库以及承载这 些数据库的集群。它是为数据库管理员和操作员设计的,他们负责在一个容器环境中对数据 库基础设施进行持续的管理和维护。 这本书不是关于 Kubernetes 或 VoltDB 的教程。请参阅下面的第 2 部分“相关文档” ,以 了解可以帮助您熟悉这些主题的文档。 1 本书结构 本书共分 3 章和 1 个附录: 第 1 章,介绍 第 2 章,配置 VoltDB 数据库集群 第 3 章,在 Kubernetes 中管理 VoltDB 数据库 附录 A, VoltDB Helm Properties 2 相关文档 本书假定读者具有 Kubernetes、VoltDB 和其他在 docker 环境中使用的技术(特别是 Docker 和 Helm)的工作知识。有关开发和管理 VoltDB 数据库的信息,请参阅使用 VoltDB 的手册和 VoltDB 管理员指南。对于新用户,请参阅 VoltDB 教程。有关其他产品的介绍资料,请参阅 它们各自的网站,以获得适当的文件: Docker Helm Kubernetes 最后,这本书和所有其他与 VoltDB 相关的文档都可以在 web 上 http://docs.voltdb.com/ 找到
4 .第一章 概念 Kubernetes 是一个用于托管在容器中运行的虚拟化应用程序和服务的环境。它的设计目 的是管理自动化分布式应用程序,特别关注微服务。VoltDB 不是一个单独微服务——在 VoltDB 集群的节点之间存在网络数据交换,这需要额外的注意。因此,尽管可以启动一组通 用的 Kubernetes“pods”来运行一个 VoltDB 数据库,但是需要额外的基础设施来实现 Kubernetes 和 VoltDB 的集成工作。 VoltDB Enterprise Edition 现在提供了额外的服务来自动化的实现 Kubernetes 环境中运行 VoltDB 的能力。VoltDB Kubernetes 提供了 6 个关键组件,其中 3 个作为建立必要的托管环境 的开源应用程序提供,另外 3 个由 VoltDB 提供给企业客户。在 Kubernetes 环境下运行 VoltDB 需要的三个开源产品是: Kubernetes 本身 Docker,用于管理容器映像 Helm,用于在 Kubernetes 中自动创建和管理 VoltDB 集群 除了这些基本需求之外,VoltDB 还提供了以下三个定制组件: 预打包 docker 映像,用于运行 VoltDB 集群节点的 VoltDB Operator,一个单独的实用程序(和 docker 映像),用于在 Kubernetes 中协调 启动和管理 VoltDB 集群 Helm charts,用于初始化和与 Kubernetes、VoltDB 操作符及其关联的 VoltDB 集群 通信。 本章的其余部分概述了这些组件如何协同工作以支持在 Kubernetes 环境中运行虚拟化 的 VoltDB 集群、主机和客户端系统的需求,以及在运行 VoltDB 之前准备主机环境的说明。 后续章节将详细介绍如何配置和启动您的 VoltDB 集群,以及常见的管理任务,例如: 启动、停止和修改 VoltDB 集群 管理数据库模式和配置 最后,附录提供了用于配置和控制 VoltDB 集群的 Helm 属性的完整列表。 1.1 概述:在 Kubernetes 中运行 VoltDB Kubernetes 允许您创建虚拟机集群,在这些虚拟机上运行“pods”。每个 pod 充当独立
5 .的虚拟化系统或容器。容器是运行应用程序或服务所需的系统和应用程序组件的预定义集合。 Kubernetes 提供虚拟机,Docker 定义容器,Kubernetes 还负责启动和停止应用程序所需的适 当数量的 pods。 因此,运行的基本架构是在 Kubernetes 集群中多个 Docker 容器实例上的 VoltDB 数据库 集群。 然而,在没有任何定制的情况下,VoltDB 和 Kubernetes 是没有交互能力的,所以在 pods 何时启动和停止以及一个 VoltDB 节点是否处于活动状态等方面是没有一致意见的。为了解 决这个问题,VoltDB 提供了一个额外的服务,即管理 VoltDB 集群和 Kubernetes 基础设施之 间的交互的 VoltDB Operator,它负责初始化和启动适当的 VoltDB 服务器实例,监视它们的 运行状况,并协调对配置的更改。 为了进一步简化这一过程,VoltDB 使用开源管理产品 Helm 将 Kubernetes、Docker 和 VoltDB 集成在一个界面下。Helm 使用“chart”来定义复杂的管理操作,比如使用适当的 Docker 映像配置和启动 Kubernetes pods,然后在这些 pods 上初始化和启动 VoltDB。只需“安装” 适当的 Helm chart,就可以使用一个命令在 Kubernetes 中实例化和运行一个 VoltDB 数据库 集群。 数据库运行后,可以使用标准的 VoltDB 命令行实用程序与数据库内容进行交互和管理, 比如修改模式或初始化手动快照。但是,对于停止和启动数据库这样的活动,您将继续使用 Helm 来管理数据库的服务器进程和集群。图 1.1, “Kubernetes/VoltDB 架构”显示了使用 VoltDB、 VoltDB Operator 和 Helm 在 Kubernetes 内自动运行 VoltDB 数据库的总体架构。 图 1.1 Kubernetes/VoltDB 架构
6 .1.2 设置 Kubernetes 环境 在容器化环境中运行 VoltDB 之前,必须确保您的主机系统和客户机配置了支持 VoltDB 的正确软件和权限。以下各节概述: 在您用来控制 Kubernetes 和 VoltDB 的主机环境和本地客户端上都需要哪些产品 如何配置主机环境和用户帐户来运行 VoltDB 组件 如何配置您的本地客户端来控制 Kubernetes 和 helm chart 如何设置 Kubernetes 和 Docker 的权限,以允许访问的 voltdb 1.2.1 环境要求 在开始之前,必须确保在主机系统和本地客户机上都安装了正确的软件产品和版本。主 机环境是安装了 Kubernetes 的一组服务器,无论它们是您自己设置的系统,还是由第三方 云服务(如谷歌云平台或 Microsoft Azure)托管的系统。本地客户机环境是用于访问服务的系 统,例如桌面或笔记本电脑。 以下是在 Kubernetes 中运行 VoltDB 的软件需求。 服务器环境 Kubernetes V1.16.2 至 V1.17.x 之间 客户端环境 Kubectl V1.16 or later
7 . Helm V3 还可以选择在客户机上安装 VoltDB,这样就可以使用 voltadmin 和 sqlcmd 命令实用程序 远程访问数据库。如果没有,您仍然可以使用 Kubectl 来 ssh 到托管的服务器实例中,并直 接在 Kubernetes pod 上运行实用程序。 1.2.2 配置主机环境和帐户 安装了必要的软件之后,必须准备运行 VoltDB 的主机环境。这包括添加适当的 Docker 和 chart 库到 helm,并配置您的主机帐户和访问这些存储库所需的权限。 首先,您需要在 Kubernetes 主机环境和存储 VoltDB 映像的 docker 存储库(https://docker.io) 上使用帐户。要运行 VoltDB Helm chart,您的帐户必须设置以下权限: 您的 Kubernetes 主机帐户必须具有足够的权限来分配 persistent volumes 和 claims, 以及创建和管理 pods。 您的 Docker 存储库帐户必须有权限访问 Voltdb Docker images。Voltdb dockerimages 的访问权是按每个帐户分配给 VoltDB 企业客户的。联系 VoltDB 支持以获得更多信 息。 1.2.3 配置客户端 接下来,您必须配置您的客户机环境,以便能够与 Kubernetes 和 Helm 图表通信并控制 它们。首先,安装 Kubernetes 和 Helm 命令行界面 kubectl 和 Helm。接下来,配置服务以访 问适当的远程帐户和存储库。 kubectl 的主要设置任务是控制 Kubernetes 主机和创建适当的上下文。这通常是安装的 一部分,或者通过 Kubconfig 文件和 kubectl config 命令完成。定义了上下文之后,可以使用 kubectl 集群-info 命令来验证客户端是否配置正确。 对于 helm,你必须添加一个链接到 VoltDB docker 储存库,使用 helm repo add 命令: $ helm repo add voltdb \ https://voltdb-kubernetes-charts.storage.googleapis.com 命令的第一个参数(“voltdb”)是一个简短的名称,用于在以后的命令中引用存储库。 您可以指定任何您喜欢的名称。第二个参数是存储库本身的位置,必须如上所示输入。 请注意
8 . Helm 首先在本地文件夹中查找您指定的图表,然后在存储库中查找。因此,如果您使 用的短名称与本地目录匹配,则会导致冲突并导致错误。在这种情况下,您可能希望选择一 个不同的名称,例如“voltkube”,以避免任何歧义。那么在 Helm 命令中使用的图表位置将 是“voltkube/voltdb”,而不是如示例所示的“voltdb/voltdb”。 1.2.4 授予 Kubernetes 对 Docker 存储库的访问权 最后,您需要告诉 Kubernetes 使用 Docker 帐户的凭证访问 Docker 存储库。有几种方法 可以做到这一点。每次安装新的 VoltDB 集群时,都可以在 helm 命令行上指定凭据。您可以 使 用传 递 给 helm 的 其他 参 数将 凭 证保 存 在 YAML 文 件中 。 或者 您 可以 使 用 kubectl 在 Kuerbernetes secret 中设置凭据。 使用 secret 来存储凭证的优点是,您只需要定义一次凭证,而且由于凭证是加密的,所 以不易被其他人发现。要创建一个 Kubernetes secret,使用 kubectl create secret 命令,指定 secret 的类型(docer -registry)和 secret 的名称(必须是 dockerio-registry),再加上作为参数的单 个凭据元素: $ kubectl create secret docker-registry dockerio-registry \ --docker-username=johndoe \ --docker-password='ThisIsASecret' \ --docker-email="jdoe@anybody.org 一旦您添加了 secret,您就不需要再次指定它们。另一方面,如果您希望在发出 helm 命令初始化 VoltDB 集群时指定凭据,您可以使用第 2 章“配置 VoltDB 数据库集群”中描述 的方法将它们作为以下 helm 属性提供: global.image.credentials.username global.image.credentials.password 第二章 配置 VoltDB 数据库集群 Helm 通过协调涉及的所有不同组件(包括 Kubernetes、Docker 和 VoltDB),简化了在 Kubernetes 内启动一个 VoltDB 数据库集群的过程。通过使用 helm chart,可以用一个命令启 动一个默认的 VoltDB 集群:
9 .$ helm install mydb voltdb/voltdb \ --set-file cluster.config.licenseXMLFile=license.xml 名称 mydb 指定您创建的版本的名称,voltdb/voltdb 指定要安装的 Helm 图表,而—— set-file 参定用于定制安装的属性的新值。在本例中,——set-file 指定启动数据库所需的 VoltDB 许可证的位置。许可证是您必须指定的唯一属性;所有其他属性都有默认值,如果没 有显式更改,就会使用默认值。 但是,三个节点且没有模式或配置的默认集群不是特别有用。因此,VoltDB 提供 Helm 属性,让您定制数据库和集群配置的每个方面,包括: 集群配置,包括集群的大小、可用资源等 网络配置,包括端口和外部映射的分配 数据库初始化选项,包括管理用户名和密码、模式和类文件 数据库配置,包括通常在非 kubernetes 安装的 XML 配置文件中找到的设置 下面的部分解释如何使用这些属性对数据库进行一些最常见的自定义。附录 A, VoltDB Helm Properties 提供了一个完整的属性列表,包括简短的描述和每个属性的默认值。 2.1 使用 helm 属性 首先,了解在 Helm 命令行上指定属性的方式是很有用的。下面的讨论并不是对 helm 的完整描述;只是一个概要,让您了解它们是做什么的,以及什么时候使用它们。 Helm 提供了三种不同的方式来指定属性: --set set 标志允许您在命令行上指定各个属性值。可以多次使用--set 或者用逗号分隔多个属 性/值对。例如,下面两个命令是等效的: $ helm install mydb voltdb/voltdb \ --set cluster.serviceSpec.clientPort=22222 \ --set cluster.serviceSpec.adminPort=33333 $ helm install mydb voltdb/voltdb \ --set cluster.serviceSpec.clientPort=22222,\ cluster.serviceSpec.adminPort=33333 set 标志对于设置几个频繁更改的参数或覆盖在命令行(如 YAML 文件)中先前设置的参数
10 .非常有用。 --set-file set-file 标志允许您将文件的内容指定为属性的值。例如,下面的命令将文件 license.xml 的内容设置为启动 VoltDB 集群的许可证: $ helm install mydb voltdb/voltdb \ --set-file cluster.config.licenseXMLFile=license.xml 与--set 一样,可以多次使用--set-file,或者用逗号分隔多个属性/文件对。如果参数的值 太复杂而无法在命令行上直接设置,那么--set-file 标志非常有用。例如,VoltDB 许可文件的 内容。 --values,- f values 标志允许您以 YAML 格式指定包含多个属性定义的文件。 虽然在命令行中使用--set 设置的属性使用点标记来分隔属性层次结构,但 YAML 将层次结构的每个级别放在单独的行 中,后面有一个冒号和缩进。例如,下面的 YAML 文件(和--values 标志设置了与上面--set 示 例相同的两个属性: $ cat ports.yaml cluster: serviceSpec: clientPort: 22222 adminPort: 33333 $ helm install mydb voltdb/voltdb \ --values ports.yaml YAML 文件对于使用不经常更改的值设置多个属性非常有用。还可以使用它们对共同配 置数据库环境的各个方面的属性(如端口设置或安全性)进行分组。 您可以使用前面的任何技术来指定 VoltDB Helm Chart 的属性。实际上,每种方法都可 以在命令行上多次使用,并以任何顺序混合使用。例如,下面的示例使用--values 设置数据 库配置和端口,--set-file 文件标识许可证,--set 指定请求的节点数量: $ helm install mydb voltdb/voltdb \ --values dbconf.xml,dbports.xml \ --set-file cluster.config.licenseXMLFile=license.xml \
11 . --set cluster.config.replicas=5 2.2 配置集群和数据库 在 Kubernetes 中创建一个 VoltDB 数据库集群和使用传统服务器启动一个集群之间的两 个主要区别是: 使用 Helm,只有一个命令(install)执行数据库的初始化和启动。 使用属性,而不是 XML 文件指定数据库配置。 实际上,所有的配置——包括虚拟服务器(pods)、服务器进程和数据库的配置,都是使 用 Helm 属性完成的。下面几节提供使用 Kubernetes 时一些最常见的配置设置示例。附录 A, VoltDB Helm Properties 提供了可定制的所有属性的完整列表。 2.2.1 集群配置 许多在传统服务器平台上通过硬件配置、系统命令或环境变量执行的配置选项现在都可 以通过 Helm 属性使用。大部分设置在 A.3 节“Kubernetes 集群启动选项”中列出。 硬件设置 硬 件 设 置 ( 例 如 处 理 器 数 量 和 内 存 大 小 ) 通 过 cluster.clusterSpec.resources 定 义 为 Kubernetes 映像资源。在“resources”下,可以指定 Kubernetes 在容器中配置 pods 时所期 望的任何 YAML 属性。例如: cluster: clusterSpec: resources: requests: cpu: 500m memory: 1000Mi limits: cpu: 500m memory: 1000Mi 系统设置 通过环境变量定义的进程限制可以使用 cluster.clusterSpec.env 属性进行设置。例如,下
12 .面的 YAML 增加了 Java 最大堆大小并禁用了 JVM 统计信息的收集: cluster: clusterSpec: env: VOLTDB_HEAPMAX: 3072 VOLTDB_OPTS: -XX+PerfDisableSharedMem 一个无法通过 Kubernetes 或 Helm 进行配置的系统设置是,基本平台是否启用了透明巨 页(THP)。这取决于托管 Kubernetes 的实际基础硬件上的内存管理设置。启用 THP 可能会导 致诸如 VoltDB 等内存密集型应用程序出现问题,因此强烈建议在启动集群之前禁用 THP。(请 参阅 VoltDB Administrator's Guide 中关于透明巨大页面的部分, 了解为什么会出现这个问题。) 如果您自己没有管理 Kubernetes 环境,或者不能让您的提供者修改他们的环境,那么 您需要通过设置 cluster.clusterSpec.additionalArgs 属性来覆盖在启动时 VoltDB 关于 THP 的警 告来包括 VoltDB start 参数来禁用对 THP 的检查。例如: cluster: clusterSpec: additionalArgs: "--ignore=thp" 2.2.2 配置数据库 除了配置运行的环境外,还有许多数据库本身的不同特性可以控制。这包括映射网络接 口和端口、选择和配置数据库特性,以及识别数据库模式、类文件和安全设置。 网络设置是通过 cluster.serviceSpec 属性定义,您可以在其中选择各个端口,并选择是 否通过网络服务(cluster.serviceSpec.type)公开它们,您还可以选择。例如,下面的 YAML 文件 禁止公开管理端口,并将外部化的客户端端口分配给 31313: cluster: serviceSpec: type: NodePort adminPortEnabled: false clientPortEnabled: true clientNodePort: 31313
13 . 传 统 上 , VoltDB 的 大 多 数 数 据 库 配 置 选 项 是 在 XML 配 置 文 件 中 定 义 的 。 在 使 用 Kubernetes 时,使用 YAML 和 Helm 属性声明这些选项。 通常,Helm 属性遵循与 XML 配置相同的结构,以“cluster.config”开始。例如,每个主 机的站点数在 XML 中定义为: <deployment> <cluster sitesperhost="{n}"/> </deployment> 在 Kubernetes 中被定义为 cluster: config: deployment: cluster: sitesperhost: {n} 下面的小节给出使用 XML 和 YAML 定义常见数据库配置选项的示例。请参阅第 A.6 节 ,了解用于配置数据库的 Helm 属性的完整列表。 “VoltDB 数据库配置选项” 2.2.2.1 命令日志 命令日志记录提供了数据库的持久性。您可以通过配置命令日志的类型和日志本身的大 小来控制持久性的级别以及恢复数据库所需的时间长度。在 Kubernetes 中,这是通过 cluster.config.deployment.commandlog 属性完成的。下面的例子展示了在 XML 和 YAML 中等 价的配置:
14 .2.2.2.2 导出器 导出器简化了 VoltDB 数据库与外部数据库和系统的集成。您可以使用导出配置来定义 数 据 库 可 以 写 入 的 外 部 “ 目 标 ” 。 在 Kubernetes 中 , 使 用 cluster.config.deployment. exports .configurations 属性定义导出目标。注意,configurations 属性可以接受多个配置定义。 在 YAML 中,即使只有一个元素,也可以通过在每个列表元素前面加上连字符来指定列表。 下面的示例展示了在 XML 和 YAML 中配置文件导出连接器的等效配置: 2.2.2.3 安全及用户帐户 除了 Kerberos 和 SSL 等行业网络解决方案之外,还有许多选项可以保护 VoltDB 数据库, 包括基本用户名和密码。在配置中使用 cluster.config.deployment.security.enabled 属性启用基 本安全性。您还必须使用该属性及其子属性来定义实际的用户名、密码和分配的角色。同样, users 属性需要一列子元素,因此必须在每组属性前加上连字符。 最后,如果启用了基本安全性,还必须告诉 VoltDB Operator 在访问数据库时使用哪个 帐户。为此,需要定义 cluster.config.auth 属性,如下所示,它必须指定具有内置管理员角色 的帐户。下面的示例展示了 XML 和 YAML 中的等效配置,包括给 VoltDB 操作符分配一个帐 户:
15 .第三章 管理 VoltDB 数据库 在 Kubernetes 中运行 VoltDB 时,您将隐式地管理两种独立的技术:数据库集群,它由“节 点”和运行在节点上的服务器进程组成,以及运行数据库集群的 Kubernetes“pods”集合。 在 VoltDB 节点和 Kubernetes pods 之间存在一对一的关系,这两种技术保持同步是很重要的。 好消息是,例如,如果数据库服务器宕机,Kubernetes 会识别出相应的 pod 不“活动”, 并启动一个替代品。另一方面,如果您在不告知 Kubernetes 的情况下故意停止数据库,那 么它会坚持尝试重新创建数据库。 幸运的是,您不必为此担心——因为 VoltDB Operator 和 Helm 图表可以为您管理 VoltDB 和 Kubernetes 的同步。但这确实意味着您必须使用 Helm 和 Operator 来执行影响 Kubernetes 的操作,而不是使用等效的 voltadmin 命令。具体来说,您必须使用 Helm 或 kubectl 来执行 修改集群的操作,包括: 启动数据库 停止数据库 调整数据库 暂停和恢复数据库 然而,您可以使用 voltadmin 或 sqlcmd 实用程序执行影响数据库内部结构或内容的操作。 这些业务包括: 修改模式或运行时配置
16 . 保存或恢复快照 重置 DR 连接 下面的部分描述如何使用 Helm 管理集群,以及如何使用 voltadmin 和 sqlcmd 管理数据 库内容。 3.1 使用 helm 管理数据库集群 在 Kubernetes 中管理 VoltDB 集群的关键是让 helm chart 为您完成工作。如第 2 章所述, 您可以使用 Helm 属性定制数据库和集群的各个方面,配置可以简单也可以复杂,随您选择。 但是一旦您确定了想要使用的配置选项,实际上初始化和启动数据库集群是通过 helm install。 命令执行的,例如: $ helm install mydb voltdb/voltdb \ --values myconfig.yaml \ --set-file cluster.config.licenseXMLFile=license.xml \ --set cluster.clusterSpec.replicas=5 一旦集群运行(Helm 称之为“release”),您就可以通过“upgrading chart”,指定所需节 点数量的新值来调整集群,使其停止、重新启动或调整大小。您可以使用几乎相同的命令升 级 release,您可以使用--reuse-values 标志,只指定需要修改的配置。因此,例如,要停止 集群,只需将副本的数量设置为零,重用所有其他参数: $ helm upgrade mydb voltdb/voltdb \ --reuse-values \ --set cluster.clusterSpec.replicas=0 要在停止集群后重新启动它,你需要将副本数重置为 5,或者你最初定义并启动它时设 置的值: $ helm upgrade mydb voltdb/voltdb \ --reuse-values \ --set cluster.clusterSpec.replicas=5 最后,要调整集群的大小,添加节点或删除节点,只需升级版本,指定所需的新节点数 量。当然,新值必须满足弹性扩展或收缩集群的要求,这在 VoltDB Administrator's Guide 中 关于从集群中添加和删除节点的讨论中已经介绍过。例如,增加两个节点的集群大小,你可
17 .以设置副本数为 7: $ helm upgrade mydb voltdb/voltdb \ --reuse-values \ --set cluster.clusterSpec.replicas=7 使用 helm upgrade 命令的一个警告是,它不仅会升级版本,还会检查原始 chart 在库中 是否有一个新版本(在本例中,是 voltdb/voltdb),并对其进行升级。如果在“第一次启动集 群”和“停止或调整其大小”之间对原始图表进行了更改,可能会出现问题。 公共图表不会经常改变。但是,如果数据库在生产环境中运行的时间较长,则可能会出 现问题。幸运的是,有一个解决办法。为了避免任何意想不到的变化,你可以告诉 Helm 使 用图表的特定版本——你开始使用的版本。 首先,使用 helm list 命令列出您已经安装的所有版本(即数据库实例)。在清单中,它将 包括所使用图表的名称和版本。例如: $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION mydb default 1 2020-08-12 12:45:30 deployed voltdb-1.0.0 10.0.0 然后,您可以在升级版本时指定特定的图表版本,从而避免任何意想不到的副作用: $ helm upgrade mydb voltdb/voltdb \ --reuse-values \ --set cluster.clusterSpec.replicas=7 \ --version=1.0.0 3.2 管理数据库内容 一旦 VoltDB 数据库启动,就可以管理数据库内容了。使用 Kubernetes 不会改变管理数 据库内容的方式。但是,它确实需要一些额外的步骤来确保您能够访问数据库。在 Kubernetes 中,IP 地址直到 pods 启动时才知道。更重要的是,默认情况下,pods 上的网络端口不能在 Kubernetes 虚拟集群本身之外访问。 因此,要远程使用 VoltDB 实用程序(如 voltadmin 和 sqlcmd),首先必须使数据库服务器 具有可访问性。Kubernetes 提供了几种不同的方法来实现这一点,包括端口转发、节点端口、 负载平衡器、外部端口映射,以及其他服务,如 Consul,以帮助管理内部网络与外部地址的
18 .关联。选择哪种方法以及如何设置它们取决于应用程序的需要。但是,一旦可以访问端口, 您就可以使用 VoltDB 实用程序(如 voltadmin --host)的参数远程访问数据库。 建立持久网络映射的一个替代方法是从本地系统交互式地访问各个 pods。您可以使用 kubectl 命令行实用程序来实现这一点。 首先,您需要识别想要访问的 pods。在 kubectl 中,您可以使用 kubectl get pods 命令来 完成此操作。您将注意到,在默认情况下,VoltDB helm 图表根据 helm 发行版名称、文本字 符串“- VoltDB -cluster-”以及从 0 开始的递增数来为 pods 命名。换句话说,如果您使用 helm install mydb voltdb/voltdb 命令创建了一个有三个节点的集群,这三个 pods 将被命名为: mydb-voltdb-cluster-0 mydb-voltdb-cluster-1 mydb-voltdb-cluster-2 然后可以使用 kubectl exec 命令单独访问 pods,指定要访问的 pod 和要运行的命令。例 如,要在第一个 pod 上运行 sqlcmd,可以使用以下命令: $ kubectl exec -it mydb-voltdb-cluster-0 -- sqlcmd SQL Command :: localhost:21212 1> 您甚至可以通过将文件传输到实用程序来远程执行 sqlcmd 命令的本地批处理文件。例 如: $ cat schema.sql CREATE TABLE HELLOWORLD ( HELLO VARCHAR(15), WORLD VARCHAR(15), DIALECT VARCHAR(15) NOT NULL ); PARTITION TABLE HELLOWORLD ON COLUMN DIALECT; $ kubectl exec -it mydb-voltdb-cluster-0 -- sqlcmd < schema.sql Command succeeded. Command succeeded. $
19 .附录 A VoltDB helm 属性 您可以通过 VoltDB 提供的掌舵图与 VoltDB Operator 和 Kubernetes 本身进行通信。您还 可以指定额外的 helm 属性来自定义 helm chart 的作用。属性本质上是分层的,可以在 Helm 命令行中指定为一个或多个 YAML 文件或单独的参数。例如,您可以在一个 YAML 文件中指 定多个属性,然后使用--values 或-f 参数作为命令的一部分引用该文件,如下所示: $ helm install mydb voltdb/voltdb --values myoptions.yaml 或者您可以在命令行中使用--set 标记以点符号单独指定属性,如下所示: $ helm install mydb voltdb/voltdb \ --set cluster.clusterSpec.replicas=5 \ --set cluster.config.deployment.cluster.kfactor=2 \ --set cluster.config.deployment.cluster.sitesperhost=12 在 YAML 中,在单独的行中指定属性的每个元素,在每个父元素之后使用冒号,适当地 缩进每个级别,在最后一个元素之后使用属性的值。在命令行上指定属性,元素由句点分隔, 值在等号后面。因此,在前面的示例中,与命令行属性相匹配的 YAML 文件如下所示: cluster: clusterSpec: replicas: 5 config: deployment: cluster: kfactor: 2 sitesperhost: 12 许多属性都有默认值;下表指定了适用的默认值。您不需要为所有属性指定值。实际上, 您可以启动一个通用的 VoltDB 数据库,只指定许可文件。否则,您只需指定要自定义的那 些属性。 最后,按顺序处理属性并进行覆盖。因此,如果您在两个 YAML 文件中为相同的属性指 定不同的值并将其作为命令行参数,则后一个 YAML 文件设置将覆盖第一个,而命令行选项 将同时覆盖它们。
20 .A.1. 如何使用 helm 属性 以下部分详细介绍了在创建或修改 VoltDB 操作符及其关联集群时可以指定的所有相关 Helm 属性。这些属性被划分为类别,每个类别都由该类别中所有属性共有的根元素来标识: 顶级 Kubernetes 选项 Kubernetes 集群启动选项 网络选项 VoltDB 数据库启动选项 数据库配置选项 为了简洁和可读性,表中的属性仅由根后面的属性的惟一元素列出。但是,在 YAML 中 或在命令行上指定属性时,必须指定完整属性名的所有元素,包括根元素和惟一元素。 A.2. 顶级 Kubernetes 选项 以下属性将影响 Helm 与 Kubernetes 基础设施的交互方式。 Table A.1. Top-Level Options Parameter Description Default cluster.enabled Create VoltDB Cluster true If true, create & use service account for VoltDB cluster cluster.serviceAccount.create true node containers If not set and create is true, a name cluster.serviceAccount.name is generated using the "" fullname template A.3. Kubernetes 集群启动选项 以下属性影响 Kubernetes 集群的规模和结构 Table A.2. Options Starting with cluster.clusterSpec... Parameter Description Default Pod (VoltDB Node) replica .replicas 3 count,
21 . scaling to 0 will shutdown the cluster gracefully Maximum pods unavailable in .maxPodUnavailable kfactor Pod Disruption Budget VoltDB Cluster maintenance .maintenanceMode false mode (pause all nodes) Takes a snapshot when cluster is shutdown by scaling to 0. Valid options are .takeSnapshotOnShutdown "" NoCommandLogging, Always, Never. Defaults to NoCommandLogging (commandlog enabled=false only) if not specified. Always init --force on VoltDB node start/restart. WARNING: .initForce This will destroy VoltDB data false on PVCs except snapshots. Delete and cleanup generated .deletePVC false PVCs when VoltDBCluster is Parameter Description Default deleted, requires finalizers to be enabled (on by default) User-specified list of stopped nodes based on StatefulSet # .stoppedNodes [] (e.g. [ 2, 3 ]) Add additional readiness checks using XDCR to ensure both .additionalXDCRReadiness false clusters are healthy (WARNING: May cause app downtime) Persistent Volume size per .persistentVolume.size Pod 1Gi (VoltDB Node) .persistentVolume Storage Class name to use, "" .storageClassName otherwise use default .ssl.certificateFile PEM encoded certificate chain ""
22 . used by the VoltDB operator when SSL/TLS is enabled If true, skip certificate verification .ssl.insecure false by the VoltDB operator when SSL/TLS is enabled Optional storage configs for provisioning additional .storageConfigs [] persistent volume claims automatically Additional list of volumes that can .additionalVolumes [] be mounted by node containers Pod volumes to mount into the container's filesystem, cannot .additionalVolumeMounts [] be modified once set .image.registry Image registry docker.io .image.repository Image repository voltdb/voltdb-enterprise .image.tag Image tag 10.0.0 .image.pullPolicy Image pull policy Always Additional VoltDB start .additionalStartArgs command args for the pod [] container Pod priority defined by an .priorityClassName existing "" PriorityClass Additional custom Pod .additionalAnnotations {} annotations .additionalLabels Additional custom Pod labels {} CPU/Memory resource .resources requests/ {} limits Node labels for pod .nodeSelector {} assignment Pod tolerations for Node .tolerations [] assignment Parameter Description Default .affinity Node affinity {} {"runAsNonRoot":true, .podSecurityContext Pod security context "runAsUser":1001, "fsGroup":1001}
23 . {"privileged":false, Container security context. "runAsNonRoot":true, WARNING: Changing user or "runAsUser":1001, .securityContext group ID may prevent VoltDB "runAsGroup":1001, from operating. "readOnlyRootFilesystem":tru e} nds Duration in seconds the Pod needs .podTerminationGracePeriodS to terminate gracefully. 30 eco Defaults to 30 seconds if not specified. .livenessProbe.enabled Enable/disable livenessProbe true .livenessProbe Delay before liveness probe is 20 .initialDelaySeconds initiated How often to perform the .livenessProbe.periodSeconds 10 probe .livenessProbe.timeoutSecond When the probe times out 1 s Minimum consecutive failures .livenessProbe.failureThreshol for 20 d the probe Minimum consecutive .livenessProbe.successThresh successes 1 old for the probe .readinessProbe.enabled Enable/disable readinessProbe true Delay before readiness probe .readinessProbe is 20 .initialDelaySeconds initiated .readinessProbe.periodSecond How often to perform the 60 s probe .readinessProbe.timeoutSecon When the probe times out 1 ds Minimum consecutive failures .readinessProbe.failureThresh for 3 old the probe Minimum consecutive .readinessProbe successes 1 .successThreshold for the probe Enable/disable startupProbe, feature flag must also be .startupProbe.enabled enabled true at a cluster level (enabled by default in 1.18) .startupProbe Delay before startup probe is 40
24 ..initialDelaySeconds initiated How often to perform the .startupProbe.periodSeconds 10 probe .startupProbe.timeoutSeconds When the probe times out 1 Minimum consecutive failures .startupProbe.failureThreshold for 20 the probe Minimum consecutive .startupProbe.successThreshol successes 1 d for the probe Parameter Description Default VoltDB cluster additional java .env.VOLTDB_OPTS runtime options "" (VOLTDB_OPTS) VoltDB cluster heap size .env.VOLTDB_HEAPMAX "" (VOLTDB_HEAPMAX) .env .VOLTDB_K8S_LOG_CON VoltDB log4jcfg file path "" FIG Key-value map of additional envvars to set in all VoltDB .customEnv {} node containers A.4. 网络选项 下列属性指定要使用的端口和端口映射协议。 Table A.3. Options Starting with cluster.serviceSpec... Parameter Description Default VoltDB service type (options .type ClusterIP, NodePort, and ClusterIP LoadBalancer) VoltDB Management Center .vmcPort web 8080 interface Service port Port to expose VoltDB Management Center service .vmcNodePort on 31080 each node, type NodePort only .vmcSecurePort VoltDB Management Center 8443
25 . secure web interface Service port Port to expose VoltDB Management Center secure .vmcSecureNodePort 31443 service on each node, type NodePort only VoltDB replication exposed .replicationPort 5555 Service port Port to expose VoltDB replication .replicationNodePort 31555 service on each node, type NodePort only Enable exposing admin port .adminPortEnabled with true the VoltDB Service VoltDB Admin exposed .adminPort Service 21211 port Port to expose VoltDB Admin .adminNodePort service on each node, type 31211 NodePort only Enable exposing client port .clientPortEnabled with true the VoltDB Service Parameter Description Default VoltDB Client exposed .clientPort service 21212 port Port to expose VoltDB Client .clientNodePort service on each node, type 31212 NodePort only .loadBalancerIP VoltDB Load Balancer IP "" VoltDB Load Balancer Source .loadBalancerSourceRanges [] Ranges List of IP addresses at which .externalIPs the [] VoltDB service is available A.5. VoltDB 数据库启动选项 以下属性会影响 Helm 与 VoltDB 集群 adn 特定初始化选项(如初始模式和过程类)的交互
26 .方式。 Table A.4. Options Starting with cluster.config... Parameter Description Default User added for operator VoltDB .auth.username API communication when voltdb-operator hash security is enabled Password added for operator .auth.password VoltDB API communication "" when hash security is enabled List of optional schema .schemas files containing data defintion [] statements List of optional jar files .classes container [] stored procedures VoltDB Enterprise .licenseXMLFile {} license.xml Custom Log4j configuration .log4jcfgFile {} file A.6. 数据库配置选项 以下属性定义了 VoltDB 数据库配置。 Table A.5. Options Starting with cluster.config.deployment... Parameter Description Default K-factor to use for database .cluster.kfactor durability and data safety 1 replication SitesPerHost for VoltDB .cluster.sitesperhost 8 Cluster Internal VoltDB cluster verification of presence of .heartbeat.timeout 90 other nodes (seconds) Parameter Description Default Controls detection of network .partitiondetection.enabled true partitioning .commandlog.enabled Command logging for true
27 . database durability (recommended) Command logging allocated .commandlog.logsize disk 1024 space (MB) Transactions do not complete .commandlog.synchronous false until logged to disk How often the command log is .commandlog.frequency.time 200 written, by time (milliseconds) How often the commang log .commandlog.frequency is 2147483647 .transactions written, by transaction command .dr.id Unique cluster id, 0-127 0 Role for this cluster, one of: .dr.role master master, replica, xdcr, none Specifies whether disaster .dr.connection.enabled false recovery is enabled If role is replica or xdcr: list of .dr.connection.source host names or IP addresses of "" remote node(s) .dr.connection.preferredSourc Cluster ID of preferred source "" e Certificate file for DR .dr.connection.ssl consumer "" (replica or xdcr mode) .export.configurations List of export configurations [] .import.configurations List of import configurations [] Determines if HTTP API .httpd.enabled daemon true is enabled Determines if jSON over .httpd.jsonapi.enabled HTTP true API is enabled /pvc/voltdb/CLUSTER_NAM Directory path for command .paths.commandlog.path E log /command_log Directory path for command /pvc/voltdb/CLUSTER_NAM .paths.commandlogsnapshot.p log E ath snapshot /command_log_snapshot Directory path for disaster /pvc/voltdb/CLUSTER_NAM .paths.droverflow.path recovery overflow E
28 . /dr_overflow /pvc/voltdb/CLUSTER_NAM Directory path for export .paths.exportcursor.path E cursors /export_cursor /pvc/voltdb/CLUSTER_NAM Directory path for export .paths.exportoverflow.path E overflow /export_overflow /pvc/voltdb/CLUSTER_NAM Directory path for large query .paths.largequeryswap.path E swapping /large_query_swap Directory path for snapshots. /pvc/voltdb/CLUSTER_NAM .paths.snapshots.path If not default, path must not E be a read-only root folder of /snapshots Parameter Description Default mounted storage (as init --force will rename snapshot folder). Use a subfolder (such as snapshots) when possible. Controls whether user-based authentication and .security.enabled false authorization are used Allows use of external Kerberos .security.provider hash provider; one of: hash, kerberos Enable/disable periodic .snapshot.enabled automatic true snapshots Frequency of automatic .snapshot.frequency snapshots 24h (in s,m,h) Unique prefix for snapshot .snapshot.prefix AUTOSNAP files .snapshot.retain Number of snapshots to retain 2 Enables or disables use of .snmp.enabled false SNMP Host name or IP address, and .snmp.target optional port (default 162), for "" SNMP server
29 . SNMPv3 authentication key if .snmp.authkey voltdbauthkey protocol is not NoAuth SNMPv3 authentication .snmp.authprotocol protocol. SHA One of: SHA, MD5, NoAuth .snmp.community Name of SNMP community public SNMPv3 privacy key if .snmp.privacykey protocol voltdbprivacykey is not NoPriv SNMPv3 privacy protocol. One .snmp.privacyprotocol of: AES, DES, 3DES, AES AES192, AES256, NoPriv Username for SNMPv3 authentication; else SNMPv2c .snmp.username "" is used Enables TLS/SSL security for the .ssl.enabled false HTTP port (default 8080, 8443) Extends TLS/SSL security to all external ports (default .ssl.external false admin 21211, client 21212) Extends TLS/SSL security to .ssl.internal the false internal port (default 3021) Extends TLS/SSL security to .ssl.dr the false DR port (5555) Keystore file to mount at the .ssl.keystore.file "" keystore path Parameter Description Default File-path to the VoltDB .ssl.keystore.path keystore /etc/voltdb/ssl/keystore.jks location .ssl.keystore.password Password for VoltDB keystore "" Truststore file to mount at the .ssl.truststore.file "" truststore path File-path to the VoltDB .ssl.truststore.path /etc/voltdb/ssl/cacerts.jks truststore