编写 Kubernetes(K8s)  operator 的意图在我心中不断增长。我开始阅读文章、探索 GitHub 存储库,并就此咨询我的同事。虽然我不能说它完全成功,但这个意图仍然存在。

图片

译自How to Write a Kubernetes Operator,作者 Payam Qorbanpour。

作为一名每天都与 Kubernetes 打交道的后端开发人员,我一直希望编写一个 operator 来扩展我的知识边界。然而,障碍出现了,阻碍了我实现这一目标。

这就是我在服兵役期间编写gobackup-operator的故事。tl;dr:直接跳到“深入项目”部分

磨刀不误砍柴工

编写 Kubernetes(K8s)  operator 的意图在我心中不断增长。我开始阅读文章、探索 GitHub 存储库,并就此咨询我的同事。虽然我不能说它完全成功,但这个意图仍然存在。

所有这些努力的结果是我GitHub 帐户中存储的一系列教程项目。

我应该提到,大约一年前,当我第一次接触 Kubernetes 时,练习过程就开始了。我首先观看了Guru 的教程以了解 CKAD,然后观看了Nana 的 YouTube 教程。

化为灰烬

我被派去服兵役。

那里没有互联网连接,甚至没有一个电子设备。相反,我们只有精装书、排球以及迷人的日出和日落美景来娱乐我们。

在这种情况下,创建 operator 的想法正在逐渐消失。我所关心的一切就是吃饭、看书和享受偶尔的自由(假期)。然而,有时这种自由是短暂的,正如指挥官曾经评论的那样:

假期的快乐在你离开营房的那一刻就结束了。

训练课程结束了,我开始在办公室担任一名雇员,但那里也感受到了互联网连接的缺乏!在晚上,我离开办公室,从事我热爱的工作。有时,你在有限的时间内会有更好的表现。因此,从下午 4 点到晚上 9 点,我必须创造一些特别的东西。对我来说,它确实很特别!

不鸣则已

毕竟,在此系列的帮助下,我设法从教程中编写了另一个 Kubernetes  operator但这一次,它有所不同。

我的同事已经开发了一个备份系统,但它似乎运行得不太好。因此,他们探索了另一种解决方案,并遇到了一个名为gobackup的项目,该项目旨在定期备份数据库并将它们推送到存储中。问题是该项目不包括对 etcd 数据库的支持。因此,他们决定通过添加 etcd 支持来满足要求,从而为该项目做出贡献。这最终导致了一个新的版本。

在我缺席期间,他们决定在此基础上开发一个 Kubernetes  operator 。这对我是重要的一步。当他们与我分享时,我急切地检查了该项目,并想,“终于,就是它了。operator 即将创建。耶!”

在阅读该项目时,我注意到该项目的自述文件中存在一个问题。其中一个链接指向 404 页面。我主动修复了这个问题并提交了一个拉取请求。

所有者欣然接受了它。:)

遇到如此开放的态度后,我的一个同事建议我们可以将此 operator 放在gobackup 组织下,以便更多的人可以为其开发做出贡献。

我打开了一个问题并提出了gobackup 组织下的一个存储库,并且仍然存在合作的开放性。

白天,我在军队服役,晚上,我致力于 gobackup-operator 项目。

深入项目

我首先设置我的环境。

幸运的是,我已经在计算机上安装了 Golang、Docker 和 kubectl。通过之前的实践,我已熟悉本地机器 Kubernetes 集群(如 Kind)和用于创建 operator 的工具(如 kubebuilder)。

因此,我启动了 operator 代码。

$ kubebuilder init --domain gobackup.io --repo github.com/gobackup/gobackup-operator