这下云原生了 · Light Cube 七周年

这下云原生了 · Light Cube 七周年

Light Cube 2869 字 / 6 分钟

文章头图来自 @tototo PixivID: 100132847

又是一年国庆假期,这个小站也走到了第七年。 每年国庆假期写这篇文章的时候,我都会畅想下明年的这个时候,自己会以什么样的身份,在什么样的地方,写下对这个小站过去一年的总结。但去年大四的我对一年后的自己会身在何处一无所知。也许是因为当时面临着太多的选择,太多突然发生的事情让我十分迷茫。

而当过去的一切尘埃落定后,我想回应当时的自己:你在大学顺利毕业后离开了学校,在离学校挺远的地方租了间还算舒适的公寓,工作日往返于 15 分钟通勤时间的两点一线,周末在家看番、补觉或者写点小项目。精疲力尽的你开始去刻意地拖延或者回避一些需要额外投入精力的事情,你知道这并不是一件好事,但是你确实时常感到非常累。每个周五的夜晚是你最快乐的时候,有时你在下班的路上会开心地跳起来,有时心情不好会去公司附近的酒吧喝上几杯。而每个工作日的深夜是你最能全身心投入的时候,你会把自己关在房间里,大声外放着音乐加班写着方案与代码。

比较可惜的是,在过去的一年里,你只写了四篇文章。而两年前的你,一个月至少一篇。我知道你心里其实还没有放弃,你挣扎着想去研究一些新奇独特的“好活”,再将你的“发明创造”以及感悟心得浓缩成一篇文章 —— 正如你一直以来的那样。但是你发现好像很难找到能让自己提得起兴趣的东西了,亦或是说你的表现欲没有以前那么强烈了,又或是说你不太能坚持完整地做完一件事情了。

额…… 好像话题开始转向对自己沉重的自责了,就此打住。还是来看看过去的一年里这个站发生的变化吧。

这下云原生了

由于今年我从学校毕业了,之后也就无法再享受学生价购买阿里云的 ECS 服务器,原有的学生机将于今年 10 月到期。这台 ECS 学生机上跑着的正是这个博客站点,因此不可避免的需要进行迁移。在这之后的几个月到一年的时间内,我腾讯云、华为云等账号上的学生机也将到期无法按学生价续费,上面的服务都需要进行迁移。 而比较尴尬的是,这些机器在我当初购买后,就十分奢侈的只在上面跑了一到两个 Web 服务,每台机器大约 80% 的资源是被白白浪费掉了的。因此,在咨询了一些朋友的意见之后,我选择在阿里云上 ACK 开个 Kubernetes 集群,将博客以及学生机上的其它服务都迁移至集群中。集群的节点使用阿里云的竞价实例,成本不会比之前开好几台学生机高太多。且目前集群里只有一台 2C8G 的竞价实例节点,它上面承载了我之前所有需要用到的服务!

解锁一个又一个船舵🕸新技能

因为是自己第一次配置集群,因此也踩了不少坑。 之前自己完全没有去学过 Kubernetes 相关的内容,一开始是去年年末公司内部开始向云原生迁移,因此我在电脑上装了个号称 Kubernetes IDE 的 Lens,用来执行删除 Pod 触发更新,看看 Pod 的日志这些简单操作。在看到我删除的 Pod 居然又会自动新建一个启起来觉得十分神奇,这才了解到背后有个叫 Deployment 的东西定义了它。 公司当时使用的是 AWS EKS 的集群服务,我偶然间在控制面板看到了一个需要 CNAME 指向的域名,这才明白我们是如何通过自己的域名访问到集群内的服务,同时也接触到了 Service 和 Ingress。 后面自己写得一些服务需要部署到集群上,我也开始学着改运维写好的 ArgoCD YAML 文件,比如加个环境变量,修改下 Replica 设置副本数量。 再后面我看运维能精准的将 Pod 部署到我指定配置或者架构的机器上,以及在 Lens 里看到关于 Pod 调度失败的报错,我也就大概能从字面含义上领悟到 Annotations、Labels、Conditions、Tolerations 这些东西的作用。 今年年初协会办 D^3CTF 时,需要一个在集群内动态开启靶机的服务,当时我一晚上撸了个 oblivion 。它的原理也只是简单地调用 Kubernetes API,我也是从那之后了解到了 Service Account。 再往后我想让 Cardinal Pro 比赛平台支持 Kubernetes 开启题目靶机,因此去粗略翻阅了 Google kCTF 项目的源码,惊讶地发现他们怎么将 CTF 比赛中的赛题(Challenge)作为了集群中的一种资源,YAML 里居然可以写 kind: Challenge!这才知道原来 Kubernetes 可以自定义资源。 在搭建的自己的集群时,我为了能节省机器磁盘费用,开了阿里云的 NAS,挂载到集群里的时候,了解到了 StorageClass。 在自己的集群中搭建 WordPress 与 uptime-kuma 时,开始学着偏向使用 Helm 去部署这些服务。而 uptime-kuma 的第三方 Chart 包文档写的很简略,不得已之下我只能去翻看这个包 templates 下的 YAML 模板文件,一看才发现这不就是 Go 原生的那个反人类模板语言嘛,我可太熟悉了。直接通过看模板找到了我要的配置项该怎么写。

