文档文档

使用 InfluxDB AppInstance 资源配置

通过编辑 InfluxData 提供的 AppInstance 资源中的配置选项来配置您的 InfluxDB 集群。您的集群的资源配置包括以下内容

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

  • 包含以下文件的 tarball:

    • app-instance-schema.json:定义您可以用来验证 example-customer.yml 和您在 Visual Studio Code (VS Code) 等工具中的集群配置的模式。

    • example-customer.yml:您的 InfluxDB 集群的配置,其中包含有关 先决条件 的信息。

      以下部分指的是 myinfluxdb.yml 文件,该文件是您从 example-customer.yml 复制并为您的 InfluxDB 集群编辑的文件。

配置数据

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

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

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

要管理 InfluxDB Clustered 的安装、更新和升级,您需要编辑
并应用 Kubernetes 自定义资源 (CRD)
AppInstance),您在符合 app-instance-schema.json 模式的 YAML 文件中定义它。

InfluxDB Clustered 包含 example-customer.yml 作为配置模板。

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

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

如果使用除 influxdb 以外的命名空间,请更新您的命名空间

如果您使用除 influxdb 以外的命名空间名称,请更新 myinfluxdb.yml 中的 metadata.namespace 属性以使用您的自定义命名空间名称。

配置您的集群

  1. 创建集群配置文件
  2. 配置对 InfluxDB 容器注册表的访问
  3. 修改配置文件以指向先决条件

创建集群配置文件

复制提供的 example-customer.yml 文件以创建特定于您的 InfluxDB 集群的新配置文件。例如,myinfluxdb.yml

cp example-customer.yml myinfluxdb.yml

使用 VS Code 编辑您的配置文件

我们建议使用 Visual Studio Code (VS Code) 编辑您的 myinfluxdb.yml 配置文件,因为它支持 JSON Schema,包括自动完成和验证功能,这些功能在编辑 InfluxDB 配置时很有帮助。InfluxData 提供了一个 app-instance-schema.json JSON 模式文件,VS Code 可以使用它来验证您的配置设置。

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

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

当拉取 InfluxDB Clustered 镜像时,您可能处于以下两种情况之一

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

在这两种情况下,您都需要有效的拉取密钥

公共注册表(非 air-gapped)

要从 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 的名称,您还必须更改 AppInstance 自定义资源中 imagePullSecret 字段的值以匹配。

私有注册表(air-gapped)

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

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

我们建议使用 crane 将镜像复制到您的私有注册表中。

  1. 安装 crane 用于您的系统。
  2. 使用以下命令创建容器注册表 secret 文件并检索必要的 secret
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)

您需要复制的镜像列表包含在程序包元数据中。您可以使用任何标准 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
配置您的 AppInstance

在您的 myinfluxdb.yml 中将 spec.package.spec.images.registryOverride 字段设置为您的私有注册表的位置——例如

apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      images:
        registryOverride: 
REGISTRY_HOSTNAME
提供到您的私有注册表的凭据

如果您的私有容器注册表需要拉取密钥才能访问镜像,您可以创建所需的 kubernetes secret,然后在您的 AppInstance 资源中配置它们——例如

apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  imagePullSecrets:
    - name: 
PULL_SECRET_NAME

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

使用连接集群到先决条件所需的凭据更新您的 myinfluxdb.yml 配置文件。

配置 Ingress

要配置 Ingress,请在您的 myinfluxdb.yml 配置文件中为以下字段提供值

  • spec.package.spec.ingress.hosts:集群主机名

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

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

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

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

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

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

apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
# ...
ingress:
  hosts:
    - cluster-host.com
  tlsSecretName: ingress-tls

配置对象存储

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

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

  • spec.package.spec.objectStore
    • bucket:对象存储桶名称
    • s3
      • endpoint:对象存储端点 URL
      • allowHttp设置为 true 以允许未加密的 HTTP 连接
      • accessKey.value:对象存储访问密钥
      • secretKey.value:对象存储 secret 密钥
      • region:对象存储区域
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      objectStore:
        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
# Bucket that the Parquet files will be stored in bucket:
S3_BUCKET_NAME
# This value is required for AWS S3, it may or may not be required for other providers. region:
S3_REGION

替换以下内容

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

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

  • spec.package.spec.objectStore
    • bucket:Azure Blob Storage 存储桶名称
    • azure:
      • accessKey.value:Azure Blob Storage 访问密钥 (可以使用 value 字面量或 valueFrom 从 secret 中检索值)
      • account.value:Azure Blob Storage 帐户 ID (可以使用 value 字面量或 valueFrom 从 secret 中检索值)
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      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 作为您的对象存储,请在您的 myinfluxdb.yml 中为以下字段提供值

  • spec.package.spec.objectStore
    • bucket:Google Cloud Storage 存储桶名称
    • google:
      • serviceAccountSecret.name:Kubernetes Secret 名称,其中包含您的 Google IAM 服务帐户凭据
      • serviceAccountSecret.key:您的 Google IAM secret 中的密钥,其中包含您的 Google IAM 帐户凭据
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      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:Kubernetes Secret 名称,其中包含您的 Google IAM 服务帐户凭据
  • GOOGLE_CREDENTIALS_KEY:您的 Google IAM secret 中的密钥,其中包含您的 Google IAM 帐户凭据

配置 Catalog 数据库

InfluxDB catalog 是一个 PostgreSQL 兼容的关系数据库,用于存储有关您的时间序列数据的元数据。要将您的 InfluxDB 集群连接到您的 PostgreSQL 兼容数据库,请在您的 myinfluxdb.yml 配置文件中为以下字段提供值

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

  • spec.package.spec.catalog.dsn.valueFrom.secretKeyRef
    • .name:Secret 名称
    • .key:secret 中包含 DSN 的密钥
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      catalog:
        # A postgresql style DSN that points to a postgresql compatible database.
        # postgres://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
        dsn:
          valueFrom:
            secretKeyRef:
              name: 
SECRET_NAME
key:
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 集群连接到本地存储,请在您的 myinfluxdb.yml 配置文件中为以下字段提供值

  • spec.package.spec.ingesterStorage
    • .storageClassNameKubernetes 存储类。这根据 Kubernetes 环境和所需的存储特性而有所不同。
    • storage:存储大小。我们建议最小 2 gibibytes (2Gi)。
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      ingesterStorage:
        storageClassName: 
STORAGE_CLASS
storage:
STORAGE_SIZE

替换以下内容



此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

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

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

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

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

有关如何入门的更多信息,请查看