Altinity / Altinity/clickhouse-operator

DNSResolver: Cannot resolve host (clickhouse-keeper-0.), error 0: Host not found.

Open
#1,723 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Go
Stars
2.6k
Forks
574
Avg merge
8d 6h
Merged PRs (30d)
6

Description

error logs:

+++ hostname -d
hostname: clickhouse-keeper-0: Address not available
++ export DOMAIN=
++ DOMAIN=
++ export CLIENT_HOST=clickhouse-keeper
++ CLIENT_HOST=clickhouse-keeper
++ export CLIENT_PORT=2181
++ CLIENT_PORT=2181
++ export RAFT_PORT=9444
++ RAFT_PORT=9444
+ source /conf/keeperFunctions.sh
++ set -ex
++ hostname -s
+ HOST=clickhouse-keeper-0
+ [[ clickhouse-keeper-0 =~ (.*)-([0-9]+)$ ]]
+ NAME=clickhouse-keeper
+ ORD=0
+ export MY_ID=1
+ MY_ID=1
+ set +e
+ getent hosts
+ [[ 0 -eq 0 ]]
+ ACTIVE_ENSEMBLE=true
+ set -e
+ mkdir -p /tmp/clickhouse-keeper/config.d/
+ [[ true == \t\r\u\e ]]
++ clickhouse-keeper-client --history-file=/dev/null -h clickhouse-keeper -p 2181 -q 'get '\''/keeper/config'\'''
Coordination::Exception: All connection tries failed while connecting to ZooKeeper. nodes: [240b:c0e0:104:544d:b464:2:0:ac6f]:2181
Poco::Exception. Code: 1000, e.code() = 113, Net Exception: No route to host (version 25.5.1.2782 (official build)), [240b:c0e0:104:544d:b464:2:0:ac6f]:2181
Poco::Exception. Code: 1000, e.code() = 0, Timeout: connect timed out: [240b:c0e0:104:544d:b464:2:0:ac6f]:2181 (version 25.5.1.2782 (official build)), [240b:c0e0:104:544d:b464:2:0:ac6f]:2181
Poco::Exception. Code: 1000, e.code() = 113, Net Exception: No route to host (version 25.5.1.2782 (official build)), [240b:c0e0:104:544d:b464:2:0:ac6f]:2181

