feat(blog): add etcd-operator v1alpha2 announcement#573
Conversation
📝 WalkthroughWalkthroughA new blog post announces the donation of etcd-operator to Cozystack. It introduces the v1alpha2 API, describes the operator architecture and key features, documents migration from v1alpha1, and compares coverage against the official etcd-io operator roadmap. Changesetcd-operator Announcement
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~3 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Code Review
This pull request adds a new blog post announcing that the etcd-operator project has joined Cozystack with a new v1alpha2 API, detailing its features, migration path, and comparison with the official operator. The review feedback focuses on minor grammatical corrections, such as capitalizing "Ænix" for consistency and improving punctuation around abbreviations like "e.g.".
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
|
|
||
| The [etcd-operator](https://github.com/cozystack/etcd-operator) project, which develops an operator for deploying and maintaining [etcd](https://etcd.io) clusters on Kubernetes, has been donated to the [Cozystack](https://cozystack.io) project. Alongside the donation, a from-scratch implementation of the operator has been published under a new API version — `etcd-operator.cozystack.io/v1alpha2`, superseding the previous `etcd.aenix.io/v1alpha1`. Instead of managing members through a StatefulSet, the new implementation directly drives etcd's native Membership API (the MemberAdd, MemberPromote and MemberRemove operations), giving the operator full control over cluster membership. The new implementation was written by [Timofei Larkin](https://github.com/lllamnyp), one of the maintainers of the previous codebase, which is preserved in the [v1alpha1](https://github.com/cozystack/etcd-operator/tree/v1alpha1) branch. The project is written in Go and distributed under the Apache 2.0 license. | ||
|
|
||
| The project was started by Ænix, which assembled an initiative group from the Russian-speaking Kubernetes community to build it. After the base implementation was completed, an attempt was made to donate the project to the CNCF. Prompted by this initiative, the etcd project concluded that an official operator was needed and formed its own working group, which, after evaluating existing implementations, chose to develop a codebase from scratch — this is how [etcd-io/etcd-operator](https://github.com/etcd-io/etcd-operator) came to be. Feature-wise the official operator has not yet caught up with the aenix etcd-operator, which is already used in production by the community and by projects such as Cozystack and [Kamaji](https://github.com/clastix/kamaji), so the project has continued its own independent line of development (a comparison with the official operator is given at the end of this article). |
There was a problem hiding this comment.
For consistency with the previous mention of the company name "Ænix", "aenix" should be capitalized. Also, adding a comma after "Feature-wise" improves readability.
| The project was started by Ænix, which assembled an initiative group from the Russian-speaking Kubernetes community to build it. After the base implementation was completed, an attempt was made to donate the project to the CNCF. Prompted by this initiative, the etcd project concluded that an official operator was needed and formed its own working group, which, after evaluating existing implementations, chose to develop a codebase from scratch — this is how [etcd-io/etcd-operator](https://github.com/etcd-io/etcd-operator) came to be. Feature-wise the official operator has not yet caught up with the aenix etcd-operator, which is already used in production by the community and by projects such as Cozystack and [Kamaji](https://github.com/clastix/kamaji), so the project has continued its own independent line of development (a comparison with the official operator is given at the end of this article). | |
| The project was started by Ænix, which assembled an initiative group from the Russian-speaking Kubernetes community to build it. After the base implementation was completed, an attempt was made to donate the project to the CNCF. Prompted by this initiative, the etcd project concluded that an official operator was needed and formed its own working group, which, after evaluating existing implementations, chose to develop a codebase from scratch — this is how [etcd-io/etcd-operator](https://github.com/etcd-io/etcd-operator) came to be. Feature-wise, the official operator has not yet caught up with the Ænix etcd-operator, which is already used in production by the community and by projects such as Cozystack and [Kamaji](https://github.com/clastix/kamaji), so the project has continued its own independent line of development (a comparison with the official operator is given at the end of this article). |
|
|
||
| The implementation covers most items of the [roadmap](https://github.com/etcd-io/etcd-operator/blob/main/docs/roadmap.md) of the official [etcd-operator](https://github.com/etcd-io/etcd-operator) developed by the etcd project. Status by roadmap item: | ||
|
|
||
| 1. Create a new etcd cluster, e.g 3 or 5 members cluster of a specified etcd version — implemented. |
There was a problem hiding this comment.
The phrasing "e.g 3 or 5 members cluster" has minor grammatical issues. It should be "e.g., a 3- or 5-member cluster" for correct English grammar and punctuation.
| 1. Create a new etcd cluster, e.g 3 or 5 members cluster of a specified etcd version — implemented. | |
| 1. Create a new etcd cluster, e.g., a 3- or 5-member cluster of a specified etcd version — implemented. |
| 2. Understand health of a cluster — implemented. | ||
| 3. Enabling TLS communication, including cert renewal — implemented. | ||
| 4. Upgrade across patches or one minor version — partially implemented: `spec.version` applies only to newly created members. | ||
| 5. Scale in and out, e.g 1 -> 3 -> 5 members and vice versa — implemented. |
Announce the donation of etcd-operator to Cozystack and the new etcd-operator.cozystack.io/v1alpha2 API. Co-Authored-By: Andrey Kolkov <androndo@gmail.com> Co-Authored-By: Claude <noreply@anthropic.com> Signed-off-by: Andrei Kvapil <kvapss@gmail.com>
c5a49e9 to
1e5110a
Compare
✅ Deploy Preview for cozystack ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for cozystack ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md`:
- Line 15: The post's top-level content heading "etcd-operator Joins Cozystack
with a New v1alpha2 API" is currently an h3 (###) and duplicates the frontmatter
title; either change the heading to h2 (replace "###" with "##") if you want it
in-content, or remove that heading line entirely to avoid redundancy with
Hugo-rendered frontmatter (removing is the recommended option for Hugo blog
posts).
- Around line 1-12: The first in-article heading is mistakenly a level-3 heading
(`###`) immediately after the front matter; change that heading marker from
`###` to a level-2 marker `##` so the post body uses consistent heading
hierarchy (front matter title is the page-level title), leaving the rest of the
content unchanged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 22667f71-a8bb-46d4-814a-c478dd5390aa
📒 Files selected for processing (1)
content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md
| --- | ||
| title: "etcd-operator Joins Cozystack with a New v1alpha2 API" | ||
| slug: etcd-operator-joins-cozystack | ||
| date: 2026-06-10 | ||
| author: "Andrey Kolkov (Ænix), Andrei Kvapil (Ænix)" | ||
| description: "The etcd-operator project has been donated to Cozystack, together with a from-scratch implementation under the new etcd-operator.cozystack.io/v1alpha2 API that drives etcd's native Membership API instead of a StatefulSet." | ||
| article_types: | ||
| - news | ||
| topics: | ||
| - platform | ||
| - kubernetes | ||
|
|
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
# Description: Check Hugo configuration for blog permalink pattern
# Look for permalink configuration in Hugo config files
fd -e toml -e yaml -e yml 'config' --exec cat {} \; | rg -i 'permalink'Repository: cozystack/website
Length of output: 43
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# 1) Locate likely Hugo config files and search for permalink/permalinks
echo "== Hugo config candidates =="
fd -t f -g 'config.*' -e yml -e yaml -e toml -e json --max-depth 6 . || true
echo
echo "== Search for permalink/permalinks in config files =="
fd -t f -g 'config.*' -e yml -e yaml -e toml -e json --max-depth 6 . \
| xargs -r rg -n -i 'permalink|permalinks' || true
echo
# Also search repo for 'permalinks'/'permalink' near Hugo config keys (broader)
echo "== Broader search for permalink/permalinks =="
rg -n -i 'permalink|permalinks' --glob '!*node_modules*' --glob '!*public*' --glob '!*dist*' . \
| head -n 200
# 2) Inspect the blog post around the frontmatter end and first headings
echo
echo "== Blog post lines 1-40 =="
nl -ba content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md | sed -n '1,40p'Repository: cozystack/website
Length of output: 4894
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== hugo.yaml permalinks section =="
sed -n '90,150p' hugo.yaml | cat
echo
echo "== Permalink-related patterns in hugo.yaml =="
rg -n --fixed-string ':section/:year/:month/:slug/' hugo.yaml || true
rg -n -i 'permalinks:|blog' hugo.yaml | head -n 80
echo
echo "== Blog post lines 1-30 (with line numbers via awk) =="
awk '{printf "%d\t%s\n", NR, $0}' content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md | sed -n '1,35p'Repository: cozystack/website
Length of output: 7201
Fix heading hierarchy in the post body (line 15)
- First in-article heading is
###at line 15; change it to##to keep the heading levels consistent (front matter title ends at line 13). - The missing
permalink:in front matter is OK becausehugo.yamlalready setspermalinks.blogto/:section/:year/:month/:slug/(matching the guideline pattern).
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md` around lines 1 -
12, The first in-article heading is mistakenly a level-3 heading (`###`)
immediately after the front matter; change that heading marker from `###` to a
level-2 marker `##` so the post body uses consistent heading hierarchy (front
matter title is the page-level title), leaving the rest of the content
unchanged.
Source: Coding guidelines
|
|
||
| --- | ||
|
|
||
| ### etcd-operator Joins Cozystack with a New v1alpha2 API |
There was a problem hiding this comment.
Fix heading level and consider removing redundant title.
The first content heading uses h3 (###) but should use h2 (##) to follow proper Markdown heading hierarchy. Additionally, since Hugo renders the frontmatter title field separately, repeating the exact same title as a heading may be redundant.
📝 Proposed fix
Option 1: Fix heading level and keep the title
-### etcd-operator Joins Cozystack with a New v1alpha2 API
+## etcd-operator Joins Cozystack with a New v1alpha2 APIOption 2: Remove the redundant heading entirely (recommended for Hugo blog posts)
-### etcd-operator Joins Cozystack with a New v1alpha2 API
-
The [etcd-operator](https://github.com/cozystack/etcd-operator) project, which develops an operator for deploying and maintaining [etcd](https://etcd.io) clusters on Kubernetes, has been donated to the [Cozystack](https://cozystack.io) project.📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| ### etcd-operator Joins Cozystack with a New v1alpha2 API | |
| ## etcd-operator Joins Cozystack with a New v1alpha2 API |
| ### etcd-operator Joins Cozystack with a New v1alpha2 API |
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 15-15: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3
(MD001, heading-increment)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md` at line 15, The
post's top-level content heading "etcd-operator Joins Cozystack with a New
v1alpha2 API" is currently an h3 (###) and duplicates the frontmatter title;
either change the heading to h2 (replace "###" with "##") if you want it
in-content, or remove that heading line entirely to avoid redundancy with
Hugo-rendered frontmatter (removing is the recommended option for Hugo blog
posts).
Source: Linters/SAST tools
Summary
Add a blog post announcing the donation of etcd-operator to the Cozystack project and the new
etcd-operator.cozystack.io/v1alpha2API.The post covers the project history, the new Membership-API-based lifecycle that replaces the StatefulSet model, key features, changes compared to
v1alpha1, the in-place migration path, and a status comparison against the official etcd-io/etcd-operator roadmap.Adapted from the announcement article in the operator repository: cozystack/etcd-operator#329
Summary by CodeRabbit