使用 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
属性以使用您的自定义命名空间名称。
配置您的集群
创建集群配置文件
复制提供的 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 容器注册表下载容器镜像,请执行以下操作
- 将镜像从 InfluxData 注册表复制到您自己的私有注册表。
- 使用对您的私有注册表名称的引用配置您的
AppInstance
资源。 - 提供到您的私有注册表的凭据。
复制镜像
我们建议使用 crane 将镜像复制到您的私有注册表中。
- 安装 crane 用于您的系统。
- 使用以下命令创建容器注册表 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 清单,类似于以下内容
如果 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
:对象存储端点 URLallowHttp
:设置为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
:对象存储端点 URLS3_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
有关更多信息,请参阅 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
.storageClassName
:Kubernetes 存储类。这根据 Kubernetes 环境和所需的存储特性而有所不同。storage
:存储大小。我们建议最小 2 gibibytes (2Gi
)。
apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
package:
spec:
ingesterStorage:
storageClassName: STORAGE_CLASS
storage: STORAGE_SIZE
替换以下内容
STORAGE_CLASS
:Kubernetes 存储类STORAGE_SIZE
:存储大小(示例:2Gi
)
此页是否对您有帮助?
感谢您的反馈!
支持和反馈
感谢您成为我们社区的一份子!我们欢迎并鼓励您提供关于 InfluxDB Clustered 和本文档的反馈和错误报告。要查找支持,请使用以下资源
拥有年度或支持合同的客户可以联系 InfluxData 支持。