elastic / cloud-on-k8s

Elastic Cloud on Kubernetes
Other
2.52k stars 686 forks source link

null-valued setting found for key [node.attr.zone] found at line number [20], column number [11] #7888

Open veerendra2 opened 3 weeks ago

veerendra2 commented 3 weeks ago

Bug Report

What did you do?

Followed Using node topology labels, Kubernetes topology spread constraints, and Elasticsearch shard allocation awareness doc to make elasticsearch on AKS aware zones.

Added node.attr.zone: "${ZONE}" in Elasticsearch CR. Full spec below

What did you expect to see? I would expect elasticsearch should accept the config, up and running

What did you see instead? Under which circumstances?

Elasticsearch data nodes(pod) is CrashLooping with below error

Exception in thread "main" org.elasticsearch.ElasticsearchParseException: null-valued setting found for key [node.attr.zone] found at line number [20], column number [11]
    at org.elasticsearch.common.settings.Settings.validateValue(Settings.java:817)
    at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:792)
    at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:775)
    at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:775)
    at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:736)
    at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1245)
    at org.elasticsearch.node.InternalSettingsPreparer.loadConfigWithSubstitutions(InternalSettingsPreparer.java:126)
    at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:52)
    at org.elasticsearch.common.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:110)
    at org.elasticsearch.common.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:54)
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:85)
    at org.elasticsearch.cli.Command.main(Command.java:50)
    at org.elasticsearch.launcher.CliToolLauncher.main(CliToolLauncher.java:64)
Stream closed EOF for search/elasticsearch-es-data-v3-1 (elasticsearch)

Environment

Elasticsearch verion: 8.12.2 eck-operator helm chart version: 2.6.1

barkbay commented 3 weeks ago

Could you please provide the operator configuration? Maybe with k get cm -n elastic-system elastic-operator -o yaml.

Thanks

veerendra2 commented 3 weeks ago

@barkbay Please check

$ k get cm -n elastic-system elastic-operator -o yaml
apiVersion: v1
data:
  eck.yaml: log-verbosity: 0\nmetrics-port: 6060\ncontainer-registry: docker.elastic.co\ncontainer-suffix:
    \nmax-concurrent-reconciles: 3\nca-cert-validity: 8760h\nca-cert-rotate-before:
    24h\ncert-validity: 8760h\ncert-rotate-before: 24h\nexposed-node-labels: [topology.kubernetes.io/.*,failure-domain.beta.kubernetes.io/.*]\nset-default-security-context:
    auto-detect\nkube-client-timeout: 60s\nelasticsearch-client-timeout: 180s\ndisable-telemetry:
    false\ndistribution-channel: helm\nvalidate-storage-class: true\nenable-webhook:
    true\nwebhook-name: elastic-operator.elastic-system.k8s.elastic.co\nenable-leader-election:
    true\nelasticsearch-observation-interval: 10s
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: elastic-operator
    meta.helm.sh/release-namespace: elastic-system
  creationTimestamp: "2021-12-22T19:45:12Z"
  labels:
    app.kubernetes.io/instance: elastic-operator
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: elastic-operator
    app.kubernetes.io/version: 2.6.1
    helm.sh/chart: eck-operator-2.6.1
    helm.toolkit.fluxcd.io/name: elastic-operator
    helm.toolkit.fluxcd.io/namespace: elastic-system
  name: elastic-operator
  namespace: elastic-system

We use flux to sync the resources, below is Helm values in HelmRelease

---
apiVersion: helm.toolkit.fluxcd.io/v2beta2
kind: HelmRelease
metadata:
  name: elastic-operator
  namespace: elastic-system
spec:
  interval: 5m
  releaseName: elastic-operator
  chart:
    spec:
      chart: eck-operator
      version: 2.6.1
      sourceRef:
        kind: HelmRepository
        name: elastic
        namespace: flux-system
  install:
    crds: Skip
  upgrade:
    crds: Skip
  values:
    imagePullSecrets:
      - name: [REDACTED]
    image:
      repository: [REDACTED]-elastic-proxy/eck/eck-operator
    installCRDs: false
    resources:
      limits:
        cpu: null
        memory: 512Mi
      requests:
        cpu: 50m
        memory: 256Mi
    podLabels:
      app: elastic-operator
    config:
      metricsPort: 6060
    podMonitor:
      enabled: false
    securityContext:
      allowPrivilegeEscalation: false
      capabilities:
        drop:
          - ALL
      privileged: false
      readOnlyRootFilesystem: true
      runAsNonRoot: true
      seccompProfile:
        type: RuntimeDefault
barkbay commented 3 weeks ago

I can't apply this configuration:

error converting YAML to JSON: yaml: line 3: mapping values are not allowed in this context

I would expect the eck.yaml key to looks like the following:

apiVersion: v1
data:
  eck.yaml: |-
    log-verbosity: 0
    metrics-port: 0
    container-registry: docker.elastic.co
    max-concurrent-reconciles: 3
    ca-cert-validity: 8760h
    ca-cert-rotate-before: 24h
    cert-validity: 8760h
    cert-rotate-before: 24h
    disable-config-watch: false
    exposed-node-labels: [topology.kubernetes.io/.*,failure-domain.beta.kubernetes.io/.*]
    set-default-security-context: auto-detect
    kube-client-timeout: 60s
    elasticsearch-client-timeout: 180s
    disable-telemetry: false
    distribution-channel: helm
    validate-storage-class: true
    enable-webhook: true
    webhook-name: elastic-operator.elastic-system.k8s.elastic.co
    webhook-port: 9443
    operator-namespace: elastic-system
    enable-leader-election: true
    elasticsearch-observation-interval: 10s
    ubi-only: false
kind: ConfigMap
metadata:
  annotations:
    meta.helm.sh/release-name: elastic-operator
    meta.helm.sh/release-namespace: elastic-system
  creationTimestamp: "2024-06-10T11:32:05Z"
  labels:
    app.kubernetes.io/instance: elastic-operator
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/name: elastic-operator
    app.kubernetes.io/version: 2.13.0
    helm.sh/chart: eck-operator-2.13.0
  name: elastic-operator
  namespace: elastic-system
  resourceVersion: "127910"
  uid: aa350f80-9ff6-4f1a-8c8c-dcbab204bb45
veerendra2 commented 3 weeks ago

Thanks, I used the configmap you provided to test, restarted operator and elasticsearch cluster, getting same error

barkbay commented 3 weeks ago