文档文档

使用 Helm 配置您的 InfluxDB 集群

使用 Kubernetes 管理您的 InfluxDB Clustered 部署,并使用 YAML 配置文件应用配置设置。InfluxDB Clustered Helm chart 提供了一种使用 Helm 部署 InfluxDB 集群的替代方法。它充当 InfluxDB AppInstance 资源的包装器。当使用 Helm 时,在本地机器上的 values.yaml 中应用配置选项。

InfluxData 提供以下项目

  • influxdb-docker-config.json:经过身份验证的 Docker 配置文件。InfluxDB Clustered 软件位于安全的容器注册表中。此文件授予访问安装 InfluxDB Clustered 所需的容器镜像集合的权限。

配置数据

当准备配置您的 InfluxDB 集群时,请准备好以下信息

  • InfluxDB 集群主机名:Kubernetes 用于公开 InfluxDB API 端点的主机名
  • PostgreSQL 风格的数据源名称 (DSN):用于访问存储 InfluxDB Catalog 的 PostgreSQL 兼容数据库。
  • 对象存储凭证 (AWS S3 或 S3 兼容)
    • 端点 URL
    • 访问密钥
    • 存储桶名称
    • 区域(S3 必需,其他对象存储可能不需要)
  • 本地存储信息 (用于 ingester pod)
    • 存储类
    • 存储大小

InfluxDB 部署到 Kubernetes 命名空间,在以下安装过程中,该命名空间被称为目标命名空间。为了简单起见,我们假设此命名空间为 influxdb,但是您可以使用任何您喜欢的名称。

如果使用 influxdb 以外的命名空间,请设置 namespaceOverride

如果您使用的命名空间名称不是 influxdb,请更新您的 values.yaml 中的 namespaceOverride 字段以使用您的自定义命名空间名称。

AppInstance 资源

InfluxDB 的安装、更新和升级过程由编辑和应用名为 AppInstanceKubernetes 自定义资源 (CRD) 驱动。AppInstance CRD 包含在 InfluxDB Clustered Helm chart 中,并且可以通过在 chart 中包含的 values.yaml 中应用自定义设置进行配置。

AppInstance 资源包含关键信息,例如

  • 目标命名空间的名称
  • InfluxDB 包的版本
  • 对 InfluxDB 容器注册表拉取密钥的引用
  • InfluxDB API 公开的主机名
  • 连接到 外部先决条件 的参数

kubecfg kubit operator

InfluxDB Clustered Helm chart 还包括 kubecfg kubit operator(由 InfluxData 维护),它简化了 InfluxDB Clustered 包的安装和管理。它管理用于安装、管理和更新 InfluxDB 集群的 jsonnet 模板的应用。

如果您在 设置集群的先决条件 时已经单独安装了 kubecfg kubit operator,请在您的 values.yaml 中,将 skipOperator 设置为 true

skipOperator: true

配置您的集群

  1. 安装 Helm
  2. 创建 values.yaml 文件
  3. 配置对 InfluxDB 容器注册表的访问
  4. 修改配置文件以指向先决条件

安装 Helm

如果您尚未这样做,请在您的本地机器上 安装 Helm

创建 values.yaml 文件

从 GitHub 下载或复制 InfluxDB Clustered Helm chart 的基本 values.yaml,并将其存储在本地。例如 - 如果使用 cURL

curl -O https://raw.githubusercontent.com/influxdata/helm-charts/master/charts/influxdb3-clustered/values.yaml

或者您可以从 GitHub 复制默认的 values.yaml

在 GitHub 上查看 values.yaml

配置对 InfluxDB 容器注册表的访问

提供的 influxdb-docker-config.json 授予对运行 InfluxDB Clustered 所需的容器镜像集合的访问权限。您的 Kubernetes 集群需要访问容器注册表才能拉取并安装 InfluxDB。

当拉取镜像时,主要有两种情况

  • 您有一个 Kubernetes 集群,可以从 InfluxData 容器注册表拉取镜像。
  • 您在没有网络接口(“气隙”)的环境中运行,并且您只能访问私有容器注册表。

