Skip to content

feat(blog): add etcd-operator v1alpha2 announcement#573

Merged
Andrei Kvapil (kvaps) merged 1 commit into
mainfrom
blog/etcd-operator-joins-cozystack
Jun 10, 2026
Merged

feat(blog): add etcd-operator v1alpha2 announcement#573
Andrei Kvapil (kvaps) merged 1 commit into
mainfrom
blog/etcd-operator-joins-cozystack

Conversation

@kvaps

@kvaps Andrei Kvapil (kvaps) commented Jun 10, 2026

Copy link
Copy Markdown
Member

Summary

Add a blog post announcing the donation of etcd-operator to the Cozystack project and the new etcd-operator.cozystack.io/v1alpha2 API.

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

  • Documentation
    • Added blog post announcing etcd-operator's integration with Cozystack, featuring the new API version, operator architecture, scaling capabilities, storage options, and migration guidance.

@coderabbitai

coderabbitai Bot commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

A 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.

Changes

etcd-operator Announcement

Layer / File(s) Summary
Blog Post Announcement
content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md
Blog post announces etcd-operator donation to Cozystack, introduces v1alpha2 API design (Membership API-driven), documents EtcdCluster + EtcdMember architecture, lists core features (scaling, pause/resume, storage modes, TLS/auth, snapshots, PDB, CEL validation, scale subresource, kubectl plugin), details v1alpha1 differences (API group, resources, options, naming, validation), describes etcd-migrate in-place adoption, and maps roadmap coverage including multi-tenant capabilities.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

Suggested reviewers

  • lllamnyp

Poem

A rabbit hops with joy so bright, 🐰
etcd-operator finds new home tonight!
From donation to v1alpha2's grace,
Cozystack gives it a welcoming place.
Docs and dashboards shine so fine,
This operator's future is divine!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(blog): add etcd-operator v1alpha2 announcement' directly and clearly summarizes the main change—adding a blog post announcing the v1alpha2 release of etcd-operator.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch blog/etcd-operator-joins-cozystack

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

For consistency with the previous mention of the company name "Ænix", "aenix" should be capitalized. Also, adding a comma after "Feature-wise" improves readability.

Suggested change
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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

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.

Suggested change
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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Add a comma after "e.g." to follow standard English punctuation rules.

Suggested change
5. Scale in and out, e.g 1 -> 3 -> 5 members and vice versa — implemented.
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>
@netlify

netlify Bot commented Jun 10, 2026

Copy link
Copy Markdown

Deploy Preview for cozystack ready!

Name Link
🔨 Latest commit c5a49e9
🔍 Latest deploy log https://app.netlify.com/projects/cozystack/deploys/6a295922c511c800091ba180
😎 Deploy Preview https://deploy-preview-573--cozystack.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify

netlify Bot commented Jun 10, 2026

Copy link
Copy Markdown

Deploy Preview for cozystack ready!

Name Link
🔨 Latest commit 1e5110a
🔍 Latest deploy log https://app.netlify.com/projects/cozystack/deploys/6a2959eaa688b100087fe034
😎 Deploy Preview https://deploy-preview-573--cozystack.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@kvaps Andrei Kvapil (kvaps) marked this pull request as ready for review June 10, 2026 13:37

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

📥 Commits

Reviewing files that changed from the base of the PR and between a28843b and 1e5110a.

📒 Files selected for processing (1)
  • content/en/blog/2026-06-10-etcd-operator-joins-cozystack.md

Comment on lines +1 to +12
---
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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 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 because hugo.yaml already sets permalinks.blog to /: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

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

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 API

Option 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.

Suggested change
### etcd-operator Joins Cozystack with a New v1alpha2 API
## etcd-operator Joins Cozystack with a New v1alpha2 API
Suggested change
### 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

@kvaps Andrei Kvapil (kvaps) merged commit 85317f4 into main Jun 10, 2026
6 checks passed
@kvaps Andrei Kvapil (kvaps) deleted the blog/etcd-operator-joins-cozystack branch June 10, 2026 15:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants