Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
71 changes: 65 additions & 6 deletions generator/readme_app.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,30 @@ import (
"gopkg.in/yaml.v2"
)

// SubprojectMeeting struct to hold tag subproject meeting data.
type SubprojectMeeting struct {
Schedule string `yaml:"schedule"`
ZoomURL string `yaml:"zoom_url"`
MeetingNotesURL string `yaml:"meeting_notes_url,omitempty"`
}

// SubprojectLeadership struct for tag subprojects.
type SubprojectLeadership struct {
SubprojectLeads []Person `yaml:"subproject_leads"`
}

// Subproject struct to hold subproject data.
type Subproject struct {
Name string `yaml:"name"`
MissionStatement string `yaml:"mission_statement,omitempty"`
Contact Contact `yaml:"contact"`
Dir string `yaml:"dir"`
Name string `yaml:"name"`
MissionStatement string `yaml:"mission_statement,omitempty"`
Leadership SubprojectLeadership `yaml:"leadership"`
Meetings []SubprojectMeeting `yaml:"meetings"`
Contact Contact `yaml:"contact"`
LandscapeURL string `yaml:"landscape_url,omitempty"`
LandscapePreviewImage string `yaml:"landscape_preview_image,omitempty"`
// The following are generated, and the fields in the YAML file are ignored.
CharterLink string
}

