使用 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的安装、更新和升级过程是通过编辑和应用名为AppInstance
的Kubernetes自定义资源(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
配置您的集群
安装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
配置对InfluxDB容器注册库的访问
提供的influxdb-docker-config.json
允许访问运行InfluxDB集群所需的容器镜像集合。您的Kubernetes集群需要访问容器注册库以拉取和安装InfluxDB。
在拉取镜像时,有两种主要场景
- 您有一个可以从InfluxData容器注册库拉取的Kubernetes集群。
- 您在一个没有网络接口(“断网”)的环境中运行,并且您只能访问私有容器注册库。
在这两种场景中,您都需要一个有效的容器注册库密钥文件。使用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)
公共注册表(非断网)
要从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集群无法使用公共网络从我们的容器注册表下载容器镜像,请执行以下操作
- 将InfluxDB注册表中的镜像复制到您自己的私有注册表。
- 使用对您的私有注册表名称的引用配置您的
AppInstance
资源。 - 提供您私有注册表的凭证。
您需要复制的镜像列表包含在包元数据中。您可以使用任何标准的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
:对象存储端点URLallowHttp
:将此设置为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
:对象存储端点URLS3_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
有关更多信息,请参阅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
storageClassName
: Kubernetes存储类。这取决于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
替换以下内容
STORAGE_CLASS
: Kubernetes存储类STORAGE_SIZE
:存储大小(示例:2Gi
)
这个页面有用吗?
感谢您的反馈!