INFN EPICSEPIK8S DOCS
THE EPIK8S GUIDE

EPICS + K8S
= EPIK8S

A practical path from beamline configuration to running EPICS IOCs: start with a read-only render, understand the components, then operate them with confidence.

01Quick startPreview a beamline configuration02ArchitectureHow the pieces fit03ManualAdd, deploy and troubleshoot
01 / EPIK8S

Quick start

This example checks how the current epik8s-chart turns a beamline description into an ArgoCD Application. It does not touch a cluster. The sample IP 192.0.2.10 is documentation data; replace it before any real deployment.

01

Prepare

Install Helm 3 and clone epik8s-chart. For deployment, your cluster also needs Kubernetes access, ArgoCD, the required platform services, and an IOC image accessible from the cluster.

02

Describe one IOC

Set beamline, namespace, and epicsConfiguration.iocs in a YAML file. Choose a template and device fields that match an ibek-templates fixture. Use pinned image and chart revisions for a real beamline.

03

Preview the generated resources

Run Helm locally, inspect the resulting demo-ps01-ioc ArgoCD Application, and check the emitted values. The example below was rendered against the current chart source.

Example values

beamline: demo
namespace: demo
targetRevision: main
epicsConfiguration:
  name: epics-configuration
  address_list: ""
  max_array_bytes: "10000000"
  services: {}
  iocs:
    ps01:
      name: ps01
      template: ocem
      devtype: modbusps
      devgroup: mag
      iocprefix: DEMO:MAG:OCEM
      ps:
        current: {max: 100}
        voltage: {max: 16}
      devices:
        - name: PS01
          ip: 192.0.2.10

Render without deploying

git clone https://github.com/infn-epics/epik8s-chart.git
helm template demo ./epik8s-chart \
  -f demo-values.yaml > rendered.yaml

# Inspect the Application for this IOC
rg 'demo-ps01-ioc|kind: Application' rendered.yaml

The example file is downloadable here. It renders a ConfigMap and an ArgoCD Application; it does not prove the hardware, image, networking, or services are ready.

Next step

For a real installation, place reviewed values in a beamline repository, point its ArgoCD Application to the chart and values, then sync in ArgoCD after checking the generated diff. Follow the beamline repository’s deployment convention; the umbrella chart creates child Applications for IOCs and services.

02 / EPIK8S

Architecture

Beamline YAML
→
epik8s-chart
→
ArgoCD
→
ioc-chart
→
IOC runtime
Built in collaboration with Diamond Light Source

EPIK8S is the INFN implementation of the epics-containers framework developed at Diamond Light Source. The shared approach to containerized IOCs and IBEK informs this architecture; use the upstream documentation alongside the INFN repositories.

The beamline values define IOCs, soft IOCs, services, applications, and cron jobs. epik8s-chart emits an ArgoCD Application per component. For hardware IOCs, ioc-chart creates the workload and passes its values to the generic INFN IOC runtime image. Its Jinja templates produce ibek YAML; ibek generates the EPICS startup script and database.

Beamline repository

Owns deploy/values*.yaml, device inventory, optional custom IOC configuration, and local operations policy.

epik8s-chart

Creates child Applications, merges iocDefaults with IOC entries, and carries common beamline values into each deployment.

ioc-chart + runtime

Deploys the IOC pod, ConfigMap, networking and mounts. The image contains the compiled support modules and templates.

Platform layer

epik8s-platform describes shared networking, storage, monitoring and backend services. It has cluster-specific prerequisites and must be planned separately.

The complete source explanation lives in the IOC architecture guide. This site is a navigable overview; use the repositories as the source of truth for exact values and versions.

03 / EPIK8S

Manual

01

Add an IOC

Start from a matching template fixture. Add an entry under epicsConfiguration.iocs with name, template, devtype, iocprefix and devices. Put family defaults in iocDefaults.<template>; the IOC entry overrides them. Render and review before sync.

02

Use a custom IOC

An IOC without template can load configuration from a beamline Git path such as config/iocs/<name>. The runtime also supports a remote host path. Choose the mode deliberately and keep its source in version control.

03

Add services

Define a service under epicsConfiguration.services with its charturl and service-specific values. The umbrella chart creates a separate ArgoCD Application. Shared backends may depend on epik8s-platform; check the cluster prerequisites first.

04

Version a change

Templates are baked into infn-epics-ioc-runtime. After changing ibek-templates or support modules, update the submodule in infn-epics-ioc, publish a runtime image, then pin the beamline’s image or ioc_version. Keep chart revisions explicit for repeatable deployments.

05

Operate and inspect

Review the ArgoCD diff and sync status, then inspect the child Application, pod events and logs. Most IOC deployments use manual sync unless autosync is enabled. The pod log and optional NFS runtime folder show rendered configuration and startup output.

06

Troubleshoot

A missing template usually means the image predates it. An unknown ibek entity usually means its support module is absent from the image. Connection checks fail when the configured device cannot be reached. Check the image tag, generated YAML, pod logs, and hardware path before changing configuration.

Private Git

The charts support epik8s_secrets and the optional git_credentials_secret for clone credentials. Follow the credential guide; keep tokens in Kubernetes Secrets, not in beamline values.

04 / EPIK8S

Source documentation

This guide summarizes repository behavior inspected in October 2026. Check the linked source before applying changes to a facility.