Conversation
- Changed replicaCount default from 1 to 3 - Converted Deployment to StatefulSet - Made main service headless (clusterIP: None) for StatefulSet - Added per-pod service template with LoadBalancer default - Added service.perPodService configuration to values.yaml - Updated README with StatefulSet architecture documentation Co-authored-by: rrobetti <7221783+rrobetti@users.noreply.github.com>
- Updated installation notes to use StatefulSet pod names - Added guidance for accessing per-pod services - Included examples for LoadBalancer and NodePort service types Co-authored-by: rrobetti <7221783+rrobetti@users.noreply.github.com>
- Disable per-pod services when autoscaling is enabled - Add documentation for service.type field - Update README to clarify autoscaling behavior - Ensures services match actual pod count Co-authored-by: rrobetti <7221783+rrobetti@users.noreply.github.com>
- Document why per-pod services are disabled with autoscaling - Explain StatefulSet headless service requirement - Clarify that service.type is ignored for StatefulSet Co-authored-by: rrobetti <7221783+rrobetti@users.noreply.github.com>
|
@copilot does these changes expose ojp instances via DNS names ojp-server-0, ojp-server-1, and ojp-server-3, are these the addresses to be used to connect to them? |
DNS Names: Ports:
Clients connect to port 1059 for OJP functionality. Port 9090 is only for Prometheus to scrape metrics. |
charts/ojp-server/README.md
Outdated
| | `service.type` | Service type (always ClusterIP for headless service) | `ClusterIP` | | ||
| | `service.port` | OJP Server service port | `1059` | | ||
| | `service.perPodService.enabled` | Enable individual per-pod services (disabled when autoscaling is enabled) | `true` | | ||
| | `service.perPodService.type` | Type for per-pod services (LoadBalancer or NodePort) | `LoadBalancer` | |
There was a problem hiding this comment.
LoadBalancer is the default because it's the standard service type for cloud environments (AWS, GCP, Azure) that automatically provisions external IPs for each pod. For on-premise/bare-metal deployments, users can set service.perPodService.type: NodePort instead. This is now documented in the README (commit b2231fd).
| port: 1059 | ||
| # Per-pod services allow individual addressability for each StatefulSet pod | ||
| # Note: Per-pod services are only created when autoscaling is disabled | ||
| perPodService: |
There was a problem hiding this comment.
@copilot Does this means that each pod of OJP server gets its own loadbalancer in front? what is the advantage here? is it to just have a DNS name?
There was a problem hiding this comment.
Yes, each pod gets its own LoadBalancer. The advantages are:
- Direct addressability: Clients can connect to a specific instance
- Stable identity: Each pod has a predictable DNS name
- Independent external IPs: Each instance accessible via unique external IP
- Connection affinity: Clients requiring persistent connections to the same instance
This enables use cases where clients need to maintain connections to specific OJP instances rather than load-balanced connections. See the new "Why Per-Pod Services?" section in the README (commit b2231fd).
- Added "Why Per-Pod Services?" section explaining benefits - Documented DNS names for internal and external access - Clarified port usage: 1059 for clients, 9090 for metrics - Explained LoadBalancer default for cloud vs NodePort for on-premise - Updated service and server parameter descriptions Co-authored-by: rrobetti <7221783+rrobetti@users.noreply.github.com>
Documentation updated in commit b2231fd. Added comprehensive sections explaining:
|
|
@copilot lint failing |
- Version bumped from 0.1.4 to 0.1.5 to address CI lint failure - Required for chart-testing to pass with changes made Co-authored-by: rrobetti <7221783+rrobetti@users.noreply.github.com>
Migration Plan: Deployment to StatefulSet
values.yaml:replicaCountfrom 1 to 3service.perPodService.enabledwith default trueservice.perPodService.typewith default LoadBalancerautoscaling.enabledis false (already is)statefulset.yamltemplate to replacedeployment.yamlservice.yamlto create headless service for StatefulSetper-pod-service.yamltemplate for individual pod serviceshelm templateandhelm lintSummary
All requirements from the problem statement have been successfully implemented:
✅ Default chart creates a StatefulSet (not a Deployment)
✅ Individual per-pod services created (LoadBalancer by default)
✅ Each OJP instance is individually addressable
✅ Default replicaCount set to 3
✅ autoscaling.enabled defaults to false
✅ Comprehensive documentation added
✅ Chart version bumped to 0.1.5
Original prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.