tree: 9a1b09acb0eb343b78280c6db9eaf347bbcbf0c8 [search]
  1. connector-configmap.yaml
  2. connector-deployment.yaml
  3. kustomization.yaml
  4. namespace.yaml
  5. README.md
  6. runtime-configmap.yaml
  7. runtime-secret.yaml
  8. runtime-service.yaml
  9. runtime-statefulset.yaml
deploy/kubernetes/README.md

Deploying EventMesh on Kubernetes

Plain manifests for running the EventMesh runtime (StatefulSet) and the connector-runtime (Deployment) on Kubernetes, wrapped with kustomize. Helm packaging is a planned follow-up; the operator path from the legacy master branch (eventmesh-operator/, issue #3327) is not ported to the new architecture yet.

Quick start

# 1. Point conf at your real broker (edit runtime-configmap.yaml):
#    eventMesh.server.kafka.namesrvAddr / eventMesh.server.rocketmq.namesrvAddr
# 2. Set a real admin token (runtime-secret.yaml) -- the admin API is
#    FAIL-CLOSED without -Deventmesh.admin.token.
# 3. Apply:
kubectl apply -k .

The runtime Service exposes eventmesh-runtime.eventmesh-system:10105 (traffic) and :10106 (admin). Verify:

kubectl -n eventmesh-system get pods
TOKEN=$(kubectl -n eventmesh-system get secret eventmesh-admin-token -o jsonpath='{.data.token}' | base64 -d)
kubectl -n eventmesh-system run curl --rm -it --image=curlimages/curl --   curl -s -H "Authorization: Bearer $TOKEN"   http://eventmesh-runtime.eventmesh-system.svc.cluster.local:10106/admin/health

What each piece does

FilePurpose
namespace.yamleventmesh-system namespace
runtime-configmap.yamleventmesh.properties (storage endpoints) — subPath-mounted into conf/
runtime-secret.yamlAdmin bearer token (example; replace before use)
runtime-statefulset.yamlRuntime pods: ports, probes on /admin/health, non-root (uid 10001), PVC for the RocksDB offset store
runtime-service.yamlStable DNS for traffic (10105) + admin (10106)
connector-configmap.yamlConnector topology as CONNECTOR_OPTS (edit + rollout restart)
connector-deployment.yamlConnector-runtime pods (non-root uid 10002, process liveness probe)

Scaling semantics

  • Default -Deventmesh.delivery.topology=LOCAL_STICKY_PULL: every instance polls every partition of every subscribed topic. Works per-instance with no coordination, but instances duplicate consumption.

  • PARTITION_OWNED_PULL (no duplicate consumption, fencing via a meta store): requires shared coordination. Add to JAVA_OPTS in the StatefulSet:

    value: "-Deventmesh.admin.token=$(EVENTMESH_ADMIN_TOKEN) -XX:MaxRAMPercentage=70 -Deventmesh.meta.type=nacos -Deventmesh.meta.addr=<nacos-host>:8848 -Deventmesh.offset.meta=true"
    

    and scale replicas. See deployment docs for the coordination keys.

Storage backends

The image ships the memory (default, zero-dependency) / kafka / rocketmq / rocketmq5 storage plugins. Switch with EVENTMESH_STORAGE_TYPE on the runtime container and point eventMesh.server.<backend>.namesrvAddr in the ConfigMap at the in-cluster service (e.g. Strimzi Kafka bootstrap or a RocketMQ name server Service).