文档说明

使用 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):用于访问存储 InfluxDB 目录的兼容 PostgreSQL 数据库
  • 对象存储凭据 (AWS S3 或 S3 兼容)
    • 端点 URL
    • 访问密钥
    • 存储桶名称
    • 区域(S3 所需,其他对象存储可能不需要)
  • 本地或附加存储信息 (对于 ingester pods)
    • 存储类
    • 存储大小

您将 InfluxDB 集群部署到 Kubernetes 命名空间中,以下步骤中称为 目标 命名空间。为了简单起见,我们假设此命名空间是 influxdb - 您可以使用任何喜欢的名称。

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

InfluxDB 集群包含 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 集群所需的容器镜像集合。您的 Kubernetes 集群需要访问容器镜像仓库以拉取和安装 InfluxDB。

在拉取 InfluxDB 集群镜像时,您可能处于以下两种场景之一

  • 您的 Kubernetes 集群可以从 InfluxData 容器镜像仓库中拉取。
  • 您的集群在无网络接口的环境(“断网”)中运行,并且只能访问私有容器镜像仓库。

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

公共镜像仓库(非断网)

要从 InfluxData 仓库中拉取,您需要在目标命名空间中创建一个 Kubernetes 密钥。

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

如果成功,输出如下

secret/gar-docker-secret created

默认情况下,密钥的名称是 gar-docker-secret。如果您更改了密钥的名称,您还必须更改 AppInstance 自定义资源中的 imagePullSecret 字段的值以匹配。

私有镜像仓库(断网)

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

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

我们建议使用 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集群包版本。


如果您的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密钥,然后在AppInstance资源中配置它们—例如

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

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

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

配置入口

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

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

    提供Kubernetes应使用的以暴露InfluxDB API端点的主机名。例如:cluster-host.com

    您可以提供多个主机名。入口层接受所有列出主机名的传入请求。如果您希望内部和外部流量具有不同的路径,这非常有用。

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

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

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

    写入和查询InfluxDB中的数据不需要TLS。为了简单起见,您可以在进入生产之前启用TLS。有关更多信息,请参阅InfluxDB集群安装过程的第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
      • allowHttptrue设置为允许未加密的HTTP连接
      • accessKey.value:对象存储访问密钥
      • secretKey.value:对象存储密钥
      • 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:对象存储密钥
  • 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 从密钥中检索值)
      • account.value:Azure Blob Storage 账户 ID (可以使用 value 文字或 valueFrom 从密钥中检索值)
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:包含您的 Google IAM 服务账户凭证的 Kubernetes Secret 名称
      • serviceAccountSecret.key:包含您的 Google IAM 账户凭证的 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:包含您的 Google IAM 服务账户凭证的 Kubernetes Secret 名称
  • GOOGLE_CREDENTIALS_KEY:包含您的 Google IAM 账户凭证的 Google IAM 密钥

配置目录数据库

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

我们建议将敏感凭证,例如您的兼容 PostgreSQL DSN,作为 Kubernetes 集群中的密钥存储。

  • spec.package.spec.catalog.dsn.valueFrom.secretKeyRef
    • .name:密钥名称
    • .key:密钥中包含 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_KEY:引用您的兼容 PostgreSQL DSN 的密钥

在 PostgreSQL DSN 中对特殊符号进行百分编码

在 PostgreSQL DSN 中对特殊符号进行百分编码以确保 InfluxDB 集群正确解析。当使用包含特殊符号(以增强安全性)的自生成密码的 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

为ingesters配置本地存储

InfluxDB 数据收集器需要本地存储来存储传入数据的写入前日志 (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 v3增强和InfluxDB集群版现已上市

新功能包括更快的查询性能和管理工具,推进了InfluxDB v3产品线。InfluxDB集群版现已上市。

InfluxDB v3性能和功能

InfluxDB v3产品线在查询性能方面取得了显著提升,并提供了新的管理工具。这些增强包括用于监控InfluxDB集群健康状态的运营仪表板,InfluxDB Cloud Dedicated中的单点登录(SSO)支持,以及用于令牌和数据库的新管理API。

了解新v3增强功能


InfluxDB集群版上市

InfluxDB集群版现已上市,为您在自管理堆栈中提供了InfluxDB v3的强大功能。

与我们谈谈InfluxDB集群版