使用 Helm Chart 部署 AutoMQ 企业版
本文档介绍如何在企业私有数据中心的 Kubernetes 环境中使用 Helm Chart 部署 AutoMQ 企业版软件。如果期望在公有云环境使用 AutoMQ,推荐直接使用 AutoMQ Cloud 全托管服务概述▸。
前置条件
使用 Helm Chart 安装 AutoMQ 之前,需要满足如下条件:
-
准备 Kubernetes 环境 :提前准备一个可用的 Kubernetes 集群,并满足如下条件:
-
预留 AutoMQ 计算资源 :AutoMQ 每个 Pod 推荐分配 4Core16GB 资源,并建议独占 Node 部署以获取稳定的网络吞吐性能。
-
存储插件: 如果您的 Kubernetes 由云厂商提供,推荐安装云厂商提供的存储插件用于管理 EBS 卷资源。
-
网络插件(可选): 如果您期望在 Kubernetes 集群外访问 AutoMQ,则需要安装 Kubernetes 网络插件,确保 Pod IP 可对集群外访问。
-
-
准备对象存储 Bucket。 AutoMQ 每个集群需要 2 个独立的对象存储 Bucket,一个是 Ops Bucket 用于存储系统日志和 Metrics 数据,一个是 Data Bucket 存储消息数据。请参考对象存储产品的文档创建。
-
安装 Helm Chart 工具: 推荐安装大于等于 3.6 版本。可参考文档操作。
获取企业版 Chart
安装 AutoMQ 企业版之前,建议通过此处,联系 AutoMQ 技术人员,获取 Helm Chart 安装包。
安装 AutoMQ
AutoMQ 企业版提供两种 WAL 存储类型,分别是 EBSWAL 和 S3WAL,两种存储引擎对比如下,建议根据需求选择。详细原理请参考技术架构。
-
EBSWAL 模式: WAL 存储使用高速 EBS 卷,提供 <10 毫秒的发送 RT 性能,目前仅支持 AWS、GCP、Azure 等公有云环境,使用时需要通过 StorageClass,为 AutoMQ 的 Pod 分配 EBS 卷。
-
S3WAL 模式: 部署相对简单,WAL 存储直接写对象存储,提供百毫秒级的发送 RT 性能,支持所有公有云环境以及私有数据中心(提供兼容 S3 的对象存储即可),部署相对简单,无需分配 EBS 卷。
下方章节提供的配置文件示例,默认使用 S3WAL 模式。如需配置 EBSWAL,请修改配置参数。
Step1:创建 Credentials,并进行授权
AutoMQ 集群需要访问对象存储和存储卷等外部服务,因此在安装前需要为 AutoMQ 创建 Credentials 并完成授权。
- AWS
- Azure
AWS 公有云环境部署 AutoMQ 且使用 AWS S3 存储,则需要前往 IAM 产品创建授权策略,AutoMQ 访问 AWS S3 需要被授予以下操作权限:
- actions:
- s3:GetLifecycleConfiguration
- s3:PutLifecycleConfiguration
- s3:ListBucket
- s3:PutObject
- s3:GetObject
- s3:AbortMultipartUpload
- s3:PutObjectTagging
- s3:DeleteObject
如果您使用 EBSWAL 模式部署,则需要额外授权如下策略:
- actions:
- ec2:DescribeVolumes
- ec2:DetachVolume
- ec2:DescribeAvailabilityZones
用户创建 IAM 授权策略后,可以通过以下两种方式创建 Credentials。
-
使用 IAM 子账号静态 AccessKey: 此模式下需要将授权策略附加给 IAM 子账号,并通过 IAM 子账号的静态 AccessKeyId 和 AccessKeySecret 作为 Credentials 访问 AutoMQ。
-
使用 IAM Role 动态凭证 : 此模式下需要创建 IAM Role,需要将授权策略附加给 Role。然后在 EKS 上通过 Pod 扮演 EC2 Role 的动态 Credentials 访问 AutoMQ。
为简化示例,下文的配置文件示例使用静态 AccessKey 作为 Credentials。
Azure 公有云环境部署AutoMQ使用Azure Blob存储,需要前往Storage Account的访问控制(IAM)创建授权 Credential。用户可选择以下两种权限实体(任意一个),进行Blob的系统角色分配: Storage Blob Data Owner
。
-
使用服务主体(Service Principal)静态Secret :其中 AccessKey 为所属 App clientId,SecretKey 为 Secret value、tenantId共同作为静态 Credentials 访问 AutoMQ。
-
使用身份标识(Managed Identity)动态凭证 :此模式下除了被 ServiceAccount 分配相应角色之外,需要额外关联 AutoMQ 对应的 vmss(虚拟节点组)。然后在 AKS 上通过此动态凭证的 clientId 访问AutoMQ。
Step2:创建 Storage Class
安装 AutoMQ 之前需要在 Kubernetes 集群申明 Storage Class,用于后续分配存储卷。存储卷有以下用途:
-
存储 AutoMQ Controller 元数据: AutoMQ 集群中用于元数据管理的 Controller Pod 需要挂载存储卷存储 KRaft 元数据。
-
EBSWAL 模式存储 WAL 数据(可选) :如果期望部署 EBSWAL 模式,每个 Broker Pod 也需要挂载数据卷用于写入 WAL 数据。
请根据云厂商或者私有数据中心的 Kubernetes 存储插件申明 Storage Class ,然后记录该 Storage Class 名称,用于后续参数配置。
- AWS
- Azure
- GCP
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: automq-disk-eks-gp3
provisioner: ebs.csi.aws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
type: gp3 # EBS volume type
allowVolumeExpansion: true
# Example StorageClass definition (Azure Premium SSD example)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: automq-disk-storage-class
provisioner: disk.csi.azure.com
parameters:
skuName: PremiumV2_LRS
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: automq-disk-gcp-pd-balanced
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced # High performance cloud disk.
Step3:初始化配置文件
AutoMQ 企业版 Chart 的配置信息包含多个部分,支持用户通过 values.yaml 文件进行自定义覆盖。首先,需要创建一个空文件 automq-values.yaml
。并填充以下必要配置项。
注意:
下方提供的配置项基于 S3WAL 模式, 其中参数值均使用占位符填充,安装前需要根据实际情况填充参数值,也可以根据参数文档修改为 EBS WAL 模式。
global:
cloudProvider:
name: "Replace With Your True Cloud Provider Name"
credentials: "Replace With Your True Your Credentials"
config: |
s3.ops.buckets=Replace With Your True Ops Bucket URL
s3.data.buckets=Replace With Your True Data Bucket URL
s3.wal.path=Replace With Your True WAL PATH
controller:
resources:
requests:
cpu: "3000m"
memory: "12Gi"
limits:
cpu: "4000m"
memory: "16Gi"
persistence:
metadata:
storageClass: "Replace With Your True StroageClass"
wal:
enabled: false
annotations:
env:
- name: "KAFKA_HEAP_OPTS"
value: "-Xmx6g -Xms6g -XX:MaxDirectMemorySize=6g -XX:MetaspaceSize=96m"
- name: "KAFKA_S3_ACCESS_KEY"
value: "Replace With Your True ACCESS_KEY"
- name: "KAFKA_S3_SECRET_KEY"
value: "Replace With Your True SECRET_KEY"
broker:
replicas: 0
resources:
requests:
cpu: "3000m"
memory: "12Gi"
limits:
cpu: "4000m"
memory: "16Gi"
persistence:
wal:
enabled: false
annotations:
env:
- name: "KAFKA_HEAP_OPTS"
value: "-Xmx6g -Xms6g -XX:MaxDirectMemorySize=6g -XX:MetaspaceSize=96m"
- name: "KAFKA_S3_ACCESS_KEY"
value: "Replace With Your True ACCESS_KEY"
- name: "KAFKA_S3_SECRET_KEY"
value: "Replace With Your True SECRET_KEY"
在上一步生成的配置文件中,部分参数需要根据实际情况进行替换。
修改公共参数
global.cloudProvider.name
该参数约定了部署的云环境,请根据云厂商名称枚举值填写,如果是私有数据中心,也需要按照枚举值填充。
部署环境 | 参数枚举值 |
---|---|
AWS | aws |
Google Cloud | gcp |
Azure | azure |
阿里云 | aliyun |
腾讯云 | tencentcloud |
华为云 | huaweicloud |
私有数据中心 | noop |
global.cloudProvider.credentials
该参数约定了 AutoMQ 集群访问云资源时使用的公共 Credentials 参数。当前示例以 AccessKey 类型的静态 Credentials 为例,如果期望使用 IAM Role 方式请参照高阶参数文档描述修改。
global:
cloudProvider:
credentials: static://?accessKey=<your-accesskey>&secretKey=<your-secretkey>
KAFKA_S3_ACCESS_KEY 和 KAFKA_S3_SECRET_KEY 环境变量
示例的配置文件使用了 AccessKey 类型的静态 Credentials ,因此,除了 global.cloudProvider.credentials 参数,还需要将 Controller、Broker 的环境变量替换为正确的 Credentials。
参考 Step1 创建的 Credentials,将示例中的 Credentials 进行替换:
controller:
env:
- name: "KAFKA_S3_ACCESS_KEY"
value: "Replace With Your True ACCESS_KEY"
- name: "KAFKA_S3_SECRET_KEY"
value: "Replace With Your True SECRET_KEY"
broker:
env:
- name: "KAFKA_S3_ACCESS_KEY"
value: "Replace With Your True ACCESS_KEY"
- name: "KAFKA_S3_SECRET_KEY"
value: "Replace With Your True SECRET_KEY"
global.config
该参数约定了访问对象存储的 S3URL 配置,其中包括三个部分,分别是s3.ops.buckets、s3.data.buckets 以及 s3.wal.path。
下方是使用 S3WAL 模式、静态 Credentials 的示例配置,如果您需要使用 EBSWAL 模式,请参考高阶配置章节的说明进行修改。
- AWS
- Azure
- Google Cloud
- 阿里云
- 腾讯云
- 华为云
根据实际情况填充前置条件中创建的 Ops Bucket 和 Data Bucket。
config: |
s3.data.buckets=0@s3://<your-data-bucket>?authType=static
s3.ops.buckets=1@s3://<your-ops-bucket>?authType=static
s3.wal.path=0@s3://<your-data-bucket>?authType=static
根据实际情况填充 Ops Bucket、Data Bucket、region 以及 Endpoint 参数。
config: |
s3.data.buckets=0@s3://<your-data-bucket>?region=xxxx&endpoint=https://xxx_storage-account.blob.core.windows.net&authType=static
s3.ops.buckets=1@s3://<your-ops-bucket>?region=xxxx&endpoint=https://xxx_storage-account.blob.core.windows.net&authType=static
s3.wal.path=1@s3://<your-data-bucket>?region=xxxx&endpoint=https://xxx_storage-account.blob.core.windows.net&authType=static
因为 GCP 上不支持使用 AccessKey 类型的静态 Credentials。格式有所不同,需要填充 Ops Bucket、Data Bucket、region、Endpoint 以及 GCP ServiceAccount 参数。
config: |
s3.data.buckets=0@s3://<your-data-bucket>?region=xxxx&endpoint=https://xxx_storage-account.blob.core.windows.net&authType=instance&role=<role-id>
s3.ops.buckets=1@s3://<your-ops-bucket>?region=xxxx&endpoint=https://xxx_storage-account.blob.core.windows.net&authType=instance&role=<role-id>
s3.wal.path=1@s3://<your-data-bucket>?region=xxxx&endpoint=https://xxx_storage-account.blob.core.windows.net&authType=instance&role=<role-id>
根据实际情况填充 Ops Bucket、Data Bucket、region 以及 Endpoint 参数。
config: |
s3.data.buckets=0@s3://<your-data-bucket>?region=xxxx&endpoint=https://oss-cn-xxxx.aliyuncs.com
s3.ops.buckets=1@s3://<your-ops-bucket>?region=xxxx&endpoint=https://oss-cn-xxxx.aliyuncs.com&authType=static
s3.wal.path=1@s3://<your-data-bucket>?region=xxxx&endpoint=https://oss-cn-xxxx.aliyuncs.com&authType=static
根据实际情况填充 Ops Bucket、Data Bucket、region 以及 Endpoint 参数。
config: |
s3.data.buckets=0@s3://<your-data-bucket>?region=xxxx&endpoint=https://cos.ap-xxx.myqcloud.com&authType=static
s3.ops.buckets=1@s3://<your-ops-bucket>?region=xxxx&endpoint=https://cos.ap-xxx.myqcloud.com&authType=static
s3.wal.path=1@s3://<your-data-bucket>?region=xxxx&endpoint=https://cos.ap-xxx.myqcloud.com&authType=static
根据实际情况填充 Ops Bucket、Data Bucket、region 以及 Endpoint 参数。
config: |
s3.data.buckets=0@s3://<your-data-bucket>?region=xxxx&endpoint=https://oss-cn-xxxx.aliyuncs.com&authType=static
s3.ops.buckets=1@s3://<your-ops-bucket>?region=xxxx&endpoint=https://oss-cn-xxxx.aliyuncs.com&authType=static
s3.wal.path=1@s3://<your-data-bucket>?region=xxxx&endpoint=https://oss-cn-xxxx.aliyuncs.com&authType=static