在这两种情况下,您都需要一个有效的容器注册表密钥文件。使用 crane 创建容器注册表密钥文件。

  1. 安装 crane
  2. 使用以下命令创建容器注册表密钥文件并检索必要的密钥
mkdir /tmp/influxdbsecret
cp influxdb-docker-config.json /tmp/influxdbsecret/config.json
DOCKER_CONFIG=/tmp/influxdbsecret \
  crane manifest \
  us-docker.pkg.dev/influxdb2-artifacts/clustered/influxdb:
PACKAGE_VERSION

PACKAGE_VERSION 替换为您的 InfluxDB Clustered 包版本。


如果您的 Docker 配置有效,并且您能够连接到容器注册表,则命令成功,并且输出是 Docker 镜像的 JSON 清单,类似于以下内容

查看 JSON 清单

如果 Docker 配置存在问题,crane 将无法检索清单,并且输出类似于以下错误

Error: fetching manifest us-docker.pkg.dev/influxdb2-artifacts/clustered/influxdb:<package-version>: GET https://us-docker.pkg.dev/v2/token?scope=repository%3Ainfluxdb2-artifacts%2Fclustered%2Finfluxdb%3Apull&service=: DENIED: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource "projects/influxdb2-artifacts/locations/us/repositories/clustered" (or it may not exist)

公共注册表(非气隙)

要从 InfluxData 注册表拉取镜像,您需要在目标命名空间中创建一个 Kubernetes secret。

kubectl create secret docker-registry gar-docker-secret \
  --from-file=.dockerconfigjson=influxdb-docker-config.json \
  --namespace influxdb

如果成功,输出如下

secret/gar-docker-secret created

默认情况下,此 secret 被命名为 gar-docker-secret。如果您更改此 secret 的名称,您还必须更改您的 values.yamlimagePullSecrets.name 字段的值。

私有注册表(气隙)

如果您的 Kubernetes 集群无法使用公共网络从我们的容器注册表下载容器镜像,请执行以下操作

  1. 将镜像从 InfluxDB 注册表复制到您自己的私有注册表。
  2. 使用对您的私有注册表名称的引用配置您的 AppInstance 资源。
  3. 提供您私有注册表的凭证。

您需要复制的镜像列表包含在包元数据中。您可以使用任何标准的 OCI 镜像检查工具获取它。例如

DOCKER_CONFIG=/tmp/influxdbsecret \
crane config \
  us-docker.pkg.dev/influxdb2-artifacts/clustered/influxdb:
PACKAGE_VERSION
\
| jq -r '.metadata["oci.image.list"].images[]' \ > /tmp/images.txt

输出是镜像名称的列表,类似于以下内容

us-docker.pkg.dev/influxdb2-artifacts/idpe/idpe-cd-ioxauth@sha256:5f015a7f28a816df706b66d59cb9d6f087d24614f485610619f0e3a808a73864
us-docker.pkg.dev/influxdb2-artifacts/iox/iox@sha256:b59d80add235f29b806badf7410239a3176bc77cf2dc335a1b07ab68615b870c
...

使用 crane 将镜像复制到您的私有注册表

</tmp/images.txt xargs -I% crane cp % 
REGISTRY_HOSTNAME
/%

REGISTRY_HOSTNAME 替换为您的私有注册表的主机名 - 例如

myregistry.mydomain.io

在您的 values.yaml 中将 images.registryOverride 字段设置为您的私有注册表的位置 - 例如

images:
  registryOverride: 
REGISTRY_HOSTNAME

修改配置文件以指向先决条件

使用连接集群到先决条件所需的凭证更新您的 values.yaml 文件。

配置 Ingress

