「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s 生态」。
Docker v20.10.6 公布
间隔上个版本曾经过来了一个多月,Docker 于近日公布了 v20.10.6 版本,还有 Docker Desktop 也公布了新版。这个版本中除了带来了 M1 的反对外,还带来了很多值得关注的内容,咱们一起来看看吧!
CLI 和构建器
在 Docker v1.7 版本之前,Docker CLI 在执行完 docker login 后,会将相干信息存储到本地的 ~/.dockercfg
配置文件中。自从 v1.7 版本开始,Docker 引入了新的配置文件 ~/.docker/config.json
,为了放弃兼容性,Docker 始终在同时反对这两种配置文件。
从以后版本开始,如果发现还在用 ~/.dockercfg
则会输入一行正告信息。揭示用户该配置文件将在后续版本中删除,请应用新的配置文件门路 & 格局。
此外,从这个版本开始,如果在应用旧版的 builder 并且在 Dockerfile 中有其不反对的命令或参数,则会打印相干报错,并提醒应用 BuildKit 来实现构建。这也是 Docker 社区想要将 BuildKit 晋升为默认构建器的进一步动作。
日志
#42174 · moby/moby 修改了 Docker v20.10 版本中,当应用默认的 json-file 日志驱动时,偶发会遇到 io.UnexpectedEOF 的谬误。
在理论测试中,在大量日志继续输入的状况下,比拟容易复现此问题。
网络
此版本中修改了 v20.10 中,当容器进行后 iptables 规定无奈主动清理的问题;同时也解决了 Docker 在有 IPv6 网络机器上,裸露端口时,尽管能够同时通过 IPv4 和 IPv6 的地址拜访该端口,然而 docker inspect 的 API 中默认不返回 IPv6 地址信息的问题。
其余
在这个版本中,如果应用 Docker 官网源进行 Docker CE 装置的话,默认会倡议装置 docker-scan-plugin 包,这是一个 docker CLI 的插件,可用于扫描镜像破绽。
该插件我在之前的 K8S 生态周报中曾经介绍过了,最后先引入到了 Docker Desktop 中,这个插件还是很不便的。
另外, 这个版本也解决了一个比较严重的问题 。尽管此问题并非 Docker 本身导致的,然而在应用 Docker In Docker 模式时,会触发到,所以在此进行额定的阐明。
当在 Kubernetes 中应用 Docker In Docker v20.10 版本时候,因为 Kubernetes 有 QoS 的机制,它确定了 Pod 的调度和驱赶优先级。实际上,Kubelet 是通过判断 Pod 的 oom_score_adj 来断定何时对它进行 OOM。对于容器资源管理的局部,请参考我之前的文章《聊聊容器资源管理》
如果是 BestEffort QoS 的 Pod,则 Kubernetes 会将它的 oom_score_adj 设置为 1000,然而 containerd 为了能防止 shim 不至于在子过程之前推出,所以在 AdjustOOMScore
函数中,进行了对 oom_score_adj 加 1 的行为。会导致如下报错信息:
docker: Error response from daemon: io.containerd.runc.v2: failed to adjust OOM score for shim: set shim OOM score: write /proc/211/oom_score_adj: invalid argument
后面也曾经说到了 Besteffort QoS 为它设置的是 1000,这曾经是该值的最大值啦,要 +1 天然也就报错了。
对应的修改办法如下:
diff --git a/sys/oom_unix.go b/sys/oom_unix.go
index d49d5bc8d..c381e1a7e 100644
--- a/sys/oom_unix.go
+++ b/sys/oom_unix.go
@@ -26,8 +26,12 @@ import ("strings")
-// OOMScoreMaxKillable is the maximum score keeping the process killable by the oom killer
-const OOMScoreMaxKillable = -999
+const (
+ // OOMScoreMaxKillable is the maximum score keeping the process killable by the oom killer
+ OOMScoreMaxKillable = -999
+ // OOMScoreAdjMax is from OOM_SCORE_ADJ_MAX https://github.com/torvalds/linux/blob/master/include/uapi/linux/oom.h
+ OOMScoreAdjMax = 1000
+)
diff --git a/runtime/v2/shim/util_unix.go b/runtime/v2/shim/util_unix.go
index 2b0d0ada3..9fb7cc573 100644
--- a/runtime/v2/shim/util_unix.go
+++ b/runtime/v2/shim/util_unix.go
@@ -53,6 +53,7 @@ func SetScore(pid int) error {
// AdjustOOMScore sets the OOM score for the process to the parents OOM score +1
// to ensure that they parent has a lower* score than the shim
+// if not already at the maximum OOM Score
func AdjustOOMScore(pid int) error {parent := os.Getppid()
score, err := sys.GetOOMScoreAdj(parent)
@@ -60,6 +61,9 @@ func AdjustOOMScore(pid int) error {return errors.Wrap(err, "get parent OOM score")
}
shimScore := score + 1
+ if shimScore > sys.OOMScoreAdjMax {
+ shimScore = sys.OOMScoreAdjMax
+ }
if err := sys.SetOOMScore(pid, shimScore); err != nil {return errors.Wrap(err, "set shim OOM score")
}
能够看到,就是在 AdjustOOMScore 中,如果发现发现调整后的 oom_score_adj 大于了零碎默认的最大值,则将它设置为零碎的最大值。
如果在生产环境中应用 containerd 及 Docker In Docker 的,倡议降级到此版本进行解决。
好了,以上就是此版本中须要留神的内容,更多具体的变更,请查看其 ReleaseNote
kube-state-metrics v2.0 公布
做 Kubernetes 集群监控的小伙伴,大多对这个我的项目都不生疏。kube-state-metrics 能够依据 Kubernetes 的资源状态来生成 Prometheus 格局,极大的满足了咱们对集群可观测性的需要。
这个版本次要是将一些 metrics 的名字做了替换,替换成了更加规范和对立的格局。
同时,将镜像的地位从 Quay.io 迁徙到了 k8s.gcr.io/kube-state-metrics/kube-state-metrics 中。
更多对于此版本的变更,请查看其 ReleaseNote
上游停顿
- #99839 · kubernetes/kubernetes 修改了 port-forward 的内存透露问题;
- #99963 · kubernetes/kubernetes 确保 job controller 能够在 Pod 实现后清理掉它;
- #100644 · kubernetes/kubernetes 将 KubeConfig 裸露在 scheduler framework 中,以便于树外插件应用。
欢送订阅我的文章公众号【MoeLove】