暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Amazon EKS x Vertica 无缝连通之操作详解

Vertica 2023-02-21
797

犹记得不久前,我们学习了在小型的个人笔记本上直接通过 Kubernetes(K8s)调度 Vertica 的步骤

对于小范围的尝试而言,这已足够了,但如果——您想在更大的系统上运行 Vertica 呢?

今天您将了解:如何通过 Amazon Elastic Kubernetes Service(EKS)部署 Vertica,我们将重点介绍新运营版本中最新的功能,让 Vertica 与 AWS S3 Bucket 的连接变成一件再容易不过的事儿。

撰文 _ Vertica Global

编辑 _ Lu,Vertica 中国



我们首先需要假设一些前提条件,您必须拥有:


  • 一定的 EKS 操作经验

  • 在 EKS 上运行的 K8s 集群

  • K8s 集群的 CLI 访问

  • Helm CLI 本地版本



部署 Operator

Deploying the Operator



首先,我们必须部署 Operator。此步骤会连带创建部署对象,其中运行着 Operator 的 pod,它同时还注册了一系列自定义的资源定义(CRD),提供在 K8s 中部署和管理 Vertica 集群的 API。

我们总共为 Operator 提供了两大部署选项:官方 Vertica Helm 图,或者运营商生命周期管理器(OLM)。我们选择前者进行安装。您可以运行下属命令来部署 Operator:

    $ helm repo add vertica-charts https://vertica.github.io/charts 
    $ helm repo update vertica-charts
    $ helm install vdb-op --wait --namespace blog --create-namespace vertica-chart

    这些命令意在将 Operator 安装在一个新的名为“blog”的资源空间中,而且操作员只对单一命名空间的对象工作。如果您想在不同的命名空间中拥有多个 Vertica 集群就需要多次部署 Operator。

    该命令将在 Operator pod 启动运行之后返回。



    公用存储认证选项

    Communal Storage

    Authentication Options



    现在,我们可以部署一个 Vertica 数据库了。

    Operator 同时安装了一些 CRD 以创建和管理 Vertica 数据库。您用于创建这些 CRD 的实例被称为“自定义资源”(CR),就像对其他 K8s 对象一样。

    您可以通过以下命令看到 Vertica 的特定 CR:

      $ kubectl api-resources | grep -E '^NAME|vertica.com' 
      NAME SHORTNAMES APIVERSION NAMESPACED KIND
      verticaautoscalers vas vertica.com/v1beta1 true VerticaAutoscaler
      verticadbs vdb vertica.com/v1beta1 true VerticaDB

      该命令要求名为“VerticaDB”的 CR 创建并管理整个 Vertica 集群。另一个 CR“VerticaAutoscaler”,负责管理 VerticaDB 的自动扩展。

      在启动 Vertica 集群之前,我们必须决定 Vertica 访问 AWS S3 公共存储的方式。您可以通过以下选项之一来验证 AWS S3:


      • 密钥和访问密钥

      • 连接至 EC2 实例的 IAM 角色

      • 连接至服务账户(IRSA)的 IAM 角色


      密钥和访问密钥都需要您在 Vertica 中存储凭证,由于密钥轮换(rotation)的原因它非常难以维护。考虑到这个原因,附加于 EC2 实例的 IAM 角色更方便验证,但任何在 K8s 节点上运行的 pod 都可以访问 IAM 角色——这个权限可以非常广泛。

      IRSA 选项提供了您对谁可以访问 IAM 角色的最大控制权,因为它只适用于以特定的 ServiceAccount 运行的 pod。下面是如何使用 IAM 角色来设置 Vertica 集群的教学方法:



      附属于 EC2 实例的 IAM 角色

      IAM Role Attached to the EC2 Instance



      您需要首先确保 Vertica 中没有任何特殊设置。当你在 EKS 中创建节点集群时,选择一个节点 IAM 角色,用于访问您想用于公共存储的 S3 Bucket。



      附属于 IRSA 的 IAM 角色

      IAM Role Attached to a ServiceAccount (IRSA)



      下面介绍适用于 Vertica 12.0.3 版本的新方法。这意味着,您必须使用 VerticaDB CR 中 12.0.3 或更高版本的镜像。

      请知悉:您设置的节点组不应当使用允许访问 Bucket 的节点 IAM 角色;相反,拥有 Bucket 访问权的 IAM 角色会被附加至特定的 ServiceAccount。你需要运行以下命令来完成设置:

      默认的 ServiceAccount 被命名为“verticadb-operator-controller-manager”,您可以通过设置 serviceAccountNameOverride Helm 图表参数来调整,不过,让我们先假定您使用的是默认的名字。

      以下节选于 AWS 博客,这些命令针对我们使用的 ServiceAccount 和命名空间进行了适应性调整。请确保替换 EKS 集群的名称、以及您想附加至 ServiceAccount 的 IAM 角色的名称为 <s3-arn-policy-name>:

        $ eksctl utils associate-iam-oidc-provider --cluster <cluster-name> --approve
        $ eksctl create iamserviceaccount --name verticadb-operator-controller-manager --namespace blog --cluster <cluster-name> --attach-policy-arn <s3-arn-policy-name> --approve --override-existing-serviceaccounts

        创建 IAM 服务账户使用了“-overrid-existing-serviceaccounts”选项,因为服务账户是部署运营商时创建的。



        部署 VerticaDB

        Deploying VerticaDB



        下一步是部署 Vertica 集群,我们将通过创建 VerticaDB 实例来完成这个任务。这里的 YAML 清单样本供您使用,并用 S3 Bucket 代替 <your-bucket>:

          $ cat << EOF > vdb.yaml
          apiVersion: vertica.com/v1beta1
          kind: VerticaDB
          metadata:
           name: v
          spec:
           # A version 12.0.3 or higher is needed to use IRSA
           image: vertica/vertica-k8s:12.0.3-0-minimal
           communal:
             path: "s3://<your-bucket>"
             endpoint: https://s3.amazonaws.com
           subclusters:
           - name: sc
          EOF
          $ kubectl apply --namespace blog -f vdb.yaml

          Operator 将及时响应这个新的 CR,并创建新的数据库,其 3 个节点的子集群名为 sc。这一过程是与 kubectl 命令异步进行的。在等待数据库创建成果之余,您可以使用以下命令:

            $ kubectl wait --for=condition=DBInitialized=True --namespace blog vdb/v



            客户端访问

            Client Access



            恭喜!您现在可以允许客户端访问 Vertica 数据库了!

            在 K8s 中部署 Vertica 时,所有的客户端访问都是通过服务对象进行的。一般而言,我们为 VerticaDB 中定义的每个子集群都创建了对应的服务对象。您可以通过以下命令找到客户端可连接的服务对象:

              $ kubectl get service --selector app.kubernetes.io/instance=v,vertica.com/svc-type=external

              默认情况下,服务对象被创建为 ClusterIP 类型。这意味着它们只能被在同一 K8s 集群内运行的 pod 访问。如果有外部客户需要连接到数据库,您需要设置 LoadBalancer 类型的服务对象。这可以通过对之前的 VerticaDB 实例打补丁完成:

                $ kubectl patch vdb/v --namespace blog --type=json --patch='[{"op": replace, "path": spec/subclusters/0/serviceType, "value": LoadBalancer}]'

                kubectl 命令将立即返回,同时 Operator 在后台更新服务对象应用。您可以通过重新发布之前的 kubectl get service 命令来等待更新完成。

                  $ kubectl get service --selector app.kubernetes.io/instance=v,vertica.com/svc-type=external

                  成功的输出结果应该是这样的。注意其中已经填写了外部 IP,这是用于客户连接的合格域名(FQDN)

                    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE


                    v-sc LoadBalancer 172.20.50.35 a9f8495728b99485fad6cea81dacb35c-1847055740.us-east-1.elb.amazonaws.com 5433:32002/TCP,5444:30316/TCP 22m

                    AWS 支持对负载平衡器进行额外配置,比如,限制 CIDR 的 IP地址,您需要在 CR 中用 spec.subclusters[i].serviceAnnotations 字段来设置。



                    总结

                    Conclusion



                    通过一些简单的步骤,我们成功地在 Amazon EKS 上部署了 Vertica,并设置为可以被 k8s 之外的客户端访问。不过,还有很多等待您探索!如需了解更多信息,以下是两个有用的二维码:


                     Vertica x GitHub 

                     Vertica 官方文档 


                    ; )))

                    对了,我们还面向全球

                    招募杰出的独立开发者

                    月例高额赏金,就等有才的你!

                    揭开英雄帖 👋

                    开源无悔 ⎪ 寻找下一个「英雄开发者」


                    湖仓一体的统一分析平台 Vertica,是 OpenText 旗下核心的大数据分析平台。它具有大规模可扩展的架构,具有广泛的分析功能集,涵盖事件和时间序列、模式匹配、地理空间和端到端的数据库内机器学习等。并能将其轻松应用于苛刻的大数据分析挑战。

                    从飞利浦到中国电信,从萃奕到美国万通,Vertica 服务于众多全球领先的数据驱动型企业,提供市场上无与伦比的速度,以及指导业务策略的预测性洞察力。

                    最新 Vertica 12 版本提供基于 AWS 的 SaaS 服务,并通过 BYOL(自带许可证)模式跨企业内部数据中心、主要公共云、多云及容器化环境等,帮助您快速处理海量数据。

                     分享 就是爱 ⎪ 我知道你  在看  

                    文章转载自Vertica,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                    评论