++ true
+ CURRENT_KEEPER_CONFIG=
+ echo '<yandex><keeper_server>'
+ echo '<server_id>1</server_id>'
+ echo '<raft_configuration>'
++ echo ''
++ grep -c clickhouse-keeper-0.
+ [[ 0 == 0 ]]
+ echo '<server><id>1</id><hostname>clickhouse-keeper-0.</hostname><port>9444</port><priority>1</priority><start_as_follower>true</start_as_follower></server>'
+ IFS=
+ read -r line
++ echo ''
++ cut -d = -f 1
++ cut -d . -f 2
+ id=
+ [[ '' != '' ]]
+ IFS=
+ read -r line
+ echo '</raft_configuration>'
+ echo '</keeper_server></yandex>'
+ cat /tmp/clickhouse-keeper/config.d/generated-keeper-settings.xml
<yandex><keeper_server>
<server_id>1</server_id>
<raft_configuration>
<server><id>1</id><hostname>clickhouse-keeper-0.</hostname><port>9444</port><priority>1</priority><start_as_follower>true</start_as_follower></server>
</raft_configuration>
</keeper_server></yandex>
+ rm -rfv /var/lib/clickhouse-keeper/terminated
+ clickhouse-keeper --config-file=/etc/clickhouse-keeper/keeper_config.xml
Processing configuration file '/etc/clickhouse-keeper/keeper_config.xml'.
Including configuration file '/tmp/clickhouse-keeper/config.d/generated-keeper-settings.xml'.
Couldn't save preprocessed config to /etc/clickhouse-keeper/keeper_config-preprocessed.xml: File is read-only: /etc/clickhouse-keeper/keeper_config-preprocessed.xml
2025.05.28 05:46:16.084251 [ 23 ] {} <Information> SentryWriter: Sending crash reports is disabled
2025.05.28 05:46:16.139917 [ 23 ] {} <Information> Application: Starting ClickHouse Keeper 25.5.1.2782 (revision: 54498, git hash: e0a8a231c68824b3211369d94a592c1baab566ab, build id: 99626FE4D25A62F9C1B55F04532B0FE6DC54807B), PID 23
2025.05.28 05:46:16.139979 [ 23 ] {} <Information> Application: starting up
2025.05.28 05:46:16.140011 [ 23 ] {} <Information> Application: OS Name = Linux, OS Version = 3.10.0-1160.24.1.el7.x86_64, OS Architecture = x86_64
2025.05.28 05:46:16.140190 [ 23 ] {} <Information> Jemalloc: Value for background_thread set to true (from true)
2025.05.28 05:46:16.140390 [ 23 ] {} <Information> Application: keeper_server.max_memory_usage_soft_limit is set to 3.60 GiB
2025.05.28 05:46:16.140555 [ 23 ] {} <Information> CgroupsReader: Will create cgroup reader from '/sys/fs/cgroup/memory' (cgroups version: v1)
2025.05.28 05:46:16.140601 [ 23 ] {} <Information> MemoryWorker: Starting background memory thread with period of 50ms, using Cgroups as source
2025.05.28 05:46:16.140766 [ 23 ] {} <Debug> Application: Initializing DateLUT.
2025.05.28 05:46:16.140801 [ 23 ] {} <Trace> Application: Initialized DateLUT with time zone 'UTC'.
2025.05.28 05:46:16.146363 [ 23 ] {} <Trace> AsynchronousMetrics: Scanning /sys/class/thermal
2025.05.28 05:46:16.146417 [ 23 ] {} <Trace> AsynchronousMetrics: Scanning /sys/block
2025.05.28 05:46:16.147332 [ 23 ] {} <Trace> AsynchronousMetrics: Scanning /sys/devices/system/edac
2025.05.28 05:46:16.147556 [ 23 ] {} <Trace> AsynchronousMetrics: Scanning /sys/class/hwmon
2025.05.28 05:46:16.147837 [ 23 ] {} <Information> Context: Cannot connect to ZooKeeper (or Keeper) before internal Keeper start, will wait for Keeper synchronously
2025.05.28 05:46:16.147883 [ 23 ] {} <Debug> KeeperDispatcher: Initializing storage dispatcher
2025.05.28 05:46:16.148035 [ 23 ] {} <Information> KeeperContext: Keeper feature flag FILTERED_LIST: enabled
2025.05.28 05:46:16.148058 [ 23 ] {} <Information> KeeperContext: Keeper feature flag MULTI_READ: enabled
2025.05.28 05:46:16.148078 [ 23 ] {} <Information> KeeperContext: Keeper feature flag CHECK_NOT_EXISTS: disabled
2025.05.28 05:46:16.148098 [ 23 ] {} <Information> KeeperContext: Keeper feature flag CREATE_IF_NOT_EXISTS: disabled
2025.05.28 05:46:16.148119 [ 23 ] {} <Information> KeeperContext: Keeper feature flag REMOVE_RECURSIVE: disabled
2025.05.28 05:46:16.150470 [ 23 ] {} <Trace> KeeperSnapshotManager: Reading from disk LocalSnapshotDisk
2025.05.28 05:46:16.150584 [ 23 ] {} <Trace> KeeperSnapshotManager: No snapshots were found on LocalSnapshotDisk
2025.05.28 05:46:16.152265 [ 23 ] {} <Warning> DNSResolver: Cannot resolve host (clickhouse-keeper-0.), error 0: Host not found.
2025.05.28 05:46:16.152685 [ 23 ] {} <Error> bool DB::(anonymous namespace)::isLocalhost(const std::string &): Code: 198. DB::NetException: Not found address of host: clickhouse-keeper-0. (DNS_ERROR), Stack trace (when copying this message, always include the lines below):

0. DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000bda827b
1. DB::NetException::NetException<String const&>(int, FormatStringHelperImpl<std::type_identity<String const&>::type>, String const&) @ 0x000000000bd845a4
2. DB::(anonymous namespace)::hostByName(String const&) @ 0x000000000bd860e4
3. DB::DNSResolver::getResolvedIPAdressessWithFiltering(String const&) @ 0x000000000bd83f92
4. DB::KeeperStateManager::parseServersConfiguration(Poco::Util::AbstractConfiguration const&, bool, bool) const @ 0x000000000e6586d6
5. DB::KeeperStateManager::KeeperStateManager(int, String const&, String const&, Poco::Util::AbstractConfiguration const&, std::shared_ptr<DB::KeeperContext>) @ 0x000000000e65bf4b
6. DB::KeeperServer::KeeperServer(std::shared_ptr<DB::KeeperConfigurationAndSettings> const&, Poco::Util::AbstractConfiguration const&, ConcurrentBoundedQueue<DB::KeeperResponseForSession>&, ConcurrentBoundedQueue<DB::CreateSnapshotTask>&, std::shared_ptr<DB::KeeperContext>, DB::KeeperSnapshotManagerS3&, std::function<void (unsigned long, DB::KeeperRequestForSession const&)>) @ 0x000000000e5ca250
7. DB::KeeperDispatcher::initialize(Poco::Util::AbstractConfiguration const&, bool, bool, std::shared_ptr<DB::Macros const> const&) @ 0x000000000e5b1e59
8. DB::Context::initializeKeeperDispatcher(bool) const @ 0x000000000d076512
9. DB::Keeper::main(std::vector<String, std::allocator<String>> const&) @ 0x0000000005fa761a
10. Poco::Util::Application::run() @ 0x0000000012820b46
11. DB::Keeper::run() @ 0x0000000005fa43f0
12. mainEntryClickHouseKeeper(int, char**) @ 0x0000000005fa2fc2
13. main @ 0x0000000005fa1b73
14. ? @ 0x00007fb0c8b0ed90
15. ? @ 0x00007fb0c8b0ee40
16. _start @ 0x000000000504402e
 (version 25.5.1.2782 (official build))```




YAML:

```---
# Setup Service to provide access to ClickHouse keeper for clients
apiVersion: v1
kind: Service
metadata:
  # DNS would be like clickhouse-keeper.namespace.svc
  name: clickhouse-keeper
  labels:
    app: clickhouse-keeper
spec:
  ports:
    - port: 2181
      name: client
    - port: 7000
      name: prometheus
  selector:
    app: clickhouse-keeper
    what: node
---
# Setup Headless Service for StatefulSet
apiVersion: v1
kind: Service
metadata:
  # DNS would be like clickhouse-keeper-0.clickhouse-keepers.namespace.svc
  name: clickhouse-keepers
  labels:
    app: clickhouse-keeper
spec:
  ports:
    - port: 9444
      name: raft
  clusterIP: None
  selector:
    app: clickhouse-keeper
    what: node
---
# Setup max number of unavailable pods in StatefulSet
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: clickhouse-keeper-pod-disruption-budget
spec:
  selector:
    matchLabels:
      app: clickhouse-keeper
  maxUnavailable: 1
---
# Setup ClickHouse Keeper settings
apiVersion: v1
kind: ConfigMap
metadata:
  name: clickhouse-keeper-settings
data:
  keeper_config.xml: |
    <clickhouse>
        <include_from>/tmp/clickhouse-keeper/config.d/generated-keeper-settings.xml</include_from>
        <logger>
            <level>trace</level>
            <console>true</console>
        </logger>
        <listen_host>0.0.0.0</listen_host>
        <listen_host>::</listen_host>
        <keeper_server incl="keeper_server">
            <enable_reconfiguration>true</enable_reconfiguration>
            <path>/var/lib/clickhouse-keeper</path>
            <tcp_port>2181</tcp_port>
            <four_letter_word_white_list>*</four_letter_word_white_list>
            <coordination_settings>
                <!-- <raft_logs_level>trace</raft_logs_level> -->
                <raft_logs_level>information</raft_logs_level>
            </coordination_settings>
            <http_control>
                <port>9182</port>
                <readiness><endpoint>/ready</endpoint></readiness>
            </http_control>
        </keeper_server>
        <prometheus>
            <endpoint>/metrics</endpoint>
            <port>7000</port>
            <metrics>true</metrics>
            <events>true</events>
            <asynchronous_metrics>true</asynchronous_metrics>
            <status_info>true</status_info>
        </prometheus>
    </clickhouse>
---
# Setup ClickHouse Keeper scripts
apiVersion: v1
kind: ConfigMap
metadata:
  name: clickhouse-keeper-scripts
  labels:
    app: clickhouse-keeper
