Création d'un magasin de données « ClickHouseKeeper » sur Linux x86_64

Installez l'opérateur ClickHouse et configurez Clickhouse-keeper.

Remarque :
Lors de la première installation d' Instana, utilisez Clickhouse-keeper à la place de Zookeeper.

Versions de l'opérateur ClickHouse et balises d'image

Les images suivantes sont nécessaires pour les versions épinglées de la carte du Helm ou de l'opérateur.

Tableau 1. Versions de l'opérateur et balises d'image pour le déploiement
Plateforme Versions de l'opérateur Version de graphique Helm Image avec étiquette
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

Installation de ClickHouseKeeper en ligne

Pour installer ClickHouse-keeper en ligne, suivez les étapes suivantes.

  1. Vérifiez si l'espace de noms " instana-clickhouse existe dans votre cluster. S'il n'existe pas, vous pouvez le créer maintenant.

    1. Vérifier si l'espace de noms " instana-clickhouse existe.
      kubectl get namespace | grep clickhouse
    2. Si l'espace de noms " instana-clickhouse n'existe pas, créez-le maintenant.
      kubectl create namespace instana-clickhouse
    3. Créer un compte clickhousekeeper de service.
      kubectl create serviceaccount clickhousekeeper -n instana-clickhouse
  2. Créer des secrets de tirage d'image pour l'image ClickHouse. Remplacez " <download_key> par votre propre clé de téléchargement.

    kubectl create secret docker-registry instana-registry \
    --namespace=instana-clickhouse \
    --docker-username=_ \
    --docker-password=<download_key> \
    --docker-server=artifact-public.instana.io
     
  3. Si vous utilisez un cluster Red Hat® OpenShift®, créez des contraintes de contexte de sécurité (SCC) avant de déployer l'opérateur ClickHouse. Créez un fichier « YAML », par exemple clickhouse-scc.yaml, contenant la définition du protocole SCC ( SecurityContextConstraints ).

    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. Créer la ressource CCN.

    kubectl apply -f clickhouse-scc.yaml
     
  5. Installer l'opérateur 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"
     
  6. Créez un fichier « YAML », par exemple clickhouse_keeper.yaml, contenant la définition ClickHouseKeeperInstallation de la ressource.

    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
     
  7. Effectuez les étapes du déploiement et de la vérification de ClickHousekeeper (en ligne et hors ligne).

Installation de ClickHouseKeeper hors ligne

Installer l'opérateur ClickHouse dans un environnement ventilé.

Si vous n'avez pas extrait les images ClickHouse du registre externe lors de la préparation de l'installation, vous pouvez le faire maintenant. Exécutez les commandes suivantes sur votre hôte bastion. Ensuite, copiez les images sur votre serveur d' Instana, qui se trouve dans un environnement isolé.

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
         

Pour installer l'opérateur « ClickHouse » dans un environnement isolé, procédez comme suit sur votre hôte Instana.

  1. Reporter les images dans votre registre d'images interne.

    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
                   
  2. Transférez les images dans votre registre d'images interne.

    docker push <internal-image-registry>/clickhouse-operator:v1.2.39
    docker push <internal-image-registry>/clickhouse:25.8.13.73-7-lts-ibm
                   
  3. Créez un fichier « YAML », par exemple clickhouse-scc.yaml, contenant la définition du protocole SCC ( SecurityContextConstraints ).

    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. Créer la ressource CCN.

    kubectl apply -f clickhouse-scc.yaml
     
  5. Vérifiez si l'espace de noms " instana-clickhouse existe dans votre cluster. S'il n'existe pas, vous pouvez le créer maintenant.

    1. Vérifier si l'espace de noms " instana-clickhouse existe.
      kubectl get namespace | grep clickhouse
       
    2. Si l'espace de noms " instana-clickhouse n'existe pas, créez-le maintenant.
      kubectl create namespace instana-clickhouse
       
    3. Créez le compte clickhousekeeper de service.
    kubectl create serviceaccount clickhousekeeper  -n instana-clickhouse
     
  6. Si votre registre d'images interne nécessite une authentification, créez un secret d'extraction d'image.

    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. Installer l'opérateur ClickHouse. Si vous avez créé un secret d'extraction d'image à l'étape précédente, ajoutez --set imagePullSecrets[0].name="<internal-image-registry-pull-secret>" à la commande suivante.

    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
                   
  8. Créez un fichier « YAML », par exemple clickhouse_keeper.yaml, contenant la définition "ClickHouseKeeperInstallation de la ressource.

     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
     
  9. Suivez les étapes de la section Déploiement et vérification de ClickHouseKeeper (en ligne et hors ligne).

Déploiement et vérification de ClickHouseKeeper (en ligne et hors ligne)

Pour déployer l'instance ClickHouseKeeper et créer le magasin de données, suivez les étapes suivantes.

  1. Déployer ClickHouseKeeper.

    kubectl apply -f clickhouse_keeper.yaml -n instana-clickhouse
     
  2. Vérifier le déploiement de l'opérateur ClickHouse et de ClickhouseKeeper.

    kubectl get all -n instana-clickhouse
     

    Si l'opérateur ClickHouse est déployé avec succès, la sortie de la commande indique que le statut de l'opérateur est " Running, comme le montre l'exemple suivant :

     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