K8S 生态周报| Docker v20.10.6 发布, 修正了 K8S 中 dind 的异常行为

本文主要是介绍K8S 生态周报| Docker v20.10.6 发布, 修正了 K8S 中 dind 的异常行为,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

「K8S 生态周报」内容主要包含我所接触到的 K8S 生态相关的每周值得推荐的一些信息。欢迎订阅知乎专栏「k8s生态」[1]

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 Scorefunc 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】

TheMoeLove

参考资料

[1]

k8s生态: https://zhuanlan.zhihu.com/container

这篇关于K8S 生态周报| Docker v20.10.6 发布, 修正了 K8S 中 dind 的异常行为的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/817256

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了

90、k8s之secret+configMap

一、secret配置管理 配置管理: 加密配置:保存密码,token,其他敏感信息的k8s资源 应用配置:我们需要定制化的给应用进行配置,我们需要把定制好的配置文件同步到pod当中容器 1.1、加密配置: secret: [root@master01 ~]# kubectl get secrets ##查看加密配置[root@master01 ~]# kubectl get se

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

【Kubernetes】K8s 的安全框架和用户认证

K8s 的安全框架和用户认证 1.Kubernetes 的安全框架1.1 认证:Authentication1.2 鉴权:Authorization1.3 准入控制:Admission Control 2.Kubernetes 的用户认证2.1 Kubernetes 的用户认证方式2.2 配置 Kubernetes 集群使用密码认证 Kubernetes 作为一个分布式的虚拟