要配置 Ingress,请在您的 values.yaml 中为以下字段提供值

  • ingress.hosts:集群主机名

    提供 Kubernetes 应该用于公开 InfluxDB API 端点的主机名 - 例如:cluster-host.com

    您可以提供多个主机名。Ingress 层接受所有列出的主机名的传入请求。如果您想为您的内部和外部流量设置不同的路径,这可能很有用。

    您负责配置和管理 DNS。选项包括

    • 手动管理 DNS 记录
    • 使用 external-dns 将公开的 Kubernetes 服务和 Ingress 与 DNS 提供商同步。
  • ingress.tlsSecretName:TLS 证书 secret 名称

    (可选):提供包含您的 TLS 证书和密钥的 secret 的名称。本指南中的示例使用名称 ingress-tls

    tlsSecretName 字段是可选的。如果您已经有 DNS 名称的 TLS 证书,您可能想要使用它。

    写入和查询 InfluxDB 中的数据不需要 TLS。为了简单起见,您可以等到进入生产环境后再启用 TLS。有关更多信息,请参阅 InfluxDB Clustered 安装过程的阶段 4,保护您的集群安全

ingress:
  hosts:
    - cluster-host.com
  tlsSecretName: ingress-tls

配置对象存储

要将您的 InfluxDB 集群连接到您的对象存储,请在您的 values.yaml 中提供所需的凭证。所需的凭证取决于您的对象存储提供商。

如果使用 Amazon S3 或 S3 兼容的对象存储,请在您的 values.yaml 中为以下字段提供值

  • objectStore
    • bucket:对象存储存储桶名称
    • s3:
      • endpoint:对象存储端点 URL
      • allowHttp设置为 true 以允许未加密的 HTTP 连接
      • accessKey.value:对象存储访问密钥 (可以使用 value 字面量或 valueFrom 从 secret 中检索值)
      • secretKey.value:对象存储 secret 密钥 (可以使用 value 字面量或 valueFrom 从 secret 中检索值)
      • region:对象存储区域
objectStore:
    # Bucket that the Parquet files will be stored in
  bucket: 
S3_BUCKET_NAME
s3: # URL for S3 Compatible object store endpoint:
S3_URL
# Set to true to allow communication over HTTP (instead of HTTPS) allowHttp: 'true' # S3 Access Key # This can also be provided as a valueFrom: secretKeyRef: accessKey: value:
S3_ACCESS_KEY
# S3 Secret Key # This can also be provided as a valueFrom: secretKeyRef: secretKey: value:
S3_SECRET_KEY
# This value is required for AWS S3, it may or may not be required for other providers. region:
S3_REGION

替换以下内容

  • S3_BUCKET_NAME:对象存储存储桶名称
  • S3_URL:对象存储端点 URL
  • S3_ACCESS_KEY:对象存储访问密钥
  • S3_SECRET_KEY:对象存储 secret 密钥
  • S3_REGION:对象存储区域

如果使用 Azure Blob Storage 作为您的对象存储,请在您的 values.yaml 中为以下字段提供值

  • objectStore
    • bucket:Azure Blob Storage 存储桶名称
    • azure:
      • accessKey.value:Azure Blob Storage 访问密钥 (可以使用 value 字面量或 valueFrom 从 secret 中检索值)
      • account.value:Azure Blob Storage 帐户 ID (可以使用 value 字面量或 valueFrom 从 secret 中检索值)
objectStore:
    # Bucket that the Parquet files will be stored in
  bucket: 
AZURE_BUCKET_NAME
azure: # Azure Blob Storage Access Key # This can also be provided as a valueFrom: accessKey: value:
AZURE_ACCESS_KEY
# Azure Blob Storage Account # This can also be provided as a valueFrom: secretKeyRef: account: value:
AZURE_STORAGE_ACCOUNT

替换以下内容

  • AZURE_BUCKET_NAME:对象存储存储桶名称
  • AZURE_ACCESS_KEY:Azure Blob Storage 访问密钥
  • AZURE_STORAGE_ACCOUNT:Azure Blob Storage 帐户 ID

如果使用 Google Cloud Storage 作为您的对象存储,请在您的 values.yaml 中为以下字段提供值

  • objectStore
    • bucket:Google Cloud Storage 存储桶名称
    • google:
      • serviceAccountSecret.name:包含您的 Google IAM 服务帐户凭证的 Kubernetes Secret 名称
      • serviceAccountSecret.key:您的 Google IAM secret 中包含您的 Google IAM 帐户凭证的密钥
