在 Linux x86_64 上创建一个 ClickHouseKeeper 数据存储
安装ClickHouse操作员并设置 Clickhouse-keeper。
准备工作
ClickHouse 操作员版本和图像标签
销钉式Helm图或操作员版本需要以下图像。
| 平台 | 操作员版本 | Helm Chart 版本 | 带标签的图片 |
|---|---|---|---|
| Linux® x86_64 | v1.2.39 | v1.2.0 | artifact-public.instana.io/clickhouse-operator: v1.2.39
artifact-public.instana.io/clickhouse: 25.8.13.73-7-lts-ibm |
在线安装 ClickHouseKeeper
要在线安装ClickHouse-keeper,请完成以下步骤。
检查群集中是否存在 "
instana-clickhouse命名空间。 如果不存在,您可以现在创建。- 检查 "
instana-clickhouse命名空间是否存在。kubectl get namespace | grep clickhouse - 如果 "
instana-clickhouse命名空间不存在,请立即创建。kubectl create namespace instana-clickhouse - 创建
clickhousekeeper服务账户。kubectl create serviceaccount clickhousekeeper -n instana-clickhouse
- 检查 "
为ClickHouse图像创建图像提取秘密。 将 "
<download_key>替换为您自己的下载密钥。kubectl create secret docker-registry instana-registry \ --namespace=instana-clickhouse \ --docker-username=_ \ --docker-password=<download_key> \ --docker-server=artifact-public.instana.io如果您使用的是 Red Hat® OpenShift® 集群,请在部署 ClickHouse 操作员之前创建安全上下文约束(SCC)。 创建一个名为 YAML 的文件,例如
clickhouse-scc.yaml,其中包含 SecurityContextConstraints (SCC)的定义。apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: clickhouse-scc runAsUser: type: MustRunAs uid: 1001 seLinuxContext: type: RunAsAny fsGroup: type: RunAsAny allowHostDirVolumePlugin: false allowHostNetwork: true allowHostPorts: true allowPrivilegedContainer: false allowHostIPC: true allowHostPID: true readOnlyRootFilesystem: false users: - system:serviceaccount:instana-clickhouse:clickhouse-operator - system:serviceaccount:instana-clickhouse:clickhouse-operator-ibm-clickhouse-operator - system:serviceaccount:instana-clickhouse:clickhouse - system:serviceaccount:instana-clickhouse:clickhousekeeper创建 SCC 资源。
kubectl apply -f clickhouse-scc.yaml安装ClickHouse操作器。
helm install clickhouse-operator instana/ibm-clickhouse-operator -n instana-clickhouse --version=v1.2.0 --set operator.image.repository=artifact-public.instana.io/clickhouse-operator --set operator.image.tag=v1.2.39 --set imagePullSecrets[0].name="instana-registry"创建一个名为 YAML 的文件,例如
clickhouse_keeper.yaml,其中包含资源ClickHouseKeeperInstallation定义。apiVersion: "clickhouse-keeper.altinity.com/v1" kind: "ClickHouseKeeperInstallation" metadata: name: clickhouse-keeper namespace: instana-clickhouse spec: configuration: clusters: - name: "local" layout: replicasCount: 3 settings: logger/level: "information" logger/console: "true" listen_host: "0.0.0.0" keeper_server/snapshot_storage_path: /var/lib/clickhouse-keeper/coordination/snapshots/store keeper_server/log_storage_path: /var/lib/clickhouse-keeper/coordination/logs/store keeper_server/storage_path: /var/lib/clickhouse-keeper/ keeper_server/tcp_port: "2181" keeper_server/four_letter_word_white_list: "*" keeper_server/coordination_settings/raft_logs_level: "information" keeper_server/raft_configuration/server/port: "9444" prometheus/endpoint: "/metrics" prometheus/port: "7000" prometheus/metrics: "true" prometheus/events: "true" prometheus/asynchronous_metrics: "true" prometheus/status_info: "false" zookeeper/node/host: "localhost" zookeeper/node/port: "9181" templates: podTemplates: - name: clickhouse-keeper spec: # Add the following Affinity snippet to schedule each pod on a different node. # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchLabels: # app: clickhouse-keeper # topologyKey: "kubernetes.io/hostname" containers: - name: clickhouse-keeper imagePullPolicy: IfNotPresent image: artifact-public.instana.io/clickhouse:25.8.13.73-7-lts-ibm command: - clickhouse-keeper - --config-file=/etc/clickhouse-keeper/keeper_config.xml resources: requests: memory: "1Gi" serviceAccountName: clickhousekeeper imagePullSecrets: - name: instana-registry securityContext: fsGroup: 0 runAsGroup: 0 runAsUser: 1001 initContainers: - name: server-id-injector imagePullPolicy: IfNotPresent image: artifact-public.instana.io/clickhouse:25.8.13.73-7-lts-ibm volumeClaimTemplates: - name: log-storage-path spec: storageClassName: <storage_class_name> accessModes: - ReadWriteOnce resources: requests: storage: 20Gi - name: snapshot-storage-path spec: storageClassName: <storage_class_name> accessModes: - ReadWriteOnce resources: requests: storage: 20Gi完成部署和验证 ClickHousekeeper (联机和脱机) 中的步骤。
脱机安装 ClickHouseKeeper
将ClickHouse操作器安装在有气隙的环境中。
如果在准备安装时没有从外部注册表中提取ClickHouse映像,现在可以提取。 在 bastion 主机上运行以下命令 然后,将这些图像复制到位于物理隔离环境中的 Instana 主机上。
docker pull artifact-public.instana.io/clickhouse-operator:v1.2.39
docker pull artifact-public.instana.io/clickhouse:25.8.13.73-7-lts-ibm
要在物理隔离环境中安装 ClickHouse 操作员,请在您的 Instana 主机上完成以下步骤。
将图像重新标记到内部图像注册表。
docker tag artifact-public.instana.io/clickhouse-operator:v1.2.39 <internal-image-registry>/clickhouse-operator:v1.2.39 docker tag artifact-public.instana.io/clickhouse:25.8.13.73-7-lts-ibm <internal-image-registry>/clickhouse:25.8.13.73-7-lts-ibm将图像推送到内部图像注册表。
docker push <internal-image-registry>/clickhouse-operator:v1.2.39 docker push <internal-image-registry>/clickhouse:25.8.13.73-7-lts-ibm创建一个名为 YAML 的文件,例如
clickhouse-scc.yaml,其中包含 SecurityContextConstraints (SCC)的定义。apiVersion: security.openshift.io/v1 kind: SecurityContextConstraints metadata: name: clickhouse-scc runAsUser: type: MustRunAs uid: 1001 seLinuxContext: type: RunAsAny fsGroup: type: RunAsAny allowHostDirVolumePlugin: false allowHostNetwork: true allowHostPorts: true allowPrivilegedContainer: false allowHostIPC: true allowHostPID: true readOnlyRootFilesystem: false users: - system:serviceaccount:instana-clickhouse:clickhouse-operator - system:serviceaccount:instana-clickhouse:clickhouse-operator-ibm-clickhouse-operator - system:serviceaccount:instana-clickhouse:clickhouse - system:serviceaccount:instana-clickhouse:clickhousekeeper创建 SCC 资源。
kubectl apply -f clickhouse-scc.yaml检查群集中是否存在 "
instana-clickhouse命名空间。 如果不存在,您可以现在创建。- 检查 "
instana-clickhouse命名空间是否存在。kubectl get namespace | grep clickhouse - 如果 "
instana-clickhouse命名空间不存在,请立即创建。kubectl create namespace instana-clickhouse - 创建服务
clickhousekeeper账户。
kubectl create serviceaccount clickhousekeeper -n instana-clickhouse- 检查 "
如果您的内部图像注册表需要身份验证,请创建图像拉取密钥。
kubectl create secret docker-registry <secret_name> --namespace instana-clickhouse \ --docker-username=<registry_username> \ --docker-password=<registry_password> \ --docker-server=<internal-image-registry>:<internal-image-registry-port> \ --docker-email=<registry_email>安装ClickHouse操作器。 如果在上一步中创建了图像提取密钥,请在以下命令中添加
--set imagePullSecrets[0].name="<internal-image-registry-pull-secret>"。helm install clickhouse-operator ibm-clickhouse-operator-v1.2.0.tgz -n instana-clickhouse --version=v1.2.0 --set operator.image.repository=<internal-image-registry>/clickhouse-operator --set operator.image.tag=v1.2.39创建一个名为 YAML 的文件,例如
clickhouse_keeper.yaml,其中包含资源"ClickHouseKeeperInstallation定义。apiVersion: "clickhouse-keeper.altinity.com/v1" kind: "ClickHouseKeeperInstallation" metadata: name: clickhouse-keeper namespace: instana-clickhouse spec: configuration: clusters: - name: "local" layout: replicasCount: 3 settings: logger/level: "information" logger/console: "true" listen_host: "0.0.0.0" keeper_server/snapshot_storage_path: /var/lib/clickhouse-keeper/coordination/snapshots/store keeper_server/log_storage_path: /var/lib/clickhouse-keeper/coordination/logs/store keeper_server/storage_path: /var/lib/clickhouse-keeper/ keeper_server/tcp_port: "2181" keeper_server/four_letter_word_white_list: "*" keeper_server/coordination_settings/raft_logs_level: "information" keeper_server/raft_configuration/server/port: "9444" prometheus/endpoint: "/metrics" prometheus/port: "7000" prometheus/metrics: "true" prometheus/events: "true" prometheus/asynchronous_metrics: "true" prometheus/status_info: "false" zookeeper/node/host: "localhost" zookeeper/node/port: "9181" templates: podTemplates: - name: clickhouse-keeper spec: # Add the following Affinity snippet to schedule each pod on a different node. # affinity: # podAntiAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # - labelSelector: # matchLabels: # app: clickhouse-keeper # topologyKey: "kubernetes.io/hostname" containers: - name: clickhouse-keeper imagePullPolicy: IfNotPresent image: <internal-image-registry>/clickhouse:25.8.13.73-7-lts-ibm command: - clickhouse-keeper - --config-file=/etc/clickhouse-keeper/keeper_config.xml resources: requests: memory: "1Gi" # Optional: if you created an image pull secret for your internal registry, uncomment the following lines and update the image pull secret information. # imagePullSecrets: # - name: <internal-image-registry-pull-secret> serviceAccountName: clickhousekeeper securityContext: fsGroup: 0 runAsGroup: 0 runAsUser: 1001 initContainers: - name: server-id-injector imagePullPolicy: IfNotPresent image: <internal-image-registry>/clickhouse:25.8.13.73-7-lts-ibm volumeClaimTemplates: - name: log-storage-path spec: storageClassName: <storage_class_name> accessModes: - ReadWriteOnce resources: requests: storage: 20Gi - name: snapshot-storage-path spec: storageClassName: <storage_class_name> accessModes: - ReadWriteOnce resources: requests: storage: 20Gi完成部署和验证ClickHouseKeeper(联机和脱机)中的步骤。
部署和验证 ClickHouseKeeper (在线和离线)
要部署ClickHouseKeeper实例并创建数据存储,请完成以下步骤。
部署ClickHouseKeeper。
kubectl apply -f clickhouse_keeper.yaml -n instana-clickhouse验证ClickHouse操作员和ClickhouseKeeper的部署。
kubectl get all -n instana-clickhouse如果ClickHouse操作员部署成功,命令输出将显示操作员状态为 "
Running,如下例所示:NAME READY STATUS RESTARTS AGE pod/clickhouse-keeper-0 1/1 Running 0 2d7h pod/clickhouse-keeper-1 1/1 Running 0 2d8h pod/clickhouse-keeper-2 1/1 Running 0 2d8h pod/clickhouse-operator-ibm-clickhouse-operator-7754679687-bpwlx 1/1 Running 0 2d8h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/clickhouse-keeper ClusterIP 172.30.115.37 <none> 2181/TCP,7000/TCP 13d service/clickhouse-keeper-headless ClusterIP None <none> 9444/TCP 13d NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/clickhouse-operator-ibm-clickhouse-operator 1/1 1 1 79d NAME DESIRED CURRENT READY AGE replicaset.apps/clickhouse-operator-ibm-clickhouse-operator-7754679687 1 1 1 79d NAME READY AGE statefulset.apps/clickhouse-keeper 3/3 13d