From 91d15991dcae1ea2cfef20a2ffd8d2adc01e0567 Mon Sep 17 00:00:00 2001 From: Artem Torubarov Date: Thu, 29 Oct 2026 18:45:01 +0100 Subject: [PATCH 1/2] website redesign - light/dark theme - contributors wall - quickstart examples - why rook secion - supported interfaces - data security and recovery - guide links Signed-off-by: Artem Torubarov --- .github/workflows/build.yaml | 14 + .gitignore | 1 + 404.html | 28 +- 500.html | 28 +- Makefile | 30 +- _config.yml | 1 + _data/contributors.yml | 75 +++ _data/faq.yml | 118 ++++ _data/guides.yml | 36 ++ _data/stats.yml | 29 + _data/storage_interfaces.yml | 35 ++ _includes/community.html | 22 + _includes/contributors-wall.html | 17 + _includes/dr-sites.html | 3 + _includes/dr-zones.html | 3 + _includes/faq-list.html | 19 + _includes/footer.html | 124 ++--- _includes/how-day1.html | 2 + _includes/how-day2.html | 2 + _includes/icon.html | 19 + _includes/illo-symbols.html | 87 +++ _includes/navigation.html | 76 ++- _includes/theme-toggle.html | 2 + _includes/themed-img.html | 7 + _includes/values.inc | 50 +- _layouts/default.html | 73 ++- _scss/tokens.scss | 74 +++ css/error-code.scss | 64 --- css/index.scss | 448 --------------- css/site.scss | 647 ++++++++++++++++++++++ faq.html | 45 ++ images/brand/cncf-graduated-color.svg | 127 +++++ images/brand/cncf-graduated-white.svg | 1 + images/brand/rook-horizontal-white.svg | 1 + images/brand/rook-icon-color.svg | 1 + images/brand/slack.svg | 6 + images/brand/tux.svg | 438 +++++++++++++++ images/contributors/AnikaYadav1.jpg | Bin 0 -> 1789 bytes images/contributors/BlaineEXE.jpg | Bin 0 -> 3902 bytes images/contributors/DoubleDensity.jpg | Bin 0 -> 3894 bytes images/contributors/Javlopez.jpg | Bin 0 -> 3113 bytes images/contributors/Madhu-1.jpg | Bin 0 -> 2814 bytes images/contributors/NymanRobin.jpg | Bin 0 -> 3856 bytes images/contributors/OdedViner.jpg | Bin 0 -> 1482 bytes images/contributors/Rakshith-R.jpg | Bin 0 -> 3012 bytes images/contributors/Sheetalpamecha.jpg | Bin 0 -> 1899 bytes images/contributors/TomHellier.jpg | Bin 0 -> 1941 bytes images/contributors/ahmadnurus.jpg | Bin 0 -> 2226 bytes images/contributors/alimaredia.jpg | Bin 0 -> 2482 bytes images/contributors/anmolsachan.jpg | Bin 0 -> 2914 bytes images/contributors/anthonyeleven.jpg | Bin 0 -> 4182 bytes images/contributors/anxkhn.jpg | Bin 0 -> 2918 bytes images/contributors/arm64b.jpg | Bin 0 -> 2343 bytes images/contributors/arttor.jpg | Bin 0 -> 3017 bytes images/contributors/aruniiird.jpg | Bin 0 -> 1758 bytes images/contributors/ashishranjan738.jpg | Bin 0 -> 2743 bytes images/contributors/avanthakkar.jpg | Bin 0 -> 3186 bytes images/contributors/bassam.jpg | Bin 0 -> 3079 bytes images/contributors/binoue.jpg | Bin 0 -> 2014 bytes images/contributors/black-dragon74.jpg | Bin 0 -> 2399 bytes images/contributors/consideRatio.jpg | Bin 0 -> 2776 bytes images/contributors/dangula.jpg | Bin 0 -> 3669 bytes images/contributors/davidvossel.jpg | Bin 0 -> 2391 bytes images/contributors/degorenko.jpg | Bin 0 -> 2378 bytes images/contributors/dotnwat.jpg | Bin 0 -> 3261 bytes images/contributors/elias-dbx.jpg | Bin 0 -> 3091 bytes images/contributors/galexrt.jpg | Bin 0 -> 2764 bytes images/contributors/giovanism.jpg | Bin 0 -> 2468 bytes images/contributors/humblec.jpg | Bin 0 -> 2992 bytes images/contributors/iPraveenParihar.jpg | Bin 0 -> 3262 bytes images/contributors/iamniting.jpg | Bin 0 -> 1675 bytes images/contributors/ideepika.jpg | Bin 0 -> 4226 bytes images/contributors/invidian.jpg | Bin 0 -> 3469 bytes images/contributors/jbw976.jpg | Bin 0 -> 2712 bytes images/contributors/jhoblitt.jpg | Bin 0 -> 2819 bytes images/contributors/jmolmo.jpg | Bin 0 -> 3410 bytes images/contributors/jshen28.jpg | Bin 0 -> 3820 bytes images/contributors/jtlayton.jpg | Bin 0 -> 2755 bytes images/contributors/kokhang.jpg | Bin 0 -> 3674 bytes images/contributors/leseb.jpg | Bin 0 -> 3534 bytes images/contributors/mazarmi.jpg | Bin 0 -> 2535 bytes images/contributors/microyahoo.jpg | Bin 0 -> 3297 bytes images/contributors/mvollman.jpg | Bin 0 -> 3316 bytes images/contributors/nixpanic.jpg | Bin 0 -> 2783 bytes images/contributors/nizamial09.jpg | Bin 0 -> 3478 bytes images/contributors/obnoxxx.jpg | Bin 0 -> 3406 bytes images/contributors/parth-gr.jpg | Bin 0 -> 2914 bytes images/contributors/patrostkowski.jpg | Bin 0 -> 2748 bytes images/contributors/phlogistonjohn.jpg | Bin 0 -> 3357 bytes images/contributors/raaizik.jpg | Bin 0 -> 4978 bytes images/contributors/rkachach.jpg | Bin 0 -> 2636 bytes images/contributors/rohan47.jpg | Bin 0 -> 4126 bytes images/contributors/rohantmp.jpg | Bin 0 -> 3267 bytes images/contributors/samkulkarni20.jpg | Bin 0 -> 2815 bytes images/contributors/sathieu.jpg | Bin 0 -> 2984 bytes images/contributors/satoru-takeuchi.jpg | Bin 0 -> 3266 bytes images/contributors/sebastian-philipp.jpg | Bin 0 -> 3198 bytes images/contributors/sebastianriese.jpg | Bin 0 -> 2193 bytes images/contributors/sp98.jpg | Bin 0 -> 3709 bytes images/contributors/subhamkrai.jpg | Bin 0 -> 2473 bytes images/contributors/synarete.jpg | Bin 0 -> 1407 bytes images/contributors/takirala.jpg | Bin 0 -> 2725 bytes images/contributors/taraasrita10.jpg | Bin 0 -> 1330 bytes images/contributors/thephred.jpg | Bin 0 -> 3025 bytes images/contributors/thotz.jpg | Bin 0 -> 3427 bytes images/contributors/travisn.jpg | Bin 0 -> 3206 bytes images/contributors/umangachapagain.jpg | Bin 0 -> 2836 bytes images/contributors/varshar16.jpg | Bin 0 -> 2178 bytes images/contributors/y1r.jpg | Bin 0 -> 3806 bytes images/contributors/yati1998.jpg | Bin 0 -> 3905 bytes images/contributors/zhucan.jpg | Bin 0 -> 2865 bytes images/dark/404.svg | 1 + images/dark/500.svg | 1 + images/dark/features/automate.svg | 1 + images/dark/features/elasticstorage.svg | 1 + images/dark/features/opensource.svg | 1 + images/dark/features/provision.svg | 1 + images/dark/index-hero.svg | 1 + images/dark/index-what-is-rook.svg | 1 + images/features/automate.svg | 2 +- images/features/distribute.svg | 1 - images/features/elasticstorage.svg | 2 +- images/features/manage.svg | 1 - images/features/opensource.svg | 2 +- images/features/optimize.svg | 1 - images/features/provision.svg | 2 +- images/features/scale.svg | 1 - images/index-what-is-rook.svg | 2 +- index.html | 381 ++++++++----- js/site.js | 193 +++++++ scripts/fetch-stats.py | 122 ++++ support.html | 122 ++-- 132 files changed, 2683 insertions(+), 910 deletions(-) create mode 100644 _data/contributors.yml create mode 100644 _data/faq.yml create mode 100644 _data/guides.yml create mode 100644 _data/stats.yml create mode 100644 _data/storage_interfaces.yml create mode 100644 _includes/community.html create mode 100644 _includes/contributors-wall.html create mode 100644 _includes/dr-sites.html create mode 100644 _includes/dr-zones.html create mode 100644 _includes/faq-list.html create mode 100644 _includes/how-day1.html create mode 100644 _includes/how-day2.html create mode 100644 _includes/icon.html create mode 100644 _includes/illo-symbols.html create mode 100644 _includes/theme-toggle.html create mode 100644 _includes/themed-img.html create mode 100644 _scss/tokens.scss delete mode 100644 css/error-code.scss delete mode 100644 css/index.scss create mode 100644 css/site.scss create mode 100644 faq.html create mode 100644 images/brand/cncf-graduated-color.svg create mode 100644 images/brand/cncf-graduated-white.svg create mode 100644 images/brand/rook-horizontal-white.svg create mode 100644 images/brand/rook-icon-color.svg create mode 100644 images/brand/slack.svg create mode 100644 images/brand/tux.svg create mode 100644 images/contributors/AnikaYadav1.jpg create mode 100644 images/contributors/BlaineEXE.jpg create mode 100644 images/contributors/DoubleDensity.jpg create mode 100644 images/contributors/Javlopez.jpg create mode 100644 images/contributors/Madhu-1.jpg create mode 100644 images/contributors/NymanRobin.jpg create mode 100644 images/contributors/OdedViner.jpg create mode 100644 images/contributors/Rakshith-R.jpg create mode 100644 images/contributors/Sheetalpamecha.jpg create mode 100644 images/contributors/TomHellier.jpg create mode 100644 images/contributors/ahmadnurus.jpg create mode 100644 images/contributors/alimaredia.jpg create mode 100644 images/contributors/anmolsachan.jpg create mode 100644 images/contributors/anthonyeleven.jpg create mode 100644 images/contributors/anxkhn.jpg create mode 100644 images/contributors/arm64b.jpg create mode 100644 images/contributors/arttor.jpg create mode 100644 images/contributors/aruniiird.jpg create mode 100644 images/contributors/ashishranjan738.jpg create mode 100644 images/contributors/avanthakkar.jpg create mode 100644 images/contributors/bassam.jpg create mode 100644 images/contributors/binoue.jpg create mode 100644 images/contributors/black-dragon74.jpg create mode 100644 images/contributors/consideRatio.jpg create mode 100644 images/contributors/dangula.jpg create mode 100644 images/contributors/davidvossel.jpg create mode 100644 images/contributors/degorenko.jpg create mode 100644 images/contributors/dotnwat.jpg create mode 100644 images/contributors/elias-dbx.jpg create mode 100644 images/contributors/galexrt.jpg create mode 100644 images/contributors/giovanism.jpg create mode 100644 images/contributors/humblec.jpg create mode 100644 images/contributors/iPraveenParihar.jpg create mode 100644 images/contributors/iamniting.jpg create mode 100644 images/contributors/ideepika.jpg create mode 100644 images/contributors/invidian.jpg create mode 100644 images/contributors/jbw976.jpg create mode 100644 images/contributors/jhoblitt.jpg create mode 100644 images/contributors/jmolmo.jpg create mode 100644 images/contributors/jshen28.jpg create mode 100644 images/contributors/jtlayton.jpg create mode 100644 images/contributors/kokhang.jpg create mode 100644 images/contributors/leseb.jpg create mode 100644 images/contributors/mazarmi.jpg create mode 100644 images/contributors/microyahoo.jpg create mode 100644 images/contributors/mvollman.jpg create mode 100644 images/contributors/nixpanic.jpg create mode 100644 images/contributors/nizamial09.jpg create mode 100644 images/contributors/obnoxxx.jpg create mode 100644 images/contributors/parth-gr.jpg create mode 100644 images/contributors/patrostkowski.jpg create mode 100644 images/contributors/phlogistonjohn.jpg create mode 100644 images/contributors/raaizik.jpg create mode 100644 images/contributors/rkachach.jpg create mode 100644 images/contributors/rohan47.jpg create mode 100644 images/contributors/rohantmp.jpg create mode 100644 images/contributors/samkulkarni20.jpg create mode 100644 images/contributors/sathieu.jpg create mode 100644 images/contributors/satoru-takeuchi.jpg create mode 100644 images/contributors/sebastian-philipp.jpg create mode 100644 images/contributors/sebastianriese.jpg create mode 100644 images/contributors/sp98.jpg create mode 100644 images/contributors/subhamkrai.jpg create mode 100644 images/contributors/synarete.jpg create mode 100644 images/contributors/takirala.jpg create mode 100644 images/contributors/taraasrita10.jpg create mode 100644 images/contributors/thephred.jpg create mode 100644 images/contributors/thotz.jpg create mode 100644 images/contributors/travisn.jpg create mode 100644 images/contributors/umangachapagain.jpg create mode 100644 images/contributors/varshar16.jpg create mode 100644 images/contributors/y1r.jpg create mode 100644 images/contributors/yati1998.jpg create mode 100644 images/contributors/zhucan.jpg create mode 100644 images/dark/404.svg create mode 100644 images/dark/500.svg create mode 100644 images/dark/features/automate.svg create mode 100644 images/dark/features/elasticstorage.svg create mode 100644 images/dark/features/opensource.svg create mode 100644 images/dark/features/provision.svg create mode 100644 images/dark/index-hero.svg create mode 100644 images/dark/index-what-is-rook.svg delete mode 100644 images/features/distribute.svg delete mode 100644 images/features/manage.svg delete mode 100644 images/features/optimize.svg delete mode 100644 images/features/scale.svg create mode 100644 js/site.js create mode 100644 scripts/fetch-stats.py diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 6a46e52499..eabbe13fea 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -4,6 +4,10 @@ on: push: branches: - master + schedule: + # rebuild once a day at 04:17 UTC to refresh the live stats (scripts/fetch-stats.py) + - cron: "17 4 * * *" + workflow_dispatch: defaults: run: @@ -13,6 +17,10 @@ defaults: permissions: contents: read +concurrency: + group: publish-website + cancel-in-progress: false + jobs: build-and-publish-website: # Depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions @@ -31,6 +39,12 @@ jobs: git config user.name "$GITHUB_ACTOR" git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + - name: Fetch live stats + run: | + python3 scripts/fetch-stats.py + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Build and publish website run: | make publish diff --git a/.gitignore b/.gitignore index 8d64d7f0ac..0015113d2d 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ .bundle .jekyll-metadata .sass-cache +/_data/live_stats.json diff --git a/404.html b/404.html index 0583272d70..1943245e11 100644 --- a/404.html +++ b/404.html @@ -1,18 +1,20 @@ --- layout: default +title: "Page not found" permalink: /404.html -stylesheet: error-code --- -
-
-
-

