「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s 生态」 ( https://zhuanlan.zhihu.com/container )。
1
Node Exporter v1.0.0 正式发布
Prometheus ( https://prometheus.io/ ) 是最早由 SoundCloud 开源的监控告警解决方案。并已经成长为继 Kubernetes 之后,第二个从 CNCF 毕业的项目。伴随着云原生理念的普及和 Kubernetes 等技术的发展, Prometheus 在监控领域也有了长足的发展。
其主要组件包括 Prometheus,Alertmanager,Node Exporter,Blackbox Exporter 和 Pushgateway 等。
Promethues 采取 Pull 的模式,所采集的 metrics 需要由对应的 Exporter 暴露出来。我们最常用的用于收集系统 metrics 的组件便是 Node Exporter 了。
本周,Node Exporter 终于迎来了 v1.0.0 版本,标志着它更加稳定,更加通用。
我在本周专门写了一篇文章来介绍它这个版本中我最关注的特性:为 Prometheus Node Exporter 加上认证 ( https://zhuanlan.zhihu.com/p/144048025 ), 我们可以让监控变得更加安全。
当然这个版本中也包含了众多变更和 bugfix, 这里暂且跳过,有兴趣的小伙伴可直接参阅其 ReleaseNote ( https://github.com/prometheus/node_exporter/releases/tag/v1.0.0 )
2
Docker v19.03.10 发布
Docker 在本周发布了 v19.03.10 版本,距离上个版本 v19.03.9 仅过了两周的时间,如果在使用 Docker v19.03.x 版本的小伙伴,我个人还是建议你更新到此版本。
此版本中最主要的一个修复是网络相关的,具体而言是与内置 DNS (embedded DNS) 有关的问题,在特定场景下,如果你创建了自定义网络,当解析外部域名时,可能会出现解析失败的情况。
这个问题的根因最早是今年 3 月份我在参与 Docker 开发时遇到的,当内置 DNS 服务器域名解析失败时,可能会触发 panic 导致 Docker daemon 异常退出。随后 Sam Whited 在 moby/libnetwork 中快速的对其进行了修正。
- if err != nil && !resp.Truncated {
+ if err != nil && (resp != nil && !resp.Truncated) {
修改的内容看起来很简单,在异常处理时,增加了 resp != nil 的条件,这确实修正了我当时遇到的情况。
但这个修正却会忽略返回错误但无响应的情况,比如 DNS 服务器异常之类的情况。但由于后续 Docker 中的逻辑处理中,需要依赖于此处的错误处理,所以会错误的认为 DNS 服务器已连接成功,只是没有响应罢了。这也就带来了问题。
所以这次的修正,也还是在这个位置:
- if err != nil && (resp != nil && !resp.Truncated) {
+ if err != nil && (resp == nil || !resp.Truncated) {
处理了两种情况:
如果返回了错误,并且响应为空;
如果返回了错误,并且和截断的响应无关;
经过这次的修正,那就基本覆盖了目前能考虑到的所有情况了。希望大家能尽早升级版本。
3
trivy 发布 v0.8 版本
在之前的 「K8S 生态周报」中已经介绍过 trivy 工具了,是一款很方便的镜像安全扫描工具。本周它发布了 v0.8 的版本,带来了几个值得关注的变更。
增加了新的子命令 trivy image $IMAGE_NAME ,同时废弃了之前的 trivy $IMAGE_NAME 的格式;
增加 --format=json 用于以 JSON 形式输出结果,更便于与其他系统进行集成;
通过设置 TRIVY_REGISTRY_TOKEN 环境变量,可设置 registry token 便于直接拉取镜像进行扫描;
可直接访问 Release 页面 ( https://github.com/aquasecurity/trivy/releases/tag/v0.8.0 ) 下载使用新版本。
4
上游进展
#90960 ( https://github.com/kubernetes/kubernetes/pull/90960 ) 修正了 kubectl create secret docker-registry --from-file 不可用的问题;
#91182 ( https://github.com/kubernetes/kubernetes/pull/91182 ) kubelet 的 --seccomp-profile-root 选项移动到了配置文件中;
#91171 ( https://github.com/kubernetes/kubernetes/pull/91171 ) 将 etcd 的镜像换成了基于 distroless 的镜像,之前已经把其他的一些镜像都换掉了,主要考虑的点可能是安全和体积相关的问题吧。
欢迎订阅我的文章公众号【MoeLove】