安装 Vertica DB 操作器
自定义资源定义 (CRD)、VerticaDB 操作器和准入控制器协同维护环境状态并自动执行任务:
-
CRD 扩展 Kubernetes API 以提供自定义对象。它用作自定义资源 (CR) 实例的蓝图,用于指定环境的所需状态。
-
VerticaDB 操作器是一个自定义控制器,用于监控 CR 实例以维护 VerticaDB 对象的所需状态。您可以为每个命名空间部署一个 VerticaDB 操作器,该操作器仅监控此命名空间内的 VerticaDB 对象。
-
准入控制器是一个 webhook,它查询 REST 端点以验证对 CR 实例中可变状态的更改。
先决条件
-
Kubernetes 1.21.1 及更高版本
-
Helm 3.5.0 及更高版本
安装选项
Vertica 提供了两个单独的选项来安装 VerticaDB 操作器和准入控制器:
注意
每个安装选项都有自己的工作流程,与其他选项不兼容。例如,您不能使用 Helm 图表安装 VerticaDB 操作器,然后使用 OperatorHub.io 在同一环境中部署操作器。使用 OperatorHub.io 安装
OperatorHub.io 是允许供应商共享 Kubernetes 操作器的注册表。每个供应商都必须遵守包装指南以简化用户采用。
要从 OperatorHub.io 安装 VerticaDB 操作器,请导航到 Vertica 操作器页面,按照安装说明进行操作。
使用 Helm 图表安装
Vertica 将 VerticaDB 操作器和准入控制器打包在 Helm 图表中。基于 Kubernetes 的 Vertica 允许每个命名空间有一个操作器实例。
重要
Vertica 建议您使用 Kubernetes 1.21.1 或更高版本。早期版本需要您向每个包含操作器的命名空间添加kubernetes.io/metadata.name=namespace-name
标签。
为准入控制器配置 TLS
在安装 VerticaDB Helm 图表之前,必须为准入控制器配置 TLS。准入控制器使用一个需要借助于 TLS 证书进行数据加密的 webhook。选择以下数据加密选项之一:
-
cert-manager(用于生成和管理证书)。对于使用自签名证书颁发机构 (CA) 的环境,Vertica 建议使用 cert-manager。
-
自定义证书
默认情况下,自定义资源使用 cert-manager,除非您提供自定义证书。如果您不安装 cert-manager 或不提供自定义证书,则无法安装 VerticaDB 操作器 Helm 图表。
安装 cert-manager
cert-manager 在 GitHub 存储库中作为 YAML 清单提供。
-
使用
kubectl
安装 cert-manager:$ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
安装可能耗费几分钟时间。
-
验证 cert-manager 安装:
$ kubectl get pods --namespace cert-manager NAME READY STATUS RESTARTS AGE cert-manager-7dd5854bb4-skks7 1/1 Running 5 12d cert-manager-cainjector-64c949654c-9nm2z 1/1 Running 5 12d cert-manager-webhook-6bdffc7c9d-b7r2p 1/1 Running 5 12d
有关 cert-manager 安装验证的更多详细信息,请参阅 cert-manager 文档。
定义自定义证书
自定义证书需要 TLS 密钥,该密钥使用准入控制器 webhook 的完全限定域名 (FDQN) 来设置使用者备用名称 (SAN)。您可以使用以下格式在配置文件中设置 SAN:
[alt_names]
DNS.1 = verticadb-operator-webhook-service.namespace.svc
DNS.2 = verticadb-operator-webhook-service.namespace.svc.cluster.local
有关 TLS 和 Vertica 的详细信息,请参阅 TLS 协议。
在安装 VerticaDB 操作器和准入控制器 Helm 图表时,您可以传递参数以自定义 Helm 图表。在将自定义证书作为参数传递之前,将它们隐藏在 Secret 中。以下命令创建用于存储 TLS 密钥、TLS 证书和 CA 证书的 Secret:
$ kubectl create secret generic tls-secret --from-file=tls.key=/path/to/tls.key --from-file=tls.crt=/path/to/tls.crt --from-file=ca.crt=/path/to/ca.crt
安装 VerticaDB 操作器和准入控制器 Helm 图表时使用 tls-secret
。有关详细示例,请参阅 Helm 图表参数。
授予操作器权限
您必须具有群集管理员权限才能安装操作器 Helm 图表。在某些情况下,您可能希望为具有较低权限的用户授权,以在特定命名空间中安装操作器。您可以使用预配置的 Kubernetes 服务帐户授予这些操作器权限。
Vertica 利用 Kubernetes RBAC 向服务帐户授予执行操作器操作的权限。您可以将操作器权限授予 Role 资源类型,然后定义将该 Role 与服务帐户相关联的 RoleBinding 资源类型。任何用户都可以使用 serviceAccountOverride 参数将服务帐户名称传递给 helm install
命令并安装操作器。
以下步骤使用 YAML 文件 operator-rbac.yaml。此示例文件定义了 ServiceAccount、Role 和 RoleBinding 以向服务帐户授予所需的权限。它在 vertica-kubernetes GitHub 存储库中提供:
-
将 operator-rbac.yaml 应用于命名空间:
$ kubectl apply -n namespace -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/operator-rbac.yaml
-
使用
kubectl get
验证所做的更改:-
服务帐户:
$ kubectl get serviceaccounts NAME SECRETS AGE default 1 71m verticadb-operator-controller-manager 1 69m
-
正确命名空间中的 Role:
$ kubectl get roles -n namespace NAME CREATED AT verticadb-operator-leader-election-role 2022-04-14T16:26:53Z verticadb-operator-manager-role 2022-04-14T16:26:53Z
-
正确命名空间中的 RoleBinding:
$ kubectl get rolebinding -n namespace NAME ROLE AGE verticadb-operator-leader-election-rolebinding Role/verticadb-operator-leader-election-role 73m verticadb-operator-manager-rolebinding Role/verticadb-operator-manager-role 73m
-
安装 Helm 图表
在安装 Helm 图表之前,必须使用以下选项之一为准入控制器配置 TLS:
以下安装步骤使用自定义证书:
-
将 Vertica Helm 图表添加到您的存储库。以下命令安装 CRD Helm 图表并将其命名为
vertica-charts
以供将来参考:$ helm repo add vertica-charts https://vertica.github.io/charts
-
更新 Helm 存储库以确保您使用的是最新版本的存储库:
$ helm repo update
-
安装操作器 Helm 图表。以下示例演示了最常见的 Helm 图表配置。有关 Helm 图表选项和参数的详细信息,请参阅 Helm 图表参数。
注意
以下每个命令都包含--create-namespace
选项以创建所提供的命名空间(如果不存在)。如果您在安装期间未提供命名空间,Helm 会在kubectl
配置文件中定义的当前命名空间中安装操作器。输入以下命令之一以自定义 Helm 图表安装:
-
默认配置。以下命令需要群集管理员权限:
$ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator
-
自定义证书。使用
webhook.caBundle
和webhook.tlsSecret
传递自定义证书。以下命令需要群集管理员权限,并使用定义自定义证书中创建的 tls-secret Secret:$ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator \ --set webhook.caBundle=$(cat /path/to/root.pem | base64 --wrap 0) \ --set webhook.tlsSecret=tls-secret
-
服务帐户覆盖。使用服务帐户允许没有群集管理员权限的用户安装操作器。使用
serviceAccountNameOverride
参数传递服务帐户:$ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator \ --set serviceAccountNameOverride=service-account-name
有关详细信息,请参阅授予操作器安装权限。
-
不安装准入控制器 webhook。部署 webhook 需要群集范围的权限,而安装操作器不需要这些权限。如果为您使用的服务帐户授予了安装操作器(而不是 webhook)所需的权限,请为该服务帐户提供
serviceAccountNameOverride
,并将webhook.enable
设置为false
以仅部署操作器:$ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator \ --set serviceAccountNameOverride=service-account-name --set webhook.enable=false
当心
Webhook 可防止对自定义资源进行无效的状态更改。在没有 Webhook 验证的情况下在 Kubernetes 上运行 Vertica 可能会导致无效的状态转换。
-
有关 helm install
的更多详细信息,请参阅官方文档。
升级操作器
安装 Helm 图表时包含 CRD,但 helm install
命令不会覆盖现有 CRD。要升级操作器,您必须使用 GitHub 存储库中的清单更新 CRD。使用 CRD 升级操作器需要以下先决条件:
-
群集管理员权限
此外,必须升级 VerticaAutoscaler 自定义资源,即使您在您的环境中不使用它也是如此。VerticaAutoscaler CR 随操作器一起安装,并作为单独的 YAML 清单进行维护。升级 VerticaAutoscaler CR 以确保您的操作器完全升级。
使用 kubectl apply
升级 VerticaDB 操作器和 VerticaAutoscaler 的 CRD:
-
升级 VerticaDB 操作器 CRD:
$ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadbs.vertica.com-crd.yaml
-
升级 VerticaAutoscaler CRD:
$ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticaautoscalers.vertica.com-crd.yaml