Oops

-

Something went wrong.

-

Error code: 404
We can't seem to find the page you're looking for. Please check the URL to make sure the path is correct.

- Retreat to Home -
-
- -
+{% include values.inc %} +
+
+
+
+

Page not found

+

Check the URL, or start from the home page or the docs.

+ +
+
+ {% include themed-img.html src="/images/404.svg" dark="/images/dark/404.svg" alt="" %} +
-
\ No newline at end of file +
+ diff --git a/500.html b/500.html index 75d19c4f65..0a50fab9ab 100644 --- a/500.html +++ b/500.html @@ -1,18 +1,20 @@ --- layout: default +title: "Whoops" permalink: /500.html -stylesheet: error-code --- -
-
-
-

Whoops

-

Something went wrong.

-

Error code: 500 Internal Server Error
We're working towards building something better. Try again soon.

- Retreat to Home -
-
- -
+
+
+
+
+

Whoops

+

Something went wrong.

+

Error code: 500 Internal Server Error
Something went wrong on our side. Try again in a minute.

+ +
+
+ {% include themed-img.html src="/images/500.svg" dark="/images/dark/500.svg" alt="" %} +
-
\ No newline at end of file +
+ diff --git a/Makefile b/Makefile index de0b264980..9b26ba8fde 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,13 @@ .PHONY: help run build publish # https://pages.github.com/versions/ -JEKYLL_DOCKER_IMAGE ?= docker.io/jekyll/jekyll:4.2.2 +JEKYLL_DOCKER_IMAGE ?= docker.io/library/ruby:3.1 + +# Gems go to vendor/bundle (gitignored, excluded from the site). Runs as the calling user so files stay theirs. +JEKYLL_DOCKER_RUN = docker run --rm -i \ + --user "$(shell id -u):$(shell id -g)" -e HOME=/tmp \ + -e BUNDLE_PATH=/srv/jekyll/vendor/bundle -e PAGES_REPO_NWO=rook/rook.github.io \ + --volume="$(PWD):/srv/jekyll" --workdir /srv/jekyll CURRENT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) @@ -14,21 +20,14 @@ help: ## Show this help menu. run: ## run jekyll in development mode run: - docker run --rm -i \ - -p 4000:4000 -p 4001:4001 \ - --volume="$(PWD)/vendor/bundle:/usr/local/bundle" \ - --volume="$(PWD):/srv/jekyll" \ - $(JEKYLL_DOCKER_IMAGE) -- \ - jekyll serve --livereload --livereload-port 4001 + $(JEKYLL_DOCKER_RUN) -p 4000:4000 -p 4001:4001 $(JEKYLL_DOCKER_IMAGE) \ + bash -c 'bundle install && bundle exec jekyll serve --host 0.0.0.0 --livereload --livereload-port 4001' build: ## build output is in _site build: mkdir -p _site/ - docker run --rm -i \ - --volume="$(PWD)/vendor/bundle:/usr/local/bundle" \ - --volume="$(PWD):/srv/jekyll" \ - $(JEKYLL_DOCKER_IMAGE) -- \ - jekyll build + $(JEKYLL_DOCKER_RUN) $(JEKYLL_DOCKER_IMAGE) \ + bash -c 'bundle install && bundle exec jekyll build' # Correct permissions when running in CI if test "$$CI" = "true"; then sudo chown -R "$(shell id -u):$(shell id -g)" _site/; fi # Copy the "no jekyll build" file so Github pages does not build the gh-pages branch @@ -37,11 +36,8 @@ build: bundle_update: ## Update Gemfile.lock (via bundler) bundle_update: - docker run --rm -i \ - --volume="$(PWD)/vendor/bundle:/usr/local/bundle" \ - --volume="$(PWD):/srv/jekyll" \ - jekyll/jekyll -- \ - bundle update + $(JEKYLL_DOCKER_RUN) $(JEKYLL_DOCKER_IMAGE) \ + bash -c 'bundle update' publish: ## push changed files to the live site through the gh-pages branch publish: build diff --git a/_config.yml b/_config.yml index 719c438512..f198703067 100644 --- a/_config.yml +++ b/_config.yml @@ -20,6 +20,7 @@ exclude: - Gemfile.lock - Makefile - README.md + - scripts - vendor defaults: diff --git a/_data/contributors.yml b/_data/contributors.yml new file mode 100644 index 0000000000..0613dbb603 --- /dev/null +++ b/_data/contributors.yml @@ -0,0 +1,75 @@ +# Display order. Avatars are local files in images/contributors/.jpg. +- travisn +- leseb +- BlaineEXE +- subhamkrai +- jbw976 +- bassam +- galexrt +- jhoblitt +- Madhu-1 +- parth-gr +- satoru-takeuchi +- sp98 +- obnoxxx +- thotz +- Rakshith-R +- OdedViner +- rkachach +- arttor +- dangula +- kokhang +- rohan47 +- dotnwat +- aruniiird +- umangachapagain +- rohantmp +- phlogistonjohn +- iPraveenParihar +- humblec +- jmolmo +- alimaredia +- sebastianriese +- anmolsachan +- anxkhn +- nixpanic +- avanthakkar +- y1r +- ahmadnurus +- jtlayton +- nizamial09 +- jshen28 +- taraasrita10 +- arm64b +- varshar16 +- binoue +- ideepika +- davidvossel +- degorenko +- Javlopez +- microyahoo +- ashishranjan738 +- sebastian-philipp +- synarete +- yati1998 +- invidian +- TomHellier +- consideRatio +- Sheetalpamecha +- mvollman +- thephred +- AnikaYadav1 +- iamniting +- patrostkowski +- giovanism +- anthonyeleven +- NymanRobin +- takirala +- sathieu +- mazarmi +- zhucan +- samkulkarni20 +- black-dragon74 +- elias-dbx +- DoubleDensity +- raaizik diff --git a/_data/faq.yml b/_data/faq.yml new file mode 100644 index 0000000000..0b497dc802 --- /dev/null +++ b/_data/faq.yml @@ -0,0 +1,118 @@ +# FAQ. `home: true` items show on the homepage, in this order; /faq/ shows all. +# group: evaluating | running (the two /faq/ sections). home_q / home_a override the question and answer +# on the homepage only; /faq/ keeps the full text. +- id: production-ready + group: evaluating + q: "Is Rook production-ready? Who runs it?" + a: "Yes. The Rook Ceph operator was declared stable in 2018, and Rook is a CNCF graduated project. Organizations run it in production at petabyte scale." + links: + - { label: "Who runs Rook", url: "https://github.com/rook/rook/blob/master/ADOPTERS.md" } + - { label: "Rook docs", url: "https://rook.io/docs/rook/latest-release/" } +- id: operator-down + home: true + group: evaluating + q: "What happens to my data if the Rook operator goes down?" + a: "Your data keeps flowing. Rook is not in the Ceph data path: applications read and write directly to Ceph. Management tasks such as upgrades and configuration changes resume when the operator is back." + links: + - { label: "Storage architecture", url: "https://rook.io/docs/rook/latest-release/Getting-Started/storage-architecture/" } +- id: rook-or-cephadm + home: true + group: evaluating + q: "Rook or cephadm?" + a: "Both are installers recommended by the Ceph documentation. Choose Rook if you run Kubernetes and want storage managed through its APIs. Choose cephadm for Ceph clusters outside Kubernetes." + links: + - { label: "Ceph docs: Installing Ceph", url: "https://docs.ceph.com/en/latest/install/" } +- id: fork + home: true + group: evaluating + q: "Is Rook a fork of Ceph? Does it slow Ceph down?" + a: "No. Rook runs the official upstream Ceph images, and the usual `ceph` tools and the Ceph Dashboard work as before. For the best performance, give Ceph its own networks." + links: + - { label: "Network providers", url: "https://rook.io/docs/rook/latest-release/CRDs/Cluster/network-providers/" } + - { label: "Ceph Dashboard", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Monitoring/ceph-dashboard/" } +- id: requirements + home: true + group: evaluating + q: "What do I need?" + a: "A Kubernetes cluster on amd64 or arm64 nodes, with local disks or block volumes for Ceph. One VM is enough to try Rook; production starts at three nodes." + links: + - { label: "Prerequisites", url: "https://rook.io/docs/rook/latest-release/Getting-Started/Prerequisites/prerequisites/" } +- id: upgrades + home: true + group: evaluating + q: "How do upgrades work, and how often is Rook released?" + home_q: "How often is Rook released?" + home_a: "A new minor release ships about every four months, and the two most recent are maintained." + a: "Change the Ceph version in your spec and Rook rolls the upgrade out across the daemons, checking Ceph's health as it goes. A new minor release ships about every four months, and the two most recent are maintained." + links: + - { label: "Upgrade guide", url: "https://rook.io/docs/rook/latest-release/Upgrade/ceph-upgrade/" } + - { label: "Supported versions", url: "https://rook.io/docs/rook/latest-release/Getting-Started/maintenance-and-support/" } +- id: security + home: true + group: evaluating + q: "Is it secure?" + a: "Rook can encrypt data at rest and in transit, integrates with external key managers such as HashiCorp Vault, and has a private vulnerability disclosure process through the CNCF. It was audited by Trail of Bits in 2019." + home_a: "Rook has a private vulnerability disclosure process through the CNCF, and an independent firm audited it in 2019." + links: + - { label: "Security policy", url: "https://github.com/rook/rook/blob/master/SECURITY.md" } + - { label: "Encryption docs", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Advanced/key-management-system/" } +- id: support + home: true + group: evaluating + q: "Can I get commercial support?" + a: "Yes. The companies on our support page offer Rook support and services, and several commercial storage products are built on Rook." + links: + - { label: "Support providers", url: "/support" } +- id: control-plane + group: running + q: "What if the Kubernetes control plane goes down?" + a: "Running Ceph daemons and mounted volumes keep serving data. New pods, volumes and mounts wait until the control plane is back, so plan its availability like any other dependency of your storage." + links: + - { label: "Storage architecture", url: "https://rook.io/docs/rook/latest-release/Getting-Started/storage-architecture/" } +- id: lose-cluster + group: running + q: "What if I lose the whole Kubernetes cluster?" + a: "Your data is on the Ceph disks, not in Kubernetes. The disaster recovery guide shows how to bring an existing Rook Ceph cluster up in a new Kubernetes cluster." + links: + - { label: "Disaster recovery guide", url: "https://rook.io/docs/rook/latest-release/Troubleshooting/disaster-recovery/" } +- id: existing-cluster + group: running + q: "Can I use an existing Ceph cluster?" + a: "Yes. In external mode, Rook connects your Kubernetes workloads to a Ceph cluster you already run, for example one managed by cephadm." + links: + - { label: "External cluster", url: "https://rook.io/docs/rook/latest-release/CRDs/Cluster/external-cluster/external-cluster/" } +- id: cloud-airgapped + group: running + q: "Can I run it in the cloud or air-gapped?" + a: "Yes. In the cloud, Rook builds Ceph on block volumes from your provider's storage class. For air-gapped sites, mirror the images to your own registry." + links: + - { label: "PVC-based clusters", url: "https://rook.io/docs/rook/latest-release/CRDs/Cluster/pvc-cluster/" } + - { label: "Private registries", url: "https://rook.io/docs/rook/latest-release/Getting-Started/Prerequisites/authenticated-registry/" } +- id: maintainers + group: running + q: "Who maintains Rook? Is it controlled by one vendor?" + a: "Maintainers come from several companies and research organizations, and more than 580 organizations have contributed. Governance rules bar any single company from holding a majority on the steering committee." + links: + - { label: "Maintainers", url: "https://github.com/rook/rook/blob/master/OWNERS.md" } + - { label: "Governance", url: "https://github.com/rook/rook/blob/master/GOVERNANCE.md" } +- id: only-s3 + group: running + q: "Can I use Rook only for S3, or only for block volumes?" + a: "Yes. Each storage type is a separate resource, so you deploy only what you need: an object store, block pools, a filesystem, or any mix." + links: + - { label: "Object storage", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Object-Storage-RGW/object-storage/" } + - { label: "Block storage", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Block-Storage-RBD/block-storage/" } +- id: license + group: running + q: "What is the license?" + a: "Rook is Apache 2.0. Ceph is LGPL (2.1 or 3.0)." + links: + - { label: "Rook license", url: "https://github.com/rook/rook/blob/master/LICENSE" } + - { label: "Ceph license", url: "https://github.com/ceph/ceph/blob/main/COPYING" } +- id: help + group: running + q: "Where do I get help?" + a: "Ask in the Rook Slack or GitHub Discussions, and join the monthly community meeting." + links: + - { label: "Slack", url: "https://slack.rook.io" } + - { label: "Community meeting", url: "https://github.com/rook/rook#community-meeting" } diff --git a/_data/guides.yml b/_data/guides.yml new file mode 100644 index 0000000000..30239ded66 --- /dev/null +++ b/_data/guides.yml @@ -0,0 +1,36 @@ +- title: "Self-service S3 for your teams" + text: "Teams claim buckets and get credentials as a Secret." + url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Object-Storage-RGW/ceph-object-bucket-claim/" + icon: object +- title: "Shared filesystem for many pods" + text: "RWX volumes from CephFS." + url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-storage/" + icon: filesystem +- title: "Cut raw capacity with erasure coding" + text: "Same protection as three copies, half the disks." + url: "https://rook.io/docs/rook/latest-release/CRDs/Block-Storage/ceph-block-pool-crd/#erasure-coding" + icon: disk +- title: "Encrypt with keys in your KMS" + text: "Vault, KMIP and cloud key services." + url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Advanced/key-management-system/" + icon: key +- title: "Monitor with Grafana and the Ceph Dashboard" + text: "Prometheus metrics, alerts and dashboards." + url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Monitoring/ceph-monitoring/" + icon: monitor +- title: "Use the Ceph CSI drivers" + text: "Static, ephemeral and expandable volumes, with RBD QoS." + url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Ceph-CSI/ceph-csi-drivers/" + icon: csi +- title: "Replace a failed disk" + text: "Keep the OSD ID, so Ceph refills only that disk." + url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Advanced/ceph-osd-mgmt/#replace-an-osd" + icon: disk +- title: "Run on cloud block volumes" + text: "OSDs on your provider's storage class." + url: "https://rook.io/docs/rook/latest-release/CRDs/Cluster/pvc-cluster/" + icon: disk +- title: "Metadata on NVMe, data on HDD" + text: "Speed up HDD clusters with a fast metadata device." + url: "https://rook.io/docs/rook/latest-release/CRDs/Cluster/host-cluster/" + icon: disk diff --git a/_data/stats.yml b/_data/stats.yml new file mode 100644 index 0000000000..78362a7499 --- /dev/null +++ b/_data/stats.yml @@ -0,0 +1,29 @@ +# Homepage stats strip, release ribbon and contributor label: the committed fallbacks. When scripts/fetch-stats.py +# has written _data/live_stats.json (CI runs it before every build, plus a daily scheduled build), its labels win: +# the same top-level keys, and for a cell the key named by `live`. Refresh these now and then so builds without the +# live file stay close. The contributors and organizations figures are static (CNCF devstats). +latest_minor: "1.21" +release_url: "https://github.com/rook/rook/releases/tag/v1.21.0" +organizations: "580+" +cells: + - image: "/images/brand/cncf-graduated-color.svg" + image_dark: "/images/brand/cncf-graduated-white.svg" + alt: "CNCF Graduated project" + label: "since 2020" + url: "https://www.cncf.io/announcements/2020/10/07/cloud-native-computing-foundation-announces-rook-graduation/" + - number: "240+" + live: releases + label: "releases since 2016" + url: "https://github.com/rook/rook/releases" + # "Contributors" row (Last decade, bots excluded): https://rook.devstats.cncf.io/d/18/overall-project-statistics-table?orgId=1 + - number: "3,800+" + label: "contributors" + url: "https://rook.devstats.cncf.io" + - number: "330M+" + live: pulls + label: "image pulls" + url: "https://hub.docker.com/r/rook/ceph" + - number: "13.7k" + live: stars + label: "GitHub stars" + url: "https://github.com/rook/rook" diff --git a/_data/storage_interfaces.yml b/_data/storage_interfaces.yml new file mode 100644 index 0000000000..cbbd866128 --- /dev/null +++ b/_data/storage_interfaces.yml @@ -0,0 +1,35 @@ +# client_html: the same text with [tux] markers for the small Tux logo (images/brand/tux.svg, by Larry Ewing and The GIMP). +# Columns: interface (name, Ceph component, optional one-line description) | Kubernetes | outside Kubernetes | docs links. +- id: object + name: S3 object storage + tech: RGW + desc: "S3 compatible: versioning, lifecycle, replication, notifications, IAM." + k8s: "Buckets and credentials through an ObjectBucketClaim, or COSI" + client: "Any S3-compatible client or SDK" + docs: + - { label: "Object storage docs", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Object-Storage-RGW/object-storage/" } +- id: block + name: Block + tech: RBD + desc: "Durable volumes for databases and VMs." + k8s: "RWO volumes through a PVC, via Ceph CSI" + client: "Linux kernel client or librbd (for example QEMU/KVM); NVMe-oF for other hosts" + client_html: "[tux]Linux kernel client or librbd (for example QEMU/KVM); NVMe-oF for other hosts" + docs: + - { label: "Block docs", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Block-Storage-RBD/block-storage/" } + - { label: "NVMe-oF docs", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Block-Storage-RBD/nvme-of/" } +- id: filesystem + name: Shared filesystem + tech: CephFS + desc: "POSIX filesystem shared by many readers and writers." + k8s: "RWX volumes that many pods mount at once, via Ceph CSI" + client: "Mount as a POSIX filesystem from any Linux client" + client_html: "Mount as a POSIX filesystem from any [tux]Linux client" + docs: + - { label: "Filesystem docs", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-storage/" } +- id: nfs + name: NFS + k8s: "PVCs through the NFS CSI driver" + client: "Any NFS client" + docs: + - { label: "NFS docs", url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/NFS/nfs/" } diff --git a/_includes/community.html b/_includes/community.html new file mode 100644 index 0000000000..f3bb31e193 --- /dev/null +++ b/_includes/community.html @@ -0,0 +1,22 @@ +
+
+
{% include icon.html name="slack" %}

