文档

使用 Helm 配置您的 InfluxDB 集群

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

InfluxData 提供以下项目

  • influxdb-docker-config.json:一个认证的 Docker 配置文件。InfluxDB 集群软件位于安全的容器注册库中。此文件允许访问安装 InfluxDB 集群所需的容器映像集合。

配置数据

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

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

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

如果使用的是除influxdb之外的其他命名空间,请设置namespaceOverride

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

AppInstance资源

InfluxDB的安装、更新和升级过程是通过编辑和应用名为AppInstanceKubernetes自定义资源(CRD)来驱动的。该AppInstance CRD包含在InfluxDB集群Helm图表中,并且可以通过在图表中应用自定义设置来配置。

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

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

kubecfg kubit操作员

InfluxDB集群Helm图表还包括由InfluxData维护的kubecfg kubit操作员,它简化了InfluxDB集群软件包的安装和管理。它管理用于安装、管理和更新InfluxDB集群的jsonnet模板的应用。

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

skipOperator: true

配置您的集群

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

安装Helm

如果尚未安装,请在本地机器上安装Helm

创建values.yaml文件

从GitHub下载或复制InfluxDB集群Helm图表的基础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集群所需的容器镜像集合。您的Kubernetes集群需要访问容器注册库以拉取和安装InfluxDB。

在拉取镜像时,有两种主要场景

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

在这两种场景中,您都需要一个有效的容器注册库密钥文件。使用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)

公共注册表(非断网)

要从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。如果您更改此密钥的名称,还必须更改values.yaml中的imagePullSecrets.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

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

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证书密钥名称

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

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

    向InfluxDB写入数据和从InfluxDB查询数据不需要TLS。为了简单起见,您可以在进入生产之前启用TLS。有关更多信息,请参阅InfluxDB集群安装过程的第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从密钥中检索值)
      • secretKey.value:对象存储密钥密钥 (可以使用value字面量或valueFrom从密钥中检索值)
      • 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:对象存储密钥
  • S3_REGION:对象存储区域

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

  • objectStore
    • bucket:Azure Blob Storage桶名称
    • azure:
      • accessKey.value:Azure Blob Storage访问密钥(可以使用value字面量或valueFrom从密钥中检索值)
      • account.value:Azure Blob Storage账户ID(可以使用value字面量或valueFrom从密钥中检索值)
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账户凭据的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账户凭据的Google IAM密钥

配置目录数据库

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

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

  • catalog.dsn
    • SecretName:密钥名称
    • SecretKey:密钥中包含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_KEY:密钥中引用您的兼容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

配置ingesters的本地存储

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

  • ingesterStorage
    • storageClassNameKubernetes存储类。这取决于Kubernetes环境和所需的存储特性。
    • storage:存储大小。我们建议至少2吉字节(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 v3增强功能和InfluxDB Clustered现在已全面上市

新功能,包括更快的查询性能和管理工具,推动了InfluxDB v3产品线的进展。InfluxDB Clustered现在已全面上市。

InfluxDB v3性能和功能

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

了解新的v3增强功能


InfluxDB Clustered全面上市

InfluxDB Clustered现在已全面上市,并为您提供了在自管理堆栈中InfluxDB v3的强大功能。

与我们谈谈InfluxDB Clustered