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

containerd v1.3.1 发布

本周 containerd v1.3.1 发布了,我们一起看看其中值得注意的变化:

  • 将 runc 更新至 v1.0.0-rc9 , 其中包含了对 CVE-2019-16884 的修复,关于此漏洞的更多细节也可参考 https://github.com/opencontainers/runc/issues/2128
  • 修复了一个 v1.3.0 在拉取镜像遇到错误时,解包过程中的死锁问题 #3816 ;
  • 定位了一个 containerd 在主机意外重启时,可能无法恢复损坏的镜像的问题,这个问题是比较有意思的,可能遇到这种情况的环境主要是 containerd 数据目录挂载至非根目录所在的盘中(多数环境中,系统盘的空间并不会很大,所以这种安装情况也算比较常见)。发生此问题的根本原因就在于重启后启动的时机不对(我倾向于这样表述,虽然实际的逻辑是 gc 删除了一些元数据,但它本身的行为是正常的)。所以修复的办法也比较简单, 如果你的 containerd 是使用 systemd 进行管理的,那么可以在 service 的配置文件的 After 块中增加 local-fs.target 的配置

    local-fs.target 是 systemd 中一个特殊的单元,和 dbus.service 之类的很多单元类似,都属于特殊的那一类。具体来说它是用来集合本地文件系统挂载点的目标单元,听起来可能比较抽象。实际上就是 systemd-fstab-generator 会在所有本地文件系统挂载单元中添加 Before=local-fs.target 这一条,所以呢,当在 local-fs.target 之后执行的,就表示现在机器上的所有本地文件系统均已经正确挂载。(这也是我认为这个问题有意思的地方)

以上就是我认为在此版本中比较值得注意的点了,对此版本有兴趣的朋友可参阅 ReleaseNote

Kubernetes v1.17.0-rc.1 发布

虽然本周在举行 KubeCon 但 Kubernetes 的发布进度也没受太多影响,本周顺利发布了 v1.17.0-rc.1 版本,这个版本相比于上次发布的 v1.17.0-beta.2 而言,值得关注的变化如下:

  • 修复了 kubeadm 中未对 KubeProxy.FeatureGates 进行初始化可能导致的 panic ,稍微来看下修复后的代码:
// DefaultKubeProxyConfiguration assigns default values for the kube-proxy ComponentConfig
func DefaultKubeProxyConfiguration(internalcfg *kubeadmapi.ClusterConfiguration) {
	kind := "KubeProxyConfiguration"

	if internalcfg.ComponentConfigs.KubeProxy == nil {
		internalcfg.ComponentConfigs.KubeProxy = &kubeproxyconfigv1alpha1.KubeProxyConfiguration{
			FeatureGates: map[string]bool{},
		}
	}
	if internalcfg.ComponentConfigs.KubeProxy.FeatureGates == nil {
		internalcfg.ComponentConfigs.KubeProxy.FeatureGates = map[string]bool{}
	}

	externalproxycfg := internalcfg.ComponentConfigs.KubeProxy

	if externalproxycfg.ClusterCIDR == "" && internalcfg.Networking.PodSubnet != "" {
		externalproxycfg.ClusterCIDR = internalcfg.Networking.PodSubnet
	} else if internalcfg.Networking.PodSubnet != "" && externalproxycfg.ClusterCIDR != internalcfg.Networking.PodSubnet {
		warnDefaultComponentConfigValue(kind, "clusterCIDR", internalcfg.Networking.PodSubnet, externalproxycfg.ClusterCIDR)
	}

	if externalproxycfg.ClientConnection.Kubeconfig == "" {
		externalproxycfg.ClientConnection.Kubeconfig = kubeproxyKubeConfigFileName
	} else if externalproxycfg.ClientConnection.Kubeconfig != kubeproxyKubeConfigFileName {
		warnDefaultComponentConfigValue(kind, "clientConnection.kubeconfig", kubeproxyKubeConfigFileName, externalproxycfg.ClientConnection.Kubeconfig)
	}

	if enabled, present := internalcfg.FeatureGates[features.IPv6DualStack]; present {
		externalproxycfg.FeatureGates[features.IPv6DualStack] = enabled
	}
}

导致 panic 的地方也就是最后那处判断,换言之,这个问题影响的是启用了 dual-stack feature 的用户。

关于此版本有兴趣的朋友可以参考 ReleaseNote,不过按照发布计划,近期 v1.17 正式版也就要发布了。

上游进展

近期在举行 KubeCon 加上也在 v1.17 的发布周期中,上游最近没有太多变化,本次就暂且跳过好了。

项目推荐

介绍一个项目,stash 可以帮助你备份 Kubernetes 集群中的 Stateful 的应用。

stash - https://moelove.info


可以通过下面二维码订阅我的文章公众号【MoeLove】,在公众号后台回复 k8s 可加入技术圈交流。

TheMoeLove