Slack

+

Ask questions and share configs with maintainers and other users.

+ slack.rook.io{% include icon.html name="arrow" %} +
+
+
{% include icon.html name="calendar" %}

Community meeting

+

Second Tuesday of every month, 9:00 AM Pacific. Agenda and recordings are public.

+ Meeting calendar{% include icon.html name="arrow" %} +
+
+
{% include icon.html name="pr" %}

Contribute

+

Start with a good first issue.

+ Find a first issue{% include icon.html name="arrow" %} +
+
+
{% include icon.html name="github" %}

GitHub

+

Discussions, releases and source.

+ github.com/rook/rook{% include icon.html name="arrow" %} +
+
diff --git a/_includes/contributors-wall.html b/_includes/contributors-wall.html new file mode 100644 index 0000000000..0964cee9e5 --- /dev/null +++ b/_includes/contributors-wall.html @@ -0,0 +1,17 @@ +{%- comment -%} Live list from _data/live_stats.json when present, else _data/contributors.yml with local avatars. Params: limit. {%- endcomment -%} +
+
+

Contributors from {{ site.data.stats.organizations }} organizations

+
+
+ {%- if site.data.live_stats.contributors.size > 0 %} + {%- for p in site.data.live_stats.contributors limit: include.limit %} + {{ p.login }} + {%- endfor %} + {%- else %} + {%- for login in site.data.contributors limit: include.limit %} + {{ login }} + {%- endfor %} + {%- endif %} +
+
diff --git a/_includes/dr-sites.html b/_includes/dr-sites.html new file mode 100644 index 0000000000..65da619f90 --- /dev/null +++ b/_includes/dr-sites.html @@ -0,0 +1,3 @@ +{%- comment -%} Generated SVG. css/site.scss recolours fills and strokes for the dark theme by attribute value, so keep the colour values in sync. {%- endcomment -%} +Asynchronous replication to a peer cluster in another siteA primary site runs Ceph cluster A and a peer site runs Ceph cluster B, each with three nodes running OSDs and a monitor. Replication between the sites is asynchronous: block volumes with RBD mirroring, filesystems with CephFS mirroring, and object storage with RGW multisite, which replicates in both directions.PRIMARY SITECeph cluster Anode-1OSD ×3MONnode-2OSD ×3MONnode-3OSD ×3MONPEER SITECeph cluster Bnode-1OSD ×3MONnode-2OSD ×3MONnode-3OSD ×3MONasynchronous replicationRBD mirroringCephFS mirroringRGW multisite +Asynchronous replication to a peer cluster in another siteA primary site runs Ceph cluster A and a peer site runs Ceph cluster B, each with three nodes running OSDs and a monitor. Replication between the sites is asynchronous: block volumes with RBD mirroring, filesystems with CephFS mirroring, and object storage with RGW multisite, which replicates in both directions.PRIMARY SITECeph cluster Anode-1OSD ×3MONnode-2OSD ×3MONnode-3OSD ×3MONPEER SITECeph cluster Bnode-1OSD ×3MONnode-2OSD ×3MONnode-3OSD ×3MONRBD mirroringCephFS mirroringRGW multisiteasynchronous replication diff --git a/_includes/dr-zones.html b/_includes/dr-zones.html new file mode 100644 index 0000000000..f7b56e057e --- /dev/null +++ b/_includes/dr-zones.html @@ -0,0 +1,3 @@ +{%- comment -%} Generated SVG. css/site.scss recolours fills and strokes for the dark theme by attribute value, so keep the colour values in sync. {%- endcomment -%} +Stretch cluster across two zones and an arbiterOne Ceph cluster spans Zone A and Zone B, each with two nodes running OSDs and monitors. A small arbiter zone runs one monitor. Writes are replicated synchronously between the zones.ARBITER ZONEMONZONE AZONE BOne Ceph cluster (stretch mode)node-1OSD ×3MONnode-2OSD ×3MONnode-3OSD ×3MONnode-4OSD ×3MONsynchronous writes +Stretch cluster across two zones and an arbiterOne Ceph cluster spans Zone A and Zone B, each with two nodes running OSDs and monitors. A small arbiter zone runs one monitor. Writes are replicated synchronously between the zones.ARBITER ZONEMONOne Ceph cluster (stretch mode)ZONE AZONE Bnode-1OSD ×3MONnode-3OSD ×3MONnode-2OSD ×3MONnode-4OSD ×3MONsynchronous writes diff --git a/_includes/faq-list.html b/_includes/faq-list.html new file mode 100644 index 0000000000..01022d3182 --- /dev/null +++ b/_includes/faq-list.html @@ -0,0 +1,19 @@ +{%- comment -%} Params: items (from _data/faq.yml), open (count open by default), home (use home_q / home_a). {%- endcomment -%} +{%- assign openN = include.open | default: 0 -%} +
+ {%- for f in include.items %} + {%- assign q = f.q %}{% assign a = f.a %}{% assign links = f.links %} + {%- if include.home %}{% if f.home_q %}{% assign q = f.home_q %}{% endif %}{% if f.home_a %}{% assign a = f.home_a %}{% endif %}{% endif %} +
+ {{ q }}{% include icon.html name="chevron" %} +
+
{{ a | markdownify }}
+ +
+
+ {%- endfor %} +
diff --git a/_includes/footer.html b/_includes/footer.html index ae54892a79..f59e3e1122 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -1,85 +1,59 @@ -
+
+
+
+

