Rebase on main - #420
Conversation
MTO undersold itself: the entry pages listed features without saying what the product is, and the Console — the thing both personas actually use — was not part of the story at all. - index.md: positioning statement + the six capability areas (Multi-Tenancy, Templates, FinOps, Hibernation, Extensions, Console) and the Tenant as the single object everything hangs off; split "Evaluating MTO" from "Running MTO" so prospects and customers see the seam. - overview/how-it-works.md (new): the reconciliation path end to end, with a Mermaid sequence diagram (controllers reconcile, webhook enforces at write time) and a component diagram of the platform Pilot provisions. - overview/benefits.md -> overview/why-mto.md: reframed as the business argument, including what MTO does not do. - overview/key-features.md: "Key Capabilities", regrouped into the six areas with an anchor index. - overview/use-cases.md: rewritten around the two tenancy shapes (multi-team, multi-customer) plus where MTO is not the right answer. - console/overview.md: persona-led — administrators vs tenant users over the same objects, with a page map. - theme_override/mkdocs.yml: nav for the new pages and redirects so the old benefits/about URLs keep working.
…uracy Landing 2 of the docs overhaul. Overview now sells MTO honestly; these are the pillars the docs previously left untold or described wrongly. - concepts/extensions.md: rewritten around the four distinct extension mechanisms, because conflating them is what made this page confusing. The Extensions CR is genuinely ArgoCD-only (tenantName + argoCD); Vault is driven from IntegrationConfig.spec.integrations; DevWorkspace needs only namespace metadata; Mattermost is a companion operator triggered by a Tenant label. Adds a "choosing where to configure" decision list. - console/showback.md: rewritten as the FinOps narrative — how the number is produced (sampled, aggregated, priced, stored), why the tenant boundary makes attribution correct without a tagging scheme, and what showback/chargeback are actually used for. - overview/key-features.md: hibernation was described as per-tenant configuration. That was wrong as of MTO v1.7 — spec.hibernation left the Tenant CR and hibernation is now a ClusterResourceSupervisor targeting namespaces by label selector, in scheduled and instant modes. - overview/how-it-works.md: same correction, ResourceSupervisor -> ClusterResourceSupervisor in both places. - getting-started/uninstalling.md: repoint the onDeletePurgeAppProject anchor at the heading that now carries it (the extensions.md rewrite orphaned the old one and aborted the strict build). Gates: mkdocs build --strict clean, vale clean, markdownlint clean on all five files.
The OpenShift install guide enabled the console but never said how the `mto` user gets administrator access, so a fresh install left the login without visibility into tenants or the IntegrationConfig. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Rewrite the Grafana integration page
Added dividers between merged sections
Add an overview page to the Integrations section
Add the LGTM stack and Integrations overview pages
Adopt the agreed information architecture: five capability pillars, each an Overview / Concepts / Guides triple, replacing the flat Concepts, Guides and Integrations sections. The pillars are the same six capability areas the Overview narrative already leads with, so nav and narrative now agree. - Multi-Tenancy, Templates, FinOps, Hibernation and Extensions each gain a hand-written Overview stating the customer problem and what MTO provides. - concepts/ splits: tenant/quota/integration-config to Multi-Tenancy, extensions to Extensions, architecture/terminology to Overview (both are product-wide, and merge.yaml already marks them as MTO-owned shared pages). - guides/ splits: hibernate-tenant to Hibernation, the rest to Multi-Tenancy. - integrations/ dissolves: ArgoCD, Vault, DevWorkspace and Mattermost to Extensions guides; AWS/Azure pricing to FinOps guides. - New top-level Administration collects what running all pillars on one cluster makes an administrator responsible for, and absorbs the five non-API reference pages plus troubleshooting. Reference is now the merged generated API reference only, per the agreed tree. - Release Notes becomes Changelog; Learn is added with the two pages that have content (the remaining comparison pages are still being written). Every moved URL gets a redirect, so existing bookmarks and inbound links keep working; the pre-restructure redirect targets are repointed at the new paths rather than chained. merge.yaml previously mapped both sub-operators' concepts/** and guides/** into single flat Concepts and Guides sections, which no longer exist. Each sub-operator now merges into its own pillar, so `under` needs a path -- five pillars each own a section called Concepts. merge_docs.py gains resolve_section(), which walks a slash-separated `under` and creates missing levels, so a pillar whose Concepts or Guides come entirely from a sub-operator does not need an empty section in mkdocs.yml. Sub-operator administration/** is excluded: it documents standalone deployment, which does not apply here. MkDocs' default exclude_docs drops a top-level /templates/ directory, which is the Templates pillar; exclude_docs is overridden to keep only the dotfile rule. Gates: mkdocs build --strict clean (57/57 screenshots staged), vale 0/0 on the six new pages, markdownlint clean on them apart from MD060, which is not CI enforced. tests/test_merge_docs.py 49 passed, including five new cases for path-addressed `under`.
This reverts commit 73aa353.
# Conflicts: # theme_override/mkdocs.yml
…ations From the Overview drafts. Three gaps in the evaluator-facing layer: - Deployment Models (new). The isolation architecture and the tenant operating model are separate decisions, and conflating them is what makes the "namespaces or clusters?" question circular. Covers shared, virtual and dedicated clusters plus hybrid platforms, says plainly that a virtual cluster answers a different question from MTO rather than competing with it, and carries the comparison table. Also states the limits honestly: MTO installs per cluster, does not federate, and has no fleet-wide view. - Use Cases reorganised from two tenancy shapes to eight recognisable situations, so an evaluator finds themselves rather than a taxonomy: enterprise platform teams, service providers, development and test platforms, standardization, cost accountability, multi-tenant GitOps, shared secrets management, and IDP foundation. Keeps the Tenant example and the honest "not the right answer" section, adds "where MTO fits best". - Why MTO gains the missing-abstraction argument up front: Kubernetes models each resource but has no concept of "this is Tenant A, and the platform services around the cluster must respect the same boundary". Overview nav reordered to the reading path an evaluator actually takes: what it is, why, what it does, how it works, how it is built, where it fits, who it is for. Secrets management now names OpenBao alongside Vault, following the OpenBao extension merged to main. Gates: mkdocs build --strict clean (57/57 screenshots), vale 0/0 on all three files, markdownlint clean apart from MD060 (not CI enforced).
The Learn section was scaffolded filename-first: an index promising 15 pages, one page written as the template, and 14 files that were empty or a bare outline. This writes them and adds the section to the nav. Concepts and architecture: - Kubernetes Multi-Tenancy — models, soft against hard tenancy, failure modes - Namespace-Based Multi-Tenancy — what a namespace does and does not isolate - What is a Tenant in Kubernetes? — the abstraction Kubernetes lacks - Tenant Lifecycle Management — onboarding through offboarding - Multi-Tenant Kubernetes Architecture — the layers, and the anti-patterns - How to Implement Kubernetes Multi-Tenancy — order of work, and which decisions are expensive to reverse Comparisons, grouped by the layer each tool addresses rather than by name, because most "MTO alternative" lists mix the two: - Same layer, genuinely comparable: Capsule, HNC, Capsule Alternatives - Isolation layer, complementary rather than competing: vCluster, Loft, Kamaji, HyperShift, KCP The spine of every comparison is that isolation and the tenant operating model are separate decisions — the same argument Deployment Models makes on the product side. Claims about other projects are kept to durable architectural facts rather than feature matrices that go stale, and each page says plainly where MTO is not the answer. Corrections to mto-vs-vcluster.md, the one page that already existed: - It claimed MTO's FinOps includes budgets and alerts, in three places including a direct FAQ answer. Those are roadmap, not shipped, and nothing else in the docs describes them. Replaced with what MTO does provide — cost and usage analysis, showback, chargeback, capacity planning — and the FAQ now says explicitly that budgets and alerts are not part of the product today. - "Excellent (100s-1000s tenants)" replaced with the architectural fact that supports it: no per-tenant control plane, so the bound is cluster capacity. - MD026 and MD032 violations fixed. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060 (not CI enforced), vale 0/0 across all 16 files. Known follow-up: "Clastix" is not in the shared Stakater Vale vocabulary, so CI will report it as a spelling error until it is added to stakater/vale-package. It is a company name and correct as written.
The comparisons argued MTO's breadth unevenly. The same-layer pages (Capsule, HNC) walked it capability by capability; the isolation-layer pages said "governance is unsolved" without naming what a customer then has to buy or build. Tenancy is the foundation the other pillars stand on, and a comparison that stops at tenancy understates the decision. - kubernetes-multi-tenancy-tools.md gains "What you assemble instead": a capability-by-capability table of what MTO includes against what has to be sourced and integrated otherwise — tenancy, standardization, cost, idle environments, GitOps tenancy, secrets tenancy, developer tooling, interface. The point it closes on is that the cost is not the first integration but the seventh, and keeping all of them agreeing about who a tenant is. - vCluster, Kamaji and HyperShift each gain the same list, framed for what that isolation layer specifically leaves behind. - Loft gets a narrower and more honest version: vCluster Platform genuinely covers self-service, templates and sleep mode, so only the organizational tenant, cost attributed to it, and GitOps tenancy remain. - Capsule and HNC cross-link to the table rather than repeating it. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0 across all 16 files.
The docs repeatedly said MTO is for "tenants inside one organization's trust boundary" and not the answer for untrusted tenants. That framing rules MTO out of the service-provider and telecommunications case, which is one of its strongest — and it is wrong, because it asks the wrong question first. The question is not how much you trust a tenant. It is whether the tenant holds cluster credentials at all: - Tenants use kubectl — the cluster boundary is the boundary the tenant experiences, and trust decides the isolation model. Typical internally. - Tenants use a product — a portal, an API or a logical control plane in front, no cluster credentials issued. The shared cluster is then an implementation detail behind the product rather than a boundary the customer is on the other side of, and MTO does the tenancy, quota, template, FinOps, hibernation and extension groundwork underneath. The second shape is how most service providers and telecommunications platforms serve entirely external customers from one shared cluster. - deployment-models.md gains "When tenants never touch the cluster API" with a diagram of the stack and what MTO contributes beneath the product layer. - why-mto.md, use-cases.md, namespace-based-multi-tenancy.md, kubernetes-multi-tenancy.md, multi-tenant-kubernetes-architecture.md and kubernetes-multi-tenancy-implementation.md have every "trust boundary" and "untrusted" claim requalified against credential-holding rather than trust. - multi-tenant-kubernetes-architecture.md's Access model section now asks whether tenants reach the API at all before discussing how access is derived. - mto-vs-vcluster.md carried the strongest version of the wrong claim in seven places, including "Best for: External / untrusted tenants" and "Not suitable for hostile multi-tenancy". All requalified. - mto-vs-kamaji.md, mto-vs-hypershift.md and mto-vs-loft.md likewise. mto-vs-kcp.md changes character as a result. The two are still rarely the same decision, but they are frequently the same architecture: logical control planes give each customer an isolated API surface, MTO governs the shared cluster the workloads run on. That composition is now documented with a diagram, and the page no longer reads as "these are unrelated". Also corrects the remaining "where MTO is not the right answer" text so the limit is stated precisely — a tenant holding cluster credentials that needs a boundary a shared API server cannot give — and notes that even then MTO usually applies inside the isolated cluster, which is itself shared by several teams. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0 across all 21 changed files.
Two independent model reviews converged on the same defect, and it was mine. Every comparison page opened its description of MTO with tenancy as the subject and the other five pillars in a subordinate clause: - tools: "adds a Tenant abstraction... It also covers the layers most governance tooling leaves out" - capsule: "covering the same tenant governance ground, plus the layers most platforms need next" - capsule-alternatives: "and then continues into the areas Capsule leaves out" - loft: "...standard metadata and templates — plus cost attribution, hibernation, and extension" A skimmer who stops after the first sentence leaves with "tenancy operator", which is the one outcome to avoid. All four now open with the six capability areas and place tenancy as one of them: the foundation the other five stand on, not the extent of the product. Also from the reviews: - mto-vs-vcluster.md still told external-customer buyers to leave, three commits after that was supposedly fixed. "Tenants are within the same organization", "MTO is for efficient internal multi-tenancy", "Use MTO for internal platforms", and a hybrid section reading "vCluster per customer". The earlier pass grepped for untrusted/hostile/trust-boundary and missed every instance phrased as "internal". - That page also argued MTO's case almost entirely on vCluster's home ground — isolation, scale, ops efficiency — with FinOps the only non-tenancy pillar present. Added Standardization, Idle environment cost, Ecosystem integrations and Interface, so four more pillars appear where the comparison is actually made. Vault and OpenBao were previously not mentioned once. - "Complexity: Low" contradicted how-it-works.md, which shows MTO installing PostgreSQL, Dex, Prometheus and OpenCost. Replaced with what is actually true of each. - Console was absent from deployment-models.md entirely. - mto-vs-capsule.md's "what you assemble instead" was three sentences and a link on a 190-line page. It is now the capability-by-capability table, in place, since it is the argument the page exists to make. - index.md addresses the name directly: it describes where the product starts, not where it stops. Honesty fixes the adversarial review surfaced: - Hibernation was sold as "you stop paying for capacity nobody is using". That holds with a cluster autoscaler; on fixed on-premise capacity it releases headroom and defers the next purchase rather than reducing an invoice. Both why-mto.md and key-features.md now say so, and note that PersistentVolumeClaims keep costing while workloads sleep. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0 across all 22 changed files.
Buyers ask how MTO is priced and the page said only "contact sales". The useful answer is not a number, it is the dimension the licence scales with — buyers accept a stated metric and object to opacity. Two shapes, described neutrally: - An internal platform, where scale tracks the clusters you operate, so the licence follows the cluster. Stated plainly because it is settled practice today, and clarity here costs nothing. - A platform you sell, where infrastructure is a poor measure because one large bare-metal cluster can carry a great many customers. Licensing is agreed against the scale of the service instead. Deliberately concrete on the first and open on the second, since the model for providers is not settled. Publishing a model that later changes reads as a bait-and-switch, and is worse than saying less. The framing throughout is proportionality — same product, same capabilities, only the measure differs — rather than anything a provider could read as being charged more for being able to afford it. The section closes with the four facts to bring to a pricing conversation, which turns "it depends" into a checklist and is the part that keeps it from reading as evasive. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0.
Removed at the product owner's request, and it was the wrong thing to add. The heading framed the page around a sales conversation rather than around the reader's question, which is what the editions and the licence measure are for. The three links it carried — deployment models, comparisons, installation — are already offered from the Overview pages, where a reader looking for them actually is. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0.
Replaces the two-shapes framing with the actual rule: one Enterprise licence per cluster MTO is installed on, whatever number of tenants, namespaces or nodes that cluster carries. The earlier section described internal platforms and provider platforms as being measured differently. That was accurate about the open question and wrong for the page. A buyer comparing products wants a rule they can put in a spreadsheet, and anything that reads as "it depends" costs more deals than it protects margin — particularly at a stage where the goal is more customers. No hedging language about the model possibly changing. The docs are versioned per release, so the statement is already scoped to the current version, and a caveat would undo the simplicity that is the point of the change. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0.
The Slack channel link in pricing.md returns 403 to markdown-link-check. It is not a dead link — Slack archive URLs require workspace membership, so an unauthenticated checker can never reach one. It failed intermittently rather than always because Slack's response varies under rate limiting, which is also why retryOn429 does not help: the status is 403, not 429. Added an ignore pattern for the workspace host rather than the single URL, so any future channel link there is covered too. Scoped to stakater-community.slack.com specifically, so a genuinely checkable slack.com page would still be verified. Deliberately not fixed by adding 403 to aliveStatusCodes, which would mask real authorization failures across every other link in the docs. Verified: markdown-link-check now reports the Slack URL as skipped and pricing.md passes, and a run across all 29 markdown files this branch changes reports no dead links.
"plugin" is a common noun, not part of the product name, so the H1 is "kubectl-tenant plugin". The page's previous title was "kubectl plugin", all lowercase, so the capital was something I introduced rather than a convention being followed. Also makes the section headings internally consistent: the page had "Why it matters" alongside "How It Works", "Supported Resources" and "Output Formats". The inherited headings are title case, so the one I added now matches them rather than the other way round. No anchor links point into this page, so nothing breaks. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0.
…nstall steps
Prompted by "Uninstall via OperatorHub UI on OpenShift" appearing as a nav
item. The label was the symptom; three problems sat underneath it.
The standalone uninstalling.md was a third copy of a procedure that already
exists in openshift.md, and the copies had drifted. openshift.md told readers
to set spec.onDelete.cleanNamespaces and spec.onDelete.cleanAppProject. Those
fields do not exist — the API reference, the Tenant concept page, the delete
guide and the ArgoCD integration all use onDeletePurgeNamespaces and
onDeletePurgeAppProject. Anyone following the OpenShift uninstall steps would
have set a field that does nothing and then lost the namespaces they were
trying to keep. Corrected.
uninstalling.md is now "Uninstalling MTO" and covers only what is
platform-independent: what to decide before removing the operator, disabling
the console and cost components so the stack MTO provisioned is removed by the
operator that created it, deleting the IntegrationConfig, and the consequences
of removing the CRDs. The platform-specific removal is a two-row table pointing
at the OperatorHub and Helm sections, since you uninstall the way you installed.
That also makes the nav label short and accurate rather than naming one
platform and one UI for a page every reader reaches.
Six cloud pages shared three generic titles — "MTO Installation Guide",
"MTO Preparation Guide" and "MTO Validation Guide", identical between AKS and
EKS. They are now self-describing ("Install MTO on AKS", "Prepare an EKS
Cluster for MTO"), so search results and direct links are distinguishable. Nav
keeps its short labels, which read better under an "On AKS" heading.
installation/overview.md was a page titled "Overview" inside a section titled
"Installation". It is now "Installing MTO", and it ends by pointing at creating
a first tenant — Getting Started previously stopped at "installed" and never
reached "working".
Also fixes three long-standing Vale term errors in the EKS pages, in files this
change already touches: "kube context" and "kube-system" are identifiers and
wanted backticks rather than a capital K.
Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale
down to 1 pre-existing error repo-wide (release-notes.md).
…erence Audit of my own previous commit, prompted by the reasonable question of whether I had verified any of it. Three claims were wrong or unsupported. 1. Field path. I wrote spec.onDeletePurgeNamespaces. The API reference places onDeletePurgeNamespaces in the Namespaces type, and both concepts/tenant.md and guides/delete-tenant.md nest it under namespaces:, so the path is spec.namespaces.onDeletePurgeNamespaces. This is the same class of error I had just corrected in openshift.md — I replaced a wrong path with a different wrong path, in both files. 2. Removal behaviour. I wrote that disabling the console "removes the Console, Gateway, Dex, PostgreSQL, Prometheus and the FinOps components". The docs never say that. What integration-config.md does say is that the IntegrationConfig manages the resources behind the console GUI, and it lists them — including OpenCost and DexConfigOperator, which my sentence had dropped. Reworded to state what is documented and to keep the procedural advice, which came from the original page, without inventing a consequence. 3. CRD list. I listed Template among MTO's CRDs. The API reference defines Tenant, Quota, IntegrationConfig and Extensions; Template belongs to the Template Operator. Corrected to Extensions. Verified as correct and left unchanged: argoCD.onDeletePurgeAppProject on the Extensions resource, the false default on onDeletePurgeNamespaces, the tenant-operator-config default name, and components.console / components.showback as booleans. Gates: mkdocs build --strict clean, vale 0/0 on the section.
The Console row asks "How do operators and tenants actually use all this?" and answered with only half of it — the CLI was absent from the landing page entirely, and from the "Running MTO" next steps, which listed Installation, Create a Tenant, Console and Architecture. Deliberately not a seventh capability row. The six areas are the positioning spine, repeated in key-features.md, the tools page and four comparison pages, and named in the prose directly above the table. The CLI is also not a capability area — it is an interface, the same category as Console, and a much smaller one: Console spans all six pillars, the plugin surfaces tenant-scoped listing of five resource types. A visibly lighter seventh row would weaken a table whose strength is that every row is a large customer problem. So the Console row's answer now covers both interfaces, and the plugin gets its own entry under Running MTO.
The page listed ArgoCD, Vault, the LGTM stack, Grafana, DevWorkspace and Mattermost, but not OpenBao — which has its own page and its own nav entry, so it was the one extension a reader could not find from the section overview. Placed directly after Vault, since the two solve the same problem and a reader comparing them should see them together. The description is taken from the OpenBao page rather than written from memory: a namespace per tenant holding its own secrets store, encryption keys and certificate authority, with the policies and login roles to reach them. Gates: mkdocs build --strict clean, markdownlint clean apart from MD060, vale 0/0.
Document adding the default admin user to privileged users
| - **Builds nav** for the copied `.md` pages and nests it under an existing menu section (`under`), with folder titles taken from the sub-operator's own nav (falling back to title-case). With `flatten: true` the pages merge as **direct leaf entries** in the section (no operator wrapper, menu-flat); a `title` renames a single-file mapping (e.g. Template's API → one "Template Operator" entry). Splices only the `nav:` block of the combined `mkdocs.yml`, leaving the rest byte-for-byte. | ||
| - **Auto-groups duplicates**: when a page's filename appears in more than one source under the same flattened section (e.g. `argocd.md` in both MTO's own docs and Hibernation's), they're folded into a per-page folder titled by the page's H1 (→ `ArgoCD`), with one labelled leaf per source (`Multi-Tenant Operator`, `Hibernation Operator`). This is a rule, not a hand-maintained list — the labels come from operator titles and `site_title` (default: the mkdocs `site_name`). | ||
| - **Concatenates the API** (`concat_into` mapping mode): each operator's `reference/api.md` — plus MTO's own — merges into one **API Reference** page. Each source becomes an H2 section (`heading`, MTO's own labelled by `site_title`), its own headings demoted one level (code fences respected), so the in-page TOC lists `Tenant Operator` / `Template Operator` / `FinOps` / `Hibernation Operator`. Aggregated across operators by shared `concat_into`; one labelled leaf under `Reference`. | ||
| - **Rewrites links**: whitelisted targets → local relative links; anything else → the operator's published site (`live_url`, `directory`/`html` style), anchors preserved. Externalized links are logged. |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
File types are normally capitalized. (FILE_EXTENSIONS_CASE[1])
Suggestions: HTML
URL: https://languagetool.org/insights/post/spelling-capital-letters/
Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1
Category: CASING
| ```mermaid | ||
| flowchart LR | ||
| T["Tenant CRs"] --> M["Multi-Tenant Operator<br/>Grafana extension"] | ||
| C["GrafanaDatasource<br/>GrafanaDashboard<br/>GrafanaFolder"] --> M |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: M
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
| httpHeaderName1: "Authorization" | ||
| httpHeaderName2: "X-Scope-OrgID" | ||
| prometheusType: Mimir | ||
| httpMethod: POST |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: datasource
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
| "type": "timeseries", | ||
| "datasource": { "type": "loki", "uid": "loki-ds" }, | ||
| "targets": [ | ||
| { |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses
Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
Category: PUNCTUATION
| "datasource": { "type": "loki", "uid": "loki-ds" }, | ||
| "targets": [ | ||
| { | ||
| "datasource": { "type": "loki", "uid": "loki-ds" }, |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses
Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
Category: PUNCTUATION
| 1. [Roles and Permissions](https://grafana.com/docs/grafana/latest/administration/roles-and-permissions/#organization-roles) | ||
| ```bash | ||
| SECRET=grafana-admin-credentials # <grafana-instance-name>-admin-credentials | ||
| GF_USER=$(kubectl get secret "$SECRET" -n telemetry \ |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Unpaired symbol: ‘'’ seems to be missing (EN_UNPAIRED_QUOTES)
URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses
Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
Category: PUNCTUATION
| ```mermaid | ||
| flowchart TB | ||
| subgraph K["Kubernetes"] | ||
| T["<b>Tenant</b> resources"] |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses
Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
Category: PUNCTUATION
|
|
||
| Where both an operator and a chart exist, either will do, and the choice can follow whatever a cluster already runs — on OpenShift that is usually the operator, since Red Hat ships its own Loki, Tempo and OpenTelemetry operators. Three components are narrower than that, for reasons worth knowing rather than working around: | ||
|
|
||
| - **Tempo** — both routes deploy Tempo, and both ship a gateway, but the two are not equivalent. The chart's is an nginx proxy offering basic authentication, which identifies a caller without tying it to a tenant. The operator's authenticates with OIDC and authorises per tenant, which is what the trace boundary depends on. |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Use “a” instead of ‘an’ if the following word doesn’t start with a vowel sound, e.g. ‘a sentence’, ‘a university’. (EN_A_VS_AN)
Suggestions: a
URL: https://languagetool.org/insights/post/indefinite-articles/
Rule: https://community.languagetool.org/rule/show/EN_A_VS_AN?lang=en-US
Category: MISC
|
@Felix-Stakater PR doc deploy will soon be available for review on https://stakater.github.io/mto-docs/main |
Update CONSOLE_URL in config.env
|
@SyedaFatimaKazmi PR doc deploy will soon be available for review on https://stakater.github.io/mto-docs/main |
retain ordering of menu when merging SA-8795
|
@msafwankarim PR doc deploy will soon be available for review on https://stakater.github.io/mto-docs/main |
docs: rewrite the Overview narrative and complete the Learn section
There was a problem hiding this comment.
Remaining comments which cannot be posted as a review comment to avoid GitHub Rate Limit
LanguageTool
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: KCP
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
mto-docs/content/learn/mto-vs-kcp.md
Line 117 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: MTO
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
mto-docs/content/learn/mto-vs-kcp.md
Line 118 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Possible agreement error. The noun ‘stand’ seems to be countable. (CD_NN[1])
Suggestions: stands
Rule: https://community.languagetool.org/rule/show/CD_NN?lang=en-US&subId=1
Category: GRAMMAR
mto-docs/content/learn/mto-vs-loft.md
Line 50 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[1])
Suggestions: , so
URL: https://languagetool.org/insights/post/comma-before-and/
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=1
Category: PUNCTUATION
mto-docs/content/learn/mto-vs-loft.md
Line 106 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[3])
Suggestions: , so
URL: https://languagetool.org/insights/post/types-of-sentences/#compound-sentence
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=3
Category: PUNCTUATION
mto-docs/content/learn/mto-vs-loft.md
Line 110 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Did you mean “whom”? (IN_WHO[1])
Suggestions: whom
URL: https://www.grammar-monster.com/lessons/who_whom.htm
Rule: https://community.languagetool.org/rule/show/IN_WHO?lang=en-US&subId=1
Category: GRAMMAR
mto-docs/content/learn/mto-vs-loft.md
Line 134 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Did you mean “whom”? (IN_WHO[1])
Suggestions: whom
URL: https://www.grammar-monster.com/lessons/who_whom.htm
Rule: https://community.languagetool.org/rule/show/IN_WHO?lang=en-US&subId=1
Category: GRAMMAR
mto-docs/content/learn/mto-vs-vcluster.md
Line 153 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[1])
Suggestions: , so
URL: https://languagetool.org/insights/post/comma-before-and/
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=1
Category: PUNCTUATION
mto-docs/content/learn/mto-vs-vcluster.md
Line 168 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Did you mean “whom”? (IN_WHO[1])
Suggestions: whom
URL: https://www.grammar-monster.com/lessons/who_whom.htm
Rule: https://community.languagetool.org/rule/show/IN_WHO?lang=en-US&subId=1
Category: GRAMMAR
mto-docs/content/learn/mto-vs-vcluster.md
Line 214 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
This word is normally spelled as one. (EN_COMPOUNDS_HAND_WRITTEN)
Suggestions: handwritten
Rule: https://community.languagetool.org/rule/show/EN_COMPOUNDS_HAND_WRITTEN?lang=en-US
Category: MISC
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: Tenant
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
[LanguageTool] reported by reviewdog 🐶
In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects. (AFTERWARDS_US[1])
Suggestions: afterward
Rule: https://community.languagetool.org/rule/show/AFTERWARDS_US?lang=en-US&subId=1
Category: BRITISH_ENGLISH
[LanguageTool] reported by reviewdog 🐶
In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects. (AFTERWARDS_US[1])
Suggestions: afterward
Rule: https://community.languagetool.org/rule/show/AFTERWARDS_US?lang=en-US&subId=1
Category: BRITISH_ENGLISH
[LanguageTool] reported by reviewdog 🐶
Consider removing “of” to be more concise (ALL_OF_THE[1])
Suggestions: all the
URL: https://languagetool.org/insights/post/wordiness/
Rule: https://community.languagetool.org/rule/show/ALL_OF_THE?lang=en-US&subId=1
Category: REDUNDANCY
[LanguageTool] reported by reviewdog 🐶
In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects. (AFTERWARDS_US[1])
Suggestions: afterward
Rule: https://community.languagetool.org/rule/show/AFTERWARDS_US?lang=en-US&subId=1
Category: BRITISH_ENGLISH
[LanguageTool] reported by reviewdog 🐶
In American English, ‘afterward’ is the preferred variant. ‘Afterwards’ is more commonly used in British English and other dialects. (AFTERWARDS_US[1])
Suggestions: afterward
Rule: https://community.languagetool.org/rule/show/AFTERWARDS_US?lang=en-US&subId=1
Category: BRITISH_ENGLISH
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: Layer
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: MTO
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: Gateway
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
mto-docs/content/overview/how-it-works.md
Line 112 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: OpenCost
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
mto-docs/content/overview/how-it-works.md
Line 115 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
This word is normally spelled as one. (EN_COMPOUNDS_HAND_WRITTEN)
Suggestions: handwritten
Rule: https://community.languagetool.org/rule/show/EN_COMPOUNDS_HAND_WRITTEN?lang=en-US
Category: MISC
mto-docs/content/overview/key-features.md
Line 22 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[4])
Suggestions: , and
URL: https://languagetool.org/insights/post/types-of-sentences/#compound-sentence
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=4
Category: PUNCTUATION
mto-docs/content/overview/key-features.md
Line 104 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
This expression is normally spelled as one or with a hyphen. (EN_COMPOUNDS_TIME_SERVING)
Suggestions: time-serving, timeserving
Rule: https://community.languagetool.org/rule/show/EN_COMPOUNDS_TIME_SERVING?lang=en-US
Category: MISC
mto-docs/content/overview/use-cases.md
Line 23 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Possible typo: you repeated a word (ENGLISH_WORD_REPEAT_RULE)
Suggestions: MTO
Rule: https://community.languagetool.org/rule/show/ENGLISH_WORD_REPEAT_RULE?lang=en-US
Category: MISC
mto-docs/content/overview/use-cases.md
Line 98 in 9e7ed1a
[LanguageTool] reported by reviewdog 🐶
Use a comma before “and” if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[4])
Suggestions: , and
URL: https://languagetool.org/insights/post/types-of-sentences/#compound-sentence
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=4
Category: PUNCTUATION
mto-docs/content/overview/why-mto.md
Line 37 in 9e7ed1a
| Tenant users work in ordinary `kubectl`. The problem is that Kubernetes gives them no way to see what they own. | ||
|
|
||
| ## Overview | ||
| Ask a developer to list the storage classes their tenant may use, or the namespaces it owns, and Kubernetes offers two answers, both wrong. Without cluster-scoped `list` permission they see nothing. With it they see everything on the cluster — every other tenant's namespaces included — because RBAC on a cluster-scoped resource is all-or-nothing. There is no "list the ones that are mine". |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Consider adding a comma here to clarify the structure of the sentence. (PRP_COMMA[1])
Suggestions: it,
Rule: https://community.languagetool.org/rule/show/PRP_COMMA?lang=en-US&subId=1
Category: PUNCTUATION
|
|
||
| 1. **Sampled** — Prometheus and `kube-state-metrics` record actual resource usage and requests per namespace over time. | ||
| 1. **Aggregated** — usage is rolled up to the tenant, because the tenant is the unit of ownership. Every namespace MTO manages already belongs to exactly one tenant. | ||
| 1. **Priced** — OpenCost applies rates to the sampled usage. For public-cloud clusters, MTO can use provider pricing so the figures track what you are actually billed. See [AWS Pricing](../integrations/aws-pricing.md) and [Azure Pricing](../integrations/azure-pricing.md). |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Use a comma before ‘so’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE_2[1])
Suggestions: , so
URL: https://languagetool.org/insights/post/comma-before-and/
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE_2?lang=en-US&subId=1
Category: PUNCTUATION
| 1. **Sampled** — Prometheus and `kube-state-metrics` record actual resource usage and requests per namespace over time. | ||
| 1. **Aggregated** — usage is rolled up to the tenant, because the tenant is the unit of ownership. Every namespace MTO manages already belongs to exactly one tenant. | ||
| 1. **Priced** — OpenCost applies rates to the sampled usage. For public-cloud clusters, MTO can use provider pricing so the figures track what you are actually billed. See [AWS Pricing](../integrations/aws-pricing.md) and [Azure Pricing](../integrations/azure-pricing.md). | ||
| 1. **Stored** — results are written to MTO's PostgreSQL instance, so history survives Prometheus retention and you can compare this month against the last. |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Use a comma before ‘and’ if it connects two independent clauses (unless they are closely connected and short). (COMMA_COMPOUND_SENTENCE[1])
Suggestions: , and
URL: https://languagetool.org/insights/post/types-of-sentences/#compound-sentence
Rule: https://community.languagetool.org/rule/show/COMMA_COMPOUND_SENTENCE?lang=en-US&subId=1
Category: PUNCTUATION
|
|
||
| ## Remove the IntegrationConfig | ||
|
|
||
| Delete the `IntegrationConfig` from the cluster. On OpenShift you can do this from `Search` → `IntegrationConfig` → `tenant-operator-config` → `Delete`. |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
A comma is probably missing here. (MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1])
Suggestions: OpenShift,
URL: http://englishplus.com/grammar/00000074.htm
Rule: https://community.languagetool.org/rule/show/MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE?lang=en-US&subId=1
Category: PUNCTUATION
|
|
||
| The closest direct comparison. Same layer, same abstraction, wider scope. | ||
|
|
||
| MTO is a commercial platform from Stakater built on a single `Tenant` definition that drives six capability areas: **multi-tenancy**, **templates**, **FinOps**, **hibernation**, **extensions** into the surrounding ecosystem, and a **console** for both administrators and tenant users. Tenancy is the foundation the other five stand on, not the extent of the product. |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Possible agreement error. The noun ‘stand’ seems to be countable. (CD_NN[1])
Suggestions: stands
Rule: https://community.languagetool.org/rule/show/CD_NN?lang=en-US&subId=1
Category: GRAMMAR
| ### Choose MTO when | ||
|
|
||
| - You need the tenant itself modelled, not only its namespaces | ||
| - Access should follow identity provider group membership without hand-written RBAC |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
This word is normally spelled as one. (EN_COMPOUNDS_HAND_WRITTEN)
Suggestions: handwritten
Rule: https://community.languagetool.org/rule/show/EN_COMPOUNDS_HAND_WRITTEN?lang=en-US
Category: MISC
|
|
||
| ### Operational surface | ||
|
|
||
| With MTO you operate one cluster. With Hypershift you operate a management cluster plus a fleet of hosted clusters — each with its own upgrades, monitoring and configuration drift. |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
A comma is probably missing here. (MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1])
Suggestions: MTO,
URL: http://englishplus.com/grammar/00000074.htm
Rule: https://community.languagetool.org/rule/show/MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE?lang=en-US&subId=1
Category: PUNCTUATION
| - **Secrets tenancy** — a path, policies and login roles per tenant, kept in step with membership | ||
| - **Interface** — something for tenant users that is not `kubectl` and YAML | ||
|
|
||
| MTO includes all of these, built on the same tenant definition, which is why they agree with each other. Assembled separately they are six or seven products to source, integrate and keep aligned about who a tenant is. See [what you assemble instead](kubernetes-multi-tenancy-tools.md#what-you-assemble-instead). |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Did you mean “whom”? (IN_WHO[1])
Suggestions: whom
URL: https://www.grammar-monster.com/lessons/who_whom.htm
Rule: https://community.languagetool.org/rule/show/IN_WHO?lang=en-US&subId=1
Category: GRAMMAR
|
|
||
| Kamaji reduces per-cluster overhead substantially compared with standalone clusters, but each tenant still has a control plane consuming management-cluster capacity and dedicated worker nodes. | ||
|
|
||
| ### Operational surface |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
A comma is probably missing here. (MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE[1])
Suggestions: MTO,
URL: http://englishplus.com/grammar/00000074.htm
Rule: https://community.languagetool.org/rule/show/MISSING_COMMA_AFTER_INTRODUCTORY_PHRASE?lang=en-US&subId=1
Category: PUNCTUATION
| - **Secrets tenancy** — a path, policies and login roles per tenant, kept in step with membership | ||
| - **Interface** — something for tenant users that is not `kubectl` and YAML | ||
|
|
||
| MTO includes all of these, built on the same tenant definition, which is why they agree with each other. Assembled separately they are six or seven products to source, integrate and keep aligned about who a tenant is. See [what you assemble instead](kubernetes-multi-tenancy-tools.md#what-you-assemble-instead). |
There was a problem hiding this comment.
[LanguageTool] reported by reviewdog 🐶
Did you mean “whom”? (IN_WHO[1])
Suggestions: whom
URL: https://www.grammar-monster.com/lessons/who_whom.htm
Rule: https://community.languagetool.org/rule/show/IN_WHO?lang=en-US&subId=1
Category: GRAMMAR
|
@msafwankarim PR doc deploy will soon be available for review on https://stakater.github.io/mto-docs/main |
No description provided.