objectStore:
    # Bucket that the Parquet files will be stored in
  bucket: 
GOOGLE_BUCKET_NAME
google: # This section is not needed if you are using GKE Workload Identity. # It is only required to use explicit service account secrets (JSON files) serviceAccountSecret: # Kubernetes Secret name containing the credentials for a Google IAM # Service Account. name:
GOOGLE_IAM_SECRET
# The key within the Secret containing the credentials. key:
GOOGLE_CREDENTIALS_KEY

替换以下内容

  • GOOGLE_BUCKET_NAME:Google Cloud Storage 存储桶名称
  • GOOGLE_IAM_SECRET:包含您的 Google IAM 服务帐户凭证的 Kubernetes Secret 名称
  • GOOGLE_CREDENTIALS_KEY:您的 Google IAM secret 中包含您的 Google IAM 帐户凭证的密钥

配置 Catalog 数据库

InfluxDB Catalog 是一个 PostgreSQL 兼容的关系数据库,它存储关于您的时间序列数据的元数据。要将您的 InfluxDB 集群连接到您的 PostgreSQL 兼容数据库,请在您的 values.yaml 中为以下字段提供值

我们建议将敏感凭证(例如您的 PostgreSQL 兼容 DSN)作为 secret 存储在您的 Kubernetes 集群中。

  • catalog.dsn
    • SecretName:Secret 名称
    • SecretKey:secret 中包含 DSN 的密钥
catalog:
  # Secret name and key within the secret containing the dsn string to connect
  # to the catalog
  dsn:
    # Kubernetes Secret name containing the dsn for the catalog.
    SecretName: 
SECRET_NAME
# The key within the Secret containing the dsn. SecretKey:
SECRET_KEY

替换以下内容

  • SECRET_NAME:包含您的 PostgreSQL 兼容 DSN 的 secret 的名称
  • SECRET_KEY:secret 中引用您的 PostgreSQL 兼容 DSN 的密钥

百分比编码 PostgreSQL DSN 中的特殊符号

PostgreSQL DSN 中的特殊符号应进行百分比编码,以确保 InfluxDB Clustered 可以正确解析它们。当使用包含自动生成的密码的 DSN 时,这一点很重要,这些密码可能包含特殊符号以使密码更安全。

未进行百分比编码的包含特殊字符的 DSN 会导致类似于以下的错误

Catalog DSN error: A catalog error occurred: unhandled external error: error with configuration: invalid port number

查看百分比编码的 DSN 示例

有关更多信息,请参阅 PostgreSQL 连接 URI 文档

没有 TLS 或 SSL 的 PostgreSQL 实例

如果您的 PostgreSQL 兼容实例在没有 TLS 或 SSL 的情况下运行,您必须在 DSN 中包含 sslmode=disable 参数。例如

postgres://username:passw0rd@mydomain:5432/influxdb?sslmode=disable

为 ingester 配置本地存储

InfluxDB ingester 需要本地存储来存储传入数据的预写日志 (WAL)。要将您的 InfluxDB 集群连接到本地存储,请在您的 values.yaml 中为以下字段提供值

  • ingesterStorage
    • storageClassNameKubernetes 存储类。这取决于 Kubernetes 环境和所需的存储特性。
    • storage:存储大小。我们建议至少 2 gibibytes (2Gi)。
ingesterStorage:
  # (Optional) Set the storage class. This will differ based on the K8s
  # environment and desired storage characteristics.
  # If not set, the default storage class will be used.
  storageClassName: 
STORAGE_CLASS
# Set the storage size (minimum 2Gi recommended) storage:
STORAGE_SIZE

替换以下内容



此页内容是否对您有帮助?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以像现在一样继续使用它,而无需对代码进行任何更改。

阅读更多

InfluxDB 3 开源版现已发布公开 Alpha 版本

InfluxDB 3 开源版现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 Alpha 版本的一部分。

InfluxDB 3 Core 是我们的新开源产品。它是一个用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何开始使用的更多信息,请查看