// Term struct to hold start and end dates.
Expand Down Expand Up @@ -50,9 +69,10 @@ type Meeting struct {

// Contact struct to hold contact information.
type Contact struct {
Slack string `yaml:"slack"`
MailingList string `yaml:"mailing_list"`
TOCLiaison []Person `yaml:"toc_liaison"`
Slack string `yaml:"slack"`
SlackChannel string `yaml:"slack_channel,omitempty"`
MailingList string `yaml:"mailing_list"`
TOCLiaison []Person `yaml:"toc_liaison"`
}

// Tag struct to hold tag data, including CharterLink and Subprojects.
Expand Down Expand Up @@ -97,6 +117,7 @@ func main() {
tocDir := filepath.Join("..", "toc_subprojects")
tagTemplatePath := filepath.Join("..", "generator", "tag_readme.tmpl")
tocTemplatePath := filepath.Join("..", "generator", "toc_subproject_readme.tmpl")
subprojectTemplatePath := filepath.Join("..", "generator", "tag_subproject_readme.tmpl")

// Read YAML file.
data, err := os.ReadFile(configPath)
Expand Down Expand Up @@ -128,6 +149,15 @@ func main() {
log.Fatalf("Failed to parse toc template: %v", err)
}

subprojectTmplContent, err := os.ReadFile(subprojectTemplatePath)
if err != nil {
log.Fatalf("Failed to read subproject template: %v", err)
}
subprojectTmpl, err := template.New("subproject_readme").Parse(string(subprojectTmplContent))
if err != nil {
log.Fatalf("Failed to parse subproject template: %v", err)
}

// Ensure directories exist.
if err := ensureDir(tagsDir); err != nil {
log.Fatalf("Failed to create tags directory: %v", err)
Expand Down Expand Up @@ -165,6 +195,35 @@ func main() {
if err := os.WriteFile(tagFilePath, tagBuf.Bytes(), 0o644); err != nil {
log.Fatalf("Failed to write %s: %v", tagFilePath, err)
}

// Process each tag subproject.
for _, sp := range tag.TagSubprojects {
if sp.Dir == "" {
sp.Dir = strings.ToLower(strings.ReplaceAll(sp.Name, " ", "-"))
}
spFolderPath := filepath.Join(tagFolderPath, "subprojects", sp.Dir)
if err := ensureDir(spFolderPath); err != nil {
log.Fatalf("Failed to create folder for subproject %s: %v", sp.Name, err)
}

spCharterPath := filepath.Join(spFolderPath, "charter.md")
if _, err := os.Stat(spCharterPath); os.IsNotExist(err) {
if err := os.WriteFile(spCharterPath, []byte("Charter content here"), 0o644); err != nil {
log.Fatalf("Failed to write %s: %v", spCharterPath, err)
}
}
sp.CharterLink = spCharterPath

var spBuf bytes.Buffer
if err := subprojectTmpl.Execute(&spBuf, sp); err != nil {
log.Fatalf("Subproject template execution failed: %v", err)
}

spFilePath := filepath.Join(spFolderPath, "README.md")
if err := os.WriteFile(spFilePath, spBuf.Bytes(), 0o644); err != nil {
log.Fatalf("Failed to write %s: %v", spFilePath, err)
}
}
}

// Process each TOC subproject.
Expand Down
41 changes: 41 additions & 0 deletions generator/tag_subproject_readme.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# CNCF {{.Name}} Subproject

<!-- THIS FILE IS AUTO-GENERATED FROM /tags.yaml -->

## Mission Statement
{{.MissionStatement}}
[Charter](./charter.md)
{{- if .Leadership.SubprojectLeads }}

## Leadership
### Subproject Leads
{{- range .Leadership.SubprojectLeads }}
- {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**)
{{- end }}
{{- end }}
{{- if .Meetings }}

## 📅 Meetings
{{- range .Meetings }}
- 🔁 {{.Schedule}}
- 📹 [Join via Zoom]({{.ZoomURL}})
{{- if .MeetingNotesURL }}
- 📝 [Meeting Notes]({{.MeetingNotesURL}})
{{- end }}
{{- end }}
{{- end }}

## 💬 Contact
- <img src="./assets/slack.svg" height="16"> [{{.Contact.SlackChannel}}](https://cloud-native.slack.com/archives/{{.Contact.Slack}}) on cloud-native.slack.com
- 📧 [Mailing List]({{.Contact.MailingList}})
{{- range .Contact.TOCLiaison }}
- 🔗 TOC Liaison: {{.Name}} (**[@{{.GitHub}}](https://github.com/{{.GitHub}})**)
{{- end }}
{{- if .LandscapeURL }}

## 🗺️ Landscape
{{- if .LandscapePreviewImage }}
[![{{.Name}} Landscape Preview]({{.LandscapePreviewImage}})](./landscape/index.md)
{{- end }}
- [View the full CNCF {{.Name}} Landscape](./landscape/index.md)
{{- end }}
72 changes: 23 additions & 49 deletions tags.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -552,57 +552,31 @@ tags: # Technical Advisory Groups
- github: kevin-wangzefeng
name: Kevin Wang
tag_subprojects:
- name: Batch
- dir: batch
name: Batch
mission_statement: |
To enhance collaboration among projects, improve interoperability, and empower users to efficiently leverage batch systems in cloud-native environments.

In scope:

To reduce fragmentation in the k8s batch ecosystem: congregate leads and users from different external and internal projects and user groups (CNCF TAGs, k8s sub-projects focused on batch-related features such as topology-aware scheduling) in the batch ecosystem to gather requirements, validate designs and encourage reutilization of core K8s APIs.

The following recommendations for enhancements:

* Additions to the batch API group, currently including Job and CronJob resources that benefit batch use cases such as HPC, AI/ML, data analytics and CI.
* Primitives for job-level queueing, not limited to the k8s Job resource. Long-term, this could include multi-cluster support.
* Primitives to control and maximize utilization of resources in fixed-size clusters (on-prem) and elastic clusters (cloud).
* Benchmarking models for Batch systems
* Data Locality
* User Stories
* Scheduling support for specialized hardware (Accelerators, NUMA, Networking, etc.)

Out of scope:

* Addition of new API kinds that serve a specialized type of workload. The focus should be on general APIs that specialized controllers can build on top of.
* Uses of the batch APIs as support for serving workloads (eg. backups, upgrades, migrations). These can be served by existing SIGs.
* Proposals that duplicate the functionality of core kubernetes components (job-controller, kube-scheduler, cluster-autoscaler).
* Job workflows or pipelines. Mature third party frameworks serve these use cases with the current kubernetes primitives. But additional primitives to support these frameworks could be in scope.

Deliverable(s) or exit criteria:

* Maintaining a landscape document for currently available projects (already published-relocated and maintained)
* Data Locality project-deliverables TBD, but something that helps in this space (already in process)
* Benchmarking suite for Batch systems (already in process)
* User stories published doc for Batch systems (already in process)
The cloud-native batch scheduling ecosystem is fragmented — different projects tackle job scheduling, queueing, and resource management in incompatible ways. The Batch subproject brings together maintainers and users across the ecosystem to reduce that fragmentation: aligning on common Kubernetes APIs and primitives, developing best practices, and improving outcomes for batch workloads — whether HPC, AI/ML, data analytics, or CI — in cloud-native environments.
leadership:
subproject_leads:
- github: stackedsax
name: Alex Scammon
- github: catblade
name: Marlow Warnicke
- github: asm582
name: Abhishek Malvankar
meetings:
- schedule: Every other Tuesday at 8am PDT/PST
zoom_url: https://zoom-lfx.platform.linuxfoundation.org/meeting/99965231171?password=2a169dd5-e375-4b5a-9b40-b2b5db5bfe91
meeting_notes_url: https://docs.google.com/document/d/1GuZGyBkRGG0lEeiPA8q0PfvFlwUlwa5k-ZfXafCTdBY/edit?tab=t.0
contact:
slack: C08K71W9HAS # Using parent TAG's contact
mailing_list: https://lists.cncf.io/g/cncf-tag-workloads-foundation # Using parent TAG's contact
leadership:
SubProject Leads:
- github:
lfx_id:
name: Alex Scammon
company:
email: alex@gr-oss.io
- github: catblade
lfx_id:
name: Marlow Warnicke
company:
email: catblade@gmail.com
- github:
lfx_id:
name: Abishek Malvankar
company:
email: abhishekmalvankar9@gmail.com
slack: C08K71W9HAS
slack_channel: "#batch-wg"
mailing_list: https://lists.cncf.io/g/cncf-tag-workloads-foundation
toc_liaison:
- github: rochaporto
name: Ricardo Rocha
landscape_url: https://bsi-landscape.netlify.app/
landscape_preview_image: ./landscape/batch-landscape-preview.png
tag_initiatives: https://github.com/cncf/toc/issues?q=state%3Aopen%20label%3Atag%2Fworkloads-foundation%20label%3Akind%2Finitiative
toc_subprojects: # TOC SubProjects
- dir: contributor-strategy-and-advocacy-subproject # Contributor Strategy and Advocacy Sub Project
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
33 changes: 33 additions & 0 deletions tags/tag-workloads-foundation/subprojects/batch/charter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# TAG Workloads Foundation Batch Subproject Charter

## Mission

The cloud-native batch scheduling ecosystem is fragmented — different projects tackle job scheduling, queueing, and resource management in incompatible ways. The Batch subproject brings together maintainers and users across the ecosystem to reduce that fragmentation: aligning on common Kubernetes APIs and primitives, developing best practices, and improving outcomes for batch workloads — whether HPC, AI/ML, data analytics, or CI — in cloud-native environments.

## Scope

### In Scope

To reduce fragmentation in the Kubernetes batch ecosystem: congregate leads and users from different external and internal projects and user groups (CNCF TAGs, Kubernetes sub-projects focused on batch-related features such as topology-aware scheduling) in the batch ecosystem to gather requirements, validate designs and encourage reutilization of core Kubernetes APIs.

The following recommendations for enhancements:

* Additions to the batch API group, currently including Job and CronJob resources that benefit batch use cases such as HPC, AI/ML, data analytics and CI.
* Primitives for job-level queueing, not limited to the Kubernetes Job resource. Long-term, this could include multi-cluster support.
* Primitives to control and maximize utilization of resources in fixed-size clusters (on-prem) and elastic clusters (cloud).
* Benchmarking models for Batch systems
* Data Locality
* User Stories
* Scheduling support for specialized hardware (Accelerators, NUMA, Networking, etc.)

### Out of Scope

* Addition of new API kinds that serve a specialized type of workload. The focus should be on general APIs that specialized controllers can build on top of.
* Uses of the batch APIs as support for serving workloads (eg. backups, upgrades, migrations). These can be served by existing SIGs.
* Proposals that duplicate the functionality of core Kubernetes components (job-controller, kube-scheduler, cluster-autoscaler).
* Job workflows or pipelines. Mature third party frameworks serve these use cases with the current Kubernetes primitives. But additional primitives to support these frameworks could be in scope.

## Deliverables

* **Project Landscape** — a living catalogue of batch scheduling projects in the cloud-native ecosystem, maintained at [bsi-landscape.netlify.app](https://bsi-landscape.netlify.app/).
* **Whitepapers and Technical Research** — the subproject produces papers and research on topics relevant to cloud-native batch scheduling, such as benchmarking of batch systems, data locality, scheduling best practices, and user stories. An initial series of five whitepapers is complete, with more planned as the space evolves.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# CNCF Batch Subproject Landscape

The CNCF Batch Subproject Landscape is a collection of batch systems that are cloud
native or have cloud native features. The landscape is intended to help users and developers understand the batch
systems available in the cloud native ecosystem and their features.

For the interactive landscape view, visit 👉 [bsi-landscape.netlify.app](https://bsi-landscape.netlify.app/).

[![Batch Landscape](./batch-landscape-preview.png)](https://bsi-landscape.netlify.app/)
Loading