“「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]。”
大家好,我是张晋涛。
最近的 GitHub Universe 上 Kyle Daigle 介绍了 GitHub 的一个处于技术预览阶段的特性,名为 GitHub Blocks,你可以点击左侧的链接,加入 waitlist 或者查看其具体介绍。
简单来说 GitHub Blocks 就是允许在 GitHub 的仓库中增加一些 JavaScript 代码,并由 GitHub 直接进行执行/渲染。
这个特性的本意是用于增强 GitHub 上文档的体验 (当在 GitHub 上的文档体验很强大时,各种项目应该就没必要再自建文档站了吧(笑))。
我来列几个我认为特别实用的特性:
- 对于上传到 GitHub 仓库中的
.csv
文件,不仅仅可以渲染成表格,而且还可以直接渲染出图表,根据用户的选择来自定义横纵轴,以及图表类型;
- excalidraw 是我经常用来画图的工具,在 GitHub 中可以直接渲染
.excalidraw
的源文件,以及进行一些编辑,这可比 GitHub 集成 Mermaid 要强大的多; - 还可以很简单的将贡献者和趋势图等,目前在 Insights 可以看到的内容,用很简单的代码加到 markdown 文件中。我猜测这个功能上线后,有一些类似的工具可能就会被抛弃了;
- 还有就是构建可交互的文档,比如现在很多前端框架/库的文档站基本都提供了交互的能力,在 GitHub 上也可以得到相同的能力了,而且还无需自己维护相关逻辑/代码,这不香吗?
当然,这里需要重点说明一下,这个功能目前是 GitHub 特有的,如果你依赖了这些功能,那么后续可能就无法简单的通过 迁移到其他的服务提供商(比如 GitLab)来得到相同的体验了。
kube-state-metrics v2.7 正式发布
kube-state-metrics (KSM) 是一个比较简单的,通过监听 kube-apiserver 并生成关于 Object 状态指标的组件。
我们可以通过这个组件暴露出集群内各种对象的 metrics,并结合 Prometheus 做一些监控,以及一些其他的需求。
在 v2.7 中有一个很重要的变化, 实验性的 VerticalPodAutoscaler metrics 被废弃,并将在 v2.9 中移除。 用户可以通过使用 CustomResourceStateMetrics 从 VPA 资源中获取。 主要是由于 VPA 并不是一个 Kubernetes 内置的资源,并且添加此实验性的特性,本身已经超过了该项目的主要目标,所以社区决定将其逐步移除。
此外 实验性的 CustomResourceState 也修改了其命名规则,以便于更加易用。之前 CRD 的名称等信息都被插入到了 metrics 的名称中,这非常不方便进行聚合查询。本次的修改如下:
kube_apisix_apache_org_v2_ApisixRoute_myroute > kube_crd_myroute{group="apisix.apache.org", kind="ApisixRoute", version="v2"}
可以看到,经过这次修改,可读性更好,并且也更容易按 Group 聚合。如果存在多个版本的资源,也会很方便进行管理。
此外还有一些值得注意的变更:
- #1752 实验性的增加了 kube_pod_container_status_last_terminated_exitcode 指标,这样就可以查看 Pod 上次退出时的状态码了,在排查问题的时候很方便;
- #1905 添加了对 IngressClass 资源的 metrcis;
更多关于此版本的变更,请查看其 ReleaseNote
registry.k8s.io 达到 GA
Kubernetes 自 v1.25 起将默认的镜像仓库从 k8s.gcr.io 切换到了 registry.k8s.io ,以便于给用户提供更高可用的镜像服务,且可以通过 CDN 提升速度。
这主要是由于 k8s.gcr.io 本质上是由 Google 提供的镜像服务,但是目前有其他的供应商也可以提供类似的服务, 比如,近期 Amazon 也宣布会对 Kubernetes 进行捐赠。
并且以后可能也会有其他的厂商也可能会提供类似的服务。
所以本次切换相当于提供了一个中立的服务,并通过使用各个云厂商提供的镜像服务做为后端服务, 实现了镜像仓库的高可用,并且可以在各个厂商之间进行分流,节省开支等。
大家以后拉取镜像/安装的时候,默认就会使用这个镜像仓库了。
如果你不想使用此镜像仓库,可以通过以下两种方法来使用旧的域名:
- 直接通过命令行传递参数
kubeadm init --image-repository=k8s.gcr.io
- 或者通过
ClusterConfiguration
进行配置
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
imageRepository: "k8s.gcr.io"
此外,kubelet 中也可以通过如下方式来指定使用旧的仓库:
代码语言:javascript复制kubelet --pod-infra-container-image=k8s.gcr.io/pause:3.5
Flux 从 CNCF 毕业了
在我之前的文章 GitOps 应用实践系列 - Flux CD 及其核心组件 | MoeLove 中,我曾详细介绍过 Flux 的发展过程以及其用法,感兴趣的小伙伴可以翻翻那篇文章,这里就不重复了。
Flux 是 CNCF 第 18 个毕业的项目,自 2019 年 7 月加入 CNCF sandbox,2021 年 3 月达到孵化级别,截至目前该项目获得了 4.2K star, 并且有上百位贡献者,也有很多知名公司在生产环境中使用了它。
目前 Flux 社区正在积极推进 Flux 达到 GA,预计 Flux GitOps 和 Flux Helm 在 2023 年均会达到 GA。详细计划请参考 Flux Roadmap | Flux.
其他
- Alpine Linux v3.17 正式发布了。有一些新的变更,OpenSSL 默认是 3.0 版本了,解决了一些安全问题,又一大波镜像需要进行更新了。具体请参考 Alpine 3.17.0 released | Alpine Linux
- containerd 可通过其子项目 containerd/runwasi: Facilitates running Wasm / WASI workloads managed by containerd 来运行 Wasm/WASI 的容器了,不过该项目还处于很早期的阶段。
- cilium Release 1.13.0-rc3 · cilium/cilium
- Kyverno Release v1.8.3-rc.2 · kyverno/kyverno
- Kyma Release 2.9.0 · kyma-project/kyma 尽管这个项目有点不温不火,但还是在以比较高的频度在进行迭代;
- Talos Release v1.3.0-beta.0 · siderolabs/talos 云原生操作系统,已经将自己的依赖升级到了最新,以及可以通过
talosctl etcd remove-member
命令,删除指定 member ID 的节点了;
参考资料
[1]
k8s生态: https://zhuanlan.zhihu.com/container