Commercial support

+
+
+
+

CLYSO

+

As a premium partner of Ceph, CLYSO provides expert support, integration, development, and consulting services specifically for Rook and Ceph in large enterprise environments. CLYSO’s managed services encompass hybrid cloud solutions utilizing open-source technologies, including Kubernetes, Rook Ceph, and more, ensuring flexibility and eliminating vendor lock-ins.

+

Additionally, CLYSO offers advanced backup solutions, comprehensive cloud migration support, and digitalization services through microservices.

+

Services include:

+
    +
  • Managed Ceph and Rook service, consulting and support
  • +
  • Ceph Full System Analysis: helps fine tune your Rook and Ceph clusters for optimal performance
  • +
  • CLYSO Enterprise Storage powered by Ceph
  • +
  • Emergency Support
  • +
+
+
+

Red Hat

+

Red Hat® OpenShift® Data Foundation is software-defined storage for containers. Red Hat OpenShift Data Foundation helps teams develop and deploy applications with storage quickly and efficiently across clouds.

+

Red Hat OpenShift Data Foundation is included with Red Hat OpenShift Platform Plus, a complete set of powerful, optimized tools to secure, protect, and manage your apps.

+
    +
  • Based on Rook, Ceph, and other open source projects
  • +
  • Fully supported Enterprise solution
  • +
