「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 的应用。
可以通过下面二维码订阅我的文章公众号【MoeLove】,在公众号后台回复 k8s 可加入技术圈交流。