可以说,我对于 Kubernetes 的认知全都来自于自己实践中见过的情况。我目前也仅仅只满足于现在入门的能用就好。我并没有比较深入的去了解 Kubernetes 中一些有趣的细节,所以也没有单独写一篇文章来记录我集群迁移的过程。可能未来的某天我读到一本讲 Kubernetes 的书,将以上这些先入为主的概念全都串起来,我可能也就豁然开朗了,在那之后可能会洋洋洒洒写个几千字来讨论下。我目前对 Kubernetes 的态度是,这家伙就是个十分偏实战性的“工具”,且它的的确确也就只是个用来做容器编排的工具,如果有人拿着一堆 Kubernetes 的偏门八股来恶心人的话,那我劝他还是趁早死死算了。

这下 YAML 工程师了

回到博客这个服务上来,我使用的是 bitnami 的 WordPress Helm Chart。其背后的 WordPress Docker 镜像是直接安装的 PHP 8 的版本。众所周知 PHP 8 废除了以前很多的内置函数,亲测我目前使用的 WordPress 博客主题是无法在 PHP 8 环境下正常运行的。因此我不得二次魔改 bitnami 的 WordPress 基础镜像,将其中安装的 PHP 版本改为 7.4,再将新构建好的镜像推送至我的阿里云容器镜像服务中,并配置 Chart 使用我指定的镜像启动。同时为了保证我自己打包的镜像中 WordPress 的版本始终是最新的,我在 GitHub Actions 上加了个定时构建镜像的任务。 值得一提的是,bitnami WordPress Chart 自带了个开启 Memcached 的选项。那我自然也不客气,直接几行 YAML 就让它把 Memcached 给起好了,WordPress 后台装了个基于 Memcached 的缓存插件,虽说没感觉到加载速度有变多块,但是聊胜于无嘛嘻嘻。

最后随便聊点

这一年来本站最大的改变应该就是迁移到集群了,除此之外 Google Analytics 统计指标,七牛云 CDN 账单相较去年都保持稳定。友链的话很可惜今年一年都没有增长,不过我的 Twitter 和 GitHub 粉丝倒是涨得挺快的,我有意将我的 Twitter 主页链接修改成 GitHub 个人页的地址而本博客的地址,目的是想筛选出那些真正愿意了解我的人,他们会从 Twitter 找到 GitHub,再链接到博客,最后再到 QQ。很感谢能遇到这些小伙伴们。

再说说我自己,最近两三个月其实自己一直有在追「Lycoris Recoil」我超!蒜批!,每周六的晚上会随便写点 Side Project 的代码,等到零点的时候准时上床带耳机看番。有点像回到了初三追刀剑第二季的时候,那时的我也是刷着题到十点半,然后准时打开乐视 App 看番,可能这也是为啥我初三那段时间成绩突飞猛进的原因吧,因为心里有个盼头,所以做起事情来会格外的认真哈哈哈。 但是…… 为啥每次我每次 Twitter 点赞关于石蒜的内容就会掉粉啊😅 除了追番以外,我还有在追邓紫棋的新专辑,之前是每周一和周四晚上零点放出一首新歌。而有的时候我到零点还没下班,下班的路上发现新歌发了,便赶紧带上耳机边走边听。不得不说 AirPods Pro 的空间音频真的棒!为了支持解解,我还专门买了张实体专辑。😘

嘛,大概就这些了。晚上还得像去年一样继续去改“某个大东西”。😉

七周年生日快乐!🎂 明年再见!