+
+
+

To be listed, open an issue with details about your company and how you contribute to Rook.

+
+
From 14fa6284c8a005bb6eb99d00f9fd94e1b74817c4 Mon Sep 17 00:00:00 2001 From: Artem Torubarov Date: Mon, 2 Nov 2026 12:43:28 +0100 Subject: [PATCH 2/2] adress website redesign review issues - fixed quickstart background for light theme - moved social proof to the bottom - added csi operator istall to demo Signed-off-by: Artem Torubarov --- Gemfile.lock | 2 +- _data/guides.yml | 4 +- _includes/contributors-wall.html | 1 + css/site.scss | 37 ++--- data/ceph.cast | 232 +++++++++++++++++-------------- index.html | 62 ++++----- 6 files changed, 182 insertions(+), 156 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 9507aa2d7c..e2f6967f2b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -265,4 +265,4 @@ DEPENDENCIES webrick (~> 1.8) BUNDLED WITH - 2.3.25 + 2.3.27 diff --git a/_data/guides.yml b/_data/guides.yml index 30239ded66..11641003d9 100644 --- a/_data/guides.yml +++ b/_data/guides.yml @@ -6,8 +6,8 @@ text: "RWX volumes from CephFS." url: "https://rook.io/docs/rook/latest-release/Storage-Configuration/Shared-Filesystem-CephFS/filesystem-storage/" icon: filesystem -- title: "Cut raw capacity with erasure coding" - text: "Same protection as three copies, half the disks." +- title: "Increase usable capacity with erasure coding" + text: "Same protection as three copies, twice the usable capacity." url: "https://rook.io/docs/rook/latest-release/CRDs/Block-Storage/ceph-block-pool-crd/#erasure-coding" icon: disk - title: "Encrypt with keys in your KMS" diff --git a/_includes/contributors-wall.html b/_includes/contributors-wall.html index 0964cee9e5..dcc8ae5ca1 100644 --- a/_includes/contributors-wall.html +++ b/_includes/contributors-wall.html @@ -2,6 +2,7 @@

