Criação de um repositório de dados do ClickHouseKeeper no Linux x86_64

Instale o operador ClickHouse e configure o Clickhouse-keeper.

Nota:
Ao instalar o Instana pela primeira vez, use o Clickhouse-keeper em vez do Zookeeper.

Versões do operador ClickHouse e tags de imagem

As imagens a seguir são necessárias para a carta Helm fixada ou para as versões do operador.

Tabela 1. Versões do operador e tags de imagem para implantação
Plataforma Versões do operador Versão do gráfico do Helm Imagem com tag
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

Instalação do ClickHouseKeeper on-line

Para instalar ClickHouse-keeper on-line, conclua as etapas a seguir.

  1. Verifique se o namespace " instana-clickhouse existe em seu cluster. Se ele não existir, você poderá criá-lo agora.

    1. Verificar se o namespace " instana-clickhouse existe.
      kubectl get namespace | grep clickhouse
    2. Se o namespace " instana-clickhouse não existir, crie-o agora.
      kubectl create namespace instana-clickhouse
    3. Criar uma conta clickhousekeeper de serviço.
      kubectl create serviceaccount clickhousekeeper -n instana-clickhouse
  2. Crie segredos de extração de imagem para a imagem ClickHouse. Substitua " <download_key> por sua própria chave de download.

    kubectl create secret docker-registry instana-registry \
    --namespace=instana-clickhouse \
    --docker-username=_ \
    --docker-password=<download_key> \
    --docker-server=artifact-public.instana.io
     
  3. Se você estiver usando um cluster do Red Hat® OpenShift®, crie Restrições de Contexto de Segurança (SCC) antes de implantar o Operador do ClickHouse. Crie um arquivo ` YAML `, por exemplo clickhouse-scc.yaml, com a definição do ` 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. Criar o recurso SCC.

    kubectl apply -f clickhouse-scc.yaml
     
  5. Instale o operador 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. Crie um arquivo ` YAML `, por exemplo clickhouse_keeper.yaml, com a ClickHouseKeeperInstallation definição do recurso.

    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. Conclua as etapas em Implantação e verificação de ClickHousekeeper (on-line e off-line).

Instalando o ClickHouseKeeper off-line

Instale o operador do ClickHouse em um ambiente com vedação de ar.

Se você não extraiu as imagens do ClickHouse do registro externo quando preparou a instalação, poderá extraí-las agora. Execute os seguintes comandos em seu host do bastion. Em seguida, copie as imagens para o seu servidor de Instana, que se encontra em um ambiente isolado.

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
         

Para instalar o operador ` ClickHouse ` em um ambiente isolado, execute as etapas a seguir no seu host ` Instana `.

  1. Reenquadre as imagens no seu registro interno de imagens.

    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. Envie as imagens para o seu registro interno de imagens.

    docker push <internal-image-registry>/clickhouse-operator:v1.2.39
    docker push <internal-image-registry>/clickhouse:25.8.13.73-7-lts-ibm
                   
  3. Crie um arquivo ` YAML `, por exemplo clickhouse-scc.yaml, com a definição do ` 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. Criar o recurso SCC.

    kubectl apply -f clickhouse-scc.yaml
     
  5. Verifique se o namespace " instana-clickhouse existe em seu cluster. Se ele não existir, você poderá criá-lo agora.

    1. Verificar se o namespace " instana-clickhouse existe.
      kubectl get namespace | grep clickhouse
       
    2. Se o namespace " instana-clickhouse não existir, crie-o agora.
      kubectl create namespace instana-clickhouse
       
    3. Crie a conta clickhousekeeper de serviço.
    kubectl create serviceaccount clickhousekeeper  -n instana-clickhouse
     
  6. Se o seu registro de imagem interno precisar de autenticação, crie um segredo de image pull.

    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. Instale o operador ClickHouse. Se você criou um segredo de extração de imagem na etapa anterior, adicione --set imagePullSecrets[0].name="<internal-image-registry-pull-secret>" ao comando a seguir.

    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. Crie um arquivo ` YAML `, por exemplo clickhouse_keeper.yaml, com a "ClickHouseKeeperInstallation definição do recurso.

     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. Conclua as etapas em Implantação e verificação ClickHouseKeeper (on-line e off-line).

Implementação e verificação ClickHouseKeeper (on-line e off-line)

Para implantar a instância ClickHouseKeeper e criar o armazenamento de dados, conclua as etapas a seguir.

  1. Implante ClickHouseKeeper.

    kubectl apply -f clickhouse_keeper.yaml -n instana-clickhouse
     
  2. Verifique a implementação do operador ClickHouse e do ClickhouseKeeper.

    kubectl get all -n instana-clickhouse
     

    Se o operador ClickHouse for implantado com êxito, a saída do comando mostrará o status do operador como ' Running, conforme mostrado no exemplo a seguir:

     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