data:
  env.sh: |
    #!/usr/bin/env bash
    export DOMAIN=`hostname -d`
    export CLIENT_HOST=clickhouse-keeper
    export CLIENT_PORT=2181
    export RAFT_PORT=9444
  keeperFunctions.sh: |
    #!/usr/bin/env bash
    set -ex
    function keeperConfig() {
      echo "$HOST.$DOMAIN:$RAFT_PORT;$ROLE;$WEIGHT"
    }
    function keeperConnectionString() {
      # If the client service address is not yet available, then return localhost
      set +e
      getent hosts "${CLIENT_HOST}" 2>/dev/null 1>/dev/null
      if [[ $? -ne 0 ]]; then
        set -e
        echo "-h localhost -p ${CLIENT_PORT}"
      else
        set -e
        echo "-h ${CLIENT_HOST} -p ${CLIENT_PORT}"
      fi
    }

  keeperStart.sh: |
    #!/usr/bin/env bash
    set -ex
    source /conf/env.sh
    source /conf/keeperFunctions.sh

    HOST=`hostname -s`
    if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then
      NAME=${BASH_REMATCH[1]}
      ORD=${BASH_REMATCH[2]}
    else
      echo Failed to parse name and ordinal of Pod
      exit 1
    fi
    export MY_ID=$((ORD+1))
    set +e
    getent hosts $DOMAIN
    if [[ $? -eq 0 ]]; then
      ACTIVE_ENSEMBLE=true
    else
      ACTIVE_ENSEMBLE=false
    fi
    set -e
    mkdir -p /tmp/clickhouse-keeper/config.d/
    if [[ "true" == "${ACTIVE_ENSEMBLE}" ]]; then
      # get current config from clickhouse-keeper
      CURRENT_KEEPER_CONFIG=$(clickhouse-keeper-client --history-file=/dev/null -h ${CLIENT_HOST} -p ${CLIENT_PORT} -q "get '/keeper/config'" || true)
      # generate dynamic config, add current server to xml
      {
        echo "<yandex><keeper_server>"
        echo "<server_id>${MY_ID}</server_id>"
        echo "<raft_configuration>"
        if [[ "0" == $(echo "${CURRENT_KEEPER_CONFIG}" | grep -c "${HOST}.${DOMAIN}") ]]; then
          echo "<server><id>${MY_ID}</id><hostname>${HOST}.${DOMAIN}</hostname><port>${RAFT_PORT}</port><priority>1</priority><start_as_follower>true</start_as_follower></server>"
        fi
        while IFS= read -r line; do
          id=$(echo "$line" | cut -d '=' -f 1 | cut -d '.' -f 2)
          if [[ "" != "${id}" ]]; then
            hostname=$(echo "$line" | cut -d '=' -f 2 | cut -d ';' -f 1 | cut -d ':' -f 1)
            port=$(echo "$line" | cut -d '=' -f 2 | cut -d ';' -f 1 | cut -d ':' -f 2)
            priority=$(echo "$line" | cut -d ';' -f 3)
            priority=${priority:-1}
            port=${port:-$RAFT_PORT}
            echo "<server><id>$id</id><hostname>$hostname</hostname><port>$port</port><priority>$priority</priority></server>"
          fi
        done <<< "$CURRENT_KEEPER_CONFIG"
        echo "</raft_configuration>"
        echo "</keeper_server></yandex>"
      } > /tmp/clickhouse-keeper/config.d/generated-keeper-settings.xml
    else
      # generate dynamic config, add current server to xml
      {
        echo "<yandex><keeper_server>"
        echo "<server_id>${MY_ID}</server_id>"
        echo "<raft_configuration>"
        echo "<server><id>${MY_ID}</id><hostname>${HOST}.${DOMAIN}</hostname><port>${RAFT_PORT}</port><priority>1</priority></server>"
        echo "</raft_configuration>"
        echo "</keeper_server></yandex>"
      } > /tmp/clickhouse-keeper/config.d/generated-keeper-settings.xml
    fi

    # run clickhouse-keeper
    cat /tmp/clickhouse-keeper/config.d/generated-keeper-settings.xml
    rm -rfv /var/lib/clickhouse-keeper/terminated
    clickhouse-keeper --config-file=/etc/clickhouse-keeper/keeper_config.xml

  keeperTeardown.sh: |
    #!/usr/bin/env bash
    set -ex
    exec > /proc/1/fd/1
    exec 2> /proc/1/fd/2
    source /conf/env.sh
    source /conf/keeperFunctions.sh
    set +e
    KEEPER_URL=$(keeperConnectionString)
    set -e
    HOST=`hostname -s`
    if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then
        NAME=${BASH_REMATCH[1]}
        ORD=${BASH_REMATCH[2]}
    else
        echo Failed to parse name and ordinal of Pod
        exit 1
    fi
    export MY_ID=$((ORD+1))

    CURRENT_KEEPER_CONFIG=$(clickhouse-keeper-client --history-file=/dev/null -h localhost -p ${CLIENT_PORT} -q "get '/keeper/config'")
    CLUSTER_SIZE=$(echo -e "${CURRENT_KEEPER_CONFIG}" | grep -c -E '^server\.[0-9]+=')
    echo "CLUSTER_SIZE=$CLUSTER_SIZE, MyId=$MY_ID"
    # If CLUSTER_SIZE > 1, this server is being permanently removed from raft_configuration.
    if [[ "$CLUSTER_SIZE" -gt "1" ]]; then
      clickhouse-keeper-client --history-file=/dev/null -q "reconfig remove $MY_ID" ${KEEPER_URL}
    fi

    # Wait to remove $MY_ID from quorum
    # for (( i = 0; i < 6; i++ )); do
    #    CURRENT_KEEPER_CONFIG=$(clickhouse-keeper-client --history-file=/dev/null -h localhost -p ${CLIENT_PORT} -q "get '/keeper/config'")
    #    if [[ "0" == $(echo -e "${CURRENT_KEEPER_CONFIG}" | grep -c -E "^server.${MY_ID}=$HOST.+participant;[0-1]$") ]]; then
    #      echo "$MY_ID removed from quorum"
    #      break
    #    else
    #      echo "$MY_ID still present in quorum"
    #    fi
    #    sleep 1
    # done

    # Wait for client connections to drain. Kubernetes will wait until the configured
    # "terminationGracePeriodSeconds" before forcibly killing the container
    for (( i = 0; i < 3; i++ )); do
      CONN_COUNT=`echo $(exec 3<>/dev/tcp/127.0.0.1/2181 ; printf "cons" >&3 ; IFS=; tee <&3; exec 3<&- ;) | grep -v "^$" | grep -v "127.0.0.1" | wc -l`
      if [[ "$CONN_COUNT" -gt "0" ]]; then
        echo "$CONN_COUNT non-local connections still connected."
        sleep 1
      else
        echo "$CONN_COUNT non-local connections"
        break
      fi
    done

    touch /var/lib/clickhouse-keeper/terminated
    # Kill the primary process ourselves to circumvent the terminationGracePeriodSeconds
    ps -ef | grep clickhouse-keeper | grep -v grep | awk '{print $1}' | xargs kill


  keeperLive.sh: |
    #!/usr/bin/env bash
    set -ex
    source /conf/env.sh
    OK=$(exec 3<>/dev/tcp/127.0.0.1/${CLIENT_PORT} ; printf "ruok" >&3 ; IFS=; tee <&3; exec 3<&- ;)
    # Check to see if keeper service answers
    if [[ "$OK" == "imok" ]]; then
      exit 0
    else
      exit 1
    fi

  keeperReady.sh: |
    #!/usr/bin/env bash
    set -ex
    exec > /proc/1/fd/1
    exec 2> /proc/1/fd/2
    source /conf/env.sh
    source /conf/keeperFunctions.sh

    HOST=`hostname -s`

    # Check to see if clickhouse-keeper service answers
    set +e
    getent hosts $DOMAIN
    if [[ $? -ne 0 ]]; then
      echo "no active DNS records in service, first running pod"
      exit 0
    elif [[ -f /var/lib/clickhouse-keeper/terminated ]]; then
      echo "termination in progress"
      exit 0
    else
      set -e
      # An ensemble exists, check to see if this node is already a member.
      # Extract resource name and this members' ordinal value from pod hostname
      if [[ $HOST =~ (.*)-([0-9]+)$ ]]; then
        NAME=${BASH_REMATCH[1]}
        ORD=${BASH_REMATCH[2]}
      else
        echo "Failed to parse name and ordinal of Pod"
        exit 1
      fi
      set +e
      HTTP_READY_STATUS=$(wget -qO- http://127.0.0.1:9182/ready)
      if [[ "0" == "$?" ]]; then
        if [[ "0" != $(echo $HTTP_READY_STATUS | grep -c '"status":"ok"') ]]; then
          echo $HTTP_READY_STATUS
          exit 0
        fi
      fi
      set -e
      MY_ID=$((ORD+1))

      CURRENT_KEEPER_CONFIG=$(clickhouse-keeper-client --history-file=/dev/null -h ${CLIENT_HOST} -p ${CLIENT_PORT} -q "get '/keeper/config'" || exit 0)
      # Check to see if clickhouse-keeper for this node is a participant in raft cluster
      if [[ "1" == $(echo -e "${CURRENT_KEEPER_CONFIG}" | grep -c -E "^server.${MY_ID}=${HOST}.+participant;1$") ]]; then
        echo "clickhouse-keeper instance is available and an active participant"
        exit 0
      else
        echo "clickhouse-keeper instance is ready to add as participant with 1 weight."

        ROLE=participant
        WEIGHT=1
        KEEPER_URL=$(keeperConnectionString)
        NEW_KEEPER_CONFIG=$(keeperConfig)
        clickhouse-keeper-client --history-file=/dev/null -q "reconfig add 'server.$MY_ID=$NEW_KEEPER_CONFIG'" ${KEEPER_URL}
        exit 0
      fi
    fi

---
# Setup ClickHouse Keeper StatefulSet
apiVersion: apps/v1
kind: StatefulSet
metadata:
  # nodes would be named as clickhouse-keeper-0, clickhouse-keeper-1, clickhouse-keeper-2
  name: clickhouse-keeper
spec:
  selector:
    matchLabels:
      app: clickhouse-keeper
  serviceName: clickhouse-keepers
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: clickhouse-keeper
        what: node
      annotations:
        prometheus.io/port: '7000'
        prometheus.io/scrape: 'true'
    spec:
      # affinity:
      #   podAntiAffinity:
      #     requiredDuringSchedulingIgnoredDuringExecution:
      #       - labelSelector:
      #           matchExpressions:
      #             - key: "app"
      #               operator: In
      #               values:
      #                 - clickhouse-keeper
      #         topologyKey: "kubernetes.io/hostname"
      volumes:
        - name: clickhouse-keeper-settings
          configMap:
            name: clickhouse-keeper-settings
            items:
              - key: keeper_config.xml
                path: keeper_config.xml
        - name: clickhouse-keeper-scripts
          configMap:
            name: clickhouse-keeper-scripts
            defaultMode: 0755
      containers:
        - name: clickhouse-keeper
          imagePullPolicy: Always
          image: "clickhouse/clickhouse-keeper:latest-alpine"
          resources:
            requests:
              memory: "4Gi"
              cpu: "2"
            limits:
              memory: "4Gi"
              cpu: "2"
          volumeMounts:
            - name: clickhouse-keeper-settings
              mountPath: /etc/clickhouse-keeper/
            - name: datadir-volume
              mountPath: /var/lib/clickhouse-keeper
            - name: clickhouse-keeper-scripts
              mountPath: /conf/
          command:
            - /conf/keeperStart.sh
          lifecycle:
            preStop:
              exec:
                command:
                  - /conf/keeperTeardown.sh
          livenessProbe:
            exec:
              command:
                - /conf/keeperLive.sh
            failureThreshold: 6
            initialDelaySeconds: 60
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 10
          readinessProbe:
            exec:
              command:
                - /conf/keeperReady.sh
            failureThreshold: 3
            initialDelaySeconds: 10
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 30
          ports:
            - containerPort: 2181
              name: client
              protocol: TCP
            - containerPort: 9444
              name: quorum
              protocol: TCP
            - containerPort: 7000
              name: metrics
              protocol: TCP
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 40
  # volumeClaimTemplates:
  #   - metadata:
  #       name: clickhouse-keeper-datadir-volume
  #     spec:
  #       accessModes:
  #         - ReadWriteOnce
  #       resources:
  #         requests:
  #           storage: 25Gi

  volumeClaimTemplates:
    - metadata:
        name: datadir-volume
      spec:
        storageClassName: robin
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 50Gi```




Also please suggest the production ready, compatible versions for clickhouse-server, clickhouse-keeper and operator 

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the clickhouse-keeper-scripts ConfigMap, especially env.sh and keeperStart.sh, then compare the generated-keeper-settings.xml in the logs with the StatefulSet and headless Service DNS names. Reproduce the Keeper startup path and trace how DOMAIN becomes clickhouse-keeper-0.; done means the configured Keeper host resolves and the service starts without the DNSResolver error.

Written by the indexing model from the issue text.

Assessment

Tech stack
bash, kubernetes
Domain
databases, distributed-systems, infrastructure
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.