Contributors from {{ site.data.stats.organizations }} organizations

+ See who runs Rook in production{% include icon.html name="arrow" %}
{%- if site.data.live_stats.contributors.size > 0 %} diff --git a/css/site.scss b/css/site.scss index 224cf9063a..4e55a8d97a 100644 --- a/css/site.scss +++ b/css/site.scss @@ -272,7 +272,7 @@ h4 { font-size: 18px; line-height: 26px; } .no-js .theme-toggle, .no-js .nav__theme { display: none; } /* ========================================================================== Hero (homepage; also the 404/500 art) */ -.section--hero.hero { padding-top: $space-16; padding-bottom: $space-8; @include md { padding-top: $space-12; } @include sm { padding-top: $space-8; } } +.section--hero.hero { padding-top: $space-16; padding-bottom: $space-12; @include md { padding-top: $space-12; } @include sm { padding-top: $space-8; padding-bottom: $space-8; } } .hero__grid { grid-template-columns: repeat(12, minmax(0, 1fr)); align-items: center; row-gap: 0; } .hero__text { grid-column: 1 / span 6; grid-row: 1 / span 2; } .hero .t-display { max-width: 560px; } @@ -287,7 +287,6 @@ h4 { font-size: 18px; line-height: 26px; } .hero__text { order: 1; } } -.users-link { padding: $space-4 0 $space-12; text-align: center; @include md { padding: $space-2 0 $space-10; } @include sm { padding: 0 0 $space-8; } } /* ========================================================================== Stats + contributor wall */ .stats { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); } @@ -314,7 +313,8 @@ h4 { font-size: 18px; line-height: 26px; } @include sm { .avatars a:nth-of-type(n+37) { display: none; } } /* ========================================================================== Sticky section nav */ -.secnav { position: sticky; top: 73px; z-index: 40; background: $white; border-bottom: $border; } +// The top hairline separates it from the hero; once stuck it lies under the header's bottom border. +.secnav { position: sticky; top: 72px; z-index: 40; background: $white; border-top: $border; border-bottom: $border; } .secnav .container { overflow-x: auto; scrollbar-width: none; &::-webkit-scrollbar { display: none; } } .secnav__list { display: flex; gap: $space-8; @include sm { gap: $space-6; } } .secnav__list li { flex: none; } @@ -331,20 +331,12 @@ h4 { font-size: 18px; line-height: 26px; } &:hover { color: $navy-900; } &[aria-selected='true'] { background: $surface; color: $navy-900; box-shadow: 0 1px 2px rgba(27, 12, 89, .12); } } -.segmented--night { background: rgba(255, 255, 255, .06); border-color: $night-line; - button { color: $on-night-muted; &:hover { color: $on-night; } &[aria-selected='true'] { background: rgba(255, 255, 255, .14); color: $on-night; box-shadow: none; } } } - -/* ========================================================================== Night band (How it works) */ -.band-night { position: relative; background: $night-950; color: $on-night-muted; overflow: hidden; } -.band-night::before { content: ''; position: absolute; inset: 0; background: radial-gradient(600px 300px at 70% 40%, rgba(42, 198, 234, .12), transparent); pointer-events: none; } -.band-night .container { position: relative; } -.band-night h2, .band-night h4 { color: $on-night; } -.band-night .lead, .band-night p, .band-night .small { color: $on-night-muted; } -.band-night code { background: rgba(255, 255, 255, .06); border-color: $night-line; color: $on-night; } -.band-night .btn--secondary { color: $fixed-white; border-color: rgba(255, 255, 255, .28); &:hover { border-color: $fixed-white; } } +/* ========================================================================== How it works (a gray section in light; the night band in dark, see the dark theme) */ // Panels share one grid cell, and so do the texts, so switching tabs never changes the height. .how-grid { align-items: start; @include md { row-gap: $space-10; } } +// min-width: 0 lets the wide Demo terminal scroll inside its frame instead of overflowing the column. +.how-grid > *, .how__stage > .how__panel { min-width: 0; } .how .segmented { margin: $space-8 0 0; } .how__texts { margin-top: $space-6; display: grid; @include md { display: block; } } .how__texts > .how__text { grid-area: 1 / 1; } @@ -375,6 +367,8 @@ h4 { font-size: 18px; line-height: 26px; } .terminal__demo .asciinema-player-wrapper { text-align: left; } .terminal__demo .asciinema-terminal { background-color: $night-990 !important; border: 0 !important; } .terminal__demo .asciinema-player .control-bar { display: none; } +// The player keeps its 61-column width; on narrow screens the frame scrolls sideways instead of clipping it. +.terminal__demo .asciinema-player { max-width: none; } @include sm { .terminal__body { padding: $space-4; } .terminal__body pre { font-size: 12px; line-height: 20px; } @@ -620,10 +614,19 @@ $dk-diagram-line: #8a80dc; :focus-visible { outline-color: rgba(42, 198, 234, .7); } ::selection { background: rgba(42, 198, 234, .35); color: $on-night; } - // Night band has the page colour: a hairline marks its end; inside, the light theme (and light shadow) stays. - .band-night { border-bottom: 1px solid $dk-line; --shadow-float: #{$shadow-float-light}; } - .segmented:not(.segmented--night) { background: $dk-bg; + .segmented { background: $dk-bg; button[aria-selected='true'] { background: $dk-raise; box-shadow: none; } } + // How it works: the night band, with a radial glow. It has the page colour, so a hairline marks its end; the code + // views keep the light theme's shadow. + .band-night { position: relative; overflow: hidden; background: $night-950; color: $on-night-muted; border-bottom: 1px solid $dk-line; --shadow-float: #{$shadow-float-light}; + &::before { content: ''; position: absolute; inset: 0; background: radial-gradient(600px 300px at 70% 40%, rgba(42, 198, 234, .12), transparent); pointer-events: none; } + .container { position: relative; } + h2 { color: $on-night; } + p { color: $on-night-muted; } + .segmented { background: rgba(255, 255, 255, .06); border-color: $night-line; + button { color: $on-night-muted; &:hover { color: $on-night; } &[aria-selected='true'] { background: rgba(255, 255, 255, .14); color: $on-night; box-shadow: none; } } } + .how__cta { background: transparent; color: $fixed-white; border-color: rgba(255, 255, 255, .28); &:hover { background: transparent; border-color: $fixed-white; } } + } .theme-toggle__sun { display: none; } .theme-toggle__moon { display: block; } .btn--secondary:hover { border-color: $on-night; } diff --git a/data/ceph.cast b/data/ceph.cast index c06d3c24ec..e18e931ce1 100644 --- a/data/ceph.cast +++ b/data/ceph.cast @@ -35,106 +35,132 @@ [4.519984, "o", "o"] [4.679709, "o", "n"] [4.70544, "o", ".yaml "] -[4.817491, "o", "\r\n"] -[5.371506, "o", "namespace/rook-ceph created\r\n"] -[5.428586, "o", "$ "] -[5.865389, "o", "k"] -[6.046611, "o", "u"] -[6.077318, "o", "b"] -[6.1895, "o", "e"] -[6.345489, "o", "c"] -[6.556592, "o", "t"] -[6.660128, "o", "l"] -[6.748486, "o", " "] -[6.908429, "o", "c"] -[7.114526, "o", "r"] -[7.230102, "o", "e"] -[7.290243, "o", "a"] -[7.366162, "o", "t"] -[7.405801, "o", "e"] -[7.482266, "o", " "] -[7.614681, "o", "-"] -[7.702133, "o", "f"] -[7.814135, "o", " "] -[7.969232, "o", "o"] -[8.068844, "o", "p"] -[8.153884, "o", "e"] -[8.225073, "o", "r"] -[8.584489, "o", "\u0007ator"] -[8.609301, "o", "."] -[8.742592, "o", "y"] -[8.810257, "o", "a"] -[8.986083, "o", "m"] -[9.046002, "o", "l"] -[9.50214, "o", "\r\n"] -[9.679695, "o", "deployment.apps/rook-ceph-operator created\r\n"] -[9.684441, "o", "$ "] -[10.432853, "o", "k"] -[10.630223, "o", "u"] -[10.710302, "o", "b"] -[10.798347, "o", "e"] -[10.978244, "o", "c"] -[11.19298, "o", "t"] -[11.28111, "o", "l"] -[11.381205, "o", " "] -[11.516749, "o", "c"] -[11.720115, "o", "r"] -[11.805138, "o", "e"] -[11.852435, "o", "a"] -[11.932112, "o", "t"] -[11.968231, "o", "e"] -[12.067935, "o", " "] -[12.220205, "o", "-"] -[12.29205, "o", "f"] -[12.414231, "o", " "] -[12.955175, "o", "c"] -[13.066846, "o", "l"] -[13.155294, "o", "u"] -[13.243434, "o", "s"] -[13.451905, "o", "\u0007ter"] -[14.127394, "o", "."] -[14.333994, "o", "y"] -[14.39013, "o", "a"] -[14.594158, "o", "m"] -[14.661305, "o", "l"] -[15.129731, "o", "\r\n"] -[15.386987, "o", "cephcluster.ceph.rook.io/rook-ceph created\r\n"] -[15.392099, "o", "$ "] -[16.205225, "o", "k"] -[16.39596, "o", "u"] -[16.459772, "o", "b"] -[16.547381, "o", "e"] -[16.740743, "o", "c"] -[16.964737, "o", "t"] -[17.072471, "o", "l"] -[17.173417, "o", " "] -[17.31652, "o", "-"] -[17.607544, "o", "n"] -[17.760793, "o", " "] -[17.883869, "o", "r"] -[17.955658, "o", "o"] -[18.096272, "o", "o"] -[18.19618, "o", "k"] -[18.424703, "o", "-"] -[18.646779, "o", "c"] -[18.734424, "o", "e"] -[18.774171, "o", "p"] -[18.846483, "o", "h"] -[19.153537, "o", " "] -[19.614068, "o", "g"] -[19.717443, "o", "e"] -[19.821604, "o", "t"] -[19.88557, "o", " "] -[20.021332, "o", "p"] -[20.093543, "o", "o"] -[20.249466, "o", "d"] -[20.494225, "o", "s"] -[20.58296, "o", "\r\n"] -[20.678195, "o", "NAME READY STATUS AGE\r\n"] -[21.2, "o", "rook-ceph-mgr-a 1/1 Running 61s\r\n"] -[21.4, "o", "rook-ceph-mon-a 1/1 Running 92s\r\n"] -[21.6, "o", "rook-ceph-mon-b 1/1 Running 84s\r\n"] -[21.8, "o", "rook-ceph-mon-c 1/1 Running 71s\r\n"] -[21.8, "o", "rook-ceph-osd-0 1/1 Running 21s\r\n"] -[22.0, "o", "rook-ceph-operator 1/1 Running 4m17s\r\n"] -[29.000000, "o", ""] +[4.98944, "o", "\\"] +[5.20144, "o", "\r\n"] +[5.20544, "o", "> "] +[5.64244, "o", " "] +[5.969468, "o", " "] +[6.146058, "o", "-"] +[6.257805, "o", "f"] +[6.450019, "o", " "] +[6.509744, "o", "c"] +[6.595612, "o", "s"] +[6.670429, "o", "i"] +[6.776852, "o", "-"] +[6.89329, "o", "o"] +[6.94244, "o", "p"] +[7.069468, "o", "e"] +[7.146058, "o", "r"] +[7.257805, "o", "a"] +[7.350019, "o", "t"] +[7.509744, "o", "o"] +[7.595612, "o", "r"] +[7.670429, "o", "."] +[7.750019, "o", "y"] +[7.909744, "o", "a"] +[8.236772, "o", "m"] +[8.413362, "o", "l"] +[8.525413, "o", "\r\n"] +[9.079428, "o", "namespace/rook-ceph created\r\n"] +[9.136508, "o", "$ "] +[9.573311, "o", "k"] +[9.754533, "o", "u"] +[9.78524, "o", "b"] +[9.897422, "o", "e"] +[10.053411, "o", "c"] +[10.264514, "o", "t"] +[10.36805, "o", "l"] +[10.456408, "o", " "] +[10.616351, "o", "c"] +[10.822448, "o", "r"] +[10.938024, "o", "e"] +[10.998165, "o", "a"] +[11.074084, "o", "t"] +[11.113723, "o", "e"] +[11.190188, "o", " "] +[11.322603, "o", "-"] +[11.410055, "o", "f"] +[11.522057, "o", " "] +[11.677154, "o", "o"] +[11.776766, "o", "p"] +[11.861806, "o", "e"] +[11.932995, "o", "r"] +[12.292411, "o", "\u0007ator"] +[12.317223, "o", "."] +[12.450514, "o", "y"] +[12.518179, "o", "a"] +[12.694005, "o", "m"] +[12.753924, "o", "l"] +[13.210062, "o", "\r\n"] +[13.387617, "o", "deployment.apps/rook-ceph-operator created\r\n"] +[13.392363, "o", "$ "] +[14.140775, "o", "k"] +[14.338145, "o", "u"] +[14.418224, "o", "b"] +[14.506269, "o", "e"] +[14.686166, "o", "c"] +[14.900902, "o", "t"] +[14.989032, "o", "l"] +[15.089127, "o", " "] +[15.224671, "o", "c"] +[15.428037, "o", "r"] +[15.51306, "o", "e"] +[15.560357, "o", "a"] +[15.640034, "o", "t"] +[15.676153, "o", "e"] +[15.775857, "o", " "] +[15.928127, "o", "-"] +[15.999972, "o", "f"] +[16.122153, "o", " "] +[16.663097, "o", "c"] +[16.774768, "o", "l"] +[16.863216, "o", "u"] +[16.951356, "o", "s"] +[17.159827, "o", "\u0007ter"] +[17.835316, "o", "."] +[18.041916, "o", "y"] +[18.098052, "o", "a"] +[18.30208, "o", "m"] +[18.369227, "o", "l"] +[18.837653, "o", "\r\n"] +[19.094909, "o", "cephcluster.ceph.rook.io/rook-ceph created\r\n"] +[19.100021, "o", "$ "] +[19.913147, "o", "k"] +[20.103882, "o", "u"] +[20.167694, "o", "b"] +[20.255303, "o", "e"] +[20.448665, "o", "c"] +[20.672659, "o", "t"] +[20.780393, "o", "l"] +[20.881339, "o", " "] +[21.024442, "o", "-"] +[21.315466, "o", "n"] +[21.468715, "o", " "] +[21.591791, "o", "r"] +[21.66358, "o", "o"] +[21.804194, "o", "o"] +[21.904102, "o", "k"] +[22.132625, "o", "-"] +[22.354701, "o", "c"] +[22.442346, "o", "e"] +[22.482093, "o", "p"] +[22.554405, "o", "h"] +[22.861459, "o", " "] +[23.32199, "o", "g"] +[23.425365, "o", "e"] +[23.529526, "o", "t"] +[23.593492, "o", " "] +[23.729254, "o", "p"] +[23.801465, "o", "o"] +[23.957388, "o", "d"] +[24.202147, "o", "s"] +[24.290882, "o", "\r\n"] +[24.386117, "o", "NAME READY STATUS AGE\r\n"] +[24.786117, "o", "ceph-csi-controller-manager 1/1 Running 4m12s\r\n"] +[24.907922, "o", "rook-ceph-mgr-a 1/1 Running 61s\r\n"] +[25.107922, "o", "rook-ceph-mon-a 1/1 Running 92s\r\n"] +[25.307922, "o", "rook-ceph-mon-b 1/1 Running 84s\r\n"] +[25.507922, "o", "rook-ceph-mon-c 1/1 Running 71s\r\n"] +[25.507922, "o", "rook-ceph-osd-0 1/1 Running 21s\r\n"] +[25.707922, "o", "rook-ceph-operator 1/1 Running 4m17s\r\n"] +[32.707922, "o", ""] diff --git a/index.html b/index.html index e056114495..7b8685fd18 100644 --- a/index.html +++ b/index.html @@ -22,42 +22,38 @@

Open-source, cloud-native stor

- - -
- -
- +
+ +
+

You describe the cluster. Rook builds and runs it.

-
+
@@ -72,7 +68,7 @@

You describe the cluster. Rook builds and runs it.

@@ -87,7 +83,7 @@

You describe the cluster. Rook builds and runs it.

-
+
@@ -97,7 +93,7 @@

You describe the cluster. Rook builds and runs it.

-
+

Why Rook

@@ -134,7 +130,7 @@

Hardware fails, your data stays

-
+

Block, file and S3 storage from one cluster

@@ -160,7 +156,7 @@

Block, file and S3 storage from one cluster

-
+
@@ -214,7 +210,7 @@

Snapshot and clone volumes

-
+

Guides

@@ -235,6 +231,15 @@

Guides

+
+
+
+

Join the community

+
+ {% include community.html %} +
+
+
@@ -251,12 +256,3 @@

FAQ

- -
-
-
-

Join the community

-
- {% include community.html %} -
-