NOM 代理作为 Sidecar

NOM 代理可以在 Kubernetes 集群中与 Neo4j 实例位于同一 Pod 中作为 Sidecar 容器部署。代理 Sidecar 不需要使用官方代理镜像。代理可以简单地在轻量级 Linux 基于容器中运行,例如 `alpine`。代理二进制文件可以被安装到容器中,也可以从 Neo4j 镜像中提取,使用一个初始化容器。

代理 Sidecar 容器无法访问 Neo4j Pod 使用的所有资源以及集群节点的主机指标。例如,对于磁盘使用情况指标,代理需要访问 Neo4j Pod 使用的文件系统或持久卷。这些需要被安装到代理 Daemon Pod 中。代理 Sidecar 只能报告其自身包含环境的主机指标,这并非集群节点资源使用情况的完整视图。

以下是 Neo4j Helm 图表的示例 `values.yaml` 文件,其中配置了 NOM 代理 Sidecar

values.sidecar.yaml
neo4j:
  name: single-instance
  edition: "enterprise"
  password: "passw0rd"
  acceptLicenseAgreement: "yes"
volumes:
  data:
    mode: defaultStorageClass

config:
  metrics.prometheus.enabled: "true"
  metrics.filter: "*"

additionalVolumes:
  - name: agent-bin
    emptyDir: {}
additionalVolumeMounts:
  - name: agent-bin
    mountPath: /agent/bin

podSpec:
  initContainers:
    - name: agent-extractor
      image: neo4j:enterprise
      command:
        - "/bin/bash"
        - "-c"
        - "tar -xvzf products/neo4j-ops-manager-agent-*-linux-amd64.tar.gz --strip-components 1 && ls && mv bin/agent /agent/bin/agent"
      volumeMounts:
        - name: agent-bin
          mountPath: /agent/bin

  containers:
    - name: nom-agent
      image: alpine
      command:
        - "/agent/bin/agent"
        - "console"
      env:
        - name: CONFIG_SERVER_GRPC_ADDRESS
          value: "server:9091"
        - name: CONFIG_SERVER_HTTP_ADDRESS
          value: "https://server:8080"
        - name: CONFIG_TLS_TRUSTED_CERTS
          value: "/certificates/certs/ca-chain.pem"
        # - name: CONFIG_TLS_CLIENT_CERT
          # value: "/certificates/agent.cert.pem"
        # - name: CONFIG_TLS_CLIENT_KEY
          # value: "/certificates/agent.key.pem"
        - name: CONFIG_AGENT_NAME
          value: "nom-agent"
        - name: CONFIG_AGENT_DESCRIPTION
          value: "an agent from helm chart"
        - name: CONFIG_LOG_LEVEL
          value: "debug"
        - name: CONFIG_INSTANCE_1_NAME
          value: "side-car-agent"
        - name: CONFIG_INSTANCE_1_BOLT_URI
          value: "neo4j://localhost:7687"
        - name: CONFIG_INSTANCE_1_BOLT_USERNAME
          value: "neo4j"
        - name: CONFIG_INSTANCE_1_BOLT_PASSWORD
          value: "passw0rd"
        - name: CONFIG_INSTANCE_1_QUERY_LOG_PORT
          value: "9500"
        - name: CONFIG_INSTANCE_1_LOG_CONFIG_PATH
          value: "/var/lib/neo4j/conf/server-logs.xml"
        - name: CONFIG_INSTANCE_1_QUERY_LOG_MIN_DURATION
          value: "100"
      volumeMounts:
        - name: agent-bin
          mountPath: /agent/bin