使用 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
属性更新为您的自定义命名空间名称。
配置您的集群
创建集群配置文件
将提供的 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 容器镜像仓库下载容器镜像,请执行以下操作
- 将镜像从 InfluxData 仓库复制到您自己的私有仓库。
- 使用对您的私有仓库名称的引用配置您的
AppInstance
资源。 - 提供对您的私有仓库的凭证。
复制镜像
我们建议使用 crane 将镜像复制到您的私有仓库。
- 为您的系统安装crane。
- 使用以下命令创建容器镜像仓库密钥文件并检索必要的密钥
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清单,类似于以下内容
如果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
:对象存储端点URLallowHttp
:将true
设置为允许未加密的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
:对象存储端点URLS3_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
有关更多信息,请参阅 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
.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
)
这个页面有帮助吗?
感谢您的反馈!