安装 Vertica DB 操作器

自定义资源定义 (CRD)、VerticaDB 操作器和准入控制器协同维护环境状态并自动执行任务:

  • CRD 扩展 Kubernetes API 以提供自定义对象。它用作自定义资源 (CR) 实例的蓝图,用于指定环境的所需状态。

  • VerticaDB 操作器是一个自定义控制器,用于监控 CR 实例以维护 VerticaDB 对象的所需状态。您可以为每个命名空间部署一个 VerticaDB 操作器,该操作器仅监控此命名空间内的 VerticaDB 对象。

  • 准入控制器是一个 webhook,它查询 REST 端点以验证对 CR 实例中可变状态的更改。

先决条件

安装选项

Vertica 提供了两个单独的选项来安装 VerticaDB 操作器和准入控制器:

使用 OperatorHub.io 安装

OperatorHub.io 是允许供应商共享 Kubernetes 操作器的注册表。每个供应商都必须遵守包装指南以简化用户采用。

要从 OperatorHub.io 安装 VerticaDB 操作器,请导航到 Vertica 操作器页面,按照安装说明进行操作。

使用 Helm 图表安装

Vertica 将 VerticaDB 操作器和准入控制器打包在 Helm 图表中。基于 Kubernetes 的 Vertica 允许每个命名空间有一个操作器实例。

为准入控制器配置 TLS

在安装 VerticaDB Helm 图表之前,必须为准入控制器配置 TLS。准入控制器使用一个需要借助于 TLS 证书进行数据加密的 webhook。选择以下数据加密选项之一:

  • cert-manager(用于生成和管理证书)。对于使用自签名证书颁发机构 (CA) 的环境,Vertica 建议使用 cert-manager。

  • 自定义证书

默认情况下,自定义资源使用 cert-manager,除非您提供自定义证书。如果您不安装 cert-manager 或不提供自定义证书,则无法安装 VerticaDB 操作器 Helm 图表。

安装 cert-manager

cert-manager 在 GitHub 存储库中作为 YAML 清单提供。

  1. 使用 kubectl 安装 cert-manager:

    $ kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.3/cert-manager.yaml
    

    安装可能耗费几分钟时间。

  2. 验证 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 存储库中提供:

  1. 将 operator-rbac.yaml 应用于命名空间:

    $ kubectl apply -n namespace -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/operator-rbac.yaml
    
  2. 使用 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:

以下安装步骤使用自定义证书:

  1. 将 Vertica Helm 图表添加到您的存储库。以下命令安装 CRD Helm 图表并将其命名为 vertica-charts 以供将来参考:

    $ helm repo add vertica-charts https://vertica.github.io/charts
    
  2. 更新 Helm 存储库以确保您使用的是最新版本的存储库:

    $ helm repo update
    
  3. 安装操作器 Helm 图表。以下示例演示了最常见的 Helm 图表配置。有关 Helm 图表选项和参数的详细信息,请参阅 Helm 图表参数

    输入以下命令之一以自定义 Helm 图表安装:

    • 默认配置。以下命令需要群集管理员权限:

      $ helm install operator-name --namespace namespace --create-namespace vertica-charts/verticadb-operator
      
    • 自定义证书。使用 webhook.caBundlewebhook.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
      

有关 helm install的更多详细信息,请参阅官方文档

升级操作器

安装 Helm 图表时包含 CRD,但 helm install 命令不会覆盖现有 CRD。要升级操作器,您必须使用 GitHub 存储库中的清单更新 CRD。使用 CRD 升级操作器需要以下先决条件:

此外,必须升级 VerticaAutoscaler 自定义资源,即使您在您的环境中不使用它也是如此。VerticaAutoscaler CR 随操作器一起安装,并作为单独的 YAML 清单进行维护。升级 VerticaAutoscaler CR 以确保您的操作器完全升级。

使用 kubectl apply 升级 VerticaDB 操作器和 VerticaAutoscaler 的 CRD:

  1. 升级 VerticaDB 操作器 CRD:

    $ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticadbs.vertica.com-crd.yaml
    
  2. 升级 VerticaAutoscaler CRD:

    $ kubectl apply -f https://github.com/vertica/vertica-kubernetes/releases/latest/download/verticaautoscalers.vertica.com-crd.yaml