Erstellen eines ClickHouseKeeper Datenspeichers auf Linux x86_64

Installieren Sie den ClickHouse Operator und richten Sie Clickhouse-keeper ein.

Hinweis: Wenn Sie Instana zum ersten Mal installieren, verwenden Sie Clickhouse-keeper anstelle von Zookeeper.

ClickHouse operator-Versionen und Bild-Tags

Die folgenden Bilder werden für die gepinnten Helm Diagramm- oder Bedienerversionen benötigt.

Tabelle 1. Operator-Versionen und Bild-Tags für den Einsatz
Plattform Operatorversionen Version des Helm-Diagramms Bild mit Tag
Linux® x86_64 v1.2.18 v1.2.0 artifact-public.instana.io/clickhouse-operator: v1.2.18

artifact-public.instana.io/clickhouse: 25.8.6.11-1-lts-ibm

Installation von ClickHouseKeeper online

Um ClickHouse-keeper online zu installieren, führen Sie die folgenden Schritte aus.

  1. Prüfen Sie, ob der Namespace instana-clickhouse in Ihrem Cluster existiert. Wenn er nicht existiert, können Sie ihn jetzt erstellen.

    1. Prüfen Sie, ob der Namespace instana-clickhouse existiert.
      kubectl get namespace | grep clickhouse
    2. Wenn der Namespace instana-clickhouse nicht existiert, erstellen Sie ihn jetzt.
      kubectl create namespace instana-clickhouse
    3. Erstellen Sie ein clickhousekeeper Dienstkonto.
      kubectl create serviceaccount clickhousekeeper -n instana-clickhouse
  2. Erstellen Sie Bildzugriffsgeheimnisse für das Bild ClickHouse. Ersetzen Sie <download_key> durch Ihren eigenen Download-Schlüssel.

    kubectl create secret docker-registry instana-registry \
    --namespace=instana-clickhouse \
    --docker-username=_ \
    --docker-password=<download_key> \
    --docker-server=artifact-public.instana.io
     
  3. Wenn Sie einen Red Hat® OpenShift® cluster verwenden, erstellen Sie Security Context Constraints (SCC), bevor Sie den ClickHouse Operator einsetzen. Erstellen Sie eine YAML-Datei, z.B. clickhouse-scc.yaml, mit der Definition 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
     
  4. Erstellen Sie die SCC-Ressource.

    kubectl apply -f clickhouse-scc.yaml
     
  5. Installieren Sie den Betreiber 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.18 --set imagePullSecrets[0].name="instana-registry"
     
  6. Erstellen Sie eine YAML-Datei, z.B. clickhouse_keeper.yaml, mit der Ressourcendefinition 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-openssl:25.8.6.11-1-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-openssl:25.8.6.11-1-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
     
  7. Führen Sie die Schritte unter Bereitstellen und Überprüfen von ClickHousekeeper (online und offline) aus.

Installation von ClickHouseKeeper offline

Installieren Sie den ClickHouse Operator in einer luftdurchlässigen Umgebung.

Wenn Sie die ClickHouse -Images nicht aus der externen Registrierung geholt haben, als Sie die Installation vorbereitet haben, können Sie sie jetzt holen. Führen Sie die folgenden Befehle auf Ihrem Bastion-Host aus. Kopieren Sie dann die Bilder auf Ihren Instana-Host, der sich in einer Air-Gapped-Umgebung befindet.

docker pull artifact-public.instana.io/clickhouse-operator:v1.2.18
docker pull artifact-public.instana.io/clickhouse-openssl:25.8.6.11-1-lts-ibm
         

Um den ClickHouse Operator in einer Air-Gapped-Umgebung zu installieren, führen Sie die folgenden Schritte auf Ihrem Instana-Host aus.

  1. Kennzeichnen Sie die Bilder in Ihrer internen Bildregistrierung neu.

    docker tag artifact-public.instana.io/clickhouse-operator:v1.2.18 <internal-image-registry>/clickhouse-operator:v1.2.18
    docker tag artifact-public.instana.io/clickhouse-openssl:25.8.6.11-1-lts-ibm <internal-image-registry>/clickhouse-openssl:25.8.6.11-1-lts-ibm
                   
  2. Übertragen Sie die Bilder in Ihre interne Bildregistrierung.

    docker push <internal-image-registry>/clickhouse-operator:v1.2.18
    docker push <internal-image-registry>/clickhouse-openssl:25.8.6.11-1-lts-ibm
                   
  3. Erstellen Sie eine YAML-Datei, z.B. clickhouse-scc.yaml, mit der Definition 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
     
  4. Erstellen Sie die SCC-Ressource.

    kubectl apply -f clickhouse-scc.yaml
     
  5. Prüfen Sie, ob der Namespace instana-clickhouse in Ihrem Cluster existiert. Wenn er nicht existiert, können Sie ihn jetzt erstellen.

    1. Prüfen Sie, ob der Namespace instana-clickhouse existiert.
      kubectl get namespace | grep clickhouse
       
    2. Wenn der Namespace instana-clickhouse nicht existiert, erstellen Sie ihn jetzt.
      kubectl create namespace instana-clickhouse
       
    3. Erstellen Sie das Dienstkonto clickhousekeeper .
    kubectl create serviceaccount clickhousekeeper  -n instana-clickhouse
     
  6. Wenn Ihre interne Bildregistrierung eine Authentifizierung erfordert, erstellen Sie ein Bildabrufgeheimnis.

    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>
     
  7. Installieren Sie den Betreiber ClickHouse. Wenn Sie im vorangegangenen Schritt ein Image Pull Secret erstellt haben, fügen Sie dem folgenden Befehl --set imagePullSecrets[0].name="<internal-image-registry-pull-secret>" hinzu.

    helm install clickhouse-operator ibm-clickhouse-operator-v1.2.18.tgz -n instana-clickhouse --version=v1.2.0 --set operator.image.repository=<internal-image-registry>/clickhouse-operator --set operator.image.tag=v1.2.18
                   
  8. Erstellen Sie eine YAML-Datei, z.B. clickhouse_keeper.yaml, mit der Ressourcendefinition "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-openssl:25.8.6.11-1-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-openssl:25.8.6.11-1-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
     
  9. Führen Sie die Schritte unter Bereitstellen und Überprüfen von ClickHouseKeeper (online und offline) aus.

Bereitstellung und Überprüfung von ClickHouseKeeper (online und offline)

Um die Instanz ClickHouseKeeper bereitzustellen und den Datenspeicher zu erstellen, führen Sie die folgenden Schritte aus.

  1. Stellen Sie ClickHouseKeeper bereit.

    kubectl apply -f clickhouse_keeper.yaml -n instana-clickhouse
     
  2. Überprüfen Sie den ClickHouse Betreiber und ClickhouseKeeper Einsatz.

    kubectl get all -n instana-clickhouse
     

    Wenn der Operator ClickHouse erfolgreich eingesetzt wurde, zeigt die Befehlsausgabe den Operator-Status Running an, wie im folgenden Beispiel gezeigt:

     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