Share
Embed
Transcript
18 slides
-
#KubeCon #CloudNativeCon From laptop to cluster The agentic AI inner
loop on Kubernetes Kevin Dubois Sr Principal Developer Advocate, IBM -
“It works on my machine” Escalating costs 40%+ of agentic
AI projects Inference, tokens and infrastructure Unclear business value Demos that never reach a real user canceled by the end of 2027 Inadequate risk controls No permissions, audit or rollback Gartner, June 2025 -
Today’s demo app RACE DASHBOARD PHONE PREVIEW WebSocket Tap /
shake Streams Kafka WebSocket Race state Dashboard -
Are MCP and A2A the new REST? REST MCP A2A
Your agent Another service A tool server Another team's agent -
MCP & A2A servers are just code race / RaceTools.java
public class RaceTools { 1 1 A regular class No base class to implement @McpServer(McpServer.DEFAULT) @McpServer("admin") @Tool(name = "get_race_state", description = "The current race: status, teams, distances") 2 The contract 2 What the model reads RaceState getRaceState() { return race.state(); } 3 @McpServer("admin") @Tool(name = "boost_team", description = "Secretly boosts or sabotages a team") Uni<String> boostTeam(int team, Double multiplier) { return game.sendModifier(team, multiplier); } } Guarded 3 Admin path checks token and role -
Not every API deserves an MCP tool RAW OPENAPI →
MCP 18 tools RESHAPR CUSTOM TOOL 3,848 tokens 1 tool 734 tokens Race summary Race state Returns Read Read in parallel Leaderboard 81% fewer tokens get_race_momentum Build race summary reshapr.io Leader and gap Team activity Top 3 players -
A2A specialists RUNTIME CONNECTIONS 1 Supervisor Game @SupervisorAgent( MCP snapshots
race://current Race director race-ops supervisor responseStrategy = SupervisorResponseStrategy.LAST, 1 A2A subAgents = { AnalystA2AAgent.class, CreativeA2AAgent.class}) 2 Analyst Creative Snapshot diagnosis 2 Next-heat theme Analyst A2A client @A2AClientAgent( name = "Race Analyst", BOOST EXECUTION outputKey = "engagement") ResultWithAgenticScope<String> analyze( AnalysisRequest analysisRequest); MCP Human approval Game admin /admin/mcp -
Running and testing the app locally Local workflow START DEV
MODE $ quarkus dev RUN TESTS $ ./mvnw test Live reload Edit code, refresh the app Dev Services Managed local dependencies Dev UI -
Evals: change the model without breaking the app PROMPT “Boost
the team in last place” current model boost_team(team=2, multiplier=1.5, seconds=10) candidate model boost_team(team=2, multiplier=3, seconds=10) -
Pretty much just like any other app Build once Laptop
Deploy Same image Kubernetes OPENAI_BASE_URL http://localhost:11434/v1 OPENAI_BASE_URL http://models.vllm.svc/v1 OPENAI_MODEL granite4 OPENAI_MODEL granite4 OPENAI_API_KEY unused OPENAI_API_KEY from a secret / token -
Kubernetes does the rest Probes Metrics Kubernetes Startup, readiness, liveness
To configure in this deployment MCP latency and errors Probe Scrape Input / output token counts Race ops Director + A2A clients Deployment Rollout and replica count CPU and memory limits Reconcile 1 replica Health gauge: last game call Inject Secrets + identity Model key Agents use SPIFFE identities -
The cluster issues the agent's identity ISSUED BY Race ops
SPIFFE JWT-SVID Keycloak OIDC provider SPIFFE X.509 SVID LIFETIME 5 min Renewed every 60 seconds, mid-race included * SPIFFE client authentication is still a preview in Keycloak Analyst + Creative A2A over mTLS LIFETIME 1 hour -
Live testing Join the race Scan to join Pick a
team Salty Pods Spicy Sidecars Tap or shake -
AI is just another integration* * just a little more
unpredictable than others AI Configuration Identity Observability Permissions Schemas Transactions Don’t reinvent the wheel -
Thank you Kevin Dubois Sr Principal Developer Advocate, IBM THE
DEMO github.com/redhat-developer-demos/quinoa-wind-turbine github.com/kdubois linkedin.com/in/kevindubois feedback please? :) MORE quarkus.io/ai, docs.quarkiverse.io/quarkus-langchain4j modelcontextprotocol.io, a2a-protocol.org, reshapr.io