Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
91 commits
Select commit Hold shift + click to select a range
34d3662
feat(AIP-3938): AI tier openshift support
kbhos-splunk Jun 12, 2026
64420d8
UPdate test to reflect Gemma431bIt removal
kbhos-splunk Jun 15, 2026
377ff1d
fix(AIP-3938): Revert artifacts.yaml to main — upstream changes leake…
kbhos-splunk Jun 15, 2026
87982bb
successfully deploy gpt-oss20b model
kbhos-splunk Jun 15, 2026
b8ac604
misc
kbhos-splunk Jun 16, 2026
4f6c820
add back gemma model
kbhos-splunk Jun 16, 2026
5b330f9
clean-ups
kbhos-splunk Jun 16, 2026
2a78e36
config map to store the issuer url
kbhos-splunk Jun 16, 2026
918c376
resolve copilot comments
kbhos-splunk Jun 16, 2026
cc16e49
clean up
kbhos-splunk Jun 18, 2026
548a9c3
Merge pull request #102 from splunk/ai-tier-openshift-support
kupratyu-splunk Jun 18, 2026
108a392
feat(): AI pod script enhancements
kbhos-splunk Jun 23, 2026
8116909
Update openshift-cluster-config.yaml
kbhos-splunk Jun 23, 2026
c504626
Apply suggestions from code review
kbhos-splunk Jun 25, 2026
f01144b
Merge pull request #113 from splunk/ai-pod-script-enhancements
kupratyu-splunk Jun 29, 2026
9850883
feat(): Openshift scripts for air gapped env
kbhos-splunk Jul 3, 2026
9049743
fix codex comments
kbhos-splunk Jul 3, 2026
70c0501
Merge pull request #120 from splunk/ai-pod-air-gap-script
kupratyu-splunk Jul 3, 2026
8ebac6d
Merge pull request #125 from splunk/main
kupratyu-splunk Jul 9, 2026
5d89bb3
fix(openshift): route GPU and CPU workers via ai-tier-node label, fix…
kbhos-splunk Jul 10, 2026
208aa7f
feat: Ai pod model downloads (#118)
kbhos-splunk Jul 10, 2026
57beae4
resolve codex comments
kbhos-splunk Jul 10, 2026
733b576
resolve few more codex commnets
kbhos-splunk Jul 10, 2026
ae7cc3c
Merge pull request #127 from splunk/ai-pod-feature-branch
kupratyu-splunk Jul 10, 2026
f102933
feat(infra): add k0s AWS CloudFormation provisioner
kupratyu-splunk Jul 13, 2026
7b93a8b
feat(infra): rewrite k0s AWS provisioner with SCP compliance and EBS …
kupratyu-splunk Jul 13, 2026
519780a
docs(infra): rewrite K0S_AWS_PROVISION.md — SCP compliance, integrati…
kupratyu-splunk Jul 13, 2026
939be20
feat(infra): auto-create network stack when vpcId is empty; default u…
kupratyu-splunk Jul 13, 2026
5ca771e
fix(infra): add UNTESTED warnings to auto-create network; fix dry-run…
kupratyu-splunk Jul 13, 2026
20bd1e5
refactor(infra): push_k0s_config patches infra fields instead of over…
kupratyu-splunk Jul 13, 2026
e6737d3
docs(infra): update K0S_AWS_PROVISION.md for patch-based config manag…
kupratyu-splunk Jul 13, 2026
6113fcf
docs(infra): explain subnet auto-select vs pin in Existing VPC mode
kupratyu-splunk Jul 13, 2026
589e5a3
feat(infra): check NAT outbound connectivity on all private nodes aft…
kupratyu-splunk Jul 13, 2026
9e72756
fix(provision): multi-AZ GPU fallback, per-instance EBS AZ, preflight…
kupratyu-splunk Jul 14, 2026
ad55cd5
fix(provision): symlink model downloads to MinIO data disk to avoid r…
kupratyu-splunk Jul 14, 2026
3c5f8aa
fix(staging): use find -L to follow model_artifacts symlink in upload…
kupratyu-splunk Jul 14, 2026
d0fdb2c
fix(provision): robust data disk detection + UUID-based fstab in moun…
kupratyu-splunk Jul 14, 2026
8fe0da8
docs(provision): rewrite K0S_AWS_PROVISION.md with full prod runbook
kupratyu-splunk Jul 15, 2026
e5effff
fix(provision): forward AWS credentials to installer for ECR auth
kupratyu-splunk Jul 15, 2026
ccc6295
feat(provision): SeaweedFS support + ECR image patching + per-step ti…
kupratyu-splunk Jul 15, 2026
204379f
fix(provision): set ECR_ACCOUNT/ECR_REGION in load_config
kupratyu-splunk Jul 15, 2026
e0cfbbe
fix(nvidia): auto-upgrade kernel + reboot when kernel-devel mismatch …
kupratyu-splunk Jul 15, 2026
f339af6
fix(nvidia): explicitly run dkms build+install when module stuck in '…
kupratyu-splunk Jul 15, 2026
e7fc179
fix(provision): one-shot deploy fixes — correct operator image, clust…
kupratyu-splunk Jul 15, 2026
9d77e26
fix(provision): stop overwriting image tags from provision script
kupratyu-splunk Jul 15, 2026
fa1aff0
docs(provision): update K0S_AWS_PROVISION.md with current one-shot wo…
kupratyu-splunk Jul 15, 2026
cb077bb
fix(provision): print exact copy-paste commands with real EIP after p…
kupratyu-splunk Jul 16, 2026
94d36c5
docs(cluster_setup): add external Splunk integration runbook
kupratyu-splunk Jul 16, 2026
125e2dc
docs(cluster_setup): address Codex review feedback on external Splunk…
kupratyu-splunk Jul 16, 2026
147b3ba
docs(cluster_setup): address second Codex review pass on external Spl…
kupratyu-splunk Jul 16, 2026
3466372
fix(config): remove real SeaweedFS endpoint and default credentials f…
kupratyu-splunk Jul 16, 2026
65d95a0
fix(provision): port all Codex P1/P2 fixes from feat/k0s-aws-cloudfor…
kupratyu-splunk Jul 16, 2026
d543848
fix(provision): do not mount data disk in GPU/installer userdata
kupratyu-splunk Jul 16, 2026
47f7479
docs(cluster_setup): address third Codex review pass on external Splu…
kupratyu-splunk Jul 16, 2026
0a349bb
feat(splunk): make Splunk optional via empty-config graceful skip
kupratyu-splunk Jul 8, 2026
c0b076f
feat(install): make Splunk telemetry optional with disabled/internal/…
kupratyu-splunk Jul 9, 2026
f3dfa30
Merge pull request #128 from splunk/feat/external-splunk-integration-doc
kupratyu-splunk Jul 17, 2026
f3557a9
fix(): force delete stuck terminating namespaces on node failure
kbhos-splunk Jul 17, 2026
b826446
resolve codex comments
kbhos-splunk Jul 17, 2026
be47ecb
fix(splunk): address P1/P2 badge issues for optional Splunk mode
kupratyu-splunk Jul 17, 2026
0d5c639
fix(splunk): address P1/P2 badge issues — correct files
kupratyu-splunk Jul 17, 2026
1cba984
Merge pull request #124 from splunk/feat/splunk-operator-optional
kupratyu-splunk Jul 17, 2026
719b2e1
saia route setup
kbhos-splunk Jul 17, 2026
3ba7604
feat(splunk): add TrustedIssuers field and SAIA issuer config
kupratyu-splunk Jul 17, 2026
08ff7e4
Merge pull request #131 from splunk/ai-pod-final
kupratyu-splunk Jul 17, 2026
526ebcc
fix(saia): address P1/P2 Codex badges for TrustedIssuers issuer deriv…
kupratyu-splunk Jul 17, 2026
6b62f00
fix(tests): update tests to match splunk-optional OTel gate and new v…
kupratyu-splunk Jul 17, 2026
fc1ca50
fix(saia): use comma separator for SPLUNK_ISSUERS to match authorizer
kupratyu-splunk Jul 17, 2026
a238f2a
Merge pull request #132 from splunk/feat/splunk-trusted-issuers
kupratyu-splunk Jul 17, 2026
4b8c88d
fix(cluster_setup): stop reverting artifacts.yaml on repeat installs,…
kupratyu-splunk Jul 17, 2026
b07745c
fix(cluster_setup): anchor operator image sed on position, not content
kupratyu-splunk Jul 20, 2026
75e75ee
fix(cluster_setup): address Codex P3 findings on mutable-tag validation
kupratyu-splunk Jul 21, 2026
31e2f5f
fix(cluster_setup): include OTel collector in mutable-tag check
kupratyu-splunk Jul 21, 2026
1c271c4
Merge branch 'main' into fix/k0s-install-image-upgrade
kupratyu-splunk Jul 21, 2026
3619d3b
fix(cluster_setup): include Splunk Operator image in mutable-tag check
kupratyu-splunk Jul 21, 2026
af817e3
docs(AIP-4503): Openshift customer onboarding doc (#135)
kbhos-splunk Jul 21, 2026
75e1bd1
test(cluster_setup): add upgrade-flow tests and wire into CI
kupratyu-splunk Jul 22, 2026
95f39ad
feat: support slim-api service
spl-arif Jul 17, 2026
1ec5c89
feat: deploy CTSM model
spl-arif Jul 17, 2026
7f2e593
feat: splunk issues for slim-api & deployment support
spl-arif Jul 17, 2026
a4c43a7
fix(k0s): align Splunk issuer_uri with SPLUNK_ISSUERS endpoint for in…
spl-arif Jul 23, 2026
b7f9ff3
fix(slim): address PR #137 P2 review findings
spl-arif Jul 23, 2026
9cbdf85
fix(crds): add slim to the AIPlatform/AIService feature name enum
spl-arif Jul 23, 2026
2d7b1a8
Merge pull request #134 from splunk/fix/k0s-install-image-upgrade
kupratyu-splunk Jul 26, 2026
b1530c6
Initial changes for adding the sole config for model deployment
vvarshney-splunk Jul 16, 2026
4a62cf5
Changes for allowing usage of scale factor to scale deployments
vvarshney-splunk Jul 21, 2026
d0d0949
Remove internal scaling design document
vvarshney-splunk Jul 21, 2026
5402169
Fixing controller tests to set scale-file env vars
vvarshney-splunk Jul 22, 2026
3066194
Fix OpenShift scaleFactor wiring
vvarshney-splunk Jul 22, 2026
28cfc39
Avoid stale installer manifest backups
vvarshney-splunk Jul 26, 2026
bc9fd52
Support dynamic RayCluster head services
vvarshney-splunk Jul 28, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions .github/workflows/cluster-setup-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: Cluster Setup Tests
on:
workflow_call:

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4

- name: Ensure yq is available
run: |
if ! command -v yq &> /dev/null; then
sudo wget -qO /usr/local/bin/yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64
sudo chmod +x /usr/local/bin/yq
fi
yq --version

- name: Run cluster_setup unit tests
run: bash tools/cluster_setup/test_k0s_cluster_with_stack.sh

- name: Run Splunk-optional installer dry-run tests
run: bash tools/cluster_setup/test_installer_dry_run.sh
4 changes: 4 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ jobs:
uses: ./.github/workflows/main-unit-tests.yml
needs: check-formatting

cluster-setup-tests:
uses: ./.github/workflows/cluster-setup-tests.yml
needs: check-formatting

build-image:
uses: ./.github/workflows/main-build-image.yml
secrets: inherit
Expand Down
8 changes: 4 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ helm-chart/**/charts/
!helm-chart/**/charts/.gitkeep

# Cluster-setup script byproducts (*.original): pristine-snapshot backups
# written by tools/cluster_setup/k0s_cluster_with_stack.sh on first run and
# reused as a reset point on subsequent runs (see configure_images()
# → "Restoring from clean originals"). Needed locally for idempotent
# re-installs; never committed.
# written by tools/cluster_setup/eks_cluster_with_stack.sh on first run and
# reused as a reset point on subsequent runs. Needed locally for idempotent
# re-installs; never committed. (k0s_cluster_with_stack.sh no longer uses
# this snapshot/restore pattern, but the EKS script still does.)
tools/cluster_setup/*.original
5 changes: 4 additions & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ WORKDIR /
COPY --from=builder /workspace/manager .
COPY config/configs/instance.yaml instance.yaml
COPY config/configs/applications.yaml applications.yaml
COPY config/configs/features/ features/
COPY config/configs/model-scale.yaml model-scale.yaml
COPY config/configs/worker-scale.yaml worker-scale.yaml
COPY LICENSE LICENSE-2.0.txt
COPY --from=builder /certs/tls.crt /certs/tls.crt
COPY --from=builder /certs/tls.key /certs/tls.key
Expand All @@ -51,4 +52,6 @@ COPY --from=builder /certs/tls.key /certs/tls.key
USER 1001:0
ENV INSTANCE_FILE=/instance.yaml
ENV APPLICATION_FILE=/applications.yaml
ENV MODEL_SCALE_FILE=/model-scale.yaml
ENV WORKER_SCALE_FILE=/worker-scale.yaml
ENTRYPOINT ["/manager"]
5 changes: 4 additions & 1 deletion Dockerfile.debug
Original file line number Diff line number Diff line change
Expand Up @@ -47,14 +47,17 @@ COPY --from=builder /workspace/manager .
# Copy config files
COPY config/configs/instance.yaml instance.yaml
COPY config/configs/applications.yaml applications.yaml
COPY config/configs/features/ features/
COPY config/configs/model-scale.yaml model-scale.yaml
COPY config/configs/worker-scale.yaml worker-scale.yaml
COPY --from=builder /certs/tls.crt /certs/tls.crt
COPY --from=builder /certs/tls.key /certs/tls.key

USER 65532:65532

ENV INSTANCE_FILE=/instance.yaml
ENV APPLICATION_FILE=/applications.yaml
ENV MODEL_SCALE_FILE=/model-scale.yaml
ENV WORKER_SCALE_FILE=/worker-scale.yaml

# Start with delve for debugging
ENTRYPOINT ["/dlv", "--listen=:2345", "--headless=true", "--api-version=2", "--accept-multiclient", "exec", "/manager", "--"]
26 changes: 20 additions & 6 deletions api/v1/aiplatform_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ type AIPlatformSpec struct {
// +kubebuilder:validation:MaxItems=10
Features []FeatureSpec `json:"features,omitempty"`

// ScaleFactor is a platform-wide capacity multiplier. It uniformly scales
// BOTH the model (Serve) replicas AND the GPU worker-pool pod counts, so a
// single knob grows capacity without needing to know which models exist or
// how many GPUs each uses. The cluster must have proportionally more GPUs
// available before raising it. Defaults to 1 (single-capacity deployment).
// +kubebuilder:validation:Optional
// +kubebuilder:validation:Minimum=1
// +kubebuilder:default=1
ScaleFactor *int32 `json:"scaleFactor,omitempty"`

// WorkerGroupConfig defines the Ray worker group configuration
// +kubebuilder:validation:Optional
WorkerGroupConfig *WorkerGroupConfig `json:"workerGroupConfig,omitempty"`
Expand Down Expand Up @@ -177,17 +187,13 @@ type VectorDBStorageSpec struct {

// FeatureSpec defines the features to enable in the AIPlatform
type FeatureSpec struct {
// Name of the feature, e.g. "saia" or "seca"
// +kubebuilder:validation:Enum=saia;seca
// Name of the feature, e.g. "saia", "seca" or "slim"
// +kubebuilder:validation:Enum=saia;seca;slim
Name string `json:"name,omitempty"`
// ServiceAccountName is the name of the service account to use for the feature
ServiceAccountName string `json:"serviceAccountName,omitempty"`
// Version of the feature, e.g. "1.0.0"
Version string `json:"version,omitempty"`
// ScaleFactor is the desired fixed number of replicas for the feature.
// +kubebuilder:validation:Minimum=1
// +optional
ScaleFactor *int32 `json:"scaleFactor,omitempty"`
}

// WeaviateSpec defines the configuration for the Weaviate vector database
Expand Down Expand Up @@ -311,6 +317,14 @@ type SplunkConfigurationSpec struct {
// VaultFilePath is the path where Vault Agent injects the Splunk HEC token
// +kubebuilder:validation:Optional
VaultFilePath string `json:"vaultFilePath,omitempty"`

// TrustedIssuers is a list of Splunk JWT issuer URLs (management port,
// e.g. https://<splunk-host>:8089) that SAIA will trust for token validation.
// When the in-cluster Splunk Standalone is deployed (SplunkCustomResourceRef is set),
// its issuer is included automatically and TrustedIssuers are appended.
// In external or disabled modes, SPLUNK_ISSUERS is populated solely from this list.
// +optional
TrustedIssuers []string `json:"trustedIssuers,omitempty"`
}

// ReplicasSpec sets min/max worker replicas
Expand Down
25 changes: 14 additions & 11 deletions api/v1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading