「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」。
大家好,我是张晋涛。
你有没有考虑过,也许作为工程师,我们的设备可以更简单?
最近两周我进行了一些不开电脑的尝试。尤其是本周,我的大多数工作都是用 iPad 完成的。
具体而言,在写代码和测试方面,我使用了 GitHub 的 Codespaces, 这是 GitHub 推出的一个云端开发环境,与 Gitpod 比较类似。
主要的区别在与 Gitpod 是通过启动一个安全容器来提供环境,而 GitHub Codespaces 则是启动了一个新的 VM,所以这两者比较 而言,GitHub Codespaces 会更贵一些。
速度方面,Gitpod 号称自己更快,不过就目前的网络环境而言,我倒是没有明显的感觉。
体验方面,GitHub Codespaces 其实就是云端的 Visual Studio Code,我之前没怎么用过, 偶尔还是会继续我之前的习惯,直接在它的终端下就 Vim 编辑文件了。启动环境后默认是 4C8G,比我的电脑差很多, 但只是用来编码和运行测试也足够。
我觉得它做的比较好的点在于,启动环境后默认就进行了 Github 的授权,尽管代码仓库配置的都是 HTTPS 的连接, 但无需密码或者私钥均可直接提交代码。
其余方面 iPad 上的应用也都能支持。飞书的屏幕共享弱了些,只能全屏直播
总的来说,体验还不错,基本的需求可以满足,也不需要自己额外维护云端环境。 弊端在于网络环境并不稳定,浏览器内进行操作,相比本地感觉慢了一点。而且我个人还是更喜欢直接用 Vim 能更快点。
但从我这次的尝试来看,也许之后将环境都迁移到云端后,使用的设备可以更加简单轻量。 甚至用手机连到云端也可以完成很多事情。
Thanos v0.27.0 正式发布
Thanos 从上个版本到现在也就不到 3 个月的时间,变化不算太大,如果想要升级则需要注意如下内容:
Ruler: 检查是否设置了
--eval-interval
参数,如果你没有设置这个参数,并且在生成规则的时候还依赖这个值的话,那么本次升级就会带来比较严重的影响。新版本中将这个值从 30s 调整到了 1 分钟,这是为了能更好的符合 Prometheus 告警生成器规范。https://github.com/prometheus/compliance/blob/main/alert_generator/specification.md#executing-an-alerting-rule#5410: 在 Query 中添加了一些
defer qry.Close()
,添加这个代码可以在每次查询结束后,自动调用Close()
,这可以在内存回收中减少一些波动;
此外,这个版本中还添加了一个比较有趣的特性,为 Receive
添加了一种新的哈希算法 #5408。之前的实现中默认都是使用 hashmod
,现在可以通过 --receive.hashrings-algorithm=ketama
来使用 ketama 一致性哈希算法了。
这里简单来说下之前算法的问题,使用 hashmod
几乎是最为简单的分片方式,但是一旦副本数有调整的时候,这就会导致跳过某些分片。想要在生产环境中大规模使用此系统或者想要动态的使用此系统的时候,都是需要解决这个问题的。
ketama
算是一个可以比较好的解决扩/缩容场景,以及在平衡性方面表现还不错的算法了,在很多的系统中都可以使用类似的能力,比如设计缓存系统之类的。
当然,后续也许还会增加其他哈希算法,但这终究还是要看实际的规模,以及在性能 & 资源 & 功能 方面的权衡了。
Cilium v1.12.0-rc3 发布
Cilium v1.12 即将正式发布,在 v1.12 版本中会将 Cilium Service Mesh Ingress 升级至 Stable ,算是一个大的飞跃了。关于此特性,可以查看我之前 Cilium Service Mesh 相关的文章。
我这里主要介绍一个值得关注的特性,在 #20174 中将 ICMP network policy 功能默认开启了。
其实 Cilium 在去年就已经支持在配置 CiliumNetworkPolicy 的时候配置 ICMP 协议了,但是由于 eBPF 程序 Size 的问题,默认没有启用。 现在该问题已经解决,所以可以默认将它开启了, 该配置如下:
apiVersion: "cilium.io/v2"
kind: CiliumNetworkPolicy
metadata:
name: "icmp-policy-deny"
spec:
description: "ICMP policy deny"
endpointSelector:
matchLabels:
id: app1
ingressDeny:
- fromEndpoints:
- matchLabels:
id: app2
icmps:
- fields:
- type: 8
这可以用来提供更加安全的网络环境,避免攻击者利用 ICMP 了解你的网络,或者进行攻击。
额外一说,在配置中 icmps[].fields[].type
为 8 表示是 IPv4,如果是 IPv6 则是 128 。
此外,如果你使用的 CNI 是 Calico 的话,也是支持 ICMP 的 NetworkPolicy 配置的。 我是 Calico 的社区大使,最近有篇对我的专访,有兴趣的小伙伴可以看看:https://sourl.cn/uG7bRn
cert-manager v1.9.0-beta.1 发布
cert-manager 想必大家不会太陌生,它是在 Kubernetes 和 OpenShift 集群中最简单的证书管理工具。
在 v1.9 版本中主要是进行一些项目的稳定性和质量提升,以及增加一些新功能和提升用户体验。
在这个版本中有几个比较值得注意的功能:
为 Ingress 资源新增了一个
cert-manager.io/revision-history-limit
annotation,这样可以控制 CertificateRequests 的历史记录;为 Ingress 资源添加了一组关于 private-key 相关的 annotation,比如
cert-manager.io/private-key-algorithm
之类的,可以控制其生成算法,编码格式,保存时间等。
其他的功能则包含一些 bugfix,以及一些新的 metrics 等。如果想升级到新版本,基本上是比较平滑的。
上游进展
最近社区还在 Kubernetes v1.25 版本的发布流程中,此版本中目前有 55 个跟踪的功能。
有个跨越了近一年的新特性目前还在 review 中,为 kubelet 提供 OpenTelemetry 的 tracing 能力。
这样可以更容易的去进行 kubelet 的问题定位,以及可以通过 OpenTelemetry 采集 CNI/CRI/CSI 等接口的调用情况等。 希望它能顺利的在 v1.25 完成。
感兴趣的小伙伴可以参考:KEP-2831: Instrumenting Kubelet for OpenTelemetry Tracing
欢迎订阅我的文章公众号【MoeLove】