From 506f7249617b2c453fed2812ead587674c0eb454 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 02:45:30 +0700 Subject: [PATCH 01/59] initial commit gov --- CNCF Storage Landscape - White Paper.pdf | Bin 450603 -> 0 bytes governance/README.md | 16 + governance/chair-proposal-process.md | 7 + governance/chair-transition.md | 61 + storage-charter.md => governance/charter.md | 0 governance/cncf-projects.md | 19 + governance/communications/README.md | 6 + governance/communications/call-to-action.md | 20 + governance/github.md | 48 + governance/paper-process.md | 235 ++ governance/presentations.md | 23 + governance/process.md | 144 ++ governance/related-groups/README.md | 78 + .../adding-or-updating-groups.md | 26 + governance/roles.md | 342 +++ governance/tech-lead-proposal-process.md | 126 ++ governance/tech-lead-transition.md | 33 + governance/tools.md | 12 + storage-whitepaper/v2.md | 1914 +++++++++++++++++ 19 files changed, 3110 insertions(+) delete mode 100644 CNCF Storage Landscape - White Paper.pdf create mode 100644 governance/README.md create mode 100644 governance/chair-proposal-process.md create mode 100644 governance/chair-transition.md rename storage-charter.md => governance/charter.md (100%) create mode 100644 governance/cncf-projects.md create mode 100644 governance/communications/README.md create mode 100644 governance/communications/call-to-action.md create mode 100644 governance/github.md create mode 100644 governance/paper-process.md create mode 100644 governance/presentations.md create mode 100644 governance/process.md create mode 100644 governance/related-groups/README.md create mode 100644 governance/related-groups/adding-or-updating-groups.md create mode 100644 governance/roles.md create mode 100644 governance/tech-lead-proposal-process.md create mode 100644 governance/tech-lead-transition.md create mode 100644 governance/tools.md create mode 100644 storage-whitepaper/v2.md diff --git a/CNCF Storage Landscape - White Paper.pdf b/CNCF Storage Landscape - White Paper.pdf deleted file mode 100644 index 59d5b1e396adc6fc9083376d7ccb20a16f1a7dab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450603 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Ⓢ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�?A&iU&W@|Eg!ez>5Lb0u2YRgWJXWYR4t5 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%0DjX*?n_gRO_g2I`o=&B|6QNlfLgiD0sE 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 !5QZ;6!iHVKwIvC>@QspeJa|`_1_>zN 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Ν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 h3xU57_jqX*R0T^&T(L3&{~ca-5?lZP diff --git a/governance/README.md b/governance/README.md new file mode 100644 index 0000000..09b4aec --- /dev/null +++ b/governance/README.md @@ -0,0 +1,16 @@ +# Governance + +Storage TAG is +a [CNCF Technical Advisory Group](https://github.com/cncf/toc/tree/main/tags). + +* [Charter](charter.md) - mission and scope +* [Roles](roles.md) - the work of the group is facilitated by Chairs, Technical + Leads, and active group members +* [Process](process.md) - how projects are proposed and work is tracked +* [Related Groups](./related-groups/README.md) - list of CNCF, Kubernetes and + other Industry wide groups that do related work + +General meetings are posted on the CNCF calendar and serve as a forum for +creating a shared understanding of the cloud native storage landscape with +regular updates by members on project progress and their own storage-related, +with on-going discovery through guest presentations. diff --git a/governance/chair-proposal-process.md b/governance/chair-proposal-process.md new file mode 100644 index 0000000..fad6fc0 --- /dev/null +++ b/governance/chair-proposal-process.md @@ -0,0 +1,7 @@ +# Storage TAG Chair proposal process + +1) Storage TAG Co-chairs operate as a team. The Co-Chair team seeks to maintain full coverage of the leadership capabilities across the key qualities of industry experience, hands-on cloud-native and storage experience, as well as administrative experience needed to run a Storage TAG. +2) If a clear successor for the exiting Co-Chair exists based on the merit of their contributions ("chop wood, carry water") and relevant experience that will benefit the TAG, based on the TAG's collective experience over time, the exiting Co-chair may nominate a successor. +3) The exiting Co-Chair should propose the desired successor to the other Co-Chairs. If there are any objections, the Co-Chair will have the opportunity to propose another worthy candidate. If Storage TAG Chairs, Tech Leads and TOC Liaisons are unable to put forward a candidate, then a selection process will need to be agreed upon and executed. +4) Upon unanimous consent amongst the current Co-Chairs, the Co-Chairs will ask the TOC Liaisons to propose the candidate for the TOC’s vote in accordance with the [CNCF TAG Chair election process](https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#elections). +5) If no new Chair candidate is available, the role will remain vacant until the Co-chair's, TOC Liaisons or CNCF TOC propose a replacement. diff --git a/governance/chair-transition.md b/governance/chair-transition.md new file mode 100644 index 0000000..4bbfdc2 --- /dev/null +++ b/governance/chair-transition.md @@ -0,0 +1,61 @@ +# Chair transition checklist + +This checklist should be copied into a new issue for when a new chair(s) is needed. + +## Nomination + +This serves to augment the [Storage TAG Chair proposal +process](chair-proposal-process.md) with specific items that must be completed. + +* [ ] Nomination + * [ ] TOC-Liaison slack discussion and approval + * [ ] Co-chair & Tech Lead meeting announcement + * [ ] Storage TAG Meeting announcement -- all regions + * [ ] TOC email list official nomination + * [ ] #tag-storage slack message with a link to the email nomination + * [ ] TOC meeting presentation +* [ ] Vote - official count recorded and posted + +## Transfer + +* [ ] Transfer Logistics + * [ ] #tag-chairs slack channel - add new chair(s) + * [ ] tag-chairs mailing list - add new chair(s) + * [ ] #tag-storage-cochairs channel - add new chair(s) + * [ ] #tag-storage-cochairs-emeritus - add outgoing chair(s) + * [ ] #tag-storage-toc-liaison - add new chair(s) + * [ ] Co-chair meeting - add new co-chairs and add doc sharing + * [ ] transfer ownership of co-chair meeting calendar invite + and tech lead calendar invite - if applicable + * [ ] New meeting link will need created by new calendar owner if using + Google meet. meet.new will create this, just copy into invite or + transition to Zoom + * [ ] TOC Liaison meeting + * [ ] Check if the time still works for new chair(s) + * [ ] Transfer calender ownership if needed + * [ ] Add new co-chair(s) to calendar invitation + * [ ] Share meeting notes doc + * [ ] Choose new chair representative for Storage TAG [on-going + projects](https://github.com/cncf/tag-storage#on-going-projects) if needed. + * [ ] add chair to [github team](https://github.com/orgs/cncf/teams/sig-storage/) + * [ ] tag-storage repo PR: + * [ ] Update codeowners, github settings, README (TOC Liaisons and chairs + have admin access, tech leads have push access). + * [ ] Link to official vote email list message in PR descriptions + * [ ] [TOC Repo update](https://github.com/cncf/toc/blob/main/tags/storage.md) + * [ ] [Service Desk Access](https://cncfservicedesk.atlassian.net/servicedesk/customer/portal/1) + * [ ] Update email lists + * [ ] update email list membership + * [ ] chairs should have moderator role + * [ ] remove old chairs from chairs list + * [ ] Verify new chairs have zoom credentials + * [ ] YouTube Channel + * [ ] invite new chairs (if needed) + * [ ] give "owners" permission + +## Announce + +* [ ] Announce the vote + * [ ] #tag-storage slack message + * [ ] email message to the tag-storage list + * [ ] Storage TAG meeting Announcement for each region diff --git a/storage-charter.md b/governance/charter.md similarity index 100% rename from storage-charter.md rename to governance/charter.md diff --git a/governance/cncf-projects.md b/governance/cncf-projects.md new file mode 100644 index 0000000..9b558a2 --- /dev/null +++ b/governance/cncf-projects.md @@ -0,0 +1,19 @@ +## CNCF Projects + +The CNCF TOC identifies specific project that provide capabilities related +to storage, including policy, identity, authentication, authorization, +auditing, compliance, cost management, etc. + +These are known as "Storage Providers" and the TAG will prioritize review of +each project's annual [storage assessment](/assessments). + +Current list of projects: + +* Falco +* Harbor +* in-toto +* Open Policy Agent +* Notary +* TUF +* SPIFFE +* SPIRE diff --git a/governance/communications/README.md b/governance/communications/README.md new file mode 100644 index 0000000..133e20d --- /dev/null +++ b/governance/communications/README.md @@ -0,0 +1,6 @@ +# Communications + +This folder contains templates and processes on communicating with the Security TAG community. +| Templates | Use | +| -- | -- | +| [Call to action](call_to_actions.md) | For papers, projects, and other efforts sent to the [mailing list](https://lists.cncf.io/g/cncf-tag-security) diff --git a/governance/communications/call-to-action.md b/governance/communications/call-to-action.md new file mode 100644 index 0000000..d4d6a4c --- /dev/null +++ b/governance/communications/call-to-action.md @@ -0,0 +1,20 @@ +# Call to Action Template + +## Security Enthusiasts! +CNCF Security Tag is looking to embark on another tech security adventure! [2 sentences explanation of what the thing is]. +[background about why this exists, about 2-3 sentences]. We'd like some help. + +## We want you! +This is where you (yes you!) come in. We're looking for community members and colleagues [review/contribute] to this [what the thing is called], tracked under [issue number and link to issue], so that we can provide the cloud native community with [what the intent is]! +[what this means for the community]. We hope you can join us on this significant contribution opportunity. [If needed by a specific date, say so here]. + +## Ready to dive in? +Comment on the issue [relink the issue] (#XXX) and join the [link to the slack channel] Slack channel! + +## References +[Relink everything again here with what it is and the URLs blown out (not embedded)] + +Examples: +* https://lists.cncf.io/g/cncf-tag-security/message/58 +* https://lists.cncf.io/g/cncf-tag-security/message/54 +* https://lists.cncf.io/g/cncf-tag-security/message/53 diff --git a/governance/github.md b/governance/github.md new file mode 100644 index 0000000..fd13282 --- /dev/null +++ b/governance/github.md @@ -0,0 +1,48 @@ +# Github access permissions and administration + +Facilitation roles are identified in [github settings](/.github/settings.yml) +which we use for Github admin permissions and managing issues. Write +permissions are enabled by the [CODEOWNERS](/CODEOWNERS) file. + +There is typically more process for review and collaboration than is controlled +by access permissions. We expect members to review [governance](/governance) +and ask questions by filing a Github issue and/or submit suggested changes via +Pull Request if anything is not clear. + +Chairs have admin privileges and have access to change settings in the Github +UI. Except where noted below, changes should be made in the repo files to +control access privileges, not in the Github UI (so they are visible to +everyone.) + +Note: Members of the CNCF TOC and some CNCF staff also have admin access; +however, TAG Roles will be defined transparently using files described below, +and will follow TAG processes in making any changes. + +## Settings file +Pull Requests to appoint members to new Roles in +[github settings](/.github/settings.yml) must be approved by at least one +Chair, along with whatever additional required process is defined in +[roles](roles.md). When a member has multiple roles, the role defined later +in the file (that does not require additional access) is noted in a comment. +PRs to remove someone from a role must be approved by the person themselves or a +majority of Chairs. + +## Writing to the main branch +The following settings are controlled in the Github UI by those with admin +access. +The "master" branch is "protected" (even for admins), with these requirements: +- can't be deleted +- no direct commits (including no "force push"), also + - at least one reviewer must approve + - must be approved by someone listed in [CODEOWNERS](/CODEOWNERS) file + - must be up to date with master + - title must not indicate work in progress ([WIP](https://github.com/apps/wip)) + +## Housekeeping +To maintain the main branch in a feasible way the Pull Requests shall come from forked repositories from tag-storage. After which an unique name should be assigned to identify what will be changed in the forked repository by utilizing branches. + +After being merged the branch will be deleted. +Next contributions shall be in another fresh branch. +This way we keep the repository clean and allows a faster acceptance as it's clear what exactly is addressed. + +So on the repository cncf/tag-storage there shall be only unmerged branches co-existing next to main. diff --git a/governance/paper-process.md b/governance/paper-process.md new file mode 100644 index 0000000..86f4ae7 --- /dev/null +++ b/governance/paper-process.md @@ -0,0 +1,235 @@ +# Process for creating papers + +This document is intended to provide a consistent mechanism for cloud native +storage to produce community papers, ensure they are reviewed, and subsequently +published. Content of this document does not supersede existing processes and +is intended to be used in conjunction with [existing proposal to project +instructions](process.md). + +## Proposal + +If a proposal is made that includes a paper as a deliverable, the proposal needs +to ensure that there is a clearly identified lead and a well defined paper +scope. + +The paper scope and topic should be raised in at least one TAG meeting to +solicit more volunteers (ideally 4). Interested parties should meet at least +once to describe the intent of the paper, & propose a very rough outline to +present to TAG leadership for planning and scheduling as a project. + +## Project + +Once a TAG Leadership sponsor is assigned to the project, the group should meet +to and agree on a tentative schedule. + +### Tentative schedule milestones + +The below list the minimum milestones that should be captured in a tentative +schedule along with the estimated time frame for completion. Milestones are +explained further in this document. + +| TODO | Milestone | Estimated time | +| -- | -- | -- | +| * [ ] | Audience, Goals, & refining scope | 1 week | +| * [ ] | Tasking Assignment | 1 week | +| * [ ] | Content Rough-in | 2-3 weeks | +| * [ ] | Collaborative Review | 2 weeks | +| * [ ] | Executive Summary and content wrap up | 2 weeks | +| * [ ] | Narrative Voice | 1-2 weeks | +| * [ ] | Final Group Review | 1 week | +| * [ ] | Community Review | 2 weeks | +| * [ ] | Public comment adjudication | 2 weeks (simultaneous with review) | +| * [ ] | CNCF publishing engagement | ~2-3 weeks | +| * [ ] | Addition to the repo | 2 weeks | +| * [ ] | Blog post and publishing coordination | 2-3 weeks | + +## Milestones + +### Audience, Goals, and refining scope + +This milestone is intend to define the following items to assist in generating +content: + +* Who do we expect to read the paper? +* What positions do they hold? +* Why are we writing this paper? +* What problem are we intending to resolve? +* What assumptions are we making about the audience or the expected content of + the paper? + * Note - these are documented in the "Introduction > Assumptions" + section of the paper +* What are our Goals and Non-Goals? + * Note - these are documented in the "Introduction > Scope > Goals" and + "Introduction > Scope > Non-Goals" +* Is the scope in the issue still representative of what we intend to cover? + +### Tasking assignment + +Contributors should highlight and assign themselves to various areas of the +outline. This allows contributors to focus on a few areas and identify others +where more contributors is needed. If using a google doc for the paper, +assignments may be done through the "assign to me" feature after highlight the +area or by using the "+foo@bar.com" comment feature for the assignee's email. +Once task assignment is complete, contributors can begin content rough-in. + +### Content rough-in + +Assignees can provide content rough-in in a variety of ways. They may provide +raw content in the form of phrases, disjointed paragraphs, bullets on the topic, +or draft content in the form of completed paragraphs. If leveraging draft +content, placing this content in quotes helps other reviewers know it is +'near-complete' and it should be reviewed as a holistic section. + +#### Opinions + +There may be situations where multiple differing views on the subject matter or +controls implementation are expressed. Authors should make every effort to +discover the industry standard or practice and document it. If none exists +and the suggested content cannot be collaboratively resolved, it is the duty +of the authors to capture the different views with references, benefits, and +drawbacks or contingencies in order to provide the reader with enough +information to reach their own conclusion. + +#### References + +It is important that any references used to generate paper content be cited +appropriately through footnotes and within the references section. This +permits the reader to not only dig deep into a specific reference area but also +provides source content and is a matter of good practice. + +### Collaborative + +Contributors now review all content roughed-in and transition raw content into +draft content. They may begin commenting on sections, expanding ideas, refining +arguments, and providing citations. Contributors are encouraged to discuss +content specific items in the doc through comments whereas larger themes and +writing decisions should be discussed in the corresponding slack channel. This +keeps the doc clean as well as documents thematic decisions in the primary +collaboration & coordination channel. + +### Executive summary and content wrap-up + +If the paper exceeds five (5) pages, an Executive summary commensurate with the +length of the document (but not to exceed 3 pages) should be written. Content, +comments, and other discussions should be closed out and finalized at this time. + +### Narrative voice + +No more than three contributing individuals should be assigned for narrative +voice. The narrative voice is a semi-final pass of the paper to ensure it reads +as a single, unified voice. It should ensure: + +* the language origin is consistent throughout the document (lang_en or + lang_us), +* phrasing is similar (caddy corner not mixed in with kitty corner), +* acronyms are spelled out at their first use and then abbreviated later, +* footnotes and citations are consistent and not direct hyperlinks in the text +* vague terms are defined in a glossary or otherwise cited to the cloud native + storage lexicon in the repo + +### Final group review + +This is the opportunity for the group to collectively review the polished paper +prior to opening it for community review. This should resolve and close out any +outstanding items. + +### Community Review + +At this point the paper needs to be locked from editing with the exception of +the Adjudicators (see below). It should be made public with the permission +settings such that suggestions and comments are permitted. The lead will then +provide a brief write up of a call to action with a link to the document and the +due by date for comments. This write up and corresponding links and details +will be emailed to the CNCF TAG-Storage mailing list, at which point we +actively solicit public comment. + +### Public comment adjudication + +Prior to opening the paper for community review, the group should select no more +than 3 Adjudicators. These individuals are tasked with accepting/rejecting +suggestions, and resolving comments from the community. Any comments or +suggestions that require larger discussion should be brought up in a group +meeting and decisively resolved. These should be clearly documented with +justification in the notes. + +Decisive resolution is the practice by which the group attempts to immediately +resolve the comment either as a won't do, out of initial scope, document +options, or accept as is. The intent to expediently discuss (no more than two +minutes), identify the remedy, and apply it. This is done both in the interest +of time but also in an effort to minimize gold-plating (perfection is the enemy +of complete). + +### CNCF publishing engagement + +Once the comments on the paper are adjudicated the paper is ready for +publishing. The TAG Leadership sponsor will work with the CNCF gather resources +to assist in final edits and conversion to PDF and graphics inclusion (if +needed). They can also assist with the conversion to markdown. The paper lead +will work with the TAG Leadership sponsor to review publishing drafts prior to +final versioned copy and inclusion in the repo. + +### Addition to the repo + +The CNCF may initiate the PR for the converted markdown of the paper and the +graphics. The paper lead will need to create the paper's README.md that +includes the following items to ensure the paper can receive community updates +in alignment with the original intent: + +* Title +* About - covers what the paper was about, a brief summary +* Updates to the paper - "intended to be a living document created and + maintained for the community, by its members." + * Markdown - "maintained in markdown and all updates will be made in + markdown." + * Contributing updates - "All members of the community are welcome to + contribute updates. We ask potential contributors to refer to the original +design decisions, listed below, as guidance when determining the content of +their updates. It is highly recommended that you seek peer review for your +updates beyond that of the Technical Leads and Co-Chairs of the TAG." + * Versioning and publishing - "It is expected that many minor updates will + occur, corrections to grammar, spelling, clarification in language, +translations, etc. When these occur they are considered minor changes to the +overall content and will not warrant the regeneration of the PDF. When +significant changes to the intent, content, or numerous minor changes occur, the +contributors will assess and determine if a new major version of the PDF needs +published. When this decision is made, the markdown content will be converted to +text document and sent to the CNCF technical writers to create the PDF. The PDF +will then be published back into the repository annotating the new version, +updating the links in the README.md accordingly. Minor updates to the markdown +shall receive a minor version bump indicated in the Metadata table of the +document and recorded as WIP. When enough significant changes have been +recorded, the markdown will be placed "In Review" (via PR) and solicited to the +CNCF Storage TAG and TOC mailing list for review, at a minimum. Upon +completion of review, the Storage TAG's TOC Liaison shall provide final +approval on the PR. At which point the markdown state will be changed to +"Approved" and merged." +* Original design decisions - this is important as it is intended to enable the + original contributors to not be gateways to content updates and allows both +reviewers and future contributors to understand a create content around +centralized guidance. +* Links - include links to the files in the repo + +### Blog publishing and coordination + +In an effort to increase visibility and awareness of the final product, it is +strongly recommended the paper lead coordinate with TAG leadership to engage the +CNCF team for posting a blog to summarize and link to the paper. As community +events occur, it is also recommended that the TAG coordinate a submission to +community events (presentation) on the paper. + +#### Authorship, attribution and acknowledgements + +Papers and other resources created from TAG-Storage efforts are under the +authorship of TAG-Storage, and all members who have made contributions to the +document (through writing, editing, creating illustrations, etc.) are considered +"Contributors". Members of the public or TAG-Storage who have commented and +given feedback during the Request for Comment (RFC) period of during the +creation of the document are considered "Reviewers" of the project. + +Individuals/groups who have made huge contributions/impact on the work can be +acknowledged in an "Acknowledgements" section. This is to highlight stellar +contributions and commitments by individuals that have went above and beyond to +contribute to the project. + +Each document should contain a "Contributors", "Reviewers" and +"Acknowledgements" section where appropriate. diff --git a/governance/presentations.md b/governance/presentations.md new file mode 100644 index 0000000..7a4afbe --- /dev/null +++ b/governance/presentations.md @@ -0,0 +1,23 @@ +# Storage TAG presentations + +Part of the STAG activities include having guest presentations by members of the community. +We welcome any topic related to our mission and charter. Typical topics include projects, +real-world use-cases, challenges or success stories. However, presentations must follow the +following guidelines. + +## Guidelines + +- Presentations are encouraged to expose the TAG to cloud native open source projects, cloud native storage concepts, and other cloud native or storage groups. +- Presentations should fit with [our charter](https://github.com/cncf/tag-storage/blob/main/governance/charter.md) +- Presentations should not be scheduled on the Agenda until the issue is filled in and the TAG representative has performed due diligence on the issue +- Presentations should abide by the CNCF code of conduct + +Examples of topics that are within scope: +- Open source project presentations +- Storage use-cases and case studies +- Open source community efforts - whitepapers, communities, standards, etc. + +Examples of topics that do NOT meet the guidelines: +- Vendor pitches and marketing heavy presentations +- Topics unrelated to storage +- Topics that are help desk questions, that have a definitive, known searchable answer diff --git a/governance/process.md b/governance/process.md new file mode 100644 index 0000000..abef2d1 --- /dev/null +++ b/governance/process.md @@ -0,0 +1,144 @@ +# Proposals, projects, and team + +In addition to the activities driven by the +[CNCF Technical Oversight Committee][TOC], the work of the group often +originates from group members with ideas on how to reduce risk in cloud native +applications in alignment with the charter of the group and of interest and +importance to the community. + +This document explains how we transform ideas from our community into +projects with a defined set of deliverables +or a team to focus on a larger stream of work that may involve one or more +projects and activities. + +## Creating, discussing and accepting proposals + +Each proposal is unique and might deviate slightly from the process below. For +example, a small addition may not require completion criteria. In general, we +encourage the process below to be followed to ensure that contributions are in +line with the [mission and charter](charter.md). + +### Proposal process + +1. **Raise an Issue:** + +[Create an issue](https://github.com/cncf/tag-storage/issues/new) +that outlines the problem to be solved. Use the proposal template if you +are interested in leading the work, or suggestion template if you would like +someone else to lead the effort. If possible, include: + + * The customer impact of the problem + * The scope of the work required + +1. **Ask the group for collaboration:** Rather than immediately beginning work +on a solution, bring the issue up for discussion. The following guidance shows +common steps, though communication often happens in different sequence. The +key outcome is that there is opportunity for input across different channels, +with thoughtfulness to accessibility across timezone and communication medium. +We also encourage outreach outside of the group, when there are experts who +might share insights (via invited presentation) or wish to get involved. + + A) On slack, share the issue link and ask whether others are interested in + the problem and have feedback on your proposed solution or activity. + + B) Choose an upcoming meeting where you or another group member who is + interested in working on the project is able to attend, then add the issue + to the meeting agenda: include a link and the name of the person who will + present the proposal in the "Planned Meeting" area of the + [meeting notes][https://github.com/cncf/tag-storage#meeting-times]. + Then at the meeting: + * The presenter should screen share the github issue (or ask the meeting + facilitator ahead of time to do so) and explain the motivation, expected + outcome, ideas that they have for how it might happen, + and ask if others have ideas or questions. + * After a short discussion, people should be invited to chime in on the + github issue and also mention of they + are interested in collaborating. This ensures that solutions are created + with multiple perspectives as well as verifies there is community interest + and energy to work on the proposal. + + C) Discussion continues in the github issue for at least one week, usually + over multiple weeks or sometimes months. + + The outcome of this conversation will be: + * Scope may be refined (or questions from the group may need follow-up + in order to define the scope) + * Criteria for completion are added to the issue that include a "definition + of done", ideally with validation by the target audience. Also note in the + issue if it will be a time-bounded project with a defined deliverable or + and on-going stream of work -- the latter would typically be proposed only + after at least one, usually multiple, projects have been completed. + * At least one person is recommended or nominated as a potential lead. + * Those interested in working on the solution comment on the issue so + coordination may begin and set up time or expectations with others to + begin work. + * A Chair or Technical Lead proposes this as a roadmap proposal or + agrees to act as a "sponsor." + * Sponsor: takes responsibility to ensure that progress + is tracked and that outcomes are reported to the group, including + proposing to close the issue if there is not sufficient activity to + sustain the effort. + * Roadmap: determine there is interest and strong roadmap alignment, + but that there is not enough bandwidth to be confident that this work + can be driven to completion. + +1. **Accept or close the proposal.** + + A) **Accept**: assign to the Sponsor and the Project Lead(s) working on the + effort, with members interested in contributing noted in the issue + descriptions, along with information about expected duration, milestones, + scope, and anticipated deliverables. An accepted + proposal becomes an active project (see below) and the "proposal" label + is removed, the "project" label is added and it is added to the backlog. + + B) **Close**: a github comment on the issue should note the reason and + link to discussion minutes (when decision is reached at a group meeting) + or at least two members of the leadership team should be noted + in agreement (which may include the person who closes the issue). + + C) **Roadmap**: the issue will remain a proposal and be placed on a + roadmap project board. The roadmap is reviewed quarterly. + +### Active projects + +1. **Track progress.** As long as work is ongoing, progress should be tracked +both in the Issue and reported on periodically in meetings. + * Someone working on the project will attend weekly meetings to answer + questions. In case of absence, ensure that github issues is updated and + another member of the group who can attend the meeting is familiar with + progress in case questions arise. + * It's strongly encouraged to include a checklist in the Isssue + that shows what has been done and what work remains and should include a +retrospective. + +1. **Pull Requests.** Completed work should result in a Pull Request (PR). +At minimum, an update to one of the group documents or roadmap indicating that +the work was done. Typically projects will result in an artifact that will +contribute to the information in this repository. + +1. **Discuss the work at a meeting.** If an objection to a PR is made either in +a comment of the PR or during a meeting, the person making the objection and +the person making the proposal will be given time to present their view at the +next meeting. If there are not objections, or if all concerns have been +addressed, and the Pull Request has been stable for 24 hours, a Chair will add +it to the agenda for an upcoming meeting. Ideally, members who contributed to +the project will attend that meeting to present their work or answer questions. + +1. **Vote, if required.** In some cases, there's consensus to accept a +proposal, and a vote is not required. If there’s not consensus among the group, +a formal vote is required. A comment will be left on the proposal prompting +members to vote and indicating the time the vote will close. Only one member +from each company should vote. Members will vote by leaving a comment in the +Pull Request to indicate their vote for or against. Members will have a week +after the vote begins to leave their vote. Quorum is taken to be 2/3 the number +of companies who have been active in the past month (via issue comment or +meeting attendance as recorded in the public minutes). + +1. **Support the project going forward.** Some projects require sustainment and + maintenance to ensure continued relevance for the community. When work is +completed, a new issue and corresponding pull request should be created and +describe the expectations, plans, and ideas for on-going work. It should +include historical information and guidelines for contributions and maintenance + in the README for the project artifact's folder. + +[TOC]: https://www.cncf.io/people/technical-oversight-committee/ diff --git a/governance/related-groups/README.md b/governance/related-groups/README.md new file mode 100644 index 0000000..d78a495 --- /dev/null +++ b/governance/related-groups/README.md @@ -0,0 +1,78 @@ + + +# Related groups + +These are groups that are affiliated to or do work and cover topics relevant to +the work of Security TAG. + +## CNCF + +* [CNCF TAGs](https://github.com/cncf/toc#technical-advisory-groups): + Technical Advisory Groups + * [App-Delivery](https://github.com/cncf/tag-app-delivery) + * Security TAG members: + * [Contributor Strategy](https://github.com/cncf/tag-contributor-strategy) + * Security TAG members: + * [Network](https://github.com/cncf/tag-network) + * Security TAG members: + * [Observability](https://github.com/cncf/tag-observability) + * Security TAG members: + * [Runtime](https://github.com/cncf/tag-runtime) + * Security TAG members: + * [Storage](https://github.com/cncf/tag-app-delivery) + * Security TAG members: + +* [CNCF TOC](https://github.com/cncf/toc): Technical Oversight Committee + * Security TAG members: @justincormack, @lizrice + +## Kubernetes + +* [Kubernetes Policy Working Group](https://github.com/kubernetes/community/tree/master/wg-policy) + * Security TAG members: @rficcaglia + +* [Kubernetes SIG-Auth](https://github.com/kubernetes/community/tree/master/sig-auth) + * Security TAG members: + +* [Kubernetes SIG-Security](https://github.com/kubernetes/community/tree/master/sig-security) + * Security TAG members: @pushkarj + +## Industry + +* [Cloud Security Alliance Working Groups](https://cloudsecurityalliance.org/research/working-groups/) + * Security TAG members: @achetal01 + +* [IEEE 7009](https://standards.ieee.org/develop/project/7009.html): Standard + for Fail-Safe Design of Autonomous and Semi-Autonomous Systems Working Group + * Security TAG members: + +* [IEEE + P1915.1](https://web.archive.org/web/20180729062624/https://standards.ieee.org/develop/project/1915.1.html) + (Warning: Archive Link): Standard for Software Defined Networking and Network + Function Virtualization Security + * Security TAG members: + +* [IEEE P2675 DevOps Security](https://standards.ieee.org/develop/project/2675.html) + * Security TAG members: + +* [IEEE P7000](https://standards.ieee.org/develop/project/7000.html): Series of + interrelated standards in development, including privacy, transparency, etc. + related to ethical concerns in autonomous systems + * Security TAG members: + +* [IEEE Product Safety Engineering Society](http://ewh.ieee.org/soc/pses/) + * Security TAG members: + +* [NIST Big Data WG](https://bigdatawg.nist.gov/) + * Security TAG members: + +* [NIST Computer Security Resource Center](https://csrc.nist.gov/) + * Security TAG members: + +* [OpenSSF SLSA Maintainers](https://slsa.dev/) + * Security TAG members: @mlieberman85 + +## Don't see a group mentioned or notice a group that needs an update ? + +Please consider adding or updating the group using the following +[guide](adding-or-updating-groups.md) diff --git a/governance/related-groups/adding-or-updating-groups.md b/governance/related-groups/adding-or-updating-groups.md new file mode 100644 index 0000000..de31023 --- /dev/null +++ b/governance/related-groups/adding-or-updating-groups.md @@ -0,0 +1,26 @@ +# Editing the related groups list + +## Updating an existing group + +We welcome PRs regarding updates to an existing group when: + +1. The name of the group changes +2. The web hosting link, or the charter of the group changes +3. When the group is retired + +## Adding a new group + +We welcome PRs regarding addition of new groups, when: + +1. The group is not part of the existing list +2. The group is relevant to cloud native security +3. Ownership of the group is shared with more than one independent entities +4. Information such as charter, projects, artifacts of the group should be + publicly accessible + +## Naming convention + +1. Group names in alphabetical order within each category +2. When the name is not self-explanatory, it is recommended + to add a short blurb about the group +3. Use [Title Case](https://titlecaseconverter.com/) for the group name diff --git a/governance/roles.md b/governance/roles.md new file mode 100644 index 0000000..e4036a7 --- /dev/null +++ b/governance/roles.md @@ -0,0 +1,342 @@ +# Roles within the TAG + +The TAG includes several key roles that are critical to the group's success. +The group will have many members, all serving in varying capacities. Within +this document, "member" may refer to a Chair, a Technical Lead, or other +Member roles. + +The following is the current listing of member roles: + +* [Three Chairs](#role-of-chairs) +* [Technical Leads](#role-of-technical-leads) +* [Chair Emeriti](#role-of-chair-emeriti) +* [Project Leads](#role-of-project-leads) +* [STAG Representatives](#role-of-stag-representatives) +* [Team leads](#role-of-team-leads) +* [Group Members](#role-of-members) +* [TOC Liaison](#toc-liaison) +* [Facilitation Roles](#facilitation-roles) + +All members are identified in the TAG [README](/README.md), with annotations +where they hold an additional role. + +Members fulfilling any Roles in Storage TAG are responsible for understanding +and abiding the by the [governance](./) and policies defined in this group. +This commitment and execution of understanding includes not only commits to +the repo, but also to any approvals or direction required by their Role. + +**Write access to the repo**: Where applicable, the following roles define +specific areas of the repo or actions on issues where changes require write +access. In any case, governance is not enforced by [access permissions](github.md), +but rather by members who are expected to thoughtfully consider their actions +to support the group. + +## Role of members + +* The primary role of a member is to contribute expertise to the group. +* To add yourself as a member, submit a Pull Request (PR) adding yourself +to the list of members. + +### Maintaining active members + +* Members *SHOULD* remain active and responsive in their Roles. +* Members taking an extended leave of 1 or more months *SHOULD* coordinate with +other members to ensure the role is adequately staffed during the leave. +* Members going on leave for 1-3 months *MAY* work with other members to +identify a temporary replacement. +* Members of a role *SHOULD* remove any other members that have not +communicated a leave of absence and either cannot be reached for more than 1 +month or are not fulfilling their documented responsibilities for more than 1 +month. This may be done through a super-majority vote of members, or if there +are not enough *active* members to get a super-majority of votes cast, then +removal may occur through a super-majority vote of the Chairs. +* Members contribute to projects, according to the standard group + [process](process.md). + +### Managing membership + +* Membership disagreements may be escalated to the Chairs. Disagreements +among the Chairs may be escalated to a Storage TAG TOC Liaison. +* Members *MAY* decide to step down at anytime and optionally propose a +replacement. + +## Role of chairs + +While CNCF TOC allows for Chairs to serve in purely administrative roles, +The Storage TAG was formed with deeply technical Chairs based on early need +to navigate a complex storage landscape. If the TAG has less than two Technical +Leads, any Chair may act as Technical Lead. + +* Primary role of Chairs is to run operations and the governance of the group. +* The Chairs are responsible for ensuring that group meetings are planned +and facilitated effectively, while also engaging group members in leadership +roles. Effective facilitation includes (but is not limited to) the following +activities: + * setting the agenda for meetings + * extending discussion via asynchronous communication to be inclusive of +members who cannot attend a specific meeting time. + * scheduling discussion of proposals that have been submitted + * asking for new proposals to be made to address an identified need + * partnering with Technical Leads to establish a roadmap and manage ongoing + projects + +## Role of technical leads + +Technical Leads (TLs) expand the bandwidth of the leadership team. Proposals +must have a TL or Chair working as an active sponsor (as detailed in +[TAG process](process.md)). + +The general list of activities for TL are: + +* Establish new sub-projects +* Decommission existing sub-projects +* Resolve cross-sub-project technical issues and decisions +* Propose agenda items for meetings to ensure that open issues are + discussed with the group when needed + +TLs are assigned by CNCF Technical Oversight Committee (see [CNCF TAG Tech Lead +nomination and election +process](https://github.com/cncf/toc/blob/master/tags/cncf-tags.md#elections)) +following the [Storage TAG's TL nomination +process](tech-lead-proposal-process.md). + +## Role of chair emeriti + +After a [Chair](#role-of-chairs) finishes their term, they transition into a role +of Chair Emeritus. This allows previous Chairs to continue to chime in and provide +valuable context and contributions to the TAG. A Chair Emeritus can assume a role +of a [technical lead](#roles-of-technical-leads), but in doing so, must be active +in communicating with the co-chairs and technical leads (i.e. participating in the +chair/TL slack and meetings). A Chair Emeritus has the same permissions/access as +technical leads. + +## Role of project leads + +Project Leads lead specific projects where a deliverable has been defined +within the issue. + +Project Leads are nominated and approved by the following process: + + 1. Project Lead actively participates in the group, initiates the proposal or + volunteers to take on a project that has been prioritized by the group + 1. A Chair or TL nominates a candidate, or requests the community to + nominate in a slack thread + 1. The nomination is communicated via a pull request annotating the list + of members in the [TAG README](/README.md) with a link to the issue tracking + the project or on the issue tracking the project if a README is not yet made. + The nomination is typically open for a week (but may be shorter with LGTM + of at least two Chairs). + 1. The issue is updated with the assignment of the project lead as "assignee" + alongside the TAG Leadership member. + 1. Project Leads will be given the OWNER role of the directory or sub-directory + for their team's activities in order to empower merge/approve. + +### On-going projects + + On the occasion where a project becomes long term, Project Leads are also + given the OWNER role of the directory or sub-directory along with 1 other + nominated individual to ensure continuity in review and ongoing support of + the project. + +Depending on the expected length of the project, Project Leads may be assigned +as OWNERS of the project directory in this repository to help facilitate and + moderate new content to the project. + +### Duties of a project lead + +Project leads are responsible for the following: + +- Adhering to the [project process](https://github.com/cncf/tag-storage/blob/main/governance/process.md) +- Proposing and refining the project scope, goal and schedule +- Ensure smooth day-to-day operations of the project. This includes: + - Ensuring meetings are scheduled, announced and recorded + - Facilitation of meetings, ensuring minutes are recorded +- Ensure progress and status reports are communicated to the STAG +representative of the project +- Resolving conflict within the project and escalating to leadership +when required +- Outreach and recruitment for the project +- Provide retrospective of a project to the STAG + +## Role of STAG representatives + +STAG representatives are leadership executive sponsors of a project. The +STAG representative acts as a point of liaison with the STAG leadership team +and takes on a role of mentorship for the project lead(s). + +STAG representatives are required to be part of the STAG leadership team. +This includes co-chairs, technical leads and co-chair emeritus roles. +A STAG representative may be of capacity of an individual contributor but +cannot be the project lead of the same project they are representing. + +STAG representatives are appointed through the following process: + +- A member of the leadership indicates that they would like to be a STAG +representative on a project by: + - editing the issue's "STAG Representative" field to their github ID. + - setting the issue milestone to the corresponding milestone created for + their github ID. +- STAG representatives may change based on discretion of co-chairs. + +### Duties of a STAG representative + +STAG representatives are responsible for the following: + +- Reporting back to the leadership on the status of the project, indicating +when the project requires external governance help. For example, these +include: + - Project is understaffed or suffers from rampant scope creep. + - Project is inactive and needs to be discontinued. + - Inter-personal issues within leads and/or members causing disruption. +- Provide feedback to project lead to whether the current scope and operation +of a project is in line with the vision and governance of the STAG. +- Mentorship of project leads on matters of leadership and governance process. +- Provide privilege facilities that a project lead does not have access to. +Examples are: + - Creating a ServiceNow ticket with the CNCF for design help + - Uploading of meeting recordings to youtube + - Approval of messages to STAG mailing list + +## Role of Team Leads + +Team Leads lead larger streams of work that require sustained effort and +coordination and remain ongoing. + +Teams must have a Chair sponsor to maintain visibility in the team's work +and to ensure it is progressing. The Chair sponsor also provides review +and approval as part of the process whether be on engagement or deliverable +publishing (such as with papers). + +On-going projects may not imply a team, and in such case the leadership role +described below to sustain and coordinate. The on-going project leadership + position may have an alternate title, such as our initial "Storage Assessment + Facilitator." + +Team Leads are nominated and approved by the following process: + + 1. Team Lead actively participates in the group, initiates the proposal or + volunteers to lead a stream that has been prioritized by the group + 1. A Chair or TL nominates a candidate. + 1. The nomination is communicated via a pull request annotating the list of + members in the [TAG README](/README.md) with a link to the issue tracking + the stream of work. + The nomination is typically open for a week (but may be shorter with LGTM of at + least two Chairs). + 1. Members are encouraged to review any existing, relevant issues and work together + to ensure the Team Lead is set up for success or suggest alternatives. + 1. A sub-directory with a README is created with details on how to get involved. + 1. Team Leads will be given the OWNER role of the directory or sub-directory for + their team's activities in order to empower merge/approve. + +## TOC liaison + +The [CNCF TAG](https://github.com/cncf/toc/blob/master/tags) process identifies +a TOC Liaison. The TAG Chairs are responsible for establishing effective +communication with the TOC liaison, including further communication to the +wider TOC upon request. + +The TOC Liaison will occasionally prioritize TAG activities, as needed by the +TOC, to further the [CNCF mission](https://github.com/cncf/foundation/blob/master/charter.md#1-mission-of-the-cloud-native-computing-foundation). + +## Facilitation roles + +Members often contribute by working in small groups that research and discuss +options and then share their findings with the rest of the group in a +presentation and typically contribute to the body of work in this +repository (via Pull Request). Some tasks can be effectively executed +by simply chiming in on a github issue and independently contributing a PR +without any particular role or authorization. + +This section describes roles where more coordination is helpful and the +work benefits from identifying one or more members who will take +on specific responsibilities. Our goal is to empower members to move forward +independently, while defining an approval process designed to support +communication and alignment across the wider group. + +New roles in this section are typically defined after someone has acted in +that role for some time informally, then proposed as an on-going role by Pull +Request which must be approved by a majority of Chairs. Process clarifications +are welcome and PRs can be approved by any single Chair. + +### Storage review facilitator + +[Storage Reviews](/assessments) are part of the ongoing work of the group +and led by a Storage Assessment Facilitator, who will: + +* coordinate storage review leads for upcoming storage assessments. +* identify and recommend storage reviewers. +* contribute to process improvements. +* review and merge PRs in the /assessments directory (ensuring co-chair review + of significant process changes). +* triage issues related to storage assessments. + +### Meeting facilitator + +The group meetings are an important part of community building and the +facilitator ensures a welcoming and inclusive atmosphere. In keeping with these +goals, the meeting facilitator has the following responsibilities: + +* prepares the meeting notes with template and agenda +* coordinates with presenter, if applicable +* ensures there are scribes +* runs meeting check-in, including partner groups +* leads the meeting through the agenda + +Prerequisites: + +* active member +* history of regular attendance + +One or more of the following: + +* served in another facilitator role +* leader on a project team +* tech lead +* co-chair + +Any member who meets the above qualifications is encouraged to add themselves +to the [list of people in this role](/.github/settings.yml). + +### Meeting Scribe(s) + +Each meeting must have at a minimal one scribe and preferable with two. + +Scribe is expected to perform the following: + +* Plan to coordinate/review meeting Agenda with facilitator via Slack before +start of meeting +* Summarize discussions and capture into meeting notes (not transcribe verbatim) +* Clarify and annotate actions as discussion progresses with assignee and due +dates +* Partner with Facilitator to capture major occurring items in the meeting +* Add links to issues being discussed if not already in Agenda +* Open new issues to track action items from meeting + +### Triage team + +All members are expected to review Pull Requests (PRs), comment on issues, and +provide meaningful feedback or helpful references. + +Members who have contributed regularly, including discussion on multiple +PRs and submitting PRs themselves, can volunteer to participate as a member +of the Triage Team. Interested members should first join `#tag-storage-triage` +on Slack and flag issues that need attention, ask questions and volunteer +to take on process improvement PRs that may arise. + +When there is a vacancy or need additional help, they will ask on Slack for +volunteers to officially join the team. + +Each member of the Triage Team will: + +* assign labels to issues. +* comment where issues need more detail. +* recommend proposals or suggestions for discussion at working session meetings. +* participate on #tag-storage-triage slack channel. + +### Project teams + +Some ongoing projects may have teams where members are identified for +additional roles and may be required to have specific expertise. For visibility, +these additional project roles are listed below: + +* [Storage Reviewers](../assessments/guide/storage-reviewer.md) diff --git a/governance/tech-lead-proposal-process.md b/governance/tech-lead-proposal-process.md new file mode 100644 index 0000000..a5bf152 --- /dev/null +++ b/governance/tech-lead-proposal-process.md @@ -0,0 +1,126 @@ + +# Storage TAG Technical Lead Proposal Process + +Storage Technical Leads operate as a team alongside the Co-Chairs. The Co-Chair +team seeks enhance the leadership capabilities of the existing co-chairs across +the key qualities of industry experience, hands-on cloud-native and storage +experience, as well as administrative experience needed to assist in the +execution of the various projects and efforts that make the Storage TAG so +successful. + +## Caveats of Technical Leads + +* The position of a technical lead does not guarantee future co-chair nomination +* The position of a technical lead is not a paid position (co-chairs are also + not paid positions) +* Technical leads [have responsibilities](roles.md) to the Storage TAG, the + leadership team, and the TOC +* Nominations by the community (with co-chair endorsement) or co-chairs still + [requires TOC + approval](https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#elections) + +## Process of nominations + +Depending on the needs of the community, as determined by the Storage TAG +leadership team, technical lead nominations may come in the form of "Nominees by +community", "Nominees by co-chairs", or both. + +The Storage TAG does not have a current limit on the amount of technical leads. + +Final technical lead nominations will adhere to the [CNCF's TOC described +process](https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#elections). + +### Nominees by community + +Community nominees should adhere to the technical lead nomination requirements +described below. Any individual who is a member of the Storage TAG list or the +tag-storage slack channel may nominate another individual. + +The co-chairs reserve the right to endorse a nominee by the community based on: + +* Gender diversity +* Company diversity +* Geo diversity +* Amount of nominations from different companies, people, regions for a single + individual +* Existing body of work +* Justification provided during nomination + +#### Community timeline + +Community nominations will run for at least 1 month with a maximum up to 2 +months. Upon close of nominations a decision will be made by the co-chairs +within the next month in order to conform to the TOC process. + +#### Submitting a nomination + +Nominations are to be submitted to [Storage TAG Co-Chairs email +alias](mailto:cncf-tag-storage-chairs@lists.cncf.io) with the details: + +* Subject "Technical Lead nomination: $NAME-OF-NOMINEE" +* CC the nominee +* TL requirements with examples (described below) +* Justification + +#### Endorsement of community nominees + +Co-chairs are responsible for providing endorsement of a community nominee to +show concurrence and support. + +If no nominees are submitted by the community either as a result of lack of +participation, lack of requirements, or from co-chair specific selection +(non-community nomination process), the co-chairs must endeavor to nominate an +individual(s) that meet as many of the requirements as exist. + +### Nominees by co-chairs + +Nominees by co-chairs adhere to the technical lead requirements described below. +Co-chairs are responsible for documenting statistic information of all nominee +types for endorsement and presentation to the TOC. + +## Technical Lead nomination requirements + +In order to verify nominees by the community or by co-chairs have experience +with the group and are actively contributing in a meaningful way, the following +requirements must be met in order for an individual to be nominated. + +If a given nominee does not meet all the requirements, the co-chairs will still +review the nomination and justification to determine if enough intent and +commitment is present to move forward with an endorsement. + +Nominees must: + + +* have been project or review lead on at least one project or storage assessment/review +* be the author of at least one pull request against the Storage TAG repository +* be active in the community within the last 6 months prior to their nomination. + * active - Attending at least 1 Storage TAG Regular Meeting a month + * engaging in community chat via slack or lists + * commenting on PRs and issues to drive suggestions to proposals, define scope, + resolve clarity issues, etc. +* agree to the nomination + + +Nominations must: + +* come from someone other than the nominee +* have justification from the nominator regarding the nominee's capabilities + +### Justification for nominees + +To ensure nominations are thoughtful and supported, in addition to the above +requirements, a justification must enumerate on the nominee's: + +* STAG Community involvement +* leadership skills +* conflict resolution (technical and non-technical) +* mentorship +* willingness to learn and expand existing technical knowledge +* and any known affiliations or group memberships (if applicable) + +## Announcing nomination results + +The co-chairs will release aggregate information about the nominees at the end +of the nomination process once the Technical Leads have been put forward for +approval by the TOC. Aggregate information will not include who nominated +someone. diff --git a/governance/tech-lead-transition.md b/governance/tech-lead-transition.md new file mode 100644 index 0000000..e18b59d --- /dev/null +++ b/governance/tech-lead-transition.md @@ -0,0 +1,33 @@ +# Tech Lead transition checklist + +This checklist should be copied into a new issue for when a new tech lead(s) is needed. + +## Nomination + +For nomination process please refer to [tech-lead-proposal-process](./tech-lead-proposal-process.md) + +## Transfer + +* [ ] Transfer Logistics + * [ ] #tag-storage-chairs-and-tech-leads channel - add new TL(s) + * [ ] tag-leadership mailing list - add new TL(s) + * [ ] add TL to chairs/leads meeting + * [ ] add TL to [github team](https://github.com/orgs/cncf/teams/tag-storage/) + * [ ] tag-storage repo PR: + * [ ] Update codeowners, github settings, README (TOC Liaisons and chairs + have admin access, tech leads have push access). + * [ ] Link to official vote email list message in PR descriptions + * [ ] Add STAG milestone to track STAG rep for TL + * [ ] [TOC Repo update](https://github.com/cncf/toc/blob/main/tags/storage.md) + * [ ] Verify new TLs have zoom credentials + * [ ] Introduce new TL selection, in the next steering committee meeting slide + * [ ] YouTube Channel + * [ ] invite new TLs (if needed) + * [ ] give "managers" permission + +## Announce + +* [ ] Announce the vote + * [ ] #tag-storage slack message + * [ ] email message to the tag-storage list + * [ ] Storage TAG meeting Announcement for each region diff --git a/governance/tools.md b/governance/tools.md new file mode 100644 index 0000000..c8cb345 --- /dev/null +++ b/governance/tools.md @@ -0,0 +1,12 @@ +# Tools + +This document contains a set of tools that will be useful to storage reviewers and project leads. This is not an endorsement of any vendor or open source project, rather a collection of what has been useful to individuals to help share helpful suggestions to others in the group. + +## Document conversion + +Documents, such as [self-assessments] are sometimes initially drafted in a Google doc, which facilitates discussion. At the end of the +review, the documents needs to be converted to markdown so that they can be added to the github repository. + +List of tools: +- [Pandoc](https://pandoc.org/) +- [Google Docs extension: docs-to-markdown](https://chrome.google.com/webstore/detail/docs-to-markdown/igffnbdfnodiaphfmfaiiaegmoljbghf) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md new file mode 100644 index 0000000..ac4d221 --- /dev/null +++ b/storage-whitepaper/v2.md @@ -0,0 +1,1914 @@ +## CNCF Storage Whitepaper v2 + +##### By Alex Chircop, Quinton Hoole, Clinton Kitson, Xiang Li, Luis, Pabón, Sugu Sougoumarne, Xing Yang +[Public link to this document](https://bit.ly/cncf-storage-whitepaperV2) +- 1 Scope of this document Status: 03/07/2020 - final version + - 1.1 Goals + - 1.2 Non-goals +- 2 Introduction and document layout +- 3 Attributes of a storage interface or system + - 3.1 Availability + - 3.2 Scalability + - 3.3 Performance + - 3.4 Consistency + - 3.5 Durability + - 3.6 Instantiation & Deployment +- 4 Storage stack / layers + - 4.1 Storage Topology + - 4.1.1 Centralised + - 4.1.2 Distributed + - 4.1.3 Sharded + - 4.1.4 Hyperconverged + - 4.2 Data Protection + - 4.2.1 RAID: Striping, Mirrors & Parity + - 4.2.2 Erasure Coding + - 4.2.3 Replicas + - 4.3 Data Services + - 4.3.1 Replication + - 4.3.2 Snapshots and Point in Time (PIT) copies + - 4.4 Data Reduction + - 4.5 Encryption + - 4.6 Physical / Non-Volatile Layer – terminology +- 5 Data Access Interface + - 5.1 Data Access Interface: Volumes + - 5.1.1 Block + - 5.1.2 Filesystem + - 5.1.3 Shared Filesystem + - 5.2 Data Access Interface: Application API + - 5.2.1 Object Stores + - 5.2.2 Key Value Stores + - 5.2.3 Databases + - 5.3 Orchestrator, host and operating system level interactions + - 5.3.1 Volumes + - 5.3.2 Application API + - 5.4 Comparison between Object Stores, File Systems and Block Stores + - 5.5 Comparison between Local, Remote and Distributed Systems +- 6 Block Stores + - 6.1 Local Block Stores + - 6.2 Remote Block Stores + - 6.3 Distributed Block Stores +- 7 File Systems + - 7.1 Local File Systems + - 7.2 Remote File Systems + - 7.3 Distributed File Systems + - 7.4 Comparison +- 8 Object Stores + - 8.1 HTTP Based Object Storage + - 8.2 Scalability, Availability, Durability, Performance +- 9 Key-Value Stores + - 9.1 Local Key-value Stores + - 9.2 Remote Shared Key-value Stores + - 9.3 Distributed Key-value Stores + - 9.4 Comparison +- 10 Databases + - 10.1 Functionality and Backing Stores + - 10.2 Cloud Native Databases + - 10.3 Data Protection + - 10.4 Database Comparison +- 11 Orchestration and Management Interfaces + - 11.1 Volumes - block stores and filesystems + - 11.1.1 Control Plane Interfaces + - 11.1.1.1 Container Storage Interface + - 11.1.1.2 K8S Native Drivers + - 11.1.1.3 Docker Volume Driver Interface + - 11.1.1.4 K8S Flexvolume + - 11.1.2 Frameworks and other tools + - 11.2 Application API + - 11.2.1 Object Stores + - 11.2.2 Key Value Stores + - 11.2.3 Databases +- 12 Appendix + - 12.1 Document History + - 12.2 Consensus Protocols + - 12.2.1 Paxos + - 12.2.2 Raft + - 12.2.3 Two-phase Commit (“2PC”) + - 12.2.4 Three-phase Commit (“3PC”) + - 12.3 Consistency, Coherence and Isolation + - 12.3.1 ACID + - 12.3.2 The CAP Theorem + + +## 1 Scope of this document Status: 03/07/2020 - final version + +This is the first phase of documenting the storage landscape. It aims to offer clear +information on terminology, usage patterns and classes of technology as defined by the +goals of the document. + +During phase two we might tackle the non-goals, on the basis of feedback from phase one, +specifically in light of understood production use, and comparisons w.r.t. primary properties. + +### 1.1 Goals + +1. **Clarify the terminology** currently in use in the storagespace, and the relationships + between the various terms. Essentially a taxonomy of the storage landscape. +2. This includes anything reasonably within scope of “storage”, including block stores, + key value stores, databases, object stores, volumes, file systems etc. +3. Provide some general information as to **how these thingsare currently being used** + **in production** in public or private cloud environments. +4. **Compare and contrast** the various technology areasw.r.t. the primary properties of + availability, scalability, consistency, durability, performance, API, etc. + +### 1.2 Non-goals + +1. Define what’s in-scope and out of scope for the CNCF. +2. Provide any recommendations regarding preferred storage approaches or solutions. + + +## 2 Introduction and document layout + +Multiple options were considered when defining how to present the many storage systems +and services in the landscape for the document. + +In order to simplify the consumption of information in a complex landscape, the document +has been structured as follows: + +``` +● Definition of the attributes of a storage system suchthat an end-user can +understand the appropriate capabilities that might be required by an application or +architectural pattern +● Definition of the layers in a storage solution (orservice) with a focus on terminology +and how they impact the defined attributes - coveringthe container, orchestrator, +transport, topology, virtual/physical, data protection, data services and the +non-volatile layers. +● Definition of the data access interfaces in termsof volume (including block, file +system and shared file system) and application API (including object, KV and +database) as high level groupings +● Separate sections with further detail on Block Storage, File systems , Object +Storage , Key Value Stores and Databases. +● Definition of the management interfaces needed toorchestrate the storage layers to +facilitate composability, dynamic provisioning and self service management. +``` + +## 3 Attributes of a storage interface or system + +Storage systems and services have a variety of interfaces which are suitable for different +use cases and tend to be composed of multiple layers which each impact different attributes +of the system. + +When choosing an overall storage solution, the different attributes of the desired solution +need to be considered. + +It is important to note that different storage systems are built with different design objectives, +and may be architected to optimise for one or more storage attributes which may in turn +impact another storage attribute. + +### 3.1 Availability + +Availability of a storage system defines the ability to access the data during failure +conditions. The failures may be due to failures in the storage media, transport, controller or +any other component in the system. + +Availability defines how access to the data continues during a failure condition and also how +access to the data is re-routed (or failed-over) to another access node in the event that the +node that is accessing the data is unavailable. + +The availability attribute can sometimes be referred to as a Recovery Time Objective (RTO) +after a failure i.e. the time between a failure occurring and service being recovered. + +Availability can be measured in Uptime as a % of availability (e.g. 99.9% uptime) as well as +MTTF (mean time to failure) or MTTR (mean time to repair) which are measured in units of +time. + +### 3.2 Scalability + +Scalability of a storage system can be measured by a number of criteria. Different criteria +may be important for different use cases and each define a set of architectural patterns that +will need to be implemented in a storage system. + +Criteria used to measure scalability include : + +``` +A. the ability to scale the number of clients that can access the storage system +``` + +``` +B. the ability to scale throughput (e.g. MB/sec) or number of operations (e.g. per +second) of a single interface +C. the ability to scale the capacity, in terms of data stored, of a single deployment of the +storage system/service. This could be with respect to storage volume (GB/TB/PB) +and/or number of individual items. +D. ability to scale the number of components in a storage system to facilitate (a), (b), or +(c) +``` +### 3.3 Performance + +Similar to scalability, the performance of a storage system can be measured against different +criteria, the relative importance of each depending on the use case. + +Performance of a storage system is typically measured in terms of one or more of: + +``` +● latency to perform a storage operation +● the number of storage operations that are possible per second +● the throughput of data that can be stored or retrieved per second +``` +### 3.4 Consistency + +Consistency attributes of a storage system refer to the ability to access newly created data +or updates to the same after it has been committed and applies to both: + +``` +● “read” operations returning the correct data after a “write”, “update” or “delete” - with +or without a delay. +● any delays that occur between performing the data storage operation and the data +getting committed to a non-volatile store or being fully protected. +``` +Systems that have delays between read operations returning up-to-date data, and/or delays +before all data is protected after getting commited are defined as being “eventually +consistent”. If there are no delays, the system is defined as being “strongly consistent”. +Consistency is discussed in further detail in theAppendix + +The consistency attribute can sometimes be referred to as a Recovery Point Objective +(RPO) after a failure i.e. the amount of tolerated data loss (usually measured in time, based +on the consistency delay) when a component or service in the storage system has suffered a +failure. + +### 3.5 Durability + +Durability covers the attributes of a storage system that impact the ability for a data set to +endure as opposed to just being accessible. Multiple factors can impact the durability of a +storage system, including: + + +``` +● the data protection layers, such as how many copies of the data are available +● the levels of redundancy of the system +● the endurance characteristics of the storage media that is holding the data (e.g. SSD +vs spinning disks vs tape) +● the ability to detect corruption of data (e.g. due to component failure or wear/usage) +and the ability to use data protection functions to rebuild or recover the corrupted +data (sometimes referred to as “bit-rot”) +``` +### 3.6 Instantiation & Deployment + +A storage system can be deployed or instantiated on-premises or in a cloud environment in +a variety of ways which defines where the storage solution or service can be deployed +and/or consumed: + +``` +Hardware : deployed as hardware solutions in a datacenter. This limits the +portability of the application and generally means that such systems cannot be +deployed in a public cloud environment +Software : deployed as software components on commodityhardware, appliances or +cloud instances. Software solutions tend to be more platform agnostic and can be +installed both on-premises as well as cloud environments. Some software defined +storage systems can also be deployed as a container and deployment can be +automated by an orchestrator. +Cloud Services : consumed from public cloud providers. Cloud services provide +storage services in cloud environments. +``` + +## 4 Storage stack / layers + +Any storage solution is composed of multiple layers of functionality that define how data is +stored, retrieved, protected and interacts with an application, orchestrator and/or operating +system. Each of these layers has the potential to influence and impact one or more of the +attributes of a storage solution including availability, scalability, consistency and durability. + +### 4.1 Storage Topology + +The storage topology of a storage system defines the different arrangements of storage and +compute devices and the data links between them. The topology can influence multiple +attributes, including : + +``` +● Availability - in terms of the speed of failover and reconvergence following a +component failure +● Performance - in terms of both latency and throughput +● Scalability - different topologies are optimised to scale in different directions (e.g. +scaling vertically vs horizontally, sometimes referred to as scaling up vs out) +● Consistency and Durability - the topology often defines the consistency delay as well +as the data protection options that are possible +``` +#### 4.1.1 Centralised + +Storage systems that are deployed in a centralised topology tend to be formed of fewer +nodes that maintain a tightly coupled state. Often the architecture is dependent on vendor +specific hardware technology for intra-controller communication, configuration and data +plane activity (such as shared memory, cache synchronisation or shared data buses). + +This type of storage is typically accessed by compute nodes via network interfaces where a +number of clients consume storage from a small number of centralised nodes. Centralised +storage is often characterised by scale up topologies (or scaling vertically) and is usually +more consistent than distributed storage. + +As a result of the small number of nodes (often just a single pair), the latency required to +maintain data protection and sync consistency is very low and many block based systems +use this architecture as a result. + +It can be hard to scale such a system horizontally as the requirement for a tightly coupled +state limits the number of nodes that can be supported. + + +#### 4.1.2 Distributed + +Storage systems that use a distributed topology tend to have a stronger focus on software +solutions vs hardware solutions. A software solution will often be implemented with a +“shared nothing” architecture where data needs to be synced across more than one node +over a standard network connection. + +Some distributed solutions are accessed directly in a scale out manner which allows many +clients to access many server nodes in parallel. Other distributed storage systems layer +other protocols on top to enable compatibility with existing environments or access +transports (e.g. NFS or iSCSI) which may limit the overall scalability. + +Different distributed architectures have different focuses and make design decisions that +may favour performance, scalability, durability, availability or consistency. Distributed +topologies typically offer better horizontal scalability as data can be distributed across many +more nodes and can support many clients. This can result in systems that are also more +complex to deploy and operate and therefore benefit from additional automation. + +#### 4.1.3 Sharded + +Sharding is a process where a dataset or workload is partitioned based on ranges of keys +across multiple instances. The shard can be computed by using the key to determine which +node to access based on a range, a hash or other algorithms. Sharding is primarily used as +a method for scaling database architectures. + +Sharded systems provide a way to scale a storage system for both capacity and compute +capability. Workload is distributed across the shards in the system allowing workloads to +scale horizontally. + +Sharded systems can increase operational complexity and care needs to be taken to ensure +that the algorithm used to distribute the keys is balanced to the specific workload or dataset. +Managing availability can also be more challenging as systems may experience more +complex or partial failure modes where only parts of a data set are impacted by individual +node or network failures. Although sharding enables scale, the performance of any +particular request will be limited to the performance of the specific node that the shard is +located on, and it is possible for individual shards to become “hot” or overloaded. +Rebalancing shards when scaling a cluster can also be complex. + +#### 4.1.4 Hyperconverged + +Hyperconverged topologies combine application as well as storage workloads onto the same +nodes. Multiple nodes can be clustered together creating a common resource pool which is +shared for both computer workloads and storage functionality. In hyperconverged + + +topologies, the storage layer is usually implemented as a software component on commodity +compute nodes and typically shares the same attributes of a distributed system. + +Hyperconverged topologies tend to be selected to maximise flexibility as the storage system +can grow with the compute workload. + +A reduction in the separation of concerns in hyperconverged systems can have an impact on +security and operational complexity as maintenance operations, or any node failure, not only +impacts the workload on that node, but also the underlying storage system. + + +### 4.2 Data Protection + +A key function of any storage system is to provide protection of the data that is being +persisted in the system or service. This is often implemented as a transparent layer in the +system. + +#### 4.2.1 RAID: Striping, Mirrors & Parity + +RAID (redundant array of independent disks) uses techniques such as striping, mirroring and +parity to distribute and provide redundancy for data across a set of disks: + +``` +Striping : this is a process where data is spread evenlyacross 2 or more disks. +Striping in itself does not provide redundancy or fault tolerance - in fact, striping on +it’s own increases the chance of failure as a failure of any of the individual disks will +typically result in unavailability of the whole dataset. Instead striping is used to +increase performance of a number of data protection functions by distributing the +load across more disks such that a workload is not limited to the performance of a +single component. +``` +``` +Mirrors : a mirror maintains an identical copy of adataset across two disks. This +configuration enables the availability of data to continue in the event of a disk or +component failure. It is also possible to mirror multiple disks for additional +redundancy. +``` +``` +Parity : when using parity, a data set is distributedacross a number of disks that are +grouped together. For each unit of data (typically a block, but can be as small as a +byte), an algorithm is used to generate an additional set of parity data which is stored +alongside the data. In the event of the failure of any individual disk, then the missing +data can be regenerated using the remaining data segments and the parity data. +The benefit of using parity over mirrors is that parity does not require a full copy of +the data set and can therefore implement data protection with less overhead in terms +of disks or backend storage capacity. The capacity benefit comes at the expense of +performance overhead and using parity for data protection can impact latency and +throughput. +``` +There are four main RAID levels in common use today: + +``` +RAID0 : this uses a simple stripe data set and is typicallyonly used when the only +consideration is performance, as RAID0 datasets do not have any redundancy. +``` +``` +RAID1 : a RAID1 dataset consists of a mirror. In aRAID1 dataset, read performance +can be increased as the reads can be striped across both sets of the mirror, but +writes will only be as fast as an individual disk as the write needs to be written to both +disks in parallel. Any data set will also consume double the capacity on the disks as +a result. +``` + +``` +RAID5 : this implements a distributed dataset withdistributed parity. Each block is +distributed across the disks in a RAID5 set together with the additional parity. This +method provides a good balance between capacity utilisation and redundancy: the +parity ensures that data can be recovered or rebuilt if any single disk fails, but as +data is not mirrored, the capacity lost to redundancy is only 1/x (where x is the +number of disks in the raid set). Performance of read operations is similar to a +striped dataset and can utilise the combined speed of all the disks in the dataset, but +write performance has a high penalty: every write or update needs to touch every +disk in the RAID set. A RAID5 set can only survive a single disk failure and care +must be taken to ensure that a rebuild of the data is completed before a second +failure occurs. +``` +``` +RAID6 : RAID6 is also a distributed dataset with distributedparity with the difference +that two sets of parity are generated. This allows for two concurrent disk failures to +occur in a RAID6 set without impacting the availability of data. RAID6 has similar +disk performance characteristics of RAID5, but imposes a higher CPU workload - this +is due to the calculation of the second parity set. +``` +RAID sets can be striped to further spread the data across many more disks for improved +performance. This is sometimes referred to as nested RAID, but more often is determined +by adding a “0” to each of the RAID levels e.g. RAID10, RAID50 and RAID60 referred to +stripes of RAID1, RAID5 and RAID6 respectively. + +Using multiple copies of parity (such as RAID6) has become more important as the size of +disks continues to grow, as the size of the disk tends to determine the time to rebuild a +dataset. As a result, custom additional parity based RAID sets have been defined in some +solutions (e.g. RAIDZ in ZFS) to add 3 or more sets of parity. + +Although RAID is typically implemented within the set of disks in a specific node, it is also +possible to distribute RAID across a network and implement redundancy across nodes AND +disks at the same time. This is a technique used in some distributed storage systems. + +#### 4.2.2 Erasure Coding + +Erasure coding is a method used to protect data where a data set or object is split into +multiple fragments that are then encoded and stored with a configurable number of +redundant parity sets. As an example a data object might be broken down into 6 data +fragments and 4 parity fragments and would be referred to as (6+4) erasure coding. The +ability to have many parity fragments enables very high redundancy and very high durability. + +Each of the fragments can be distributed across different disks and servers/nodes in multiple +locations. Erasure coding typically uses Reed-Solomon codes (although a variety of +algorithms are available with different performance/efficiency characteristics) to perform +encoding and is therefore a computationally intensive process. The primary benefit of using +erasure codes is the flexibility of a user configurable balance between data distribution, + + +capacity utilisation and redundancy. As a result, erasure coding is utilised in many +distributed storage systems and the primary building block for data protection and +redundancy for many object stores. + +One drawback of erasure coding is that the number of data fragments and the distribution +across multiple nodes means that write and read operations on data objects can incur +significant latency due to the network overhead as well as the computational overhead. As +a result, erasure coding is best applied to large datasets which are optimised for either +reducing overall capacity utilisation or improving redundancy and durability. + +#### 4.2.3 Replicas + +Replicas are mirrored data sets that are distributed across multiple servers/nodes. A replica +is a full copy of the dataset and therefore the number of replicas for a data set multiplies the +capacity needed to store a particular data set. Each individual replica is usable as a +standalone copy and therefore rebuild operations are extremely quick as it is both simple +and can be implemented as a point to point transaction. + +Replicas have a much lower compute and network distribution overhead and are therefore +preferred when lower latency is important. Replicas can also be used to provide parallelized +read access for some workloads. + + +### 4.3 Data Services + +Storage systems often implement a number of data services which complement the core +storage function by providing additional functionality that may be implemented at different +layers of the stack. + +#### 4.3.1 Replication + +This service provides the capability to replicate a set of data (e.g. a volume or a bucket) to +improve the availability and durability of the data. Note - this data service is often separate +from the core data protection function (such as mirrors or replicas) and is generally used to +replicate data between independent storage systems often in different locations. + +Replication can be performed synchronously where a request to persist data is only +acknowledged to the application after the replica target has also acknowledged it. This +provides a strongly consistent model with a low time to recover from failure, but can impact +latency and performance. Due to the time taken for data to traverse a network, latency +increases with distance, and synchronous replication is typically only feasible when the +source and target systems are within 100km of each other. + +Replication can also be performed asynchronously where data to be replicated is queued +and is transferred to the target replica out of band of the actual storage persist operations. +This means that asynchronous replication is eventually consistent and has a lower impact to +overall performance. Asynchronous replication can support replication over long distances +but adequate bandwidth must be available to be able to transfer the deltas that change +between the source and target system in an acceptable time frame. + +#### 4.3.2 Snapshots and Point in Time (PIT) copies + +Snapshots or point in time copies of data improve the availability of a dataset and provide +the capability to backup and further protect the data. A snapshot is a view of the data set at +a given point in time (when the snapshot was taken) and this provides the ability to access +this data consistently at that data point. + +Snapshots can be implemented in a space efficient manner using techniques such as +“copy-on-write” (COW), which provides a virtualisation layer where snapshots only contain +the delta between what was written since the snapshot was taken and the original data set. +This provides the capability of taking multiple snapshots at different intervals whilst +minimising the amount of capacity needed to store the snapshots. + +Many storage systems also allow the creation of a point in time copy of the data which +includes a full copy of the data set. This is often referred to as a “clone” and utilises + + +additional capacity in the storage system, but creates an independent copy of the data set. +This can be useful when the data set is to be utilised in a manner which might impact the +performance of the original data set if a snapshot was taken. + +Processing snapshots and data copies often means maintaining data structures and +metadata which may impact the CPU, memory or disk overhead and performance. Whilst +the creation of space efficient snapshots is often a low overhead function, the creation of a +clone requires the creation of a full copy of the data set which will impact performance and +utilise bandwidth to move the data from the original data set to the copy. + +### 4.4 Data Reduction + +Storage systems can use a number of techniques to reduce the size of data stored. This +improves the capacity efficiency of the underlying physical storage by using data +compression and or deduplication. Storage systems implement data reduction with various +granularities based on implementation, and data reduction can be applied at a block, file, +object, local or global level. + +Data compression provides a method to efficiently encode data to remove redundant or +repetitive patterns such that the encoded data consumes less space. + +Deduplication typically uses a method such as a hash to determine duplicate data and then +uses that reference to store a link to the data rather than storing multiple copies of the data. + +Many applications can benefit from data reduction techniques, but some types of data that +are encrypted or already compressed (e.g. images or videos) do not benefit from data +reduction. + +Data reduction can impact performance and scalability attributes of a storage system. In +general, data reduction will add additional compute overhead which will impact latency and +throughput. In some cases, data reduction may improve performance, especially when the +limiting factor is the performance of the physical storage or the network. + +### 4.5 Encryption + +Storage systems can provide methods to ensure that data is protected by encrypting data. +Data encryption can be implemented for data in transit or data at rest and can ensure that +the encryption function is implemented independently to the application. + +Encryption can have an impact on performance as it implies a compute overhead, but +acceleration options are available on many systems which can reduce the overhead. + +Encryption services can be implemented for data in transit (protecting data in the network) +and for data at rest (protecting data on disk). The encryption may be implemented in the + + +storage client or storage server and granularity of the encryption will vary by system (e.g. per +volume, per group or global keys). + +The encryption function will often depend on integration with a key management system +which may add complexity to a storage system. + +### 4.6 Physical / Non-Volatile Layer – terminology + +Storage systems will ultimately persist data on some form of physical storage layer which is +generally non-volatile. The choice of the physical layer impacts the overall performance of +the storage system and defines the long term durability of the stored dataset. + +Cloud services often use similar terminology for service classes to define the performance +characteristics and SLAs of the service. + +Some of the most commonly used systems include: + +``` +● Spinning / magnetic disk (e.g. SATA, SAS & SCSI) - magnetic media are +traditional harddisks and are mechanical devices in that they have spinning magnetic +disks that are read by a read/write head. Latency is a combination of the rotational +latency of the disk, the seek time for the head to move into place to read/write the +data and the electronics/bus. SATA, SAS and SCSI are transports used by the +operating system to access the device through a host bus adapter (HBA). Latency +per operation is measured in a number of milliseconds and throughput is generally +under 250MB/sec. Magnetic media generally offers the lowest cost per GB of +capacity. +``` +``` +● SSD (with traditional interfaces such as SATA, SAS or SCSI) - a solid state disk +does not have any moving parts and stores data in non-volatile memory (typically +some type of flash). This allows for much lower latency operations - typically small +fractions of a millisecond and allows for tens of thousands of I/O operations per +second. Throughput is usually limited only to the transport utilised and measured in +hundreds of MB per second. Different classes of flash are available which impact +the performance as well as the durability - SSD flash wears out and can fail after a +given number of cell overwrites. Storage systems that are optimised for SSDs will +therefore generally attempt to minimise write amplification to minimise wear. +``` +``` +● Non Volatile Memory (e.g. SSD/NVMe) - flash baseddevices are generally faster +than the current generation of transports. NVMe is a faster transport that minimises +the protocol overhead by treating the flash more like memory where data can be +accessed randomly rather than in block format as defined in disk transport protocols +like SCSI. This allows for much lower latency - typically a few tens of microseconds +``` +- and much faster throughput - typically measured in GB per second. + + +## 5 Data Access Interface + +The data access interface defines how applications or workloads store or consume data that +is persisted by the storage system or service. + +The interface is an important factor in the choice of a storage solution as often, different +workloads or applications will have a pre-defined or preferred access method. + +Different interfaces also influence a number of attributes such as: +● availability – in terms of failover and moving access between nodes +● performance – in terms of latency and throughput +● scalability - in terms of the number of clients that can access a given pool of storage + +In addition to the attributes, in practice, the choice of access interface has a large impact on +the management interfaces available and therefore the ability of orchestrators to manage +and provision storage. In particular, Volume interfaces currently have more mature +integrations with orchestrators. + + +### 5.1 Data Access Interface: Volumes + +#### 5.1.1 Block + +A block device is the fundamental building block of many volumes. A disk device is +represented as a block device to an operating system and represents a contiguous set of +blocks that are ultimately stored in the disk (or other non-volatile storage). Blocks are +typically represented as a 4KiB unit of data to the operating system, although different disk +systems may actually store blocks internally in either smaller or larger units. Read and write +operations are performed in units of individual blocks. + +A block device can be a representation of a local disk but can also be a representation of a +virtual or remote disk that is either connected to or provided by a storage system. + +Block devices are rarely consumed by applications directly and are often used as a device +that underlies a filesystem. Some databases can be configured to consume raw block +devices directly in order to improve performance. Permissions and access control of block +devices are typically reserved to admin users of the operating system. + +Further details are available in thissection. + +#### 5.1.2 Filesystem + +A filesystem defines how data is persisted and retrieved by the operating system, by +structuring the data in terms of files and directories. A filesystem will often use a block +device to persist the data to a non-volatile storage medium such as a disk. + +Permission attributes in a filesystem can be allocated to both files and directories, allowing +granular access to users and groups, as well as defining the type of access (e.g read, write +or execute access). Some filesystems support more extended attributes that improve the +flexibility and levels of control and access. Filesystems can also support locking semantics +that allow an application to mark a file as locked for exclusive use. The supported locking +capabilities vary between filesystems and may operate differently when used on a remote or +distributed filesystem. + +Filesystem code is typically run within the kernel of the operating system to maximise +performance, which means that the filesystems available to an application will be dependent +on the particular operating system distribution. It is also possible to run filesystems at the +user level (FUSE), which are often used to provide a filesystem representation of datasets +other than those stored in a native block device. + +Further details are available in thissection. + + +#### 5.1.3 Shared Filesystem + +Filesystems are typically limited to an individual server or node and can therefore only be +accessed by one node at a time. A shared filesystem is a filesystem that can be mounted +on more than one node at a time. This provides additional flexibility and supports patterns +where applications are distributed between multiple servers and need to access a common +set of data. + +A shared filesystem can be consumed from a point-to-point service endpoint, where a server +node exposes a local filesystem to other servers - this is limited to the performance (and +sometimes the availability) of a single node. Alternatively, a shared filesystem can be +distributed across multiple nodes and systems in a distributed filesystem - this allows for +datasets and scalability beyond what can be supported on a single node. + +Clustered filesystems can provide similar functionality to shared filesystems but are rarely +utilised in a cloud native context and they use shared block devices which are available on +multiple nodes. + +### 5.2 Data Access Interface: Application API + +#### 5.2.1 Object Stores + +Object stores use an API to store and retrieve objects or blobs. The API for the most +popular object stores utilise a HTTP interface. Object stores are typically based on a +distributed architecture that is optimised for capacity, durability and scalability allowing +thousands of clients to connect to PB buckets of storage. +The overhead required to commit multiple copies for availability and durability, and the use of +a HTTP API tends to lead to a higher latency overhead per operation, but can maintain high +levels of throughput through parallel access from multiple clients. + +Further details are available in thissection. + +#### 5.2.2 Key Value Stores + +A key value store is accessed by an API and uses a key as an identifier to store and retrieve +values from the store. Key value stores can be implemented in a library, a local system or a +distributed system. + +Key value stores are often used to store metadata and configuration and are often +implemented with strong consistency. As a result they are often utilised as a method for +storing state, configuration and indexes for distributed systems and applications. + + +Further details are available in thissection. + +#### 5.2.3 Databases + +Databases are typically accessed through an API provided by the project or vendor. Those +that offer relational features have the opportunity to build an API that conforms to an industry +defined set of standards for access. Examples are Java-JDBC, Python PEP 249, Go’s +database package, etc. + +### 5.3 Orchestrator, host and operating system level interactions + +A number of virtualization and access layers are often overlaid or interposed on a Data +Access Interface as part of the integration of the storage solution into an orchestrated +environment, and can influence Availability, Scalability and Performance of the overall end to +end solution. + +Often a hypervisor may also be providing access to resources and may be performing a +variety of functions including mapping storage resources, pooling multiple resources which +are shared between workloads, managing connectivity to resources and handling failover +and data protection functions. + +#### 5.3.1 Volumes + +Some interactions that may apply to volume access interfaces include : +● A volume manager (e.g. lvm) which may provide functionality to pool resources, +provide data protection and even take an active role in failover and recovery +● Bind mounts and overlay filesystems which provide functionality to layer filesystems +and image layers to provide integration with orchestrators and container runtimes. + +#### 5.3.2 Application API + +Some interactions that may apply to application API interfaces include : +● Discovery to provide functionality to identify resources in a cluster or a network +● Meshes, ingress end-points and load balancers that can provide functionality to route +requests to store and retrieve data based on content or resource availability + + +### 5.4 Comparison between Object Stores, File Systems and Block Stores + +``` +Data Access Interface Most suited Least suited +``` +``` +Block +● Availability +● Low latency performance +● Good throughput performance for individual workloads +``` +``` +● Capacity scaling +● Sharing data with multiple workloads simultaneously +``` +``` +Filesystem +● Sharing data with multiple workloads simultaneously +● Optimised throughput for aggregated workloads +``` +``` +● Strong file locking integrity when filesystems are shared +``` +``` +Object Store +● Availability +● Large capacities (PB scale) +● Durability +● Sharing data with multiple workloads simultaneously +● Optimised throughput for parallelised workloads +``` +``` +● Low Latency +performance +``` +_** The information in this table are generally accepted attributes and measurements for +object stores, file systems and block stores._ + + +### 5.5 Comparison between Local, Remote and Distributed Systems + +``` +Local Remote Distributed +``` +``` +Availability Limited by failure of components locally +and ability to failover. If a node fails, the local +storage is isolated to the local node. +``` +``` +May be limited by single points of failure. +Workloads can move to another +node and reconnect to the remote +storage. +``` +``` +Clients may access +numerous nodes, +and any storage +node failures can be +mitigated. +The additional +complexity of +distributed systems +may add operational +complexity which +may in turn affect +availability or the +ability to recover +errors. +``` +``` +Scalability Limited by local +architecture +(1 node; typically +TB) +``` +``` +Limited by +monolithic +architecture +(2-16 nodes; +typically 10s-100s of +TB) +``` +``` +Scale by adding +additional systems. +Topology enables +scale of both nodes +and supported +capacities. +(3-1000s nodes; +often supports PB) +``` +``` +Consistency Yes +(storage system +implementation is +easy) +``` +``` +Yes +(storage system +implementation is +harder with more +nodes) +``` +``` +Yes +(storage system +implementation is +hardest) +``` +``` +Durability Limited by local +components (less) +``` +``` +Limited by +monolithic +architecture (more) +``` +``` +Scaling out to +additional systems +increases durability +(most) +``` +``` +Performance Limited by local +components, can +benefit low-latency +applications +(100us-5ms, +GB/sec) +``` +``` +Similar to local, but +additional overhead +in network transport +(500us-5ms, +GB/sec) +``` +``` +Scaling out to +additional systems +increases +performance +(500us-5ms, +TB/sec) +``` +_** The information in this table are generally accepted attributes and measurements among +local, remote, and distributed storage systems._ + + +## 6 Block Stores + +Block stores are a persistence target where data is stored in blocks in local, remote, or +distributed locations. The blocks are typically numerically addressed using a method called +Logical Block Addressing (LBA) and accessed as a clientthrough adeviceinterface +provided by a Kernel. The location (local/remote/distributed) is determined by the physical +persistence location of the blocks and serves as a method to group and categorize different +stores. + +It is possible to transparently augment or enhance numerous characteristics of block stores +such as availability, scalability, consistency, durability, and performance by adding additional +software-based storage layers (ie. RAID) along with physical devices, networking, and +nodes. Please refer to the Capacity, Availability, and Partition-tolerance (CAP) theorem +overview in theappendixfor more details. + +Virtualization adds another perspective which is important to consider. Operating systems +may or may not be aware of the type of block store being used. Virtual machines and +machine instances are likely not storing any blocks locally but completely leveraging remote +or distributed block stores. In this case, instances provide virtualized hardware that store +data remotely and emulate the connectivity and behavior of local physical storage devices. +This storage would not be considered a local block store due to non-locality of stored data. + +Most applications do not directly store data in block format, but instead interface with file +systems supported by block devices (ie. application -> local EXT4 filesystem -> local block +device -> local/remote/distributed block store). See the filesystems section below for more +details. + +_The following categories include examples solely with the intent of providing context to the +category being described. Examples are intended to be widely known to the readers._ + +### 6.1 Local Block Stores + +Local block stores are built onDirect Attached Storage(DAS) where data is persisted locally +on hardware devices. Since all data is stored locally, the scale is limited to the local resource +capabilities. The availability of the data is a major consideration when applications are +interacting directly with local block stores.Logicalvolume management(LVM) and similar +techniques can be used to augment and concatenate the capabilities that discrete hardware +devices provide. These stores tend to be focused on specific use cases where latency is +critical or to support other storage services. + +Generally accepted example terms, platforms, and protocols:ATA, IDE, logical volumes, +LVM, physical volumes, physical storage devices, RAID, SCSI, volume groups + + +### 6.2 Remote Block Stores + +Remote block stores provide storage attached by a network where data is persisted remotely +across a network. This is different from local because there is a separation of application +from storage. Generally, this has the ability to increase capacity and performance. The +availability is also increased since high availability design patterns can be implemented. +Without detailed information and assurances and intentional design, service levels are likely +to be driven by this category. + +Generally accepted example terms, platforms, and protocols: AWS EBS, FC, FCoE, iSCSI, +SAN + +### 6.3 Distributed Block Stores + +Distributed block stores are similar to remote block stores but data is persisted across many +nodes, possibly in conjunction with the local node, and clients are able to rely on many +nodes to provide redundancy and horizontal scalability. When compared with local and +remote block stores, distributed block stores require additional control and data access +layers to manage data distribution (and often also replication). This added complexity can +provide improved scalability, availability, and durability. + +Generally accepted example terms, platforms, and protocols: Ceph, DRBD, OpenEBS, +Longhorn, hyper-converged + + +## 7 File Systems + +AFile systemis a logical persistence layer organizedaround storing and retrieving data +referenced by files. They provide a richer set of primitives than block stores. These primitives +include access control, concurrency control and locking, naming and directory structure, +sequential file access, and other features. This makes them more suitable for direct use by +applications than block stores. The actual persistence function is performed by supporting +layers where the file system may translate files to logical block addresses. File systems can +be local, remote, or distributed (independent of underlying block store locality). There are +numeroustypes of file systemswhich tend to differentiateto optimize for many +characteristics including storage medium, read/write expectations, performance, durability, +and access patterns. + +_The following categories include examples solely with the intent of providing context to the +category being described. Examples are intended to be widely known to the readers._ + +### 7.1 Local File Systems + +Local file systems are typically built from local, remote, or distributed block stores. They are +commonly used by operating systems to store dependent files. + +Generally accepted example terms, platforms, and protocols: EXT4, file, inode, XFS + +### 7.2 Remote File Systems + +Remote file systems are also referred to as the categorynetwork file systems. They consist +of a specialized client that presents local data structures and stores data across a network in +remote locations. Through separating client from server a remote file system’s capabilities +expand beyond the limits of the local system. + +There are numerous types of remote file systems with their own specializations. For +example, remote file systems are not inherently optimized for safe multi-client access. +Applications sometimes solve for this by introducing additional locking mechanisms or they +embraceclustered file systems. + +Generally accepted example terms, platforms, and protocols: CIFS, cluster, file locks, NFS, +VMFS + +### 7.3 Distributed File Systems + +Distributed file systemsare a type of remote filesystem that provide the ability for clients to +seamlessly store and retrieve files across clusters of servers. The scale is elastic because +files are stored in a distributed manner and are globally addressable. + + +Generally accepted example terms, platforms, and protocols: Gluster, HDFS, Lustre, +CephFS. + +### 7.4 Comparison + +Comparing file systems requires also considering the interaction with the underlying storage +layers. The following table describes the optimal/neutral/non-optimal combination generally +accepted understanding of the interaction of these layers. + +``` +Local File System +on.. +``` +``` +Remote File +System on.. +``` +``` +Distributed File +System on.. +``` +``` +Local Block Store Optimal Optimal Optimal +``` +``` +Remote Block +Store +``` +``` +Optimal Neutral Non-Optimal +``` +``` +Distributed Block +Store +``` +``` +Optimal Neutral Non-Optimal +``` + +## 8 Object Stores + +Unlike file systems and block stores, where there is a general understanding of the +implementation behind the interface, object stores are quite heterogeneous in their +implementations. In general an object store system is an _atomic_ key-value store, where the +key and value are defined by the implementer of the storage system. An atomic key value +store guarantees that a request to _set_ or _get_ a valueis either fully committed or not at all. + +There are many examples of object stores. From how an internet browser gets HTML +content and sends, or posts, data back to the web server, to how an operating system gets +and sets data from an LBA on a block store. + +### 8.1 HTTP Based Object Storage + +Due to the large range of object store implementations, this paper will be focusing on HTTP +based object stores as defined byAmazon Web ServicesS3,Google Cloud, andOpenStack +Swift. Typically, these types of object stores areused for large opaque values, as a result, +they are often used to store images, videos, and data backups. + +These types of object store systems have defined a set of methods based on the HTTP +protocol where the key is aURLand the value is aset of data. This interface makes it simple +to access content since there is no need to mount or attach an object store. Due to the +nature of this model, these type of object store systems are always remote to the requester +node. + +An HTTP based object store access model is largely constructed of an _account_ in which it +has a set of _buckets_ as they are called by S3 or _containers_ as they are called by OpenStack +Swift. Each of these buckets or containers can then contain objects. The _key_ is based on the +combination of these values loosely based on the format: + +``` +http(s):///[...object] +``` +where the _object_ is a unique identifier referenceto an object. For example: + +``` +https://server.io/v1/admin/pictures/path/to/the/picture.jpg +``` +shows the object is _path/to/the/picture.jpg_. + +One of the advantages of these HTTP based systems over simple object stores is the +metadata management. These storage systems make it possible for the requester to attach +custom metadata to the objects, which can then be used to list, fetch, or group objects. +Another advantage is in access control, where access can be placed on anything from a set +of containers or buckets to a single object. + + +### 8.2 Scalability, Availability, Durability, Performance + +HTTP object stores are designed for scalability and durability, but not for low latency +performance as compared to block or file based storage systems. Instead they are designed +for supporting extremely large amounts of data spread over not only a single data center, but +over many regions all over the world. HTTP object stores are also designed for durability, +supporting many methods of maintaining the data integrity of their objects. They may +maintain multiple copies of their objects or useerasurecodingto maintain object durability. +These methods provide an unprecedented object durability service level agreement. As an +example, Amazon Web Services S3 claims object store service is designed for a durability of +99.999999999%. + +Due to their nature, HTTP based object store systems are not suited for latency sensitive +applications. On the other hand, unlike block and file, an object store system can provide +data to clients on behalf of an application! For example, when a web browser requests data +from an application which stores data in an object store, instead of having the application +return the data itself, it can send the web browser pointers to the data on the object store. +The object store system then returns the data _directly_ to the client from a region closest to it, +reducing the network IO requirements of the application. + + +## 9 Key-Value Stores + +A key-value store is a storage system designed for storing, retrieving, and managing +key-value pairs. Values are identified and accessed via a key, which is similar to ahash +table. In a key-value store, there is no predefinedschema and the value of the data is +usually opaque. It is a very flexible data model because the application has complete control +over what is stored in the value. + +A key-value store system might store its data fully in memory, partially in memory or fully on +disk. It might be only locally accessible or remotely accessible. It might only run on a single +node or might be distributed and scalable. Many more complex storage systems like +databases, block storage, file systems, logging systems are usually built on top of key-value +stores or key-value abstraction. + +### 9.1 Local Key-value Stores + +A local key-value store is usually accessed by a single application through inter process +communication or direct intra-process API calls. It stores the data in local memory or a local +filesystem. The local key-value store is designed for low latency accessand the ease of use +and operation.Many distributed applications or distributedstorage systems use one or more +local key-value stores as their basic storage unit for further replication. Berkeley-DB, +InnoDB, LMDB, RocksDB are the best examples of this category. + +### 9.2 Remote Shared Key-value Stores + +A remote shared key-value store is usually accessed by a number of applications through +networking protocols (HTTP, RPC, or customized ones). It stores the data in local memory or +local filesystem. The shared key-value store is designed for efficiency and flexibility. Some +remote key-value stores also provide additional data structures API for the ease of use. A +traditional relational database can also be used as a remote key-value store with a simple +two columns (key, value) table when reliability and durability are the first priorities. + +Redis, memcached are the best examples of this category. + +### 9.3 Distributed Key-value Stores + +A distributed key-value store replicates its data to one or more nodes in the system for high +availability and durability, and might shard its data to different replication groups for scale +out. Some distributed key-value stores trade off latency or scalability for linearizability and + + +serializabilityconsistencyguarantees over the entire key-value space to reduce the risk of +potential conflict updates. Some provide weaker consistency guarantees (either eventual +consistency or stronger consistency within one single partition) but better latency +guarantees. + +etcd, ZooKeeper, Consul, etc. provide distributed key-value store API for handling metadata +or coordination. They only implement the data replication, but no sharding, to simplify the +overall design and improve reliability. These systems provide strong consistency guarantees +over the entire key space. + +Cassandra, HBase, etc. provide distributed key-value store API for managing massive +amounts of data with low latency. They are similar since they are all Wide-Row key value +stores. They implement both data replication and sharding. Strong consistency can be +achieved for mutations within a row or within a partition, sometimes with limited availability. +They do not provide strong consistency guarantees over mutations over different partitions +through the entire key space. + +Spanner, CockroachDB,TiKV, YugabyteDB, FaunaDB, FoundationDB, etc., provide +distributed key-value store API for managing massive amounts of data and strong +consistency guarantees. They implement both the data replication and sharding features. +Additionally, they implement distributed transactional protocols across multiple shards to +support global transactions either through clocks (high accuracy physical clock orHLC) or +through a single master (Calvinor similar protocols).The distributed transaction protocol +typically introduces additional latency for cross shard transactions. Even with high accuracy +physical clocks, the latency can be as high asseveralmilliseconds. + +### 9.4 Comparison + +``` +Local Remote Distributed and +non-global-transa +ctional +``` +``` +Distributed and +global-transactional +``` +``` +Availability Limited by local +components +failures +``` +``` +Limited by +remote +components +failures +``` +``` +Partial failures do +not affect +availability or only +limited key-space +``` +``` +Partial failures do not +affect availability or only +limited key-space +``` +``` +Scalability Limited by local +resources +``` +``` +Limited by +remote +resources +``` +``` +Scale out as +adding more +capacities +``` +``` +Scale out as adding +more capacities. API +scalability is often limited +by a single-master. +``` +``` +Global +consistency +``` +``` +Strong Strong Weak Strong +``` + +**Durability** Limited by local +storage failure + +``` +Limited by +remote +components +failures +``` +``` +Tolerant to partial +failures +``` +``` +Tolerant to partial failures +``` +**Performance** Limited by I/O +access latency + +``` +Limited by I/O +access latency +and network +latency +``` +``` +Limited by I/O +access latency and +network latency +``` +``` +Limited by I/O access +latency, network latency, +and usually a +single-master. Multiple +rounds of network +latency for cross shards +transactions. +``` + +## 10 Databases + +In the past, the term “database” used to be synonymous to a relational database. However, +there are now other systems that get categorized as databases even though they don’t +strictly satisfy the properties of a relational database. In particular, there are many upcoming +NewSQL systems, and there are also specialized ones like Graph databases. Similarly, +existing relational databases such as PostgreSQL and MySQL have been going in the +opposite direction allowing storing data without a fixed schema. + +### 10.1 Functionality and Backing Stores + +Databases have some advanced functionality over what one would expect of a traditional +key-value store. A database typically has some of the following characteristics (but not +necessarily all): +● ACID Transactions (Atomicity, Consistency, Isolation and Durability), +● Secondary indexes, +● Relationships across different pieces of data and the ability to join them on-the-fly, +● A query language to fetch and (or) mutate the data. The most popular of these is +SQL. + +We are also aware that the lines are blurring as many key-value systems are starting to +support some of the above features. + +Many databases allow one to configure their backing store as an external file system or +block storage. In such cases, the trade-offs are the same as that of a Key-Value store. +Essentially, the comparisons made in section 9.4 also apply to such systems. + +### 10.2 Cloud Native Databases + +Not all databases are cloud-native. Therefore, caution must be used before running them in +a cloud environment like Kubernetes. The major areas of concern are: +● the life-cycle and mobility of a Kubernetes Pod, +● the ephemeral local storage, +● the added latency of a remotely mounted volume. +These concerns can typically be addressed with additional tooling like the use of proxies and +orchestration systems that can react to events that some databases may not be inherently +built to handle. The exact solution will differ based on the extent to which a system is +sensitive to the above changes. + + +On the other hand, systems likeVitess,TiDB,YugabyteDB,Cloud Spannerand +CockroachDBcome with built-in proxies and orchestration.These properties make them +better suited to run in the cloud. + +### 10.3 Data Protection + +It’s also recommended that backups be taken regularly. Even if there is sufficient durability +achieved through replication, there are other use cases where a backup comes in handy. For +example, if there is a bug in the application that accidentally destroys data, one could go +back to an older snapshot to recover the lost data. Some database systems have native +support for continuous backup, allowing users to perform finer Point In Time Recovery +operations, restoring a consistent snapshot of the database as it was immediately before the +incident. + +### 10.4 Database Comparison + +``` +Topology Stand-alone +instance +``` +``` +Replicated DB Sharded Sharded and +Replicated +``` +``` +Example Individual +relational +database +instance +``` +``` +Master-Replica +or Multi-master +deployments +``` +``` +Shard a subset +of records per +instance, behind +a front-end +router +``` +``` +Cloud Native +Databases +``` +``` +Availability Limited by the +availability of +the single node +and it’s network +connection. +``` +``` +Multiple +replicas; failover +needs to be +coordinated +``` +``` +Sharding may +lower overall +availability - any +one unavailable +shard may +make the DB +unavailable. +``` +``` +Availability +based on the +number of +replicas +``` +``` +Scalability Requires +compute and +storage to scale +up; capacity +limited to the +capabilities of a +single node +``` +``` +Data is not +distributed, but +queries can be +targeted at +replicas; +capacity limited +to the +capabilities of a +single node +``` +``` +Horizontal +scaling of +reads, writes +and capacity is +possible, but +sharding does +solve read +latency +problems +without replicas. +``` +``` +Scaling based +on the sharding +``` + +**Consistency** Strong Strong Typically strong, +but +asynchronous +replication and +eventual +consistency +may impact +consistency. + +``` +Typically strong, +but +asynchronous +replication and +eventual +consistency +may impact +consistency. +``` +**Durability** Dependent on +capabilities of +underlying +Volume Storage + +``` +Durability is +based on the +number of +replicas. A data +loss event +requires all n +replicas to be +lost. +``` +``` +Durability can +be comparable +to a stand-alone +instance due to +sharding - +although blast +radius is +minimised as +loss of a single +shard only +results in partial +data loss. +``` +``` +Durability is +based on the +number of +replicas. A data +loss event +requires all n +replicas to be +lost. +``` +**Performance** Dependent on +memory +(cache), +compute and +storage +resources + +``` +Performance +can be +negatively +impacted by +replication +overhead, +especially is +synchronous to +facilitate strong +consistency. +``` +``` +Long running +queries can be +offloaded to +replicas to +improve +transactions on +master +``` +``` +Performance is +balanced +across a +number of +nodes. +Operational +complexity for +sharded +systems may +apply. +``` +``` +May be either +increased or +decreased due +to sharding and +replication, +depending on +query types and +replication +strategy. +``` + +## 11 Orchestration and Management Interfaces + +This section defines how Container Orchestration Systems interact with the Storage +Systems to associate workloads with Data from the Storage Systems. Depending on the +Data Access Interfaces, different layers may be involved. + +### 11.1 Volumes - block stores and filesystems + +A Container Orchestration System (CO) such as Kubernetes can support multiple interfaces +to interact with the Storage System. + +The Storage System can: +● **(A)** support control plane interface API directly andinteract directly with the +orchestrator or +● **(B)** interact with the orchestrator via an API Frameworklayer or other Tools. + + +The orchestrator can use the control plane interfaces **(A)** or **(B)** to support the request for a +volume and may also be able to use the interface to dynamically provision a volume. + +Workloads consume **(C)** storage from storage systemsover various data access interfaces. + +The underlying storage infrastructure layer can be software-based commodity storage, cloud +storage, or enterprise storage. The management layer provides an abstraction over the +complexity of various storage systems. + +Whether to use **(A)** or **(B)** depends on user requirementsand capabilities supported by the +storage system. **(A)** has been primarily focusing ondynamically provisioning storage (or +pre-provisioning storage) for workloads, although more advanced functionality may be added +in the future. **(B)** may also support discovery, automation,and other data services such as +data protection, data migration, or data replication in addition to provisioning. + +There are on-going discussions in Kubernetes to provide more advanced functionality such +as data protection. At the time of this writing, a Data Protection Working Group was formed +with collaboration between Kubernetes SIG-Storage and SIG-Apps to promote this objective +(https://github.com/kubernetes/community/blob/master/wg-data-protection/charter.md). + +#### 11.1.1 Control Plane Interfaces + +_“Control-Plane Interfaces”_ refers to storage interfacesfor CO. It includes Native Interfaces +such as Kubernetes Native Drivers and Docker Volume Driver Interface as well as External +Interfaces such as Kubernetes Flexvolume and Container Storage Interface. + +##### 11.1.1.1 Container Storage Interface + +Container Storage Interface (CSI) is an industry standard to define a set of storage +interfaces so that a storage vendor can write one plugin and have it work across a range of +Container Orchestration (CO) Systems. COs supporting this specification include +Kubernetes, Mesos, and Cloud Foundry. Other companies, including storage vendors, have +also been helping with the design. It has evolved to become the volume driver interface of +the future for Container Orchestration Systems. + +CSI has three gRPC services: controller, node, and identity services. Identity service +provides info and capabilities of a plugin. Controller service supports create and delete +volume, create and delete snapshot, attach and detach volume, and expand volume. Node +service supports mount and unmount volume, and expand volume. For more details, see +the spec here:https://github.com/container-storage-interface/spec + +CSI v1.0.0 was released in November 2018 and v1.2.0 was released in October 2019. The +Kubernetes implementation of CSI has been promoted to GA in the Kubernetes v1.13 + + +release (https://kubernetes.io/blog/2019/01/15/container-storage-interface-ga/). At the time +of this writing, both Mesos and Cloud Foundry have implemented experimental CSI drivers. + +##### 11.1.1.2 K8S Native Drivers + +This refers to Kubernetes in-tree volume drivers that extend Kubernetes volume interfaces to +support block and file storage systems. Kubernetes has the following concepts for storage: + +``` +● Persistent Volume (PV) is a piece of storage provisioned by an administrator on the +storage system. +● Persistent Volume Claim (PVC) is the storage requested by a user. Kubernetes +cluster will try to find a matching PV that matches the PVC request. +● PV can be pre-provisioned or dynamically provisioned. Dynamic provisioning is done +using a Storage Class created by an administrator. Storage Class defines different +levels of services that a storage system can provide. Kubernetes manages the life +cycle of PVs and PVCs. Data on a volume can persist beyond the lifetime of a pod +that consumes the volume. +``` +Kubernetes in-tree volume drivers can support the following functionalities: create and delete +volume, attach and detach volume, mount and unmount volume, and expand volume. + +https://kubernetes.io/docs/concepts/storage/ +https://kubernetes.io/docs/concepts/storage/volumes/#types-of-volumes + +Kubernetes Storage SIG is in the process of moving these in-tree drivers out of tree, in favor +of CSI drivers. There is a design spec aiming to seamlessly migrating from in-tree drivers to +CSI which would allow CSI drivers to handle volume provisioning requests as a proxy for +in-tree drivers: + +https://github.com/kubernetes/enhancements/blob/master/keps/sig-storage/20190129-csi-mi +gration.md + +In Kubernetes 1.17 release, this CSI migration feature has been promoted to beta. Cloud +provider volume drivers will be the first ones targeted to move from in-tree to CSI. The plan +is to remove cloud provider in-tree drivers (AWS EBS, GCE PD, OpenStack Cinder, Azure, +and vSphere) in Kubernetes 1.21 release. After that, plans will be made to migrate other +in-tree drivers. + +##### 11.1.1.3 Docker Volume Driver Interface + +Docker volumes can be used to persist data in Docker. Docker provides a mechanism for +storage vendors to write a volume driver so that remote storage systems such as Amazon +EBS can be used to provide volumes for a docker container. This allows data volumes to + + +persist beyond the lifetime of a single Docker host. If a plugin registers itself as a +VolumeDriver when activated, it must provide the Docker Daemon with writable paths on the +host filesystem. The Docker daemon provides these paths to containers to consume. The +Docker daemon makes the volumes available by bind-mounting the provided paths into the +containers. + +Supported Docker volume driver interfaces include Create, Remove, Mount, Unmount, Path, +Get, List, and Capabilities. + +https://docs.docker.com/storage/ +https://docs.docker.com/engine/extend/plugins_volume/ + +##### 11.1.1.4 K8S Flexvolume + +Kubernetes Flexvolume provides interfaces to initialize a driver, to attach/detach a volume +to/from a host, and to mount/unmount a volume on/from the host. These functions will be +executed by the Kubelet component in Kubernetes. + +Flexvolume does not provide interfaces to provision/deprovision a volume. A dynamic +provisioner can be developed to provision/deprovision a volume and be used together with +the Flexvolume plugin. + +Flexvolume is also an out-of-tree plugin. Since the plan is to use out-of-tree CSI drivers in +the future, new features will not be added to support Flexvolume although existing features +in Flexvolume are still supported. + +https://github.com/kubernetes/community/blob/master/contributors/devel/flexvolume.md + +Note that there is an effort underway to move the core Kubernetes component images to +distroless. One side effect is that shell access (and possibly other common Linux utilities +you may depend on) is unavailable inside these containers. Flexvolume drivers requiring +master installation (in controller-manager) will have issues starting up if they depend on +these utilities. Note this doesn't impact drivers running on Kubelet only. + +#### 11.1.2 Frameworks and other tools + +_“Frameworks and other tools”_ are extensions of CO’s _“Control-Plane Interfaces”_. In addition +to provisioning and managing storage, this extended control plane can also support +discovery, automation, data protection, data migration, disaster recovery, monitoring, +analytics, performance tuning, and data lifecycle management, etc. + +Some examples of frameworks and other tools described in this section includeOpenSDS, +RookandVelero. + + +### 11.2 Application API + +Currently the Control-Plane Interfaces, the storage interfaces supported by COs, do not +include object stores, key value stores, and databases, although there is ongoing work in +Kubernetes trying to fill the gaps of object store support. Some Frameworks and Tools have +support for object stores, key value stores, and databases. Some examples will be given in +the following section. + +Note that there is an extension API called Service Catalog that enables applications running +in Kubernetes clusters to use external managed software offerings, such as a datastore +service offered by a cloud provider. + +https://kubernetes.io/docs/concepts/extend-kubernetes/service-catalog/ + +#### 11.2.1 Object Stores + +Some management interfaces provide a way to directly deploy object storage and allow + +object storage to be consumed by containers through the object interface (usually S3). + +Rook’s support of Minio is a good example of this. REX-Ray has integration with object + +storage as well. OpenSDS has built object storage support via S3 APIs. + +There are also ways to connect persistent volumes provisioned for containers to object store + +on premise or in the cloud. + +``` +● For cloud storage such as Google Cloud Persistent Disks or Amazon Elastic Block +Storage, a snapshot of a PVC for block storage will be uploaded to the object store +somewhere in the cloud as part of the snapshot creation process. +● Some other management interfaces provide a similar approach that uploads a +snapshot created for a block storage to an object store on premise or in the cloud. +● Some management interfaces also provide a separate backup API that takes a +volume or snapshot from a block storage and backs it up to an object store. +○ At the time of this writing, there are ongoing discussions in Kubernetes to +provide a separate backup API that could backup a volume to a remote +backup device such as an object store. +● At the time of this writing, there is ongoing work in Kubernetes that allows a S3 +bucket to be provisioned as a first class resource, similar to how a persistent volume +is provisioned. +``` + +#### 11.2.2 Key Value Stores + +It is possible for a management interface to provide a way to deploy and manage key value + +stores, similar to how databases can be deployed and managed by the management + +interface. + +#### 11.2.3 Databases + +Management interface can provide a way to deploy and manage databases. For example, + +Rook provides an operator to deploy and manage CockroachDB andYugabyteDBclusters. + +Another CNCF storage project Vitess (https://vitess.io)also provides an operator to manage + +MySQL clusters. + + +## 12 Appendix + +### 12.1 Document History + +Initially, the document was structured based on classes of storage type which are +categorised by the way the storage is consumed e.g. block, file or object. This did not +provide a useful way to compare and contrast their attributes and how they are utilised in +production as most storage systems have many layers and are formed of multiple +components. While the data access interface (like block or file) might affect how the data is +consumed and how it might failover between nodes, it does not effectively define attributes +such as data protection, consistency, or durability. + +As a further complication, many commonly used systems are layered storage systems +where, for example, a filesystem may be built on an object store (e.g. CephFS), or a block +store may be built on a distributed filesystem (e.g. gluster block storage). This meant that +the way the storage is accessed did not usefully define the attributes that an application +cared about (such as the durability, data protection or some of the performance +characteristics of the overall system), as those attributes are defined at other layers in the +stack. + +### 12.2 Consensus Protocols + +Consensus protocolsprovide reliable agreement amonga group of potentially faulty +distributed processes on a single data value or a replicated log. They are commonly used to +decide whether to commit a data change transaction, for leader election, state machine +replication, load balancing, clock synchronization and others in distributed systems. The two +most popular (families of) consensus algorithms are Multi-Paxos and Raft, both of which +have been formally proven correct (for practical uses, with some caveats). Both rely on a +single elected leader, and (typically) agreement by a strict majority of participants (e.g. for 5 +participants, at least 3 must explicitly agree). Raft is considered simpler to understand and +implement than Multi-Paxos. Other ad-hoc attempts at consensus algorithms are notoriously +prone to edge case failures. + +#### 12.2.1 Paxos + +Paxosis arguably the oldestformally studiedfamilyof consensus algorithms. It is +considered highly robust when implemented properly, butchallenging to implement correctly +for practical uses. + + +#### 12.2.2 Raft + +Raftwas developed about a decade after Paxos, toaddress the issues mentioned above. It +has become widely used, and forms the basis of, amongst others, the popularetcd +cloud-native key-value store, andConsuldistributedservice mesh. + +#### 12.2.3 Two-phase Commit (“2PC”) + +2PCis a specialized form of consensus protocol usedfor coordination between participants +in a distributed atomic transaction to decide on whether to commit or abort (roll back) the +transaction. 2PC is not resilient to all possible failures, and in some cases, outside (e.g. +human) intervention is needed to remedy failures. Also, it is a blocking protocol. All +participants block between sending in their vote (see below), and receiving the outcome of +the transaction from the co-ordinator. If the co-ordinator fails permanently, participants may +block indefinitely, without outside intervention. In normal, non-failure cases, the protocol +consists of two phases, whence it derives its name: + +1. The commit-request phase (or voting phase), in which a coordinator requests all + participants to take the necessary steps for either committing or aborting the + transaction and to vote, either "Yes" (on success) , or "No" (on failure) +2. The commit phase, in which case the coordinator decides whether to commit (if all + participants have voted "Yes") or abort, and notifies all participants accordingly. + +#### 12.2.4 Three-phase Commit (“3PC”) + +3PCadds an additional phase to the 2PC protocol toaddress the indefinite blocking issue +mentioned above. But 3PC still cannot recover from network segmentation, and due to the +additional phase, requires more network round-trips, resulting in higher transaction latency. + +### 12.3 Consistency, Coherence and Isolation + +The above three terms are commonly used in various different contexts to mean different +things in the fields of data stores and distributed systems. Without going into detail here, +suffice to say that, consistency in particular, is a widely misunderstood term, so it’s worth +thinking twice before assuming that you understand exactly what’s meant by a particular use +of the term. For example,ACID(Atomicity, Consistency,Isolation, Durability) properties and +theCAP Theorem(concerning Consistency, Availabilityand Partition-tolerance) are both +widely used terms, and many people assume that they understand what these terms mean. +But considerably fewer people realise that “Consistency” means quite different things in +those two contexts. For further details,WikipediaandIrene Zhang’s musingprovide good +starting points. + +#### 12.3.1 ACID + +With the above caveats, for data storage systems, Atomicity, Consistency, Isolation and +Durability are generally considered to mean: + + +1. Atomicity: a guarantee that each transaction across multiple data items is treated as + a single "unit", which either succeeds completely, or fails completely, even in the case + of various failures including machine crashes and network errors. +2. Consistency: Usually understood to mean guarantees about whether a transaction + started in the future can necessarily see the effects of all transactions committed in + the past. Also sometimes understood to be a guarantee that a transaction can only + bring the data from one valid state to another, while maintaining invariants (for + example that stock count cannot be less than zero, or that two customers with the + same id number cannot exist). +3. Isolation: guarantees that concurrent execution of transactions leaves the database + in the same state that would have been obtained if the transactions were executed + sequentially, in some order. +4. Durability: guarantees that once a transaction has been committed, it will remain + committed even in the case of a system failure (e.g., power outage or crash). This + usually means that completed transactions (or their effects) are recorded in + non-volatile memory. + +#### 12.3.2 The CAP Theorem + +The CAP Theoremstates that it is impossible for adistributed data store to simultaneously +provide more than two out of the following three guarantees: + +1. Consistency: Every read receives the most recent write or an error +2. Availability: Every request receives a response that is not an error +3. Partition tolerance: The system continues to operate despite an arbitrary number of + messages being dropped (or delayed) by the network between nodes + +In the absence of network failure both availability and consistency can be satisfied. CAP is +frequently misunderstood to mean that one has to choose to abandon one of the three +guarantees at all times. In fact, the choice is really between consistency and availability only +when a network partition or failure happens; at all other times, no trade-off has to be made. + +Database systems designed with traditional ACID guarantees in mind such as RDBMS +choose consistency over availability, whereas systems designed around the BASE +philosophy, common in the NoSQL movement for example, choose availability over +consistency. + +The PACELC theorem builds on CAP by stating that even in the absence of partitioning, +another trade-off between latency and consistency occurs. From 4ab35f3421b95ef6046b84b54386122fadba2077 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:01:38 +0700 Subject: [PATCH 02/59] update --- LICENSE | 201 ------------------ README.md | 168 +++++++++++---- design/.DS_Store | Bin 0 -> 6148 bytes ...7-4050a380-cdea-11eb-84b7-191c8e73aac9.png | Bin 0 -> 100486 bytes ...0-4181d080-cdea-11eb-928a-2e68ea1a4bee.png | Bin 0 -> 50122 bytes 5 files changed, 125 insertions(+), 244 deletions(-) delete mode 100644 LICENSE create mode 100644 design/.DS_Store create mode 100644 design/logo/122128977-4050a380-cdea-11eb-84b7-191c8e73aac9.png create mode 100644 design/logo/122128980-4181d080-cdea-11eb-928a-2e68ea1a4bee.png diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/README.md b/README.md index 1e525b6..8a466d6 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,156 @@ -# CNCF Storage TAG +# CNCF storage Technical Advisory Group -## Meetings + + +Cloud Native Storage logo + -The Storage Technical Advisory Group meets on the 2nd and 4th Wednesday of every month at 8AM PT (USA Pacific): +## Quick links -Join from PC, Mac, Linux, iOS or Android: https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09 +- [Meeting Information](#meeting-times) +- [Slack Information](#communications) +- [New Members](#new-members) +- [Members](#members) -Or iPhone one-tap (US Toll): +16465588656,158580155# or +14086380968,158580155# +## Objective -Or Telephone: Dial: +1 646 558 8656 (US Toll) or +1 408 638 0968 (US Toll) Meeting ID: 158 580 155 International numbers available: https://zoom.us/zoomconference?m=0gvI03dCdRnx6WENPzdNhioORGmhVwYo +STAG facilitates collaboration to discover and produce resources that enable +secure access, policy control, and safety for operators, administrators, +developers, and end-users across the cloud native ecosystem. -## Mailing list and minutes +## Background -Mailing list: https://lists.cncf.io/g/cncf-tag-storage +“Cloud Native” is open source cloud computing for applications — a complete +trusted toolkit for modern architectures. There are multiple projects which +address key parts of the problem of providing access controls and addressing +safety concerns. Each of these adds value, yet for these technical solutions to +be capable of working well together and manageable to operate they will need a +minimal shared context of what defines a secure system architecture. -(note: the old WG mailing list is here: https://groups.google.com/forum/#!forum/cncf-wg-storage) +## Vision -Meeting minutes are recorded here: https://bit.ly/cncf-storage-sig-minutes +There is a future where operators, administrators and developers feel confident +creating new cloud native applications. They use cloud technologies with clear +understanding of risks and the ability to validate that their storage policy +decisions are reflected in deployed software. +We envision that there could exist an ecosystem of tools that can simplify the +experience of cloud native operators, administrators and developers, including: -## CNCF Storage TAG Charter +1. System storage architecture that understands and accommodates the ever +growing heterogeneity of systems and provides a framework to protect resources +and data while servicing their users. +2. Common vocabulary and open source libraries that make it easy for developers +to create and deploy apps that meet system storage requirements. +3. Common libraries and protocols that enable people to reason about the +storage of the system, such as auditing and explainability features. -The charter is available here: https://github.com/cncf/tag-storage/blob/master/storage-charter.md +## Governance +[STAG charter](governance/charter.md) outlines the scope of our group +activities, as part of our [governance process](governance) which details how we +work. -## CNCF Storage Landscape Whitepaper +## Communications -The whitepaper documents the storage landscape by clarifying the terminology used in the storage space including: +Anyone is welcome to join our open discussions of STAG projects and share news +related to the group's mission and charter. Much of the work of the group +happens outside of storage TAG meetings and we encourage project teams to share +progress updates or post questions in these channels: -- The attributes of a storage system such that an end-user can understand the appropriate capabilities that might be required by an application or architectural pattern. -- The layers in a storage solution (or service) with a focus on terminology and how they impact the defined attributes covering the container, orchestrator, transport, topology, virtual/physical, data protection, data services and the non-volatile layers. -- The data access interfaces in terms of volume (including block, file system and shared file system) and application API (including object, KV and database) as high level groupings. -- Separate sections with further detail on Block Storage, File systems, Object Storage and Key Value Stores. -- The management interfaces needed to orchestrate the storage layers to facilitate composability, dynamic provisioning and self service management. +Group communication: -The whitepaper is available here: http://bit.ly/cncf-storage-whitepaper +- [Email list](https://lists.cncf.io/g/cncf-tag-storage) +- [CNCF Slack](https://slack.cncf.io/) #tag-storage channel +Leadership: -## Current CNCF Storage Projects +- To reach the leadership team (chairs & tech leads), email + cncf-tag-storage-leads@lists.cncf.io +- To reach the chairs, email cncf-tag-storage-chairs@lists.cncf.io -### Graduated Projects +### Slack governance -- [etcd](https://github.com/etcd-io/etcd) -- [Rook](https://github.com/rook/rook) -- [TiKV](https://github.com/tikv/tikv) -- [Vitess](https://github.com/vitessio/vitess) +Refer to the [slack governance document](slack.md) for details on slack channels +and posting to the channels. -### Incubating Projects +## Meeting times -- [Dragonfly](https://github.com/dragonflyoss/Dragonfly) +Group meeting times are listed below: +The Storage Technical Advisory Group meets on the 2nd and 4th Wednesday of every month at 8AM PT (USA Pacific). -### Sandbox Projects +See the [CNCF Calendar](https://www.cncf.io/calendar/) for calendar invites. -- [ChubaoFS](https://github.com/chubaofs/chubaofs) -- [Longhorn](https://github.com/longhorn/longhorn) -- [OpenEBS](https://github.com/openebs) -- [Pravega](https://github.com/pravega/pravega) -- [Piraeus](https://github.com/piraeusdatastore/piraeus) -- [Vineyard](https://github.com/v6d-io/v6d) +[Meeting minutes and +agenda](https://docs.google.com/document/d/170y5biX9k95hYRwprITprG6Mc9xD5glVn-4mB2Jmi2g/) -## Operating Model +### Zoom Meeting Details -This TAG follows the [standard operating -guidelines](https://github.com/cncf/toc/blob/master/sigs/cncf-sigs.md#operating-model) -provided by the TOC unless otherwise stated here. + +Meeting Link: +[https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09) -**Current TOC Liaison:** Erin Boyd, Saad Ali +One tap mobile: -**Co-Chairs:** Alex Chircop, Quinton Hoole, Xing Yang +| Location | Number | +| --- | --- | +| US - New York | +16465588656,158580155# | +| US - ??? | +14086380968,158580155# | -**Tech Leads:** Raffaele Spazzoli, Luis Pabon, Sheng Yang, Nick Connolly +Dial by your location: -**Other named roles:** None at present; will be identified and staffed as needed. +| Location | Number | +| --- | --- | +| US - New York | +1 646 558 8656 | +| US - San Jose | +1 669 900 6833| +| US - Toll-free | 877 369 0926 | +| US - Toll-free | 855 880 1246 | +| Australia - Toll-free | 158 580 155 | + +Or [find your local number](https://zoom.us/u/alwlmxlNn). + +Meeting ID: 737 567 7271 + +## Gatherings + +Please let us know if you are going and if you are interested in attending (or +helping to organize!) a gathering. Create a [github +issue](https://github.com/cncf/tag-storage/issues/new) for an event and add to +list below: + +- KubeCon + CloudNativeCon, Europe May 16-20 2022 + +[Past events](past-events.md) + +## New members + +If you are new to the group, we encourage you to check out our [New Members Page](NEW-MEMBERS.md) + +## Related groups + +There are several groups that are affiliated to or do work and cover topics relevant + to the work of storage TAG. These can be seen [here](governance/related-groups/) + +## History + +- TAG-storage - renamed STAG ([TOC Issue + #549](https://github.com/cncf/toc/issues/549)) +- SAFE WG - renamed to CNCF storage TAG +- [(Proposed) CNCF Policy Working Group](/policy-wg-merging.md) - Merged into + SAFE WG + +## Members + + +### Chairs + +- Alex Chircop +- Quinton Hoole +- Xing Yang + +### Tech Leads + + - Raffaele Spazzoli + - Luis Pabon + - Sheng Yang + - Nick Connolly diff --git a/design/.DS_Store b/design/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..66d61cd49dcd8c99b4296db201445dd627274d18 GIT binary patch literal 6148 zcmeH~u?oUK42Bc!Ah>jNyu}Cb4USTupfBJcxQGQo=X-Sj*MTMLaT@=ne&%Sq<@biJJC%Lz5BFXF7N;k`8bu}vWX5+DH*AORBi zAp&-9!&d96j3ht;B=96)--iS@&7q~Le>xC+1b}uZyJ79K1T}(S!u1*@b}wNT4CGta)$u{~rEn{%=~Ck^l+( z83FCaX&mrUaksv`p4AUgwRM3*{W!wQPXH3TiZ^gK>?d15b7-lG3XDGjj)8#$zDnQ$ Dtxgie literal 0 HcmV?d00001 diff --git a/design/logo/122128977-4050a380-cdea-11eb-84b7-191c8e73aac9.png b/design/logo/122128977-4050a380-cdea-11eb-84b7-191c8e73aac9.png new file mode 100644 index 0000000000000000000000000000000000000000..9aba8d6cad6efe6a467e0bd3ca5dbd93db49fa58 GIT binary patch literal 100486 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

nNW<&ba?6LrEy48@9@M>RhysAN`Fx< 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

Dj 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 literal 0 HcmV?d00001 From cb7406ad457bf8c72c80d463d973805507f81841 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:04:07 +0700 Subject: [PATCH 03/59] update --- README.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/README.md b/README.md index 8a466d6..c880b53 100644 --- a/README.md +++ b/README.md @@ -131,14 +131,6 @@ If you are new to the group, we encourage you to check out our [New Members Page There are several groups that are affiliated to or do work and cover topics relevant to the work of storage TAG. These can be seen [here](governance/related-groups/) -## History - -- TAG-storage - renamed STAG ([TOC Issue - #549](https://github.com/cncf/toc/issues/549)) -- SAFE WG - renamed to CNCF storage TAG -- [(Proposed) CNCF Policy Working Group](/policy-wg-merging.md) - Merged into - SAFE WG - ## Members From 27dc281fad2fca6d9345330f846e525a8cebe324 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:12:00 +0700 Subject: [PATCH 04/59] update --- .github/settings.yml | 3 ++ CODE-OF-CONDUCT.md | 124 +++++++++++++++++++++++++++++++++++++++++++ CODEOWNERS | 19 +++++++ 3 files changed, 146 insertions(+) create mode 100644 CODE-OF-CONDUCT.md create mode 100644 CODEOWNERS diff --git a/.github/settings.yml b/.github/settings.yml index 32910f6..bf421cf 100644 --- a/.github/settings.yml +++ b/.github/settings.yml @@ -37,3 +37,6 @@ collaborators: - username: lpabon permission: admin + + - username: dutchshark + permission: admin diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md new file mode 100644 index 0000000..40147b6 --- /dev/null +++ b/CODE-OF-CONDUCT.md @@ -0,0 +1,124 @@ +# Code of Conduct + +We follow the [CNCF Code of Conduct][cncf-coc]. + +As part of our pledge to respect all people, in both live in-person and online +interactions, we are committed to providing a friendly, safe and welcoming +environment for all, regardless of gender, gender identity and expression, +sexual orientation, disability, physical appearance, body size, race, religion, +native language, operating system choice, current software stack or prior +experience. + +In keeping with this commitment, we offer the following guidelines: + +* Welcome newcomers at any stage of expertise. + * Everyone has something to contribute. + * Everyone deserves access to materials and community that will help them + learn. + * As long as an individual can be respectful and not disruptive to other + participants, they deserve to participate. +* Provide open and free material. +* Be kind and courteous. + * Interpret the arguments of others in good faith, offering private + constructive feedback when communication style bears improvement. + * Leave space for quieter voices. +* Consider who is not in the room. + * Invite participation from experts or user community representatives + outside of the working group. + * Participate in online forums to be inclusive of those who cannot attend + meetings. +* Work performed within this group, either finalized or in draft, is to be + used in accordance with the group [Mission and + Charter][charter], + the open source license, and to be used for the equal benefit of all + members of the community. Further information on use of work may be found + in [Security Reviews: + Outcome][review-outcome] + +## Incident handling and escalation + +Content for the purposes of the code of conduct as well as incident is defined +not only as published or draft content but also online discourse, such as slack +messages or emails, and interactions at in-person events. If an incident +involving community conduct occurs, please follow the guidelines below on how to +handle and report the issue: + +* If you see content that clearly does not meet the official Code of Conduct, + please send an e-mail to the Co-Chair/TL mailing list + (cncf-tag-security-leads@lists.cncf.io) and the creator of the content. (For + more details refer to the [CNCF Code of Conduct][cncf-coc]). If it is + regarding a co-chair, reach out to the two other chairs directly if you are + uncomfortable using the mailing list. +* If you are uncomfortable with a piece of content (but it may not necessarily + violate the code of conduct), we suggest sending a private message to the + content owner expressing your concerns. If this is not resolved, you may wish + to request the help of a Co-Chair/TL via cncf-tag-security-leads@lists.cncf.io + to help mediate the situation. +* Discussions about these potential code of conduct violations and concerns are + important, and there are great avenues to discuss them. This includes bringing + up concerns to the [CNCF TOC][cncf-toc] (which can be done through discussion + with Security TAG leadership) or talking to Security TAG leadership about + moderating a post. To help ensure that we can give focus to these issues and + not tangle them up with technical discussions, we should keep these + discussions separate from channels which are focused around technical + exchange. + +For content creators: + +* Content must strive to remain _on-topic_, particularly where video and images + are provided. Use of emojis and gifs as responses are content in and of + themselves need to be relevant to the particular post. For examples please + refer to the reference section below. +* If you receive a notice about a piece of content you've created, please seek + to understand that in some cases you may not agree with a decision or request. + Being able to practice tolerance and mindfulness is just as important to keep + the community working towards a common goal. The mediation and resolution + system that we have in place aims to handle this with the hope that both + content creators and consumers are heard and represented. These situations are + not zero sum, and often we aim to reach an agreeable compromise where a + discussion of a topic can happen without making members of the community feel + uncomfortable. +* In the event where there is disagreement, we have some guidelines that can + help prevent escalation + * Do not bring the discussion out of context. + * Do not rationalize the actions you take. We do not expect anyone to + understand what everyone else feels towards certain things (e.g. the same + gestures in certain cultures are good and bad in others). Understand that + something may not be wrong, but it may affect others. + +In summary, be nice, inclusive and welcoming. Misunderstandings, mistakes and +oversights happen, and when they do, there are some good ways to go about having +a conversation with colleagues to make our community inclusive and welcoming to +everyone! + +## Reference + +Example of reasonable gif: Group is close to wrapping up deliverable, as part of +an update, the lead posts a "nearly done" gif. + +Example of reasonable emoji: Post in the group uses emojis to break up content +and is relevant to the item discussed or used in response to post to signify +voting, opinion, acceptance, emotion, etc. + +Example of reasonable image and video: Posting a picture of a community meetup* +or posting a recording to a presentation on cloud native security. + +*Note: Many events within the community may include content which is only +acceptable depending on the context it is used in. An example of this is +alcohol consumption. It is important that when posting photos and videos members +consider if the post glorifies alcohol or alcohol is the primary subject of the +content (unacceptable) or if the alcohol is happenstance occurrence in the image +(acceptable). + +## Inspiration + +The above guidelines are inspired by and borrowed from other communities: + +* +* +* + +[cncf-coc]: https://github.com/cncf/foundation/blob/master/code-of-conduct.md +[charter]: https://github.com/cncf/tag-security/blob/main/governance/charter.md +[review-outcome]: https://github.com/cncf/tag-security/tree/main/assessments#outcome +[cncf-toc]: https://www.cncf.io/people/technical-oversight-committee/ diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..a289a8d --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,19 @@ +# CODEOWNERS file indicates code owners for certain files +# +# Code owners will automatically be added as a reviewer for PRs that touch +# the owned files. +# +# The main branch will be configured to require at least 1 approval from a +# code owner for a PR. +# +# Actions by community members should follow the following guidelines: +# https://github.com/cncf/tag-storage/blob/main/governance/github.md + +# Global code owners: co-chairs, tech leads +# Note: Tech leads can perform approval and merging of PRs, with the intent +# of delegating some responsibilities from co-chairs. +# +# Tech lead, Chair Emeritus roles should exercise discretion in defering final +# approval for a PR to a co-chair. +# This includes major edits or new introductions to the repository. +* @chira001 @sougou @quinton-hoole @erinboyd @xing-yang @saad-ali @lpabon @dutchshark From 9fbf561363f594a7aae7b829faa1305fa16fce73 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:16:55 +0700 Subject: [PATCH 05/59] update --- governance/related-groups/README.md | 53 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 28 deletions(-) diff --git a/governance/related-groups/README.md b/governance/related-groups/README.md index d78a495..6f22649 100644 --- a/governance/related-groups/README.md +++ b/governance/related-groups/README.md @@ -1,76 +1,73 @@ - - # Related groups These are groups that are affiliated to or do work and cover topics relevant to -the work of Security TAG. +the work of Storage TAG. ## CNCF * [CNCF TAGs](https://github.com/cncf/toc#technical-advisory-groups): Technical Advisory Groups * [App-Delivery](https://github.com/cncf/tag-app-delivery) - * Security TAG members: + * Storage TAG members: * [Contributor Strategy](https://github.com/cncf/tag-contributor-strategy) - * Security TAG members: + * Storage TAG members: * [Network](https://github.com/cncf/tag-network) - * Security TAG members: + * Storage TAG members: * [Observability](https://github.com/cncf/tag-observability) - * Security TAG members: + * Storage TAG members: * [Runtime](https://github.com/cncf/tag-runtime) - * Security TAG members: + * Storage TAG members: * [Storage](https://github.com/cncf/tag-app-delivery) - * Security TAG members: + * Storage TAG members: * [CNCF TOC](https://github.com/cncf/toc): Technical Oversight Committee - * Security TAG members: @justincormack, @lizrice + * Storage TAG members: ## Kubernetes * [Kubernetes Policy Working Group](https://github.com/kubernetes/community/tree/master/wg-policy) - * Security TAG members: @rficcaglia + * Storage TAG members: * [Kubernetes SIG-Auth](https://github.com/kubernetes/community/tree/master/sig-auth) - * Security TAG members: + * Storage TAG members: -* [Kubernetes SIG-Security](https://github.com/kubernetes/community/tree/master/sig-security) - * Security TAG members: @pushkarj +* [Kubernetes SIG-Storage](https://github.com/kubernetes/community/tree/master/sig-storage) + * Storage TAG members: ## Industry -* [Cloud Security Alliance Working Groups](https://cloudsecurityalliance.org/research/working-groups/) - * Security TAG members: @achetal01 +* [Cloud Storage Alliance Working Groups](https://cloudstoragealliance.org/research/working-groups/) + * Storage TAG members: * [IEEE 7009](https://standards.ieee.org/develop/project/7009.html): Standard for Fail-Safe Design of Autonomous and Semi-Autonomous Systems Working Group - * Security TAG members: + * Storage TAG members: * [IEEE P1915.1](https://web.archive.org/web/20180729062624/https://standards.ieee.org/develop/project/1915.1.html) (Warning: Archive Link): Standard for Software Defined Networking and Network - Function Virtualization Security - * Security TAG members: + Function Virtualization Storage + * Storage TAG members: -* [IEEE P2675 DevOps Security](https://standards.ieee.org/develop/project/2675.html) - * Security TAG members: +* [IEEE P2675 DevOps Storage](https://standards.ieee.org/develop/project/2675.html) + * Storage TAG members: * [IEEE P7000](https://standards.ieee.org/develop/project/7000.html): Series of interrelated standards in development, including privacy, transparency, etc. related to ethical concerns in autonomous systems - * Security TAG members: + * Storage TAG members: * [IEEE Product Safety Engineering Society](http://ewh.ieee.org/soc/pses/) - * Security TAG members: + * Storage TAG members: * [NIST Big Data WG](https://bigdatawg.nist.gov/) - * Security TAG members: + * Storage TAG members: -* [NIST Computer Security Resource Center](https://csrc.nist.gov/) - * Security TAG members: +* [NIST Computer Storage Resource Center](https://csrc.nist.gov/) + * Storage TAG members: * [OpenSSF SLSA Maintainers](https://slsa.dev/) - * Security TAG members: @mlieberman85 + * Storage TAG members: ## Don't see a group mentioned or notice a group that needs an update ? From 429d18a186464770d98471b503823717b381f292 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:17:13 +0700 Subject: [PATCH 06/59] update --- governance/communications/README.md | 6 ------ governance/communications/call-to-action.md | 20 -------------------- 2 files changed, 26 deletions(-) delete mode 100644 governance/communications/README.md delete mode 100644 governance/communications/call-to-action.md diff --git a/governance/communications/README.md b/governance/communications/README.md deleted file mode 100644 index 133e20d..0000000 --- a/governance/communications/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Communications - -This folder contains templates and processes on communicating with the Security TAG community. -| Templates | Use | -| -- | -- | -| [Call to action](call_to_actions.md) | For papers, projects, and other efforts sent to the [mailing list](https://lists.cncf.io/g/cncf-tag-security) diff --git a/governance/communications/call-to-action.md b/governance/communications/call-to-action.md deleted file mode 100644 index d4d6a4c..0000000 --- a/governance/communications/call-to-action.md +++ /dev/null @@ -1,20 +0,0 @@ -# Call to Action Template - -## Security Enthusiasts! -CNCF Security Tag is looking to embark on another tech security adventure! [2 sentences explanation of what the thing is]. -[background about why this exists, about 2-3 sentences]. We'd like some help. - -## We want you! -This is where you (yes you!) come in. We're looking for community members and colleagues [review/contribute] to this [what the thing is called], tracked under [issue number and link to issue], so that we can provide the cloud native community with [what the intent is]! -[what this means for the community]. We hope you can join us on this significant contribution opportunity. [If needed by a specific date, say so here]. - -## Ready to dive in? -Comment on the issue [relink the issue] (#XXX) and join the [link to the slack channel] Slack channel! - -## References -[Relink everything again here with what it is and the URLs blown out (not embedded)] - -Examples: -* https://lists.cncf.io/g/cncf-tag-security/message/58 -* https://lists.cncf.io/g/cncf-tag-security/message/54 -* https://lists.cncf.io/g/cncf-tag-security/message/53 From 8c5407503f2d5be1bc9d97c8e64e31c5e46f1778 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:18:41 +0700 Subject: [PATCH 07/59] update --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index c880b53..bafa189 100644 --- a/README.md +++ b/README.md @@ -87,8 +87,7 @@ agenda](https://docs.google.com/document/d/170y5biX9k95hYRwprITprG6Mc9xD5glVn-4m ### Zoom Meeting Details -Meeting Link: -[https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09) +[Meeting Link](https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09) One tap mobile: From ae4e9dafaa6285a5481ffe177e59528794d984a0 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:19:55 +0700 Subject: [PATCH 08/59] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bafa189..7f6a036 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ The Storage Technical Advisory Group meets on the 2nd and 4th Wednesday of every See the [CNCF Calendar](https://www.cncf.io/calendar/) for calendar invites. [Meeting minutes and -agenda](https://docs.google.com/document/d/170y5biX9k95hYRwprITprG6Mc9xD5glVn-4mB2Jmi2g/) +agenda](https://bit.ly/cncf-storage-sig-minutes) ### Zoom Meeting Details From f292e00a511a303a303e2d509ed76db1abaffa40 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 03:30:00 +0700 Subject: [PATCH 09/59] update --- CONTRIB/README.md | 37 ++++++++++++ CONTRIB/first-time-contributions.md | 63 +++++++++++++++++++++ CONTRIB/pull-request-review.md | 88 +++++++++++++++++++++++++++++ CONTRIB/writing-style.md | 42 ++++++++++++++ NEW-MEMBERS.md | 29 ++++++++++ 5 files changed, 259 insertions(+) create mode 100644 CONTRIB/README.md create mode 100644 CONTRIB/first-time-contributions.md create mode 100644 CONTRIB/pull-request-review.md create mode 100644 CONTRIB/writing-style.md create mode 100644 NEW-MEMBERS.md diff --git a/CONTRIB/README.md b/CONTRIB/README.md new file mode 100644 index 0000000..1c8263c --- /dev/null +++ b/CONTRIB/README.md @@ -0,0 +1,37 @@ +# Contributing + +We aspire to create a welcoming environment for collaboration on this project +and ask that all contributors do the same. For more details, see our [code of +conduct](/CODE-OF-CONDUCT.md). + +This document covers contributions to this git repository. Please review +[governance](/governance) for our mission, charter, and other operations. + +## Open source + +While this repository does not contain open source code, we manage content +contributions following open source practice, as detailed below. + +All contributions to this project will be released under open source license as +described in [LICENSE.md](/LICENSE.md). By submitting a pull request (PR), +you are agreeing to release the PR contents under this license. + +## Communication + +Anyone interested in contributing should join the mailing list and other +[communication channels](/README.md#Communications) + +We strongly encourage and support all our members to participate in anyway +they can. Not everyone can participate in the regularly scheduled live meetings, +so we strive to make our processes friendly for people to be active contributors +through asynchronous communication and contributions to our documentation +in this repository. + +## Github pull requests and issues + +If you are new to the group, [reviewing pull requests](pull-request-review.md) +and commenting on issues is a great way to get involved! + +When creating or reviewing pull requests, please refer to the +[writing style guide](writing-style.md) to help maintain consistency across +all of our documents. diff --git a/CONTRIB/first-time-contributions.md b/CONTRIB/first-time-contributions.md new file mode 100644 index 0000000..edcca27 --- /dev/null +++ b/CONTRIB/first-time-contributions.md @@ -0,0 +1,63 @@ +# First time contributors + +We happily welcome our new contributors to this +community. If you are contributing to the CNCF +and/or TAG-Security for the first time it is +okay if you feel overwhelmed. We, as a +community, are always there to help you +with any problems you are facing. +Open source is about collaboration and +we are always there to support +each other. + +## Getting involved and contributing + +As a new contributor, you might find +difficulties in understanding where to start. +Don't worry! We got you. + +In the interest of getting more new people +involved, we have issues marked as +[good-first-issues](https://github.com/cncf/tag-security/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). +These are issues that have a smaller scope, +and are great to start with. + +The good-first-issues should also provide +you details on how to get things resolved or +how to proceed. If you find it is missing or +incomplete please tag the person who created +the issue and let them know. + +## Before your first PR + +Before you make you first PR, we would like +you to go through the below resources +for your understanding: + +- [How to submit contributions](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution) +- [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests) + +Our PR also follows a particular writing +style. Checkout the [style guide](https://github.com/cncf/tag-security/blob/main/CONTRIBUTING/writing-style.md). + +## Other ways of communication + +If have additional questions or +doubts about a certain issue. +Please reach out and we will +be happy to discuss. + +You can reach us via our [Mailing List](mailto:cncf-tag-security-leads@lists.cncf.io). + +You can also reach out on our slack [#tag-security-governance](https://cloud-native.slack.com/archives/C0230RW8V2T). + +### You can reach out to our members + +Our members list can be found +[here](https://github.com/cncf/tag-security#members). + +## After PR merge + +Once you have successfully get your +first PR merged, you can add your name +to our Members section in [README.md](https://github.com/cncf/tag-security#members). diff --git a/CONTRIB/pull-request-review.md b/CONTRIB/pull-request-review.md new file mode 100644 index 0000000..6034390 --- /dev/null +++ b/CONTRIB/pull-request-review.md @@ -0,0 +1,88 @@ +# Pull Request (PR) reviews + +Except for urgent or very small grammar or spelling fixes, such as simple +changes discussed below, we leave pull requests open for at least 24 hours, so +that others have the chance to review/comment. + +### Favorable review + +A favorable review is determined by the contents of the PR complying with the +contributing guide, the writing style, and agreement the contents align with the +TAG's goals, objectives, and scope. It is anticipated that PRs submitted, with +the exception of spelling and grammar changes, have been discussed with members +of the TAG via slack or issues. + +#### Nits + +Nits are minor suggestions and changes that are strongly encouraged to be +identified and resolved to provide consistency in the repo. Preferential +language or language that is a matter of preferred usage are not considered +nits. + +##### Example of preferential language + +> They use cloud technologies with clear understanding of risks and the ability +> to validate that their security policy decisions are reflected in deployed +> software. + +"Ability" is a human oriented term, "capability" is more technical and may be +more appropriate. + +Suggestion: +> They use cloud technologies with clear understanding of risks and the +> capability to validate their security policy decisions are reflected in +> deployed software. + +##### Example of a nit + +> They use cloud-native technologies with clear understanding of risks and the +> ability to validate that their security policy decisions are reflected in +> deployed software. + +Per TOC definition of cloud native, it is not hyphenated. + +correction: +> They use cloud native technologies... + +#### Simple changes + +Simple changes are defined as: + +* spelling, typo, grammar +* clarifications, minor updates + +A person without access, other than the PR author, can and _is_ encouraged to +review a PR and comment/+1 that they have done a review and found it favorable. +A person with access, including the PR author, may then perform the merge. + +A person with access, other than the PR author, can both review **and** merge a +PR if found favorable after review. + +[Code owners](/CODEOWNERS) need to be at least one concurring reviewer or the +merging party. + +#### Significant changes + +Significant changes are defined as: + +* major changes to the repo +* extensive changes to repo contents +* other items as determined by the Technical Leads and Co-Chairs (to be updated + here as they occur) + +A person without access, other than the PR author can and _is_ encouraged to +review a PR and comment/+1 that they have done a review and found it favorable. +A second person with access, other than the PR Author, must also review the PR +and provide concurrence prior to merging. + +Two persons with access, other than the PR author, must review the PR and +provide concurrence, the last of which should perform the merge. + +[Code owners](/CODEOWNERS) need to be at least one concurring reviewer or the +merging party. + +### Merging pull requests + +PRs may be merged after at least one review as occurred, dependent on the type +of changes reflected in the PR. The merging party needs to verify a review has +occurred, the PR is in alignment with this guide, and is in scope of the TAG. \ No newline at end of file diff --git a/CONTRIB/writing-style.md b/CONTRIB/writing-style.md new file mode 100644 index 0000000..90bb2ea --- /dev/null +++ b/CONTRIB/writing-style.md @@ -0,0 +1,42 @@ +# Writing style + +Consistency creates clarity in communication. + +If you find yourself correcting for consistency, please propose additional style +guidelines via pull request to this document. Feel free to add references to +good sources for content guidelines at the bottom of this guide. + + +## Common terms + +* When referring to users and use cases, ensure consistency with + [use cases](/usecase-personas/) +* See [CNCF Style Guide][cncf-style] for common terms. Note that the following + terms are not hyphenated and all lower case, except for capitalizing the + first letter when at the beginning of a sentence: + * open source + * cloud native + +## Additional formatting + +* Headlines, page titles, subheads and similar content should follow sentence + case, and should not include a trailing colon. +* Paragraphs do not start with leading indent. +* Wrap lines at 80 characters, except where it would break a link. No need to + reformat the whole paragraph to make it perfect -- fewer diffs are easier + for reviewers. + +## File & directory naming conventions + +* Every directory should have a README.md with useful introductory text. +* All other file and directory names should be all lower case with dashes to + separate words. + +## Sources + + +* [OpenOpps Contribution Guide][openopps-style] +* [18F Content Guide](https://content-guide.18f.gov/) + +[cncf-style]: https://github.com/cncf/foundation/blob/master/style-guide.md +[openopps-style]: https://github.com/openopps/openopps-platform/blob/master/CONTRIBUTING.md diff --git a/NEW-MEMBERS.md b/NEW-MEMBERS.md new file mode 100644 index 0000000..fdbd1c4 --- /dev/null +++ b/NEW-MEMBERS.md @@ -0,0 +1,29 @@ +# New members + +The purpose of this plan is to ensure that you become familiar with the team and +know how you will contribute. The first step is to get yourself familiar with +our mission at [Storage TAG charter](governance/charter.md). + +New members are advised to: + +* Join the [CNCF Slack team](https://slack.cncf.io/), particularly + [#tag-storage](https://cloud-native.slack.com/archives/C6PK4RLF7) channel and + introduce yourself. +* Initially go through the following documents in the repository: + * [README.md](README.md) + * [CODE-OF-CONDUCT.md][coc] + * [first-time-contributions] + * [Use cases and personas][use-cases] +* Regularly join one of the [Zoom meetings][meeting-times] at least for the first + couple of months to get yourself up to speed. +* Here are multiple ways to get involved: + * Join the meeting as advised above and express your area of interests or if + you want to work on any specific issue. + * Express your thoughts or ask questions on an issue you find interesting. + * Choose an issue where [help is + needed](https://github.com/cncf/tag-storage/labels/help%20wanted) and + comment on it expressing interest. + +[meeting-times]: README.md#meeting-times +[coc]: CODE-OF-CONDUCT.md +[first-time-contributions]: CONTRIB/first-time-contributions.md From a878adf71b69710419269775db21f9a839f5a998 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 09:58:55 +0700 Subject: [PATCH 10/59] update --- governance/charter.md | 37 +---------------------------- governance/cncf-projects.md | 18 +++++++------- governance/related-groups/README.md | 2 +- 3 files changed, 10 insertions(+), 47 deletions(-) diff --git a/governance/charter.md b/governance/charter.md index 8bd6718..6eba69f 100644 --- a/governance/charter.md +++ b/governance/charter.md @@ -77,44 +77,9 @@ cloud-native environments through: - [TiKV](https://github.com/tikv/tikv) - [Vitess](https://github.com/vitessio/vitess) -# Interfaces With Other Related Groups - -* **Kubernetes Storage SIG** - is focussed towards - Kubernetes-specific storage abstractions, interfaces, and - implementations of these interfaces. We maintain close - communication with this Kubernetes SIG, with several individuals - actively involved in both. Our aim is to avoid unnecessary - duplication of effort by the two groups, and maintain clear an - consistent messaging by the two groups to our end user community - and projects. -* **CSI** - is focussed on defining an industry standard “Container - Storage Interface” (CSI) that will enable storage vendors to - develop a plugin once and have it work across a number of - container orchestration systems. Again, we maintain close - communication with this group, and avoid unnecessary duplication - of effort and inconsistent messaging wherever possible. -* **CNCF Security SIG** - works on the more general area of - cloud-native security including authentication, authorization, - encryption, accounting, auditing and related topics. We defer as - much as possible to this group to deal with general - security-related issues, and liaise closely with them on how to - deal with storage-specific security areas where these arise. -* **CNCF Apps SIG** (not yet fully formed) - will be focussed on the - development, deployment, operation and testing of cloud-native - applications. We collaborate with this SIG where this pertains to - Storage. -* **K8s Apps SIG** - has done some work on how Kubernetes apps use - storage, as well as how storage systems (including databases) may - be deployed on Kubernetes . We collaborate with Apps SIG and make - sure that important topics are well covered. -* **[Kubernetes Service Catalog SIG](https://github.com/kubernetes/community/tree/master/sig-service-catalog)**- - works on enabling external managed software offerings such as - datastore services offered by public cloud providers. - - # Operating Model -This SIG follows the [standard operating +This TAG follows the [standard operating guidelines](https://github.com/cncf/toc/blob/master/sigs/cncf-sigs.md#operating-model) provided by the TOC unless otherwise stated here. diff --git a/governance/cncf-projects.md b/governance/cncf-projects.md index 9b558a2..55ef1ec 100644 --- a/governance/cncf-projects.md +++ b/governance/cncf-projects.md @@ -1,19 +1,17 @@ ## CNCF Projects The CNCF TOC identifies specific project that provide capabilities related -to storage, including policy, identity, authentication, authorization, -auditing, compliance, cost management, etc. +to storage. These are known as "Storage Providers" and the TAG will prioritize review of each project's annual [storage assessment](/assessments). Current list of projects: +* [etcd](https://github.com/etcd-io/etcd) +* [ChubaoFS](https://github.com/chubaofs/chubaofs) +* [Longhorn](https://github.com/longhorn/longhorn) +* [OpenEBS](https://github.com/openebs) +* [Rook](https://github.com/rook/rook) +* [TiKV](https://github.com/tikv/tikv) +* [Vitess](https://github.com/vitessio/vitess) -* Falco -* Harbor -* in-toto -* Open Policy Agent -* Notary -* TUF -* SPIFFE -* SPIRE diff --git a/governance/related-groups/README.md b/governance/related-groups/README.md index 6f22649..4f2bd64 100644 --- a/governance/related-groups/README.md +++ b/governance/related-groups/README.md @@ -17,7 +17,7 @@ the work of Storage TAG. * Storage TAG members: * [Runtime](https://github.com/cncf/tag-runtime) * Storage TAG members: - * [Storage](https://github.com/cncf/tag-app-delivery) + * [Security](https://github.com/cncf/tag-security) * Storage TAG members: * [CNCF TOC](https://github.com/cncf/toc): Technical Oversight Committee From c9905515e31c7b3e23147d157de165051858a7fa Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:23:46 +0700 Subject: [PATCH 11/59] update --- storage-whitepaper/v2.md | 42 ++++++---------------------------------- 1 file changed, 6 insertions(+), 36 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index ac4d221..7c0dc36 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -2,7 +2,9 @@ ##### By Alex Chircop, Quinton Hoole, Clinton Kitson, Xiang Li, Luis, Pabón, Sugu Sougoumarne, Xing Yang [Public link to this document](https://bit.ly/cncf-storage-whitepaperV2) -- 1 Scope of this document Status: 03/07/2020 - final version +Status: 03/07/2020 - final version + +- 1 Scope of this document - 1.1 Goals - 1.2 Non-goals - 2 Introduction and document layout @@ -765,41 +767,9 @@ requests to store and retrieve data based on content or resource availability ### 5.4 Comparison between Object Stores, File Systems and Block Stores -``` -Data Access Interface Most suited Least suited -``` -``` -Block -● Availability -● Low latency performance -● Good throughput performance for individual workloads -``` -``` -● Capacity scaling -● Sharing data with multiple workloads simultaneously -``` -``` -Filesystem -● Sharing data with multiple workloads simultaneously -● Optimised throughput for aggregated workloads -``` -``` -● Strong file locking integrity when filesystems are shared -``` -``` -Object Store -● Availability -● Large capacities (PB scale) -● Durability -● Sharing data with multiple workloads simultaneously -● Optimised throughput for parallelised workloads -``` -``` -● Low Latency -performance -``` -_** The information in this table are generally accepted attributes and measurements for -object stores, file systems and block stores._ +Data Access Interface |Most suited |Least suited +--- | --- | ---| +Block | Availability, Low latency performance, Good throughput performance for individual workloads | Capacity scaling, Sharing data with multiple workloads simultaneously ### 5.5 Comparison between Local, Remote and Distributed Systems From 4e18345fc6546fdb373faf78494d937bcf33cf77 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:30:16 +0700 Subject: [PATCH 12/59] update --- storage-whitepaper/v2.md | 121 ++++----------------------------------- 1 file changed, 10 insertions(+), 111 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 7c0dc36..1e5666f 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -770,121 +770,20 @@ requests to store and retrieve data based on content or resource availability Data Access Interface |Most suited |Least suited --- | --- | ---| Block | Availability, Low latency performance, Good throughput performance for individual workloads | Capacity scaling, Sharing data with multiple workloads simultaneously +Filesystem | Sharing data with multiple workloads simultaneously, Optimised throughput for aggregated workloads | Strong file locking integrity when filesystems are shared +Object Store | Availability, Large capacities (PB scale), Durability. Sharing data with multiple workloads simultaneously, Optimised throughput for parallelised workloads | Low Latency performance +-** The information in this table are generally accepted attributes and measurements for object stores, file systems and block stores. ### 5.5 Comparison between Local, Remote and Distributed Systems -``` -Local Remote Distributed -``` -``` -Availability Limited by failure of components locally -and ability to failover. If a node fails, the local -storage is isolated to the local node. -``` -``` -May be limited by single points of failure. -Workloads can move to another -node and reconnect to the remote -storage. -``` -``` -Clients may access -numerous nodes, -and any storage -node failures can be -mitigated. -The additional -complexity of -distributed systems -may add operational -complexity which -may in turn affect -availability or the -ability to recover -errors. -``` -``` -Scalability Limited by local -architecture -(1 node; typically -TB) -``` -``` -Limited by -monolithic -architecture -(2-16 nodes; -typically 10s-100s of -TB) -``` -``` -Scale by adding -additional systems. -Topology enables -scale of both nodes -and supported -capacities. -(3-1000s nodes; -often supports PB) -``` -``` -Consistency Yes -(storage system -implementation is -easy) -``` -``` -Yes -(storage system -implementation is -harder with more -nodes) -``` -``` -Yes -(storage system -implementation is -hardest) -``` -``` -Durability Limited by local -components (less) -``` -``` -Limited by -monolithic -architecture (more) -``` -``` -Scaling out to -additional systems -increases durability -(most) -``` -``` -Performance Limited by local -components, can -benefit low-latency -applications -(100us-5ms, -GB/sec) -``` -``` -Similar to local, but -additional overhead -in network transport -(500us-5ms, -GB/sec) -``` -``` -Scaling out to -additional systems -increases -performance -(500us-5ms, -TB/sec) -``` +| Local | Remote | Distributed +--- | --- | --- | ---| + +Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. +The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. + + _** The information in this table are generally accepted attributes and measurements among local, remote, and distributed storage systems._ From eb5a589f19500b6a3e26434c4b3e2ec7d3357d3d Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:31:56 +0700 Subject: [PATCH 13/59] update --- storage-whitepaper/v2.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 1e5666f..9ccb081 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -777,10 +777,9 @@ Object Store | Availability, Large capacities (PB scale), Durability. Sharing da ### 5.5 Comparison between Local, Remote and Distributed Systems -| Local | Remote | Distributed ---- | --- | --- | ---| - -Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. + | Local | Remote | Distributed +--- | --- | --- | --- | +|Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. From 501472ad36f4170f0cf4dce89cee92e7b824a186 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:33:25 +0700 Subject: [PATCH 14/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 9ccb081..d14485a 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -777,7 +777,7 @@ Object Store | Availability, Large capacities (PB scale), Durability. Sharing da ### 5.5 Comparison between Local, Remote and Distributed Systems - | Local | Remote | Distributed +Comparing: | Local | Remote | Distributed --- | --- | --- | --- | |Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. From d129ddbe73fc1ee9de8bbc587deff740fb95fe96 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:34:18 +0700 Subject: [PATCH 15/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index d14485a..29778a8 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -777,7 +777,7 @@ Object Store | Availability, Large capacities (PB scale), Durability. Sharing da ### 5.5 Comparison between Local, Remote and Distributed Systems -Comparing: | Local | Remote | Distributed +|Local |Remote |Distributed --- | --- | --- | --- | |Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. From 7150fafe3727cd995e66e04e50a5ca53ee67f714 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:36:44 +0700 Subject: [PATCH 16/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 29778a8..2321258 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -778,7 +778,7 @@ Object Store | Availability, Large capacities (PB scale), Durability. Sharing da ### 5.5 Comparison between Local, Remote and Distributed Systems |Local |Remote |Distributed ---- | --- | --- | --- | +--- | --- | --- | ---| |Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. From 498206ee28d6e6c0468f953b44816b26954ebba1 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:38:27 +0700 Subject: [PATCH 17/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 2321258..9bff667 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -777,7 +777,7 @@ Object Store | Availability, Large capacities (PB scale), Durability. Sharing da ### 5.5 Comparison between Local, Remote and Distributed Systems -|Local |Remote |Distributed +...|Local |Remote |Distributed --- | --- | --- | ---| |Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. From 0fc0102a3db0e5a3892a1f766e24f456765013c7 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:43:55 +0700 Subject: [PATCH 18/59] update --- storage-whitepaper/v2.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 9bff667..ce42cff 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -772,17 +772,17 @@ Data Access Interface |Most suited |Least suited Block | Availability, Low latency performance, Good throughput performance for individual workloads | Capacity scaling, Sharing data with multiple workloads simultaneously Filesystem | Sharing data with multiple workloads simultaneously, Optimised throughput for aggregated workloads | Strong file locking integrity when filesystems are shared Object Store | Availability, Large capacities (PB scale), Durability. Sharing data with multiple workloads simultaneously, Optimised throughput for parallelised workloads | Low Latency performance - -** The information in this table are generally accepted attributes and measurements for object stores, file systems and block stores. ### 5.5 Comparison between Local, Remote and Distributed Systems ...|Local |Remote |Distributed --- | --- | --- | ---| -|Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated. -The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. - - +|Availability | Limited by failure of components locally and ability to failover. If a node fails, the local storage is isolated to the local node. | May be limited by single points of failure. Workloads can move to another node and reconnect to the remote storage. | Clients may access numerous nodes, and any storage node failures can be mitigated, The additional complexity of distributed systems may add operational complexity which may in turn affect availability or the ability to recover errors. +|Scalability | Limited by local architecture (1 node; typically TB) | Limited by monolithic architecture (2-16 nodes; typically 10s-100s of TB) | Scale by adding additional systems, Topology enables scale of both nodes and supported capacities. (3-1000s nodes; often supports PB) +|Consistency | Yes (storage system implementation is easy) | Yes (storage system implementation is harder with more nodes) | Yes (storage system implementation is hardest) +|Durability | Limited by local components (less) | Limited by monolithic architecture (more) | Scaling out to additional systems increases durability (most) +|Performance | Limited by local components, can benefit low-latency applications (100us-5ms, GB/sec) | Similar to local, but additional overhead in network transport (500us-5ms, GB/sec) | Scaling out to additional systems increases performance (500us-5ms, TB/sec) _** The information in this table are generally accepted attributes and measurements among local, remote, and distributed storage systems._ From 6d59920e3ec9767c6e3ee8bcf2424eea44761f1d Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:44:29 +0700 Subject: [PATCH 19/59] update --- storage-whitepaper/v2.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index ce42cff..9cd0553 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -772,6 +772,7 @@ Data Access Interface |Most suited |Least suited Block | Availability, Low latency performance, Good throughput performance for individual workloads | Capacity scaling, Sharing data with multiple workloads simultaneously Filesystem | Sharing data with multiple workloads simultaneously, Optimised throughput for aggregated workloads | Strong file locking integrity when filesystems are shared Object Store | Availability, Large capacities (PB scale), Durability. Sharing data with multiple workloads simultaneously, Optimised throughput for parallelised workloads | Low Latency performance + -** The information in this table are generally accepted attributes and measurements for object stores, file systems and block stores. ### 5.5 Comparison between Local, Remote and Distributed Systems @@ -783,6 +784,7 @@ Object Store | Availability, Large capacities (PB scale), Durability. Sharing da |Consistency | Yes (storage system implementation is easy) | Yes (storage system implementation is harder with more nodes) | Yes (storage system implementation is hardest) |Durability | Limited by local components (less) | Limited by monolithic architecture (more) | Scaling out to additional systems increases durability (most) |Performance | Limited by local components, can benefit low-latency applications (100us-5ms, GB/sec) | Similar to local, but additional overhead in network transport (500us-5ms, GB/sec) | Scaling out to additional systems increases performance (500us-5ms, TB/sec) + _** The information in this table are generally accepted attributes and measurements among local, remote, and distributed storage systems._ From 5347243b5f91eb0d41606c41ef944b380cee2d05 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:45:27 +0700 Subject: [PATCH 20/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 9cd0553..29b2681 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -773,7 +773,7 @@ Block | Availability, Low latency performance, Good throughput performance for i Filesystem | Sharing data with multiple workloads simultaneously, Optimised throughput for aggregated workloads | Strong file locking integrity when filesystems are shared Object Store | Availability, Large capacities (PB scale), Durability. Sharing data with multiple workloads simultaneously, Optimised throughput for parallelised workloads | Low Latency performance --** The information in this table are generally accepted attributes and measurements for object stores, file systems and block stores. +_** The information in this table are generally accepted attributes and measurements for object stores, file systems and block stores._ ### 5.5 Comparison between Local, Remote and Distributed Systems From 921b04d89021b46e0a98d1c3cbf360f4e4fb3505 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:49:13 +0700 Subject: [PATCH 21/59] update --- storage-whitepaper/v2.md | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 29b2681..efe9b78 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -912,35 +912,11 @@ Comparing file systems requires also considering the interaction with the underl layers. The following table describes the optimal/neutral/non-optimal combination generally accepted understanding of the interaction of these layers. -``` -Local File System -on.. -``` -``` -Remote File -System on.. -``` -``` -Distributed File -System on.. -``` -``` -Local Block Store Optimal Optimal Optimal -``` -``` -Remote Block -Store -``` -``` -Optimal Neutral Non-Optimal -``` -``` -Distributed Block -Store -``` -``` -Optimal Neutral Non-Optimal -``` +...| Local File System on..| Remote File System on.. | Distributed File System on.. +--- | --- | --- | ---| +Local Block Store | Optimal | Optimal | Optimal +Remote Block Store | Optimal | Neutral | Non-Optimal +Distributed Block Store | Optimal | Neutral | Non-Optimal ## 8 Object Stores From ed76f5b02292b15eb800035b8adfe2b77c8e40d6 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:58:39 +0700 Subject: [PATCH 22/59] update --- storage-whitepaper/v2.md | 108 +++++---------------------------------- 1 file changed, 12 insertions(+), 96 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index efe9b78..cbc6ebe 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1055,104 +1055,20 @@ physical clocks, the latency can be as high asseveralmilliseconds. ### 9.4 Comparison -``` -Local Remote Distributed and -non-global-transa -ctional -``` -``` -Distributed and -global-transactional -``` -``` -Availability Limited by local -components -failures -``` -``` -Limited by -remote -components -failures -``` -``` -Partial failures do -not affect -availability or only -limited key-space -``` -``` -Partial failures do not -affect availability or only +...| Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional +--- | --- | --- | --- | ---| +Availability | Limited by local components failures | Limited by remote +components failures | Partial failures do not affect availability or only +limited key-space | Partial failures do not affect availability or only limited key-space -``` -``` -Scalability Limited by local -resources -``` -``` -Limited by -remote -resources -``` -``` -Scale out as -adding more -capacities -``` -``` -Scale out as adding -more capacities. API -scalability is often limited -by a single-master. -``` -``` -Global -consistency -``` -``` -Strong Strong Weak Strong -``` - -**Durability** Limited by local -storage failure - -``` -Limited by -remote -components -failures -``` -``` -Tolerant to partial -failures -``` -``` -Tolerant to partial failures -``` -**Performance** Limited by I/O -access latency - -``` -Limited by I/O -access latency -and network -latency -``` -``` -Limited by I/O -access latency and -network latency -``` -``` -Limited by I/O access -latency, network latency, -and usually a -single-master. Multiple -rounds of network -latency for cross shards +Scalability | Limited by local resources | Limited by remote resources | Scale out as adding more capacities | Scale out as adding more capacities, API +scalability is often limited by a single-master. +Global consistency | Strong | Strong | Weak | Strong +Durability | Limited by local storage failure | Limited by remote components failures | Tolerant to partial failures | Tolerant to partial failures +Performance | Limited by I/O access latency | Limited by I/O access latency +and network latency | Limited by I/O access latency and network latency | Limited by I/O access latency, network latency, and usually a +single-master. Multiple rounds of network latency for cross shards transactions. -``` ## 10 Databases From 0003a34c5bcfb5a77987a6283ad0e59d34ea0bab Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 10:59:52 +0700 Subject: [PATCH 23/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index cbc6ebe..f196c1f 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1057,7 +1057,7 @@ physical clocks, the latency can be as high asseveralmilliseconds. ...| Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional --- | --- | --- | --- | ---| -Availability | Limited by local components failures | Limited by remote +Availability | Limited by local components failures | Limited by remote components failures | Partial failures do not affect availability or only limited key-space | Partial failures do not affect availability or only limited key-space From 207a4ad2eb3cdaf72093327a4a74086fc8b8be60 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:01:23 +0700 Subject: [PATCH 24/59] update --- storage-whitepaper/v2.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index f196c1f..c743ed8 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1057,9 +1057,9 @@ physical clocks, the latency can be as high asseveralmilliseconds. ...| Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional --- | --- | --- | --- | ---| -Availability | Limited by local components failures | Limited by remote -components failures | Partial failures do not affect availability or only -limited key-space | Partial failures do not affect availability or only +Availability|Limited by local components failures|Limited by remote +components failures|Partial failures do not affect availability or only +limited key-space|Partial failures do not affect availability or only limited key-space Scalability | Limited by local resources | Limited by remote resources | Scale out as adding more capacities | Scale out as adding more capacities, API scalability is often limited by a single-master. From d7d45e656effa43322d37ef8257fe339ef04a8bb Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:04:19 +0700 Subject: [PATCH 25/59] update --- storage-whitepaper/v2.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index c743ed8..0e2a30d 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1055,12 +1055,9 @@ physical clocks, the latency can be as high asseveralmilliseconds. ### 9.4 Comparison -...| Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional +... | Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional --- | --- | --- | --- | ---| -Availability|Limited by local components failures|Limited by remote -components failures|Partial failures do not affect availability or only -limited key-space|Partial failures do not affect availability or only -limited key-space +Availability | Limited by local components failures | Limited by remote components failures | Partial failures do not affect availability or only limited key-space | Partial failures do not affect availability or only limited key-space Scalability | Limited by local resources | Limited by remote resources | Scale out as adding more capacities | Scale out as adding more capacities, API scalability is often limited by a single-master. Global consistency | Strong | Strong | Weak | Strong From d83c7a182ee6e853a5687b5dad99fad4b25da0cb Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:09:45 +0700 Subject: [PATCH 26/59] update --- storage-whitepaper/v2.md | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 0e2a30d..e8d54df 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -2,7 +2,7 @@ ##### By Alex Chircop, Quinton Hoole, Clinton Kitson, Xiang Li, Luis, Pabón, Sugu Sougoumarne, Xing Yang [Public link to this document](https://bit.ly/cncf-storage-whitepaperV2) -Status: 03/07/2020 - final version +#### Status: 03/07/2020 - final version - 1 Scope of this document - 1.1 Goals @@ -91,7 +91,7 @@ Status: 03/07/2020 - final version - 12.3.2 The CAP Theorem -## 1 Scope of this document Status: 03/07/2020 - final version +## 1 Scope of this document This is the first phase of documenting the storage landscape. It aims to offer clear information on terminology, usage patterns and classes of technology as defined by the @@ -274,15 +274,13 @@ The storage topology of a storage system defines the different arrangements of s compute devices and the data links between them. The topology can influence multiple attributes, including : -``` -● Availability - in terms of the speed of failover and reconvergence following a +* Availability - in terms of the speed of failover and reconvergence following a component failure -● Performance - in terms of both latency and throughput -● Scalability - different topologies are optimised to scale in different directions (e.g. +* Performance - in terms of both latency and throughput +* Scalability - different topologies are optimised to scale in different directions (e.g. scaling vertically vs horizontally, sometimes referred to as scaling up vs out) -● Consistency and Durability - the topology often defines the consistency delay as well +* Consistency and Durability - the topology often defines the consistency delay as well as the data protection options that are possible -``` #### 4.1.1 Centralised Storage systems that are deployed in a centralised topology tend to be formed of fewer From ddec31ae09919d53a3f9b77cdce82037ed5669a7 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:12:55 +0700 Subject: [PATCH 27/59] update --- storage-whitepaper/v2.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index e8d54df..847e276 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1056,14 +1056,10 @@ physical clocks, the latency can be as high asseveralmilliseconds. ... | Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional --- | --- | --- | --- | ---| Availability | Limited by local components failures | Limited by remote components failures | Partial failures do not affect availability or only limited key-space | Partial failures do not affect availability or only limited key-space -Scalability | Limited by local resources | Limited by remote resources | Scale out as adding more capacities | Scale out as adding more capacities, API -scalability is often limited by a single-master. +Scalability | Limited by local resources | Limited by remote resources | Scale out as adding more capacities | Scale out as adding more capacities, API scalability is often limited by a single-master. Global consistency | Strong | Strong | Weak | Strong Durability | Limited by local storage failure | Limited by remote components failures | Tolerant to partial failures | Tolerant to partial failures -Performance | Limited by I/O access latency | Limited by I/O access latency -and network latency | Limited by I/O access latency and network latency | Limited by I/O access latency, network latency, and usually a -single-master. Multiple rounds of network latency for cross shards -transactions. +Performance | Limited by I/O access latency | Limited by I/O access latency and network latency | Limited by I/O access latency and network latency | Limited by I/O access latency, network latency, and usually a single-master. Multiple rounds of network latency for cross shards transactions. ## 10 Databases From 54d34d8b4af511b9f1a5e55c1312faf56441f7d9 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:16:23 +0700 Subject: [PATCH 28/59] update --- storage-whitepaper/v2.md | 37 ++++++------------------------------- 1 file changed, 6 insertions(+), 31 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 847e276..8a48a33 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1117,37 +1117,12 @@ incident. ### 10.4 Database Comparison -``` -Topology Stand-alone -instance -``` -``` -Replicated DB Sharded Sharded and -Replicated -``` -``` -Example Individual -relational -database -instance -``` -``` -Master-Replica -or Multi-master -deployments -``` -``` -Shard a subset -of records per -instance, behind -a front-end -router -``` -``` -Cloud Native -Databases -``` -``` +Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated +--- | --- | --- | --- | ---| +Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end +router | Cloud Native Databases + + Availability Limited by the availability of the single node From 40d9c6c6a6dac7ad1e02722015e53f97bc9d3514 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:27:20 +0700 Subject: [PATCH 29/59] update --- storage-whitepaper/v2.md | 181 ++------------------------------------- 1 file changed, 6 insertions(+), 175 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 8a48a33..8da343d 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1121,181 +1121,12 @@ Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated --- | --- | --- | --- | ---| Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases - - -Availability Limited by the -availability of -the single node -and it’s network -connection. -``` -``` -Multiple -replicas; failover -needs to be -coordinated -``` -``` -Sharding may -lower overall -availability - any -one unavailable -shard may -make the DB -unavailable. -``` -``` -Availability -based on the -number of -replicas -``` -``` -Scalability Requires -compute and -storage to scale -up; capacity -limited to the -capabilities of a -single node -``` -``` -Data is not -distributed, but -queries can be -targeted at -replicas; -capacity limited -to the -capabilities of a -single node -``` -``` -Horizontal -scaling of -reads, writes -and capacity is -possible, but -sharding does -solve read -latency -problems -without replicas. -``` -``` -Scaling based -on the sharding -``` - -**Consistency** Strong Strong Typically strong, -but -asynchronous -replication and -eventual -consistency -may impact -consistency. - -``` -Typically strong, -but -asynchronous -replication and -eventual -consistency -may impact -consistency. -``` -**Durability** Dependent on -capabilities of -underlying -Volume Storage - -``` -Durability is -based on the -number of -replicas. A data -loss event -requires all n -replicas to be -lost. -``` -``` -Durability can -be comparable -to a stand-alone -instance due to -sharding - -although blast -radius is -minimised as -loss of a single -shard only -results in partial -data loss. -``` -``` -Durability is -based on the -number of -replicas. A data -loss event -requires all n -replicas to be -lost. -``` -**Performance** Dependent on -memory -(cache), -compute and -storage -resources - -``` -Performance -can be -negatively -impacted by -replication -overhead, -especially is -synchronous to -facilitate strong -consistency. -``` -``` -Long running -queries can be -offloaded to -replicas to -improve -transactions on -master -``` -``` -Performance is -balanced -across a -number of -nodes. -Operational -complexity for -sharded -systems may -apply. -``` -``` -May be either -increased or -decreased due -to sharding and -replication, -depending on -query types and -replication -strategy. -``` +Availability | Limited by the availability of the single node and it’s network connection. | Multiple replicas; failover needs to be coordinated | Sharding may +lower overall availability - anyone unavailable shard may make the DB unavailable. | Availability based on the number of replicas +Scalability | Requires compute and storage to scale up; capacity limited to the capabilities of a single node | Data is not distributed, but queries can be targeted at replicas; capacity limited to the capabilities of a single node | Horizontal scaling of reads, writes and capacity is possible, but sharding does solve read latency problems without replicas. | Scaling based on the sharding +Consistency | Strong | Strong | Typically strong, but asynchronous replication and eventual consistency may impact consistency. | Typically strong, but asynchronous replication and eventual consistency may impact consistency. +Durability | Dependent on capabilities of underlying Volume Storage | Durability is based on the number of replicas. A data loss event requires all n replicas to be lost. | Durability can be comparable to a stand-alone instance due to sharding - although blast radius is minimised as loss of a single shard only results in partial data loss. | Durability is based on the number of replicas. A data loss event requires all n replicas to be lost. +Performance | Dependent on memory (cache), compute and storage resources | Performance can be negatively impacted by replication overhead, especially is synchronous to facilitate strong consistency. Long running queries can be offloaded to replicas to improve transactions on master | Performance is balanced across a number of nodes. Operational complexity for sharded systems may apply. | May be either increased or decreased due to sharding and replication, depending on query types and replication strategy. ## 11 Orchestration and Management Interfaces From 46d6bcf7782ed4c906558d3dafa9483654b13ac2 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:28:51 +0700 Subject: [PATCH 30/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 8da343d..2a60690 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1117,7 +1117,7 @@ incident. ### 10.4 Database Comparison -Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated +| Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated --- | --- | --- | --- | ---| Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases From edf807d3da7391048820348451ef2f5cd043bb5e Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:29:59 +0700 Subject: [PATCH 31/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 2a60690..ac43471 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1117,7 +1117,7 @@ incident. ### 10.4 Database Comparison -| Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated +Topology|Stand-alone instance Replicated DB|Sharded|Sharded and Replicated --- | --- | --- | --- | ---| Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases From 0f40e0f1bc1626edf1e8ef45a4eb3d3b963494de Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:31:35 +0700 Subject: [PATCH 32/59] update --- storage-whitepaper/v2.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index ac43471..11cd6a7 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1117,7 +1117,9 @@ incident. ### 10.4 Database Comparison -Topology|Stand-alone instance Replicated DB|Sharded|Sharded and Replicated +Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated + + --- | --- | --- | --- | ---| Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases From a02a373f38d7a4c90e7cda07736424f42a38b57c Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:32:23 +0700 Subject: [PATCH 33/59] update --- storage-whitepaper/v2.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 11cd6a7..cf33a31 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1118,9 +1118,8 @@ incident. ### 10.4 Database Comparison Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated - - --- | --- | --- | --- | ---| + Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases Availability | Limited by the availability of the single node and it’s network connection. | Multiple replicas; failover needs to be coordinated | Sharding may From 037cd56c1f4fe71f647a7c75af8b5506ff7c95d7 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:34:13 +0700 Subject: [PATCH 34/59] update --- storage-whitepaper/v2.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index cf33a31..810ecf0 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1075,10 +1075,10 @@ opposite direction allowing storing data without a fixed schema. Databases have some advanced functionality over what one would expect of a traditional key-value store. A database typically has some of the following characteristics (but not necessarily all): -● ACID Transactions (Atomicity, Consistency, Isolation and Durability), -● Secondary indexes, -● Relationships across different pieces of data and the ability to join them on-the-fly, -● A query language to fetch and (or) mutate the data. The most popular of these is +* ACID Transactions (Atomicity, Consistency, Isolation and Durability), +* Secondary indexes, +* Relationships across different pieces of data and the ability to join them on-the-fly, +* A query language to fetch and (or) mutate the data. The most popular of these is SQL. We are also aware that the lines are blurring as many key-value systems are starting to @@ -1092,9 +1092,9 @@ Essentially, the comparisons made in section 9.4 also apply to such systems. Not all databases are cloud-native. Therefore, caution must be used before running them in a cloud environment like Kubernetes. The major areas of concern are: -● the life-cycle and mobility of a Kubernetes Pod, -● the ephemeral local storage, -● the added latency of a remotely mounted volume. +* the life-cycle and mobility of a Kubernetes Pod, +* the ephemeral local storage, +* the added latency of a remotely mounted volume. These concerns can typically be addressed with additional tooling like the use of proxies and orchestration systems that can react to events that some databases may not be inherently built to handle. The exact solution will differ based on the extent to which a system is From 8ff21761f5889a81220e1a625a1e806d5303bfe6 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:38:05 +0700 Subject: [PATCH 35/59] update --- .DS_Store | Bin 0 -> 6148 bytes storage-whitepaper/v2.md | 75 ++++++++++++++++++--------------------- 2 files changed, 34 insertions(+), 41 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..466e2bc673ad2d195e9f72e856779d7c9aed1ce2 GIT binary patch literal 6148 zcmeHKIZgvX5Ud6VmPjlj!ubFJKUi7j1$=LXb#B$i05YN@AY zdb(yb6>M(kOERb3P=GdaI^wdO6M0xpCFSw@pkx7C7R^SI3U>Jb_ literal 0 HcmV?d00001 diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 810ecf0..1645603 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -126,19 +126,19 @@ In order to simplify the consumption of information in a complex landscape, the has been structured as follows: ``` -● Definition of the attributes of a storage system suchthat an end-user can +* Definition of the attributes of a storage system suchthat an end-user can understand the appropriate capabilities that might be required by an application or architectural pattern -● Definition of the layers in a storage solution (orservice) with a focus on terminology +* Definition of the layers in a storage solution (orservice) with a focus on terminology and how they impact the defined attributes - coveringthe container, orchestrator, transport, topology, virtual/physical, data protection, data services and the non-volatile layers. -● Definition of the data access interfaces in termsof volume (including block, file +* Definition of the data access interfaces in termsof volume (including block, file system and shared file system) and application API (including object, KV and database) as high level groupings -● Separate sections with further detail on Block Storage, File systems , Object +* Separate sections with further detail on Block Storage, File systems , Object Storage , Key Value Stores and Databases. -● Definition of the management interfaces needed toorchestrate the storage layers to +* Definition of the management interfaces needed toorchestrate the storage layers to facilitate composability, dynamic provisioning and self service management. ``` @@ -182,9 +182,6 @@ Criteria used to measure scalability include : ``` A. the ability to scale the number of clients that can access the storage system -``` - -``` B. the ability to scale throughput (e.g. MB/sec) or number of operations (e.g. per second) of a single interface C. the ability to scale the capacity, in terms of data stored, of a single deployment of the @@ -199,23 +196,20 @@ Similar to scalability, the performance of a storage system can be measured agai criteria, the relative importance of each depending on the use case. Performance of a storage system is typically measured in terms of one or more of: +* latency to perform a storage operation +* the number of storage operations that are possible per second +* the throughput of data that can be stored or retrieved per second -``` -● latency to perform a storage operation -● the number of storage operations that are possible per second -● the throughput of data that can be stored or retrieved per second -``` ### 3.4 Consistency Consistency attributes of a storage system refer to the ability to access newly created data or updates to the same after it has been committed and applies to both: -``` -● “read” operations returning the correct data after a “write”, “update” or “delete” - with +* “read” operations returning the correct data after a “write”, “update” or “delete” - with or without a delay. -● any delays that occur between performing the data storage operation and the data +* any delays that occur between performing the data storage operation and the data getting committed to a non-volatile store or being fully protected. -``` + Systems that have delays between read operations returning up-to-date data, and/or delays before all data is protected after getting commited are defined as being “eventually consistent”. If there are no delays, the system is defined as being “strongly consistent”. @@ -234,11 +228,11 @@ storage system, including: ``` -● the data protection layers, such as how many copies of the data are available -● the levels of redundancy of the system -● the endurance characteristics of the storage media that is holding the data (e.g. SSD +* the data protection layers, such as how many copies of the data are available +* the levels of redundancy of the system +* the endurance characteristics of the storage media that is holding the data (e.g. SSD vs spinning disks vs tape) -● the ability to detect corruption of data (e.g. due to component failure or wear/usage) +* the ability to detect corruption of data (e.g. due to component failure or wear/usage) and the ability to use data protection functions to rebuild or recover the corrupted data (sometimes referred to as “bit-rot”) ``` @@ -589,7 +583,7 @@ characteristics and SLAs of the service. Some of the most commonly used systems include: ``` -● Spinning / magnetic disk (e.g. SATA, SAS & SCSI) - magnetic media are +* Spinning / magnetic disk (e.g. SATA, SAS & SCSI) - magnetic media are traditional harddisks and are mechanical devices in that they have spinning magnetic disks that are read by a read/write head. Latency is a combination of the rotational latency of the disk, the seek time for the head to move into place to read/write the @@ -600,7 +594,7 @@ under 250MB/sec. Magnetic media generally offers the lowest cost per GB of capacity. ``` ``` -● SSD (with traditional interfaces such as SATA, SAS or SCSI) - a solid state disk +* SSD (with traditional interfaces such as SATA, SAS or SCSI) - a solid state disk does not have any moving parts and stores data in non-volatile memory (typically some type of flash). This allows for much lower latency operations - typically small fractions of a millisecond and allows for tens of thousands of I/O operations per @@ -611,7 +605,7 @@ given number of cell overwrites. Storage systems that are optimised for SSDs wil therefore generally attempt to minimise write amplification to minimise wear. ``` ``` -● Non Volatile Memory (e.g. SSD/NVMe) - flash baseddevices are generally faster +* Non Volatile Memory (e.g. SSD/NVMe) - flash baseddevices are generally faster than the current generation of transports. NVMe is a faster transport that minimises the protocol overhead by treating the flash more like memory where data can be accessed randomly rather than in block format as defined in disk transport protocols @@ -629,9 +623,9 @@ The interface is an important factor in the choice of a storage solution as ofte workloads or applications will have a pre-defined or preferred access method. Different interfaces also influence a number of attributes such as: -● availability – in terms of failover and moving access between nodes -● performance – in terms of latency and throughput -● scalability - in terms of the number of clients that can access a given pool of storage +* availability – in terms of failover and moving access between nodes +* performance – in terms of latency and throughput +* scalability - in terms of the number of clients that can access a given pool of storage In addition to the attributes, in practice, the choice of access interface has a large impact on the management interfaces available and therefore the ability of orchestrators to manage @@ -750,16 +744,16 @@ and data protection functions. #### 5.3.1 Volumes Some interactions that may apply to volume access interfaces include : -● A volume manager (e.g. lvm) which may provide functionality to pool resources, +* A volume manager (e.g. lvm) which may provide functionality to pool resources, provide data protection and even take an active role in failover and recovery -● Bind mounts and overlay filesystems which provide functionality to layer filesystems +* Bind mounts and overlay filesystems which provide functionality to layer filesystems and image layers to provide integration with orchestrators and container runtimes. #### 5.3.2 Application API Some interactions that may apply to application API interfaces include : -● Discovery to provide functionality to identify resources in a cluster or a network -● Meshes, ingress end-points and load balancers that can provide functionality to route +* Discovery to provide functionality to identify resources in a cluster or a network +* Meshes, ingress end-points and load balancers that can provide functionality to route requests to store and retrieve data based on content or resource availability @@ -1119,7 +1113,6 @@ incident. Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated --- | --- | --- | --- | ---| - Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases Availability | Limited by the availability of the single node and it’s network connection. | Multiple replicas; failover needs to be coordinated | Sharding may @@ -1141,9 +1134,9 @@ A Container Orchestration System (CO) such as Kubernetes can support multiple in to interact with the Storage System. The Storage System can: -● **(A)** support control plane interface API directly andinteract directly with the +* **(A)** support control plane interface API directly andinteract directly with the orchestrator or -● **(B)** interact with the orchestrator via an API Frameworklayer or other Tools. +* **(B)** interact with the orchestrator via an API Frameworklayer or other Tools. The orchestrator can use the control plane interfaces **(A)** or **(B)** to support the request for a @@ -1200,11 +1193,11 @@ This refers to Kubernetes in-tree volume drivers that extend Kubernetes volume i support block and file storage systems. Kubernetes has the following concepts for storage: ``` -● Persistent Volume (PV) is a piece of storage provisioned by an administrator on the +* Persistent Volume (PV) is a piece of storage provisioned by an administrator on the storage system. -● Persistent Volume Claim (PVC) is the storage requested by a user. Kubernetes +* Persistent Volume Claim (PVC) is the storage requested by a user. Kubernetes cluster will try to find a matching PV that matches the PVC request. -● PV can be pre-provisioned or dynamically provisioned. Dynamic provisioning is done +* PV can be pre-provisioned or dynamically provisioned. Dynamic provisioning is done using a Storage Class created by an administrator. Storage Class defines different levels of services that a storage system can provide. Kubernetes manages the life cycle of PVs and PVCs. Data on a volume can persist beyond the lifetime of a pod @@ -1311,17 +1304,17 @@ There are also ways to connect persistent volumes provisioned for containers to on premise or in the cloud. ``` -● For cloud storage such as Google Cloud Persistent Disks or Amazon Elastic Block +* For cloud storage such as Google Cloud Persistent Disks or Amazon Elastic Block Storage, a snapshot of a PVC for block storage will be uploaded to the object store somewhere in the cloud as part of the snapshot creation process. -● Some other management interfaces provide a similar approach that uploads a +* Some other management interfaces provide a similar approach that uploads a snapshot created for a block storage to an object store on premise or in the cloud. -● Some management interfaces also provide a separate backup API that takes a +* Some management interfaces also provide a separate backup API that takes a volume or snapshot from a block storage and backs it up to an object store. ○ At the time of this writing, there are ongoing discussions in Kubernetes to provide a separate backup API that could backup a volume to a remote backup device such as an object store. -● At the time of this writing, there is ongoing work in Kubernetes that allows a S3 +* At the time of this writing, there is ongoing work in Kubernetes that allows a S3 bucket to be provisioned as a first class resource, similar to how a persistent volume is provisioned. ``` From 01aeb766aecce49faa7ae03ac32b0a1743a56c59 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:40:48 +0700 Subject: [PATCH 36/59] update --- storage-whitepaper/v2.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 1645603..ff88246 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -125,7 +125,6 @@ and services in the landscape for the document. In order to simplify the consumption of information in a complex landscape, the document has been structured as follows: -``` * Definition of the attributes of a storage system suchthat an end-user can understand the appropriate capabilities that might be required by an application or architectural pattern @@ -140,7 +139,6 @@ database) as high level groupings Storage , Key Value Stores and Databases. * Definition of the management interfaces needed toorchestrate the storage layers to facilitate composability, dynamic provisioning and self service management. -``` ## 3 Attributes of a storage interface or system From 41fa0208f299d10ff83f825b5ccbac9e53281a3a Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:42:49 +0700 Subject: [PATCH 37/59] update --- storage-whitepaper/v2.md | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index ff88246..7393f6f 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -223,9 +223,6 @@ failure. Durability covers the attributes of a storage system that impact the ability for a data set to endure as opposed to just being accessible. Multiple factors can impact the durability of a storage system, including: - - -``` * the data protection layers, such as how many copies of the data are available * the levels of redundancy of the system * the endurance characteristics of the storage media that is holding the data (e.g. SSD @@ -233,7 +230,7 @@ vs spinning disks vs tape) * the ability to detect corruption of data (e.g. due to component failure or wear/usage) and the ability to use data protection functions to rebuild or recover the corrupted data (sometimes referred to as “bit-rot”) -``` + ### 3.6 Instantiation & Deployment A storage system can be deployed or instantiated on-premises or in a cloud environment in @@ -580,7 +577,6 @@ characteristics and SLAs of the service. Some of the most commonly used systems include: -``` * Spinning / magnetic disk (e.g. SATA, SAS & SCSI) - magnetic media are traditional harddisks and are mechanical devices in that they have spinning magnetic disks that are read by a read/write head. Latency is a combination of the rotational @@ -590,8 +586,7 @@ operating system to access the device through a host bus adapter (HBA). Latency per operation is measured in a number of milliseconds and throughput is generally under 250MB/sec. Magnetic media generally offers the lowest cost per GB of capacity. -``` -``` + * SSD (with traditional interfaces such as SATA, SAS or SCSI) - a solid state disk does not have any moving parts and stores data in non-volatile memory (typically some type of flash). This allows for much lower latency operations - typically small @@ -601,15 +596,12 @@ hundreds of MB per second. Different classes of flash are available which impact the performance as well as the durability - SSD flash wears out and can fail after a given number of cell overwrites. Storage systems that are optimised for SSDs will therefore generally attempt to minimise write amplification to minimise wear. -``` -``` + * Non Volatile Memory (e.g. SSD/NVMe) - flash baseddevices are generally faster than the current generation of transports. NVMe is a faster transport that minimises the protocol overhead by treating the flash more like memory where data can be accessed randomly rather than in block format as defined in disk transport protocols -like SCSI. This allows for much lower latency - typically a few tens of microseconds -``` -- and much faster throughput - typically measured in GB per second. +like SCSI. This allows for much lower latency - typically a few tens of microseconds - and much faster throughput - typically measured in GB per second. ## 5 Data Access Interface From 271bd7b4469d4a00639dd041de1fb68afc4c78b2 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:48:53 +0700 Subject: [PATCH 38/59] update --- storage-whitepaper/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 7393f6f..dcbb03c 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1101,7 +1101,7 @@ incident. ### 10.4 Database Comparison -Topology | Stand-alone instance Replicated DB | Sharded | Sharded and Replicated +... | Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional --- | --- | --- | --- | ---| Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases From 2d31f5260835cd54b5284d04b521574c379942c5 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:52:37 +0700 Subject: [PATCH 39/59] update --- storage-whitepaper/v2.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index dcbb03c..28ed57b 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1101,12 +1101,10 @@ incident. ### 10.4 Database Comparison -... | Local | Remote | Distributed and non-global-transactional | Distributed and global-transactional +Topology | Stand-alone instance | Replicated DB | Sharded | Sharded and Replicated --- | --- | --- | --- | ---| -Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end -router | Cloud Native Databases -Availability | Limited by the availability of the single node and it’s network connection. | Multiple replicas; failover needs to be coordinated | Sharding may -lower overall availability - anyone unavailable shard may make the DB unavailable. | Availability based on the number of replicas +Example | Individual relational database instance | Master-Replica or Multi master deployments | Shard a subset of records per instance, behind a front-end router | Cloud Native Databases +Availability | Limited by the availability of the single node and it’s network connection. | Multiple replicas; failover needs to be coordinated | Sharding may lower overall availability - anyone unavailable shard may make the DB unavailable. | Availability based on the number of replicas Scalability | Requires compute and storage to scale up; capacity limited to the capabilities of a single node | Data is not distributed, but queries can be targeted at replicas; capacity limited to the capabilities of a single node | Horizontal scaling of reads, writes and capacity is possible, but sharding does solve read latency problems without replicas. | Scaling based on the sharding Consistency | Strong | Strong | Typically strong, but asynchronous replication and eventual consistency may impact consistency. | Typically strong, but asynchronous replication and eventual consistency may impact consistency. Durability | Dependent on capabilities of underlying Volume Storage | Durability is based on the number of replicas. A data loss event requires all n replicas to be lost. | Durability can be comparable to a stand-alone instance due to sharding - although blast radius is minimised as loss of a single shard only results in partial data loss. | Durability is based on the number of replicas. A data loss event requires all n replicas to be lost. From 3c83668838bcd1fbdd88340070858f41d52750b8 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:53:24 +0700 Subject: [PATCH 40/59] update --- storage-whitepaper/v2.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 28ed57b..22967c1 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1291,7 +1291,6 @@ There are also ways to connect persistent volumes provisioned for containers to on premise or in the cloud. -``` * For cloud storage such as Google Cloud Persistent Disks or Amazon Elastic Block Storage, a snapshot of a PVC for block storage will be uploaded to the object store somewhere in the cloud as part of the snapshot creation process. @@ -1305,7 +1304,6 @@ backup device such as an object store. * At the time of this writing, there is ongoing work in Kubernetes that allows a S3 bucket to be provisioned as a first class resource, similar to how a persistent volume is provisioned. -``` #### 11.2.2 Key Value Stores From 6b1f6a7464f234fe7f4cf52da6c9db26010bf737 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 11:54:41 +0700 Subject: [PATCH 41/59] update --- storage-whitepaper/v2.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index 22967c1..b1d8507 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1317,11 +1317,9 @@ interface. Management interface can provide a way to deploy and manage databases. For example, -Rook provides an operator to deploy and manage CockroachDB andYugabyteDBclusters. +Rook provides an operator to deploy and manage CockroachDB and YugabyteDB clusters. -Another CNCF storage project Vitess (https://vitess.io)also provides an operator to manage - -MySQL clusters. +Another CNCF storage project [Vitess](https://vitess.io) also provides an operator to manage MySQL clusters. ## 12 Appendix From fa32f780c758d3df3f990641e17da5546ee010a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wesley=20=28=E0=B8=89=E0=B8=A5=E0=B8=B2=E0=B8=A1=29=20Stee?= =?UTF-8?q?houwer?= <75677480+dutchshark@users.noreply.github.com> Date: Thu, 10 Feb 2022 11:55:28 +0700 Subject: [PATCH 42/59] Delete .DS_Store --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 466e2bc673ad2d195e9f72e856779d7c9aed1ce2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKIZgvX5Ud6VmPjlj!ubFJKUi7j1$=LXb#B$i05YN@AY zdb(yb6>M(kOERb3P=GdaI^wdO6M0xpCFSw@pkx7C7R^SI3U>Jb_ From 6c4af930d7519f9b9c6757a1f4d874c9e22b1321 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wesley=20=28=E0=B8=89=E0=B8=A5=E0=B8=B2=E0=B8=A1=29=20Stee?= =?UTF-8?q?houwer?= <75677480+dutchshark@users.noreply.github.com> Date: Thu, 10 Feb 2022 12:07:54 +0700 Subject: [PATCH 43/59] Delete .DS_Store --- design/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 design/.DS_Store diff --git a/design/.DS_Store b/design/.DS_Store deleted file mode 100644 index 66d61cd49dcd8c99b4296db201445dd627274d18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeH~u?oUK42Bc!Ah>jNyu}Cb4USTupfBJcxQGQo=X-Sj*MTMLaT@=ne&%Sq<@biJJC%Lz5BFXF7N;k`8bu}vWX5+DH*AORBi zAp&-9!&d96j3ht;B=96)--iS@&7q~Le>xC+1b}uZyJ79K1T}(S!u1*@b}wNT4CGta)$u{~rEn{%=~Ck^l+( z83FCaX&mrUaksv`p4AUgwRM3*{W!wQPXH3TiZ^gK>?d15b7-lG3XDGjj)8#$zDnQ$ Dtxgie From 56dfd2b3adab487b78660830d8c3d6da43a8a8d6 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 12:24:40 +0700 Subject: [PATCH 44/59] update --- CONTRIB/first-time-contributions.md | 14 +++++++------- CONTRIB/pull-request-review.md | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIB/first-time-contributions.md b/CONTRIB/first-time-contributions.md index edcca27..5e00c03 100644 --- a/CONTRIB/first-time-contributions.md +++ b/CONTRIB/first-time-contributions.md @@ -2,7 +2,7 @@ We happily welcome our new contributors to this community. If you are contributing to the CNCF -and/or TAG-Security for the first time it is +and/or TAG-Storage for the first time it is okay if you feel overwhelmed. We, as a community, are always there to help you with any problems you are facing. @@ -18,7 +18,7 @@ Don't worry! We got you. In the interest of getting more new people involved, we have issues marked as -[good-first-issues](https://github.com/cncf/tag-security/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). +[good-first-issues](https://github.com/cncf/tag-storage/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22). These are issues that have a smaller scope, and are great to start with. @@ -38,7 +38,7 @@ for your understanding: - [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests) Our PR also follows a particular writing -style. Checkout the [style guide](https://github.com/cncf/tag-security/blob/main/CONTRIBUTING/writing-style.md). +style. Checkout the [style guide](https://github.com/cncf/tag-storage/blob/main/CONTRIBUTING/writing-style.md). ## Other ways of communication @@ -47,17 +47,17 @@ doubts about a certain issue. Please reach out and we will be happy to discuss. -You can reach us via our [Mailing List](mailto:cncf-tag-security-leads@lists.cncf.io). +You can reach us via our [Mailing List](mailto:cncf-tag-storage-leads@lists.cncf.io). -You can also reach out on our slack [#tag-security-governance](https://cloud-native.slack.com/archives/C0230RW8V2T). +You can also reach out on our slack [#tag-storage-governance](https://cloud-native.slack.com/archives/C0230RW8V2T). ### You can reach out to our members Our members list can be found -[here](https://github.com/cncf/tag-security#members). +[here](https://github.com/cncf/tag-storage#members). ## After PR merge Once you have successfully get your first PR merged, you can add your name -to our Members section in [README.md](https://github.com/cncf/tag-security#members). +to our Members section in [README.md](https://github.com/cncf/tag-storage#members). diff --git a/CONTRIB/pull-request-review.md b/CONTRIB/pull-request-review.md index 6034390..bb18323 100644 --- a/CONTRIB/pull-request-review.md +++ b/CONTRIB/pull-request-review.md @@ -22,7 +22,7 @@ nits. ##### Example of preferential language > They use cloud technologies with clear understanding of risks and the ability -> to validate that their security policy decisions are reflected in deployed +> to validate that their storage policy decisions are reflected in deployed > software. "Ability" is a human oriented term, "capability" is more technical and may be @@ -30,13 +30,13 @@ more appropriate. Suggestion: > They use cloud technologies with clear understanding of risks and the -> capability to validate their security policy decisions are reflected in +> capability to validate their storage policy decisions are reflected in > deployed software. ##### Example of a nit > They use cloud-native technologies with clear understanding of risks and the -> ability to validate that their security policy decisions are reflected in +> ability to validate that their storage policy decisions are reflected in > deployed software. Per TOC definition of cloud native, it is not hyphenated. From 587945b80063e84bd0ebef01b37b9fe687cfb8e9 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 12:27:46 +0700 Subject: [PATCH 45/59] update --- CONTRIB/first-time-contributions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIB/first-time-contributions.md b/CONTRIB/first-time-contributions.md index 5e00c03..5836863 100644 --- a/CONTRIB/first-time-contributions.md +++ b/CONTRIB/first-time-contributions.md @@ -38,7 +38,7 @@ for your understanding: - [Collaborating with pull requests](https://docs.github.com/en/github/collaborating-with-pull-requests) Our PR also follows a particular writing -style. Checkout the [style guide](https://github.com/cncf/tag-storage/blob/main/CONTRIBUTING/writing-style.md). +style. Checkout the [style guide](https://github.com/cncf/tag-storage/blob/main/CONTRIB/writing-style.md). ## Other ways of communication From 44fb5cfb555e7f1134b8d15d4ba9a70aa6c56771 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 16:32:40 +0700 Subject: [PATCH 46/59] update --- CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODEOWNERS b/CODEOWNERS index a289a8d..968263f 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -16,4 +16,4 @@ # Tech lead, Chair Emeritus roles should exercise discretion in defering final # approval for a PR to a co-chair. # This includes major edits or new introductions to the repository. -* @chira001 @sougou @quinton-hoole @erinboyd @xing-yang @saad-ali @lpabon @dutchshark +* @chira001 @sougou @quinton-hoole @erinboyd @xing-yang @saad-ali @lpabon From 4e30ec86a0a8d5b0880464f0be0c90fefe673cfc Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 20:49:54 +0700 Subject: [PATCH 47/59] update --- LICENSE-code | 201 ++++++++++++++++++++++++ LICENSE-document | 395 +++++++++++++++++++++++++++++++++++++++++++++++ LICENSE.md | 2 + 3 files changed, 598 insertions(+) create mode 100644 LICENSE-code create mode 100644 LICENSE-document create mode 100644 LICENSE.md diff --git a/LICENSE-code b/LICENSE-code new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/LICENSE-code @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/LICENSE-document b/LICENSE-document new file mode 100644 index 0000000..2802779 --- /dev/null +++ b/LICENSE-document @@ -0,0 +1,395 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More_considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the "Licensor." The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..9ea106d --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,2 @@ +Code in this repository is licensed under [Apache License Version 2.0](LICENSE-code) (SPDX-License-Identifier: Apache-2.0). +Documentation in this repository is licensed under [Creative Common Attribution 4.0 International License](LICENSE-document) (SPDX-License-Identifier: CC-BY-4.0) \ No newline at end of file From 10bbdf95fe7698be4c500d22afbe48ad3f8818a4 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 21:17:07 +0700 Subject: [PATCH 48/59] update --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7f6a036..65bce3f 100644 --- a/README.md +++ b/README.md @@ -87,7 +87,7 @@ agenda](https://bit.ly/cncf-storage-sig-minutes) ### Zoom Meeting Details -[Meeting Link](https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09) +[Meeting Link](https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09) (Password: 77777) One tap mobile: @@ -135,9 +135,9 @@ There are several groups that are affiliated to or do work and cover topics rele ### Chairs -- Alex Chircop -- Quinton Hoole -- Xing Yang +- Alex Chircop [Chair term: ??? - ???] +- Quinton Hoole [Chair term: ??? - ???] +- Xing Yang [Chair term: ??? - ???] ### Tech Leads From dbd093052db5df4458a6a9ea6843805d85685cf4 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Thu, 10 Feb 2022 21:25:21 +0700 Subject: [PATCH 49/59] update --- storage-whitepaper/v2.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/storage-whitepaper/v2.md b/storage-whitepaper/v2.md index b1d8507..7bd573e 100644 --- a/storage-whitepaper/v2.md +++ b/storage-whitepaper/v2.md @@ -1180,7 +1180,6 @@ of this writing, both Mesos and Cloud Foundry have implemented experimental CSI This refers to Kubernetes in-tree volume drivers that extend Kubernetes volume interfaces to support block and file storage systems. Kubernetes has the following concepts for storage: -``` * Persistent Volume (PV) is a piece of storage provisioned by an administrator on the storage system. * Persistent Volume Claim (PVC) is the storage requested by a user. Kubernetes @@ -1190,7 +1189,7 @@ using a Storage Class created by an administrator. Storage Class defines differe levels of services that a storage system can provide. Kubernetes manages the life cycle of PVs and PVCs. Data on a volume can persist beyond the lifetime of a pod that consumes the volume. -``` + Kubernetes in-tree volume drivers can support the following functionalities: create and delete volume, attach and detach volume, mount and unmount volume, and expand volume. From c0a4c41bed75aeaa0c3651961b8920441babbc6e Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 14:59:28 +0700 Subject: [PATCH 50/59] update --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 65bce3f..75fabdb 100644 --- a/README.md +++ b/README.md @@ -90,14 +90,16 @@ agenda](https://bit.ly/cncf-storage-sig-minutes) [Meeting Link](https://zoom.us/j/2920471159?pwd=em1JbE44MktjZE4vbnJtUUFQcGZwdz09) (Password: 77777) One tap mobile: - | Location | Number | | --- | --- | -| US - New York | +16465588656,158580155# | -| US - ??? | +14086380968,158580155# | +|US (SanJose)|+16699006833,158580155#| +|US (Tacoma)|+12532158782,158580155#| +|US (WashingtonDC)|+13017158592,158580155#| +|US (Chicago)|+13126266799,158580155#| +|US (Houston)|+13462487799,158580155#| +|US (NewYork)|+16465588656,158580155#| Dial by your location: - | Location | Number | | --- | --- | | US - New York | +1 646 558 8656 | @@ -108,7 +110,7 @@ Dial by your location: Or [find your local number](https://zoom.us/u/alwlmxlNn). -Meeting ID: 737 567 7271 +Meeting ID: 158 580 155 ## Gatherings From 9ffa639e6de387f0f43bb6c283ac87cd986c8b85 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 15:08:30 +0700 Subject: [PATCH 51/59] update --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 75fabdb..47af33f 100644 --- a/README.md +++ b/README.md @@ -92,12 +92,12 @@ agenda](https://bit.ly/cncf-storage-sig-minutes) One tap mobile: | Location | Number | | --- | --- | -|US (SanJose)|+16699006833,158580155#| +|US (San Jose)|+16699006833,158580155#| |US (Tacoma)|+12532158782,158580155#| -|US (WashingtonDC)|+13017158592,158580155#| +|US (Washington DC)|+13017158592,158580155#| |US (Chicago)|+13126266799,158580155#| |US (Houston)|+13462487799,158580155#| -|US (NewYork)|+16465588656,158580155#| +|US (New York)|+16465588656,158580155#| Dial by your location: | Location | Number | From ae12f1a03f68be81c7c10f15591e59ca128fc522 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 15:09:02 +0700 Subject: [PATCH 52/59] update --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 47af33f..b191cb9 100644 --- a/README.md +++ b/README.md @@ -102,11 +102,11 @@ One tap mobile: Dial by your location: | Location | Number | | --- | --- | -| US - New York | +1 646 558 8656 | +| US - New York | +1 646 558 8656| | US - San Jose | +1 669 900 6833| -| US - Toll-free | 877 369 0926 | -| US - Toll-free | 855 880 1246 | -| Australia - Toll-free | 158 580 155 | +| US - Toll-free | 877 369 0926| +| US - Toll-free | 855 880 1246| +| Australia - Toll-free | 158 580 155| Or [find your local number](https://zoom.us/u/alwlmxlNn). From af2aea7285b36cd2a52f0b0352d5ff31512faddd Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 16:56:52 +0700 Subject: [PATCH 53/59] update --- slack.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 slack.md diff --git a/slack.md b/slack.md new file mode 100644 index 0000000..bfe8751 --- /dev/null +++ b/slack.md @@ -0,0 +1,30 @@ +# TAG-Storage channels housekeeping + +## Identifying and creating channels +Just for approved projects, "sec-assessment-xxxx" exception TAG-Storage channels +are identified with the “tag-storage-” prefix. Except during conferences, the +CNCF permits slack members to create channels; however, tag-storage-related +channels should only be created by chairs or tech leads, and are typically +prefixed by tag-storage- following hyphenation of the topic/subject. This +helps the community find topics of relevance as well as discover areas to +collaborate. + +It is requested that channels include a header for what it is used for. + +Additional information may be found in the [CNCF slack guidelines](https://github.com/cncf/foundation/blob/master/slack-guidelines.md). + +## Code of conduct + +Members of TAG-Storage channels are expected to abide by the [code of conduct](https://github.com/cncf/tag-storage/blob/master/CODE-OF-CONDUCT.md). + +## Posting outside content + +The TAG-Storage channels are mechanisms for cloud native storage discussions. +It is expected that outside, non-tag created content will be posted; however, +these should include topics of relevance and interest to the cloud native +community space, rather than marketing or promotion of a vendor-specific +product. + +For example, maintainers and contributors of projects are encouraged to post +relevant topics, podcasts, and blogs in the channels provided the content is not +self-endorsing for the sake of driving attention to the project. From 95cf223b8aa9f7e0f8080842cdb90ff8e3d9e924 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 23:22:51 +0700 Subject: [PATCH 54/59] update --- README.md | 32 +++----------------------------- 1 file changed, 3 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index b191cb9..a4aea21 100644 --- a/README.md +++ b/README.md @@ -13,37 +13,13 @@ - [Members](#members) ## Objective - -STAG facilitates collaboration to discover and produce resources that enable -secure access, policy control, and safety for operators, administrators, -developers, and end-users across the cloud native ecosystem. +<> ## Background - -“Cloud Native” is open source cloud computing for applications — a complete -trusted toolkit for modern architectures. There are multiple projects which -address key parts of the problem of providing access controls and addressing -safety concerns. Each of these adds value, yet for these technical solutions to -be capable of working well together and manageable to operate they will need a -minimal shared context of what defines a secure system architecture. +<> ## Vision - -There is a future where operators, administrators and developers feel confident -creating new cloud native applications. They use cloud technologies with clear -understanding of risks and the ability to validate that their storage policy -decisions are reflected in deployed software. - -We envision that there could exist an ecosystem of tools that can simplify the -experience of cloud native operators, administrators and developers, including: - -1. System storage architecture that understands and accommodates the ever -growing heterogeneity of systems and provides a framework to protect resources -and data while servicing their users. -2. Common vocabulary and open source libraries that make it easy for developers -to create and deploy apps that meet system storage requirements. -3. Common libraries and protocols that enable people to reason about the -storage of the system, such as auditing and explainability features. +<> ## Governance @@ -121,8 +97,6 @@ list below: - KubeCon + CloudNativeCon, Europe May 16-20 2022 -[Past events](past-events.md) - ## New members If you are new to the group, we encourage you to check out our [New Members Page](NEW-MEMBERS.md) From 74bfa17ac01eaaa42f12de4d863604da0236f9f5 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 23:27:21 +0700 Subject: [PATCH 55/59] update --- README.md | 9 - governance/README.md | 16 - governance/chair-proposal-process.md | 7 - governance/chair-transition.md | 61 ---- governance/cncf-projects.md | 17 - governance/github.md | 48 --- governance/paper-process.md | 235 ------------ governance/presentations.md | 23 -- governance/process.md | 144 -------- governance/related-groups/README.md | 75 ---- .../adding-or-updating-groups.md | 26 -- governance/roles.md | 342 ------------------ governance/tech-lead-proposal-process.md | 126 ------- governance/tech-lead-transition.md | 33 -- governance/tools.md | 12 - 15 files changed, 1174 deletions(-) delete mode 100644 governance/README.md delete mode 100644 governance/chair-proposal-process.md delete mode 100644 governance/chair-transition.md delete mode 100644 governance/cncf-projects.md delete mode 100644 governance/github.md delete mode 100644 governance/paper-process.md delete mode 100644 governance/presentations.md delete mode 100644 governance/process.md delete mode 100644 governance/related-groups/README.md delete mode 100644 governance/related-groups/adding-or-updating-groups.md delete mode 100644 governance/roles.md delete mode 100644 governance/tech-lead-proposal-process.md delete mode 100644 governance/tech-lead-transition.md delete mode 100644 governance/tools.md diff --git a/README.md b/README.md index a4aea21..ad59dd2 100644 --- a/README.md +++ b/README.md @@ -12,15 +12,6 @@ - [New Members](#new-members) - [Members](#members) -## Objective -<> - -## Background -<> - -## Vision -<> - ## Governance [STAG charter](governance/charter.md) outlines the scope of our group diff --git a/governance/README.md b/governance/README.md deleted file mode 100644 index 09b4aec..0000000 --- a/governance/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# Governance - -Storage TAG is -a [CNCF Technical Advisory Group](https://github.com/cncf/toc/tree/main/tags). - -* [Charter](charter.md) - mission and scope -* [Roles](roles.md) - the work of the group is facilitated by Chairs, Technical - Leads, and active group members -* [Process](process.md) - how projects are proposed and work is tracked -* [Related Groups](./related-groups/README.md) - list of CNCF, Kubernetes and - other Industry wide groups that do related work - -General meetings are posted on the CNCF calendar and serve as a forum for -creating a shared understanding of the cloud native storage landscape with -regular updates by members on project progress and their own storage-related, -with on-going discovery through guest presentations. diff --git a/governance/chair-proposal-process.md b/governance/chair-proposal-process.md deleted file mode 100644 index fad6fc0..0000000 --- a/governance/chair-proposal-process.md +++ /dev/null @@ -1,7 +0,0 @@ -# Storage TAG Chair proposal process - -1) Storage TAG Co-chairs operate as a team. The Co-Chair team seeks to maintain full coverage of the leadership capabilities across the key qualities of industry experience, hands-on cloud-native and storage experience, as well as administrative experience needed to run a Storage TAG. -2) If a clear successor for the exiting Co-Chair exists based on the merit of their contributions ("chop wood, carry water") and relevant experience that will benefit the TAG, based on the TAG's collective experience over time, the exiting Co-chair may nominate a successor. -3) The exiting Co-Chair should propose the desired successor to the other Co-Chairs. If there are any objections, the Co-Chair will have the opportunity to propose another worthy candidate. If Storage TAG Chairs, Tech Leads and TOC Liaisons are unable to put forward a candidate, then a selection process will need to be agreed upon and executed. -4) Upon unanimous consent amongst the current Co-Chairs, the Co-Chairs will ask the TOC Liaisons to propose the candidate for the TOC’s vote in accordance with the [CNCF TAG Chair election process](https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#elections). -5) If no new Chair candidate is available, the role will remain vacant until the Co-chair's, TOC Liaisons or CNCF TOC propose a replacement. diff --git a/governance/chair-transition.md b/governance/chair-transition.md deleted file mode 100644 index 4bbfdc2..0000000 --- a/governance/chair-transition.md +++ /dev/null @@ -1,61 +0,0 @@ -# Chair transition checklist - -This checklist should be copied into a new issue for when a new chair(s) is needed. - -## Nomination - -This serves to augment the [Storage TAG Chair proposal -process](chair-proposal-process.md) with specific items that must be completed. - -* [ ] Nomination - * [ ] TOC-Liaison slack discussion and approval - * [ ] Co-chair & Tech Lead meeting announcement - * [ ] Storage TAG Meeting announcement -- all regions - * [ ] TOC email list official nomination - * [ ] #tag-storage slack message with a link to the email nomination - * [ ] TOC meeting presentation -* [ ] Vote - official count recorded and posted - -## Transfer - -* [ ] Transfer Logistics - * [ ] #tag-chairs slack channel - add new chair(s) - * [ ] tag-chairs mailing list - add new chair(s) - * [ ] #tag-storage-cochairs channel - add new chair(s) - * [ ] #tag-storage-cochairs-emeritus - add outgoing chair(s) - * [ ] #tag-storage-toc-liaison - add new chair(s) - * [ ] Co-chair meeting - add new co-chairs and add doc sharing - * [ ] transfer ownership of co-chair meeting calendar invite - and tech lead calendar invite - if applicable - * [ ] New meeting link will need created by new calendar owner if using - Google meet. meet.new will create this, just copy into invite or - transition to Zoom - * [ ] TOC Liaison meeting - * [ ] Check if the time still works for new chair(s) - * [ ] Transfer calender ownership if needed - * [ ] Add new co-chair(s) to calendar invitation - * [ ] Share meeting notes doc - * [ ] Choose new chair representative for Storage TAG [on-going - projects](https://github.com/cncf/tag-storage#on-going-projects) if needed. - * [ ] add chair to [github team](https://github.com/orgs/cncf/teams/sig-storage/) - * [ ] tag-storage repo PR: - * [ ] Update codeowners, github settings, README (TOC Liaisons and chairs - have admin access, tech leads have push access). - * [ ] Link to official vote email list message in PR descriptions - * [ ] [TOC Repo update](https://github.com/cncf/toc/blob/main/tags/storage.md) - * [ ] [Service Desk Access](https://cncfservicedesk.atlassian.net/servicedesk/customer/portal/1) - * [ ] Update email lists - * [ ] update email list membership - * [ ] chairs should have moderator role - * [ ] remove old chairs from chairs list - * [ ] Verify new chairs have zoom credentials - * [ ] YouTube Channel - * [ ] invite new chairs (if needed) - * [ ] give "owners" permission - -## Announce - -* [ ] Announce the vote - * [ ] #tag-storage slack message - * [ ] email message to the tag-storage list - * [ ] Storage TAG meeting Announcement for each region diff --git a/governance/cncf-projects.md b/governance/cncf-projects.md deleted file mode 100644 index 55ef1ec..0000000 --- a/governance/cncf-projects.md +++ /dev/null @@ -1,17 +0,0 @@ -## CNCF Projects - -The CNCF TOC identifies specific project that provide capabilities related -to storage. - -These are known as "Storage Providers" and the TAG will prioritize review of -each project's annual [storage assessment](/assessments). - -Current list of projects: -* [etcd](https://github.com/etcd-io/etcd) -* [ChubaoFS](https://github.com/chubaofs/chubaofs) -* [Longhorn](https://github.com/longhorn/longhorn) -* [OpenEBS](https://github.com/openebs) -* [Rook](https://github.com/rook/rook) -* [TiKV](https://github.com/tikv/tikv) -* [Vitess](https://github.com/vitessio/vitess) - diff --git a/governance/github.md b/governance/github.md deleted file mode 100644 index fd13282..0000000 --- a/governance/github.md +++ /dev/null @@ -1,48 +0,0 @@ -# Github access permissions and administration - -Facilitation roles are identified in [github settings](/.github/settings.yml) -which we use for Github admin permissions and managing issues. Write -permissions are enabled by the [CODEOWNERS](/CODEOWNERS) file. - -There is typically more process for review and collaboration than is controlled -by access permissions. We expect members to review [governance](/governance) -and ask questions by filing a Github issue and/or submit suggested changes via -Pull Request if anything is not clear. - -Chairs have admin privileges and have access to change settings in the Github -UI. Except where noted below, changes should be made in the repo files to -control access privileges, not in the Github UI (so they are visible to -everyone.) - -Note: Members of the CNCF TOC and some CNCF staff also have admin access; -however, TAG Roles will be defined transparently using files described below, -and will follow TAG processes in making any changes. - -## Settings file -Pull Requests to appoint members to new Roles in -[github settings](/.github/settings.yml) must be approved by at least one -Chair, along with whatever additional required process is defined in -[roles](roles.md). When a member has multiple roles, the role defined later -in the file (that does not require additional access) is noted in a comment. -PRs to remove someone from a role must be approved by the person themselves or a -majority of Chairs. - -## Writing to the main branch -The following settings are controlled in the Github UI by those with admin -access. -The "master" branch is "protected" (even for admins), with these requirements: -- can't be deleted -- no direct commits (including no "force push"), also - - at least one reviewer must approve - - must be approved by someone listed in [CODEOWNERS](/CODEOWNERS) file - - must be up to date with master - - title must not indicate work in progress ([WIP](https://github.com/apps/wip)) - -## Housekeeping -To maintain the main branch in a feasible way the Pull Requests shall come from forked repositories from tag-storage. After which an unique name should be assigned to identify what will be changed in the forked repository by utilizing branches. - -After being merged the branch will be deleted. -Next contributions shall be in another fresh branch. -This way we keep the repository clean and allows a faster acceptance as it's clear what exactly is addressed. - -So on the repository cncf/tag-storage there shall be only unmerged branches co-existing next to main. diff --git a/governance/paper-process.md b/governance/paper-process.md deleted file mode 100644 index 86f4ae7..0000000 --- a/governance/paper-process.md +++ /dev/null @@ -1,235 +0,0 @@ -# Process for creating papers - -This document is intended to provide a consistent mechanism for cloud native -storage to produce community papers, ensure they are reviewed, and subsequently -published. Content of this document does not supersede existing processes and -is intended to be used in conjunction with [existing proposal to project -instructions](process.md). - -## Proposal - -If a proposal is made that includes a paper as a deliverable, the proposal needs -to ensure that there is a clearly identified lead and a well defined paper -scope. - -The paper scope and topic should be raised in at least one TAG meeting to -solicit more volunteers (ideally 4). Interested parties should meet at least -once to describe the intent of the paper, & propose a very rough outline to -present to TAG leadership for planning and scheduling as a project. - -## Project - -Once a TAG Leadership sponsor is assigned to the project, the group should meet -to and agree on a tentative schedule. - -### Tentative schedule milestones - -The below list the minimum milestones that should be captured in a tentative -schedule along with the estimated time frame for completion. Milestones are -explained further in this document. - -| TODO | Milestone | Estimated time | -| -- | -- | -- | -| * [ ] | Audience, Goals, & refining scope | 1 week | -| * [ ] | Tasking Assignment | 1 week | -| * [ ] | Content Rough-in | 2-3 weeks | -| * [ ] | Collaborative Review | 2 weeks | -| * [ ] | Executive Summary and content wrap up | 2 weeks | -| * [ ] | Narrative Voice | 1-2 weeks | -| * [ ] | Final Group Review | 1 week | -| * [ ] | Community Review | 2 weeks | -| * [ ] | Public comment adjudication | 2 weeks (simultaneous with review) | -| * [ ] | CNCF publishing engagement | ~2-3 weeks | -| * [ ] | Addition to the repo | 2 weeks | -| * [ ] | Blog post and publishing coordination | 2-3 weeks | - -## Milestones - -### Audience, Goals, and refining scope - -This milestone is intend to define the following items to assist in generating -content: - -* Who do we expect to read the paper? -* What positions do they hold? -* Why are we writing this paper? -* What problem are we intending to resolve? -* What assumptions are we making about the audience or the expected content of - the paper? - * Note - these are documented in the "Introduction > Assumptions" - section of the paper -* What are our Goals and Non-Goals? - * Note - these are documented in the "Introduction > Scope > Goals" and - "Introduction > Scope > Non-Goals" -* Is the scope in the issue still representative of what we intend to cover? - -### Tasking assignment - -Contributors should highlight and assign themselves to various areas of the -outline. This allows contributors to focus on a few areas and identify others -where more contributors is needed. If using a google doc for the paper, -assignments may be done through the "assign to me" feature after highlight the -area or by using the "+foo@bar.com" comment feature for the assignee's email. -Once task assignment is complete, contributors can begin content rough-in. - -### Content rough-in - -Assignees can provide content rough-in in a variety of ways. They may provide -raw content in the form of phrases, disjointed paragraphs, bullets on the topic, -or draft content in the form of completed paragraphs. If leveraging draft -content, placing this content in quotes helps other reviewers know it is -'near-complete' and it should be reviewed as a holistic section. - -#### Opinions - -There may be situations where multiple differing views on the subject matter or -controls implementation are expressed. Authors should make every effort to -discover the industry standard or practice and document it. If none exists -and the suggested content cannot be collaboratively resolved, it is the duty -of the authors to capture the different views with references, benefits, and -drawbacks or contingencies in order to provide the reader with enough -information to reach their own conclusion. - -#### References - -It is important that any references used to generate paper content be cited -appropriately through footnotes and within the references section. This -permits the reader to not only dig deep into a specific reference area but also -provides source content and is a matter of good practice. - -### Collaborative - -Contributors now review all content roughed-in and transition raw content into -draft content. They may begin commenting on sections, expanding ideas, refining -arguments, and providing citations. Contributors are encouraged to discuss -content specific items in the doc through comments whereas larger themes and -writing decisions should be discussed in the corresponding slack channel. This -keeps the doc clean as well as documents thematic decisions in the primary -collaboration & coordination channel. - -### Executive summary and content wrap-up - -If the paper exceeds five (5) pages, an Executive summary commensurate with the -length of the document (but not to exceed 3 pages) should be written. Content, -comments, and other discussions should be closed out and finalized at this time. - -### Narrative voice - -No more than three contributing individuals should be assigned for narrative -voice. The narrative voice is a semi-final pass of the paper to ensure it reads -as a single, unified voice. It should ensure: - -* the language origin is consistent throughout the document (lang_en or - lang_us), -* phrasing is similar (caddy corner not mixed in with kitty corner), -* acronyms are spelled out at their first use and then abbreviated later, -* footnotes and citations are consistent and not direct hyperlinks in the text -* vague terms are defined in a glossary or otherwise cited to the cloud native - storage lexicon in the repo - -### Final group review - -This is the opportunity for the group to collectively review the polished paper -prior to opening it for community review. This should resolve and close out any -outstanding items. - -### Community Review - -At this point the paper needs to be locked from editing with the exception of -the Adjudicators (see below). It should be made public with the permission -settings such that suggestions and comments are permitted. The lead will then -provide a brief write up of a call to action with a link to the document and the -due by date for comments. This write up and corresponding links and details -will be emailed to the CNCF TAG-Storage mailing list, at which point we -actively solicit public comment. - -### Public comment adjudication - -Prior to opening the paper for community review, the group should select no more -than 3 Adjudicators. These individuals are tasked with accepting/rejecting -suggestions, and resolving comments from the community. Any comments or -suggestions that require larger discussion should be brought up in a group -meeting and decisively resolved. These should be clearly documented with -justification in the notes. - -Decisive resolution is the practice by which the group attempts to immediately -resolve the comment either as a won't do, out of initial scope, document -options, or accept as is. The intent to expediently discuss (no more than two -minutes), identify the remedy, and apply it. This is done both in the interest -of time but also in an effort to minimize gold-plating (perfection is the enemy -of complete). - -### CNCF publishing engagement - -Once the comments on the paper are adjudicated the paper is ready for -publishing. The TAG Leadership sponsor will work with the CNCF gather resources -to assist in final edits and conversion to PDF and graphics inclusion (if -needed). They can also assist with the conversion to markdown. The paper lead -will work with the TAG Leadership sponsor to review publishing drafts prior to -final versioned copy and inclusion in the repo. - -### Addition to the repo - -The CNCF may initiate the PR for the converted markdown of the paper and the -graphics. The paper lead will need to create the paper's README.md that -includes the following items to ensure the paper can receive community updates -in alignment with the original intent: - -* Title -* About - covers what the paper was about, a brief summary -* Updates to the paper - "intended to be a living document created and - maintained for the community, by its members." - * Markdown - "maintained in markdown and all updates will be made in - markdown." - * Contributing updates - "All members of the community are welcome to - contribute updates. We ask potential contributors to refer to the original -design decisions, listed below, as guidance when determining the content of -their updates. It is highly recommended that you seek peer review for your -updates beyond that of the Technical Leads and Co-Chairs of the TAG." - * Versioning and publishing - "It is expected that many minor updates will - occur, corrections to grammar, spelling, clarification in language, -translations, etc. When these occur they are considered minor changes to the -overall content and will not warrant the regeneration of the PDF. When -significant changes to the intent, content, or numerous minor changes occur, the -contributors will assess and determine if a new major version of the PDF needs -published. When this decision is made, the markdown content will be converted to -text document and sent to the CNCF technical writers to create the PDF. The PDF -will then be published back into the repository annotating the new version, -updating the links in the README.md accordingly. Minor updates to the markdown -shall receive a minor version bump indicated in the Metadata table of the -document and recorded as WIP. When enough significant changes have been -recorded, the markdown will be placed "In Review" (via PR) and solicited to the -CNCF Storage TAG and TOC mailing list for review, at a minimum. Upon -completion of review, the Storage TAG's TOC Liaison shall provide final -approval on the PR. At which point the markdown state will be changed to -"Approved" and merged." -* Original design decisions - this is important as it is intended to enable the - original contributors to not be gateways to content updates and allows both -reviewers and future contributors to understand a create content around -centralized guidance. -* Links - include links to the files in the repo - -### Blog publishing and coordination - -In an effort to increase visibility and awareness of the final product, it is -strongly recommended the paper lead coordinate with TAG leadership to engage the -CNCF team for posting a blog to summarize and link to the paper. As community -events occur, it is also recommended that the TAG coordinate a submission to -community events (presentation) on the paper. - -#### Authorship, attribution and acknowledgements - -Papers and other resources created from TAG-Storage efforts are under the -authorship of TAG-Storage, and all members who have made contributions to the -document (through writing, editing, creating illustrations, etc.) are considered -"Contributors". Members of the public or TAG-Storage who have commented and -given feedback during the Request for Comment (RFC) period of during the -creation of the document are considered "Reviewers" of the project. - -Individuals/groups who have made huge contributions/impact on the work can be -acknowledged in an "Acknowledgements" section. This is to highlight stellar -contributions and commitments by individuals that have went above and beyond to -contribute to the project. - -Each document should contain a "Contributors", "Reviewers" and -"Acknowledgements" section where appropriate. diff --git a/governance/presentations.md b/governance/presentations.md deleted file mode 100644 index 7a4afbe..0000000 --- a/governance/presentations.md +++ /dev/null @@ -1,23 +0,0 @@ -# Storage TAG presentations - -Part of the STAG activities include having guest presentations by members of the community. -We welcome any topic related to our mission and charter. Typical topics include projects, -real-world use-cases, challenges or success stories. However, presentations must follow the -following guidelines. - -## Guidelines - -- Presentations are encouraged to expose the TAG to cloud native open source projects, cloud native storage concepts, and other cloud native or storage groups. -- Presentations should fit with [our charter](https://github.com/cncf/tag-storage/blob/main/governance/charter.md) -- Presentations should not be scheduled on the Agenda until the issue is filled in and the TAG representative has performed due diligence on the issue -- Presentations should abide by the CNCF code of conduct - -Examples of topics that are within scope: -- Open source project presentations -- Storage use-cases and case studies -- Open source community efforts - whitepapers, communities, standards, etc. - -Examples of topics that do NOT meet the guidelines: -- Vendor pitches and marketing heavy presentations -- Topics unrelated to storage -- Topics that are help desk questions, that have a definitive, known searchable answer diff --git a/governance/process.md b/governance/process.md deleted file mode 100644 index abef2d1..0000000 --- a/governance/process.md +++ /dev/null @@ -1,144 +0,0 @@ -# Proposals, projects, and team - -In addition to the activities driven by the -[CNCF Technical Oversight Committee][TOC], the work of the group often -originates from group members with ideas on how to reduce risk in cloud native -applications in alignment with the charter of the group and of interest and -importance to the community. - -This document explains how we transform ideas from our community into -projects with a defined set of deliverables -or a team to focus on a larger stream of work that may involve one or more -projects and activities. - -## Creating, discussing and accepting proposals - -Each proposal is unique and might deviate slightly from the process below. For -example, a small addition may not require completion criteria. In general, we -encourage the process below to be followed to ensure that contributions are in -line with the [mission and charter](charter.md). - -### Proposal process - -1. **Raise an Issue:** - -[Create an issue](https://github.com/cncf/tag-storage/issues/new) -that outlines the problem to be solved. Use the proposal template if you -are interested in leading the work, or suggestion template if you would like -someone else to lead the effort. If possible, include: - - * The customer impact of the problem - * The scope of the work required - -1. **Ask the group for collaboration:** Rather than immediately beginning work -on a solution, bring the issue up for discussion. The following guidance shows -common steps, though communication often happens in different sequence. The -key outcome is that there is opportunity for input across different channels, -with thoughtfulness to accessibility across timezone and communication medium. -We also encourage outreach outside of the group, when there are experts who -might share insights (via invited presentation) or wish to get involved. - - A) On slack, share the issue link and ask whether others are interested in - the problem and have feedback on your proposed solution or activity. - - B) Choose an upcoming meeting where you or another group member who is - interested in working on the project is able to attend, then add the issue - to the meeting agenda: include a link and the name of the person who will - present the proposal in the "Planned Meeting" area of the - [meeting notes][https://github.com/cncf/tag-storage#meeting-times]. - Then at the meeting: - * The presenter should screen share the github issue (or ask the meeting - facilitator ahead of time to do so) and explain the motivation, expected - outcome, ideas that they have for how it might happen, - and ask if others have ideas or questions. - * After a short discussion, people should be invited to chime in on the - github issue and also mention of they - are interested in collaborating. This ensures that solutions are created - with multiple perspectives as well as verifies there is community interest - and energy to work on the proposal. - - C) Discussion continues in the github issue for at least one week, usually - over multiple weeks or sometimes months. - - The outcome of this conversation will be: - * Scope may be refined (or questions from the group may need follow-up - in order to define the scope) - * Criteria for completion are added to the issue that include a "definition - of done", ideally with validation by the target audience. Also note in the - issue if it will be a time-bounded project with a defined deliverable or - and on-going stream of work -- the latter would typically be proposed only - after at least one, usually multiple, projects have been completed. - * At least one person is recommended or nominated as a potential lead. - * Those interested in working on the solution comment on the issue so - coordination may begin and set up time or expectations with others to - begin work. - * A Chair or Technical Lead proposes this as a roadmap proposal or - agrees to act as a "sponsor." - * Sponsor: takes responsibility to ensure that progress - is tracked and that outcomes are reported to the group, including - proposing to close the issue if there is not sufficient activity to - sustain the effort. - * Roadmap: determine there is interest and strong roadmap alignment, - but that there is not enough bandwidth to be confident that this work - can be driven to completion. - -1. **Accept or close the proposal.** - - A) **Accept**: assign to the Sponsor and the Project Lead(s) working on the - effort, with members interested in contributing noted in the issue - descriptions, along with information about expected duration, milestones, - scope, and anticipated deliverables. An accepted - proposal becomes an active project (see below) and the "proposal" label - is removed, the "project" label is added and it is added to the backlog. - - B) **Close**: a github comment on the issue should note the reason and - link to discussion minutes (when decision is reached at a group meeting) - or at least two members of the leadership team should be noted - in agreement (which may include the person who closes the issue). - - C) **Roadmap**: the issue will remain a proposal and be placed on a - roadmap project board. The roadmap is reviewed quarterly. - -### Active projects - -1. **Track progress.** As long as work is ongoing, progress should be tracked -both in the Issue and reported on periodically in meetings. - * Someone working on the project will attend weekly meetings to answer - questions. In case of absence, ensure that github issues is updated and - another member of the group who can attend the meeting is familiar with - progress in case questions arise. - * It's strongly encouraged to include a checklist in the Isssue - that shows what has been done and what work remains and should include a -retrospective. - -1. **Pull Requests.** Completed work should result in a Pull Request (PR). -At minimum, an update to one of the group documents or roadmap indicating that -the work was done. Typically projects will result in an artifact that will -contribute to the information in this repository. - -1. **Discuss the work at a meeting.** If an objection to a PR is made either in -a comment of the PR or during a meeting, the person making the objection and -the person making the proposal will be given time to present their view at the -next meeting. If there are not objections, or if all concerns have been -addressed, and the Pull Request has been stable for 24 hours, a Chair will add -it to the agenda for an upcoming meeting. Ideally, members who contributed to -the project will attend that meeting to present their work or answer questions. - -1. **Vote, if required.** In some cases, there's consensus to accept a -proposal, and a vote is not required. If there’s not consensus among the group, -a formal vote is required. A comment will be left on the proposal prompting -members to vote and indicating the time the vote will close. Only one member -from each company should vote. Members will vote by leaving a comment in the -Pull Request to indicate their vote for or against. Members will have a week -after the vote begins to leave their vote. Quorum is taken to be 2/3 the number -of companies who have been active in the past month (via issue comment or -meeting attendance as recorded in the public minutes). - -1. **Support the project going forward.** Some projects require sustainment and - maintenance to ensure continued relevance for the community. When work is -completed, a new issue and corresponding pull request should be created and -describe the expectations, plans, and ideas for on-going work. It should -include historical information and guidelines for contributions and maintenance - in the README for the project artifact's folder. - -[TOC]: https://www.cncf.io/people/technical-oversight-committee/ diff --git a/governance/related-groups/README.md b/governance/related-groups/README.md deleted file mode 100644 index 4f2bd64..0000000 --- a/governance/related-groups/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Related groups - -These are groups that are affiliated to or do work and cover topics relevant to -the work of Storage TAG. - -## CNCF - -* [CNCF TAGs](https://github.com/cncf/toc#technical-advisory-groups): - Technical Advisory Groups - * [App-Delivery](https://github.com/cncf/tag-app-delivery) - * Storage TAG members: - * [Contributor Strategy](https://github.com/cncf/tag-contributor-strategy) - * Storage TAG members: - * [Network](https://github.com/cncf/tag-network) - * Storage TAG members: - * [Observability](https://github.com/cncf/tag-observability) - * Storage TAG members: - * [Runtime](https://github.com/cncf/tag-runtime) - * Storage TAG members: - * [Security](https://github.com/cncf/tag-security) - * Storage TAG members: - -* [CNCF TOC](https://github.com/cncf/toc): Technical Oversight Committee - * Storage TAG members: - -## Kubernetes - -* [Kubernetes Policy Working Group](https://github.com/kubernetes/community/tree/master/wg-policy) - * Storage TAG members: - -* [Kubernetes SIG-Auth](https://github.com/kubernetes/community/tree/master/sig-auth) - * Storage TAG members: - -* [Kubernetes SIG-Storage](https://github.com/kubernetes/community/tree/master/sig-storage) - * Storage TAG members: - -## Industry - -* [Cloud Storage Alliance Working Groups](https://cloudstoragealliance.org/research/working-groups/) - * Storage TAG members: - -* [IEEE 7009](https://standards.ieee.org/develop/project/7009.html): Standard - for Fail-Safe Design of Autonomous and Semi-Autonomous Systems Working Group - * Storage TAG members: - -* [IEEE - P1915.1](https://web.archive.org/web/20180729062624/https://standards.ieee.org/develop/project/1915.1.html) - (Warning: Archive Link): Standard for Software Defined Networking and Network - Function Virtualization Storage - * Storage TAG members: - -* [IEEE P2675 DevOps Storage](https://standards.ieee.org/develop/project/2675.html) - * Storage TAG members: - -* [IEEE P7000](https://standards.ieee.org/develop/project/7000.html): Series of - interrelated standards in development, including privacy, transparency, etc. - related to ethical concerns in autonomous systems - * Storage TAG members: - -* [IEEE Product Safety Engineering Society](http://ewh.ieee.org/soc/pses/) - * Storage TAG members: - -* [NIST Big Data WG](https://bigdatawg.nist.gov/) - * Storage TAG members: - -* [NIST Computer Storage Resource Center](https://csrc.nist.gov/) - * Storage TAG members: - -* [OpenSSF SLSA Maintainers](https://slsa.dev/) - * Storage TAG members: - -## Don't see a group mentioned or notice a group that needs an update ? - -Please consider adding or updating the group using the following -[guide](adding-or-updating-groups.md) diff --git a/governance/related-groups/adding-or-updating-groups.md b/governance/related-groups/adding-or-updating-groups.md deleted file mode 100644 index de31023..0000000 --- a/governance/related-groups/adding-or-updating-groups.md +++ /dev/null @@ -1,26 +0,0 @@ -# Editing the related groups list - -## Updating an existing group - -We welcome PRs regarding updates to an existing group when: - -1. The name of the group changes -2. The web hosting link, or the charter of the group changes -3. When the group is retired - -## Adding a new group - -We welcome PRs regarding addition of new groups, when: - -1. The group is not part of the existing list -2. The group is relevant to cloud native security -3. Ownership of the group is shared with more than one independent entities -4. Information such as charter, projects, artifacts of the group should be - publicly accessible - -## Naming convention - -1. Group names in alphabetical order within each category -2. When the name is not self-explanatory, it is recommended - to add a short blurb about the group -3. Use [Title Case](https://titlecaseconverter.com/) for the group name diff --git a/governance/roles.md b/governance/roles.md deleted file mode 100644 index e4036a7..0000000 --- a/governance/roles.md +++ /dev/null @@ -1,342 +0,0 @@ -# Roles within the TAG - -The TAG includes several key roles that are critical to the group's success. -The group will have many members, all serving in varying capacities. Within -this document, "member" may refer to a Chair, a Technical Lead, or other -Member roles. - -The following is the current listing of member roles: - -* [Three Chairs](#role-of-chairs) -* [Technical Leads](#role-of-technical-leads) -* [Chair Emeriti](#role-of-chair-emeriti) -* [Project Leads](#role-of-project-leads) -* [STAG Representatives](#role-of-stag-representatives) -* [Team leads](#role-of-team-leads) -* [Group Members](#role-of-members) -* [TOC Liaison](#toc-liaison) -* [Facilitation Roles](#facilitation-roles) - -All members are identified in the TAG [README](/README.md), with annotations -where they hold an additional role. - -Members fulfilling any Roles in Storage TAG are responsible for understanding -and abiding the by the [governance](./) and policies defined in this group. -This commitment and execution of understanding includes not only commits to -the repo, but also to any approvals or direction required by their Role. - -**Write access to the repo**: Where applicable, the following roles define -specific areas of the repo or actions on issues where changes require write -access. In any case, governance is not enforced by [access permissions](github.md), -but rather by members who are expected to thoughtfully consider their actions -to support the group. - -## Role of members - -* The primary role of a member is to contribute expertise to the group. -* To add yourself as a member, submit a Pull Request (PR) adding yourself -to the list of members. - -### Maintaining active members - -* Members *SHOULD* remain active and responsive in their Roles. -* Members taking an extended leave of 1 or more months *SHOULD* coordinate with -other members to ensure the role is adequately staffed during the leave. -* Members going on leave for 1-3 months *MAY* work with other members to -identify a temporary replacement. -* Members of a role *SHOULD* remove any other members that have not -communicated a leave of absence and either cannot be reached for more than 1 -month or are not fulfilling their documented responsibilities for more than 1 -month. This may be done through a super-majority vote of members, or if there -are not enough *active* members to get a super-majority of votes cast, then -removal may occur through a super-majority vote of the Chairs. -* Members contribute to projects, according to the standard group - [process](process.md). - -### Managing membership - -* Membership disagreements may be escalated to the Chairs. Disagreements -among the Chairs may be escalated to a Storage TAG TOC Liaison. -* Members *MAY* decide to step down at anytime and optionally propose a -replacement. - -## Role of chairs - -While CNCF TOC allows for Chairs to serve in purely administrative roles, -The Storage TAG was formed with deeply technical Chairs based on early need -to navigate a complex storage landscape. If the TAG has less than two Technical -Leads, any Chair may act as Technical Lead. - -* Primary role of Chairs is to run operations and the governance of the group. -* The Chairs are responsible for ensuring that group meetings are planned -and facilitated effectively, while also engaging group members in leadership -roles. Effective facilitation includes (but is not limited to) the following -activities: - * setting the agenda for meetings - * extending discussion via asynchronous communication to be inclusive of -members who cannot attend a specific meeting time. - * scheduling discussion of proposals that have been submitted - * asking for new proposals to be made to address an identified need - * partnering with Technical Leads to establish a roadmap and manage ongoing - projects - -## Role of technical leads - -Technical Leads (TLs) expand the bandwidth of the leadership team. Proposals -must have a TL or Chair working as an active sponsor (as detailed in -[TAG process](process.md)). - -The general list of activities for TL are: - -* Establish new sub-projects -* Decommission existing sub-projects -* Resolve cross-sub-project technical issues and decisions -* Propose agenda items for meetings to ensure that open issues are - discussed with the group when needed - -TLs are assigned by CNCF Technical Oversight Committee (see [CNCF TAG Tech Lead -nomination and election -process](https://github.com/cncf/toc/blob/master/tags/cncf-tags.md#elections)) -following the [Storage TAG's TL nomination -process](tech-lead-proposal-process.md). - -## Role of chair emeriti - -After a [Chair](#role-of-chairs) finishes their term, they transition into a role -of Chair Emeritus. This allows previous Chairs to continue to chime in and provide -valuable context and contributions to the TAG. A Chair Emeritus can assume a role -of a [technical lead](#roles-of-technical-leads), but in doing so, must be active -in communicating with the co-chairs and technical leads (i.e. participating in the -chair/TL slack and meetings). A Chair Emeritus has the same permissions/access as -technical leads. - -## Role of project leads - -Project Leads lead specific projects where a deliverable has been defined -within the issue. - -Project Leads are nominated and approved by the following process: - - 1. Project Lead actively participates in the group, initiates the proposal or - volunteers to take on a project that has been prioritized by the group - 1. A Chair or TL nominates a candidate, or requests the community to - nominate in a slack thread - 1. The nomination is communicated via a pull request annotating the list - of members in the [TAG README](/README.md) with a link to the issue tracking - the project or on the issue tracking the project if a README is not yet made. - The nomination is typically open for a week (but may be shorter with LGTM - of at least two Chairs). - 1. The issue is updated with the assignment of the project lead as "assignee" - alongside the TAG Leadership member. - 1. Project Leads will be given the OWNER role of the directory or sub-directory - for their team's activities in order to empower merge/approve. - -### On-going projects - - On the occasion where a project becomes long term, Project Leads are also - given the OWNER role of the directory or sub-directory along with 1 other - nominated individual to ensure continuity in review and ongoing support of - the project. - -Depending on the expected length of the project, Project Leads may be assigned -as OWNERS of the project directory in this repository to help facilitate and - moderate new content to the project. - -### Duties of a project lead - -Project leads are responsible for the following: - -- Adhering to the [project process](https://github.com/cncf/tag-storage/blob/main/governance/process.md) -- Proposing and refining the project scope, goal and schedule -- Ensure smooth day-to-day operations of the project. This includes: - - Ensuring meetings are scheduled, announced and recorded - - Facilitation of meetings, ensuring minutes are recorded -- Ensure progress and status reports are communicated to the STAG -representative of the project -- Resolving conflict within the project and escalating to leadership -when required -- Outreach and recruitment for the project -- Provide retrospective of a project to the STAG - -## Role of STAG representatives - -STAG representatives are leadership executive sponsors of a project. The -STAG representative acts as a point of liaison with the STAG leadership team -and takes on a role of mentorship for the project lead(s). - -STAG representatives are required to be part of the STAG leadership team. -This includes co-chairs, technical leads and co-chair emeritus roles. -A STAG representative may be of capacity of an individual contributor but -cannot be the project lead of the same project they are representing. - -STAG representatives are appointed through the following process: - -- A member of the leadership indicates that they would like to be a STAG -representative on a project by: - - editing the issue's "STAG Representative" field to their github ID. - - setting the issue milestone to the corresponding milestone created for - their github ID. -- STAG representatives may change based on discretion of co-chairs. - -### Duties of a STAG representative - -STAG representatives are responsible for the following: - -- Reporting back to the leadership on the status of the project, indicating -when the project requires external governance help. For example, these -include: - - Project is understaffed or suffers from rampant scope creep. - - Project is inactive and needs to be discontinued. - - Inter-personal issues within leads and/or members causing disruption. -- Provide feedback to project lead to whether the current scope and operation -of a project is in line with the vision and governance of the STAG. -- Mentorship of project leads on matters of leadership and governance process. -- Provide privilege facilities that a project lead does not have access to. -Examples are: - - Creating a ServiceNow ticket with the CNCF for design help - - Uploading of meeting recordings to youtube - - Approval of messages to STAG mailing list - -## Role of Team Leads - -Team Leads lead larger streams of work that require sustained effort and -coordination and remain ongoing. - -Teams must have a Chair sponsor to maintain visibility in the team's work -and to ensure it is progressing. The Chair sponsor also provides review -and approval as part of the process whether be on engagement or deliverable -publishing (such as with papers). - -On-going projects may not imply a team, and in such case the leadership role -described below to sustain and coordinate. The on-going project leadership - position may have an alternate title, such as our initial "Storage Assessment - Facilitator." - -Team Leads are nominated and approved by the following process: - - 1. Team Lead actively participates in the group, initiates the proposal or - volunteers to lead a stream that has been prioritized by the group - 1. A Chair or TL nominates a candidate. - 1. The nomination is communicated via a pull request annotating the list of - members in the [TAG README](/README.md) with a link to the issue tracking - the stream of work. - The nomination is typically open for a week (but may be shorter with LGTM of at - least two Chairs). - 1. Members are encouraged to review any existing, relevant issues and work together - to ensure the Team Lead is set up for success or suggest alternatives. - 1. A sub-directory with a README is created with details on how to get involved. - 1. Team Leads will be given the OWNER role of the directory or sub-directory for - their team's activities in order to empower merge/approve. - -## TOC liaison - -The [CNCF TAG](https://github.com/cncf/toc/blob/master/tags) process identifies -a TOC Liaison. The TAG Chairs are responsible for establishing effective -communication with the TOC liaison, including further communication to the -wider TOC upon request. - -The TOC Liaison will occasionally prioritize TAG activities, as needed by the -TOC, to further the [CNCF mission](https://github.com/cncf/foundation/blob/master/charter.md#1-mission-of-the-cloud-native-computing-foundation). - -## Facilitation roles - -Members often contribute by working in small groups that research and discuss -options and then share their findings with the rest of the group in a -presentation and typically contribute to the body of work in this -repository (via Pull Request). Some tasks can be effectively executed -by simply chiming in on a github issue and independently contributing a PR -without any particular role or authorization. - -This section describes roles where more coordination is helpful and the -work benefits from identifying one or more members who will take -on specific responsibilities. Our goal is to empower members to move forward -independently, while defining an approval process designed to support -communication and alignment across the wider group. - -New roles in this section are typically defined after someone has acted in -that role for some time informally, then proposed as an on-going role by Pull -Request which must be approved by a majority of Chairs. Process clarifications -are welcome and PRs can be approved by any single Chair. - -### Storage review facilitator - -[Storage Reviews](/assessments) are part of the ongoing work of the group -and led by a Storage Assessment Facilitator, who will: - -* coordinate storage review leads for upcoming storage assessments. -* identify and recommend storage reviewers. -* contribute to process improvements. -* review and merge PRs in the /assessments directory (ensuring co-chair review - of significant process changes). -* triage issues related to storage assessments. - -### Meeting facilitator - -The group meetings are an important part of community building and the -facilitator ensures a welcoming and inclusive atmosphere. In keeping with these -goals, the meeting facilitator has the following responsibilities: - -* prepares the meeting notes with template and agenda -* coordinates with presenter, if applicable -* ensures there are scribes -* runs meeting check-in, including partner groups -* leads the meeting through the agenda - -Prerequisites: - -* active member -* history of regular attendance - -One or more of the following: - -* served in another facilitator role -* leader on a project team -* tech lead -* co-chair - -Any member who meets the above qualifications is encouraged to add themselves -to the [list of people in this role](/.github/settings.yml). - -### Meeting Scribe(s) - -Each meeting must have at a minimal one scribe and preferable with two. - -Scribe is expected to perform the following: - -* Plan to coordinate/review meeting Agenda with facilitator via Slack before -start of meeting -* Summarize discussions and capture into meeting notes (not transcribe verbatim) -* Clarify and annotate actions as discussion progresses with assignee and due -dates -* Partner with Facilitator to capture major occurring items in the meeting -* Add links to issues being discussed if not already in Agenda -* Open new issues to track action items from meeting - -### Triage team - -All members are expected to review Pull Requests (PRs), comment on issues, and -provide meaningful feedback or helpful references. - -Members who have contributed regularly, including discussion on multiple -PRs and submitting PRs themselves, can volunteer to participate as a member -of the Triage Team. Interested members should first join `#tag-storage-triage` -on Slack and flag issues that need attention, ask questions and volunteer -to take on process improvement PRs that may arise. - -When there is a vacancy or need additional help, they will ask on Slack for -volunteers to officially join the team. - -Each member of the Triage Team will: - -* assign labels to issues. -* comment where issues need more detail. -* recommend proposals or suggestions for discussion at working session meetings. -* participate on #tag-storage-triage slack channel. - -### Project teams - -Some ongoing projects may have teams where members are identified for -additional roles and may be required to have specific expertise. For visibility, -these additional project roles are listed below: - -* [Storage Reviewers](../assessments/guide/storage-reviewer.md) diff --git a/governance/tech-lead-proposal-process.md b/governance/tech-lead-proposal-process.md deleted file mode 100644 index a5bf152..0000000 --- a/governance/tech-lead-proposal-process.md +++ /dev/null @@ -1,126 +0,0 @@ - -# Storage TAG Technical Lead Proposal Process - -Storage Technical Leads operate as a team alongside the Co-Chairs. The Co-Chair -team seeks enhance the leadership capabilities of the existing co-chairs across -the key qualities of industry experience, hands-on cloud-native and storage -experience, as well as administrative experience needed to assist in the -execution of the various projects and efforts that make the Storage TAG so -successful. - -## Caveats of Technical Leads - -* The position of a technical lead does not guarantee future co-chair nomination -* The position of a technical lead is not a paid position (co-chairs are also - not paid positions) -* Technical leads [have responsibilities](roles.md) to the Storage TAG, the - leadership team, and the TOC -* Nominations by the community (with co-chair endorsement) or co-chairs still - [requires TOC - approval](https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#elections) - -## Process of nominations - -Depending on the needs of the community, as determined by the Storage TAG -leadership team, technical lead nominations may come in the form of "Nominees by -community", "Nominees by co-chairs", or both. - -The Storage TAG does not have a current limit on the amount of technical leads. - -Final technical lead nominations will adhere to the [CNCF's TOC described -process](https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#elections). - -### Nominees by community - -Community nominees should adhere to the technical lead nomination requirements -described below. Any individual who is a member of the Storage TAG list or the -tag-storage slack channel may nominate another individual. - -The co-chairs reserve the right to endorse a nominee by the community based on: - -* Gender diversity -* Company diversity -* Geo diversity -* Amount of nominations from different companies, people, regions for a single - individual -* Existing body of work -* Justification provided during nomination - -#### Community timeline - -Community nominations will run for at least 1 month with a maximum up to 2 -months. Upon close of nominations a decision will be made by the co-chairs -within the next month in order to conform to the TOC process. - -#### Submitting a nomination - -Nominations are to be submitted to [Storage TAG Co-Chairs email -alias](mailto:cncf-tag-storage-chairs@lists.cncf.io) with the details: - -* Subject "Technical Lead nomination: $NAME-OF-NOMINEE" -* CC the nominee -* TL requirements with examples (described below) -* Justification - -#### Endorsement of community nominees - -Co-chairs are responsible for providing endorsement of a community nominee to -show concurrence and support. - -If no nominees are submitted by the community either as a result of lack of -participation, lack of requirements, or from co-chair specific selection -(non-community nomination process), the co-chairs must endeavor to nominate an -individual(s) that meet as many of the requirements as exist. - -### Nominees by co-chairs - -Nominees by co-chairs adhere to the technical lead requirements described below. -Co-chairs are responsible for documenting statistic information of all nominee -types for endorsement and presentation to the TOC. - -## Technical Lead nomination requirements - -In order to verify nominees by the community or by co-chairs have experience -with the group and are actively contributing in a meaningful way, the following -requirements must be met in order for an individual to be nominated. - -If a given nominee does not meet all the requirements, the co-chairs will still -review the nomination and justification to determine if enough intent and -commitment is present to move forward with an endorsement. - -Nominees must: - - -* have been project or review lead on at least one project or storage assessment/review -* be the author of at least one pull request against the Storage TAG repository -* be active in the community within the last 6 months prior to their nomination. - * active - Attending at least 1 Storage TAG Regular Meeting a month - * engaging in community chat via slack or lists - * commenting on PRs and issues to drive suggestions to proposals, define scope, - resolve clarity issues, etc. -* agree to the nomination - - -Nominations must: - -* come from someone other than the nominee -* have justification from the nominator regarding the nominee's capabilities - -### Justification for nominees - -To ensure nominations are thoughtful and supported, in addition to the above -requirements, a justification must enumerate on the nominee's: - -* STAG Community involvement -* leadership skills -* conflict resolution (technical and non-technical) -* mentorship -* willingness to learn and expand existing technical knowledge -* and any known affiliations or group memberships (if applicable) - -## Announcing nomination results - -The co-chairs will release aggregate information about the nominees at the end -of the nomination process once the Technical Leads have been put forward for -approval by the TOC. Aggregate information will not include who nominated -someone. diff --git a/governance/tech-lead-transition.md b/governance/tech-lead-transition.md deleted file mode 100644 index e18b59d..0000000 --- a/governance/tech-lead-transition.md +++ /dev/null @@ -1,33 +0,0 @@ -# Tech Lead transition checklist - -This checklist should be copied into a new issue for when a new tech lead(s) is needed. - -## Nomination - -For nomination process please refer to [tech-lead-proposal-process](./tech-lead-proposal-process.md) - -## Transfer - -* [ ] Transfer Logistics - * [ ] #tag-storage-chairs-and-tech-leads channel - add new TL(s) - * [ ] tag-leadership mailing list - add new TL(s) - * [ ] add TL to chairs/leads meeting - * [ ] add TL to [github team](https://github.com/orgs/cncf/teams/tag-storage/) - * [ ] tag-storage repo PR: - * [ ] Update codeowners, github settings, README (TOC Liaisons and chairs - have admin access, tech leads have push access). - * [ ] Link to official vote email list message in PR descriptions - * [ ] Add STAG milestone to track STAG rep for TL - * [ ] [TOC Repo update](https://github.com/cncf/toc/blob/main/tags/storage.md) - * [ ] Verify new TLs have zoom credentials - * [ ] Introduce new TL selection, in the next steering committee meeting slide - * [ ] YouTube Channel - * [ ] invite new TLs (if needed) - * [ ] give "managers" permission - -## Announce - -* [ ] Announce the vote - * [ ] #tag-storage slack message - * [ ] email message to the tag-storage list - * [ ] Storage TAG meeting Announcement for each region diff --git a/governance/tools.md b/governance/tools.md deleted file mode 100644 index c8cb345..0000000 --- a/governance/tools.md +++ /dev/null @@ -1,12 +0,0 @@ -# Tools - -This document contains a set of tools that will be useful to storage reviewers and project leads. This is not an endorsement of any vendor or open source project, rather a collection of what has been useful to individuals to help share helpful suggestions to others in the group. - -## Document conversion - -Documents, such as [self-assessments] are sometimes initially drafted in a Google doc, which facilitates discussion. At the end of the -review, the documents needs to be converted to markdown so that they can be added to the github repository. - -List of tools: -- [Pandoc](https://pandoc.org/) -- [Google Docs extension: docs-to-markdown](https://chrome.google.com/webstore/detail/docs-to-markdown/igffnbdfnodiaphfmfaiiaegmoljbghf) From ed33e1c127255f56641cf70eaa1f9b6f921dd92a Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 23:33:44 +0700 Subject: [PATCH 56/59] update --- slack.md | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/slack.md b/slack.md index bfe8751..73e21bd 100644 --- a/slack.md +++ b/slack.md @@ -1,15 +1,6 @@ # TAG-Storage channels housekeeping -## Identifying and creating channels -Just for approved projects, "sec-assessment-xxxx" exception TAG-Storage channels -are identified with the “tag-storage-” prefix. Except during conferences, the -CNCF permits slack members to create channels; however, tag-storage-related -channels should only be created by chairs or tech leads, and are typically -prefixed by tag-storage- following hyphenation of the topic/subject. This -helps the community find topics of relevance as well as discover areas to -collaborate. - -It is requested that channels include a header for what it is used for. +We're located on the CNCF workspace at [#tag-storage](https://cloud-native.slack.com/archives/C6PK4RLF7) Additional information may be found in the [CNCF slack guidelines](https://github.com/cncf/foundation/blob/master/slack-guidelines.md). From 109f13013bb492a4bf19396ec443206f2fcd0304 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 23:36:05 +0700 Subject: [PATCH 57/59] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ad59dd2..018693a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ progress updates or post questions in these channels: Group communication: -- [Email list](https://lists.cncf.io/g/cncf-tag-storage) +- [Email list](https://lists.cncf.io/g/cncf-tag-storage) [Old WG list](https://groups.google.com/forum/#!forum/cncf-wg-storage) - [CNCF Slack](https://slack.cncf.io/) #tag-storage channel Leadership: From 758b0325da6f3b48c3336c69e4163dc0232375c5 Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 23:37:52 +0700 Subject: [PATCH 58/59] update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 018693a..ad59dd2 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ progress updates or post questions in these channels: Group communication: -- [Email list](https://lists.cncf.io/g/cncf-tag-storage) [Old WG list](https://groups.google.com/forum/#!forum/cncf-wg-storage) +- [Email list](https://lists.cncf.io/g/cncf-tag-storage) - [CNCF Slack](https://slack.cncf.io/) #tag-storage channel Leadership: From cd885e00eb56652fafdb12606389a11f88d1ebeb Mon Sep 17 00:00:00 2001 From: Wesley Steehouwer Date: Tue, 15 Feb 2022 23:39:28 +0700 Subject: [PATCH 59/59] update --- README.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/README.md b/README.md index ad59dd2..5f12187 100644 --- a/README.md +++ b/README.md @@ -92,11 +92,6 @@ list below: If you are new to the group, we encourage you to check out our [New Members Page](NEW-MEMBERS.md) -## Related groups - -There are several groups that are affiliated to or do work and cover topics relevant - to the work of storage TAG. These can be seen [here](governance/related-groups/) - ## Members