Kubernetes v1.20 正式发布

美国时间 12 月 8 日,Kubernetes v1.20 正式发布,这是 2020 年的第三个新版本,也是最后一个版本。该版本包含 42 个增强功能:其中 11 个增强功能趋于稳定,15 个进入Beta,16 个进入 Alpha。

根据 K8sMeetup 中国社区上周整理的 v1.20 亮点内容,新版本主要包括以下五大核心改动:

  • 存储卷快照功能趋于稳定:现在提供了触发存储卷快照功能的标准方法,并允许用户以可移植的方式在 Kubernetes 环境或任何受支持的存储提供程序上合并快照操作。
  • Kubectl Debug 进入 Beta:kubectl alpha debug 功能在 v1.20 进入 Beta 版,并更名为 kubectl debug。该功能能通过 kubectl 提供常见调试工作流的支持。
  • API 优先级和公平性进入 Beta:v1.18 版本引入的 API 优先级和公平性(APF)功能现在在 Kubernetes v1.20 默认启用,它能让 kube-apiserver 按优先级对传入的请求进行分类。
  • IPV4/IPV6 Alpha 功能更新:IPv4/IPv6 双协议栈基于用户和社区反馈重新实现,现在既可以将 IPv4 与 IPv6 服务集群 IP 地址分配给单个服务,也可以在服务中实现单 IP 栈与双 IP 栈的切换。
  • 节点优雅关闭进入 Alpha:GracefulNodeShutdown 功能现在进入 Alpha,它能让 kubelet 知晓节点系统已关闭,并在系统关闭期间正常终止 Pod。

详情请见《Kubernetes v1.20 重磅发布 | 新版本核心主题 & 主要变化解读》

K8s v1.20 版本负责人 Q&A

近日,云原生计算基金会(CNCF)和 Kubernetes 发布团队宣布了 Kubernetes v1.20 的发布。这是最大的发行版之一,具有大量增强功能。

InfoQ 与 Kubernetes v1.20 版本负责人 Jeremy Rickard 进行了沟通。Jeremy Rickard 着重说明了发行团队的多样性,表示 Kubernetes 新版本会继续将重点放在项目稳定性上。

Q:能具体谈谈 V1.20 以及成为版本负责人的挑战吗?

A:v1.20 非常令人兴奋,最后我的猫也成为了吉祥物。2020 年对于个人和专业人士而言都充满了挑战,因此我想以幽默感结束这一年。考虑到今年的疫情和其他情况,v1.19 进行了相当大的扩展,以减轻贡献者和 Kubernetes 使用者的负担。相比之下,2019 年同一时间发布的 v1.17 有22项增强功能,而 v1.20 具有 40 多个!

Q:能谈谈弃用 dockershim 相关的争议吗?具体来说,开发人员是否需要做其他更多事情才能继续在 Kubernetes v1.20 和更高版本上运行?

A:这是该版本的最大争议,但是第一件事就是不要恐慌!这里最重要的区别是,此次弃用是 Docker 运行时,而不是 Docker 镜像、容器。

相关阅读:《Kubernetes 弃用 Docker 来龙去脉》

很多版本之前,Kubelet 已在使用 CRI,但 Docker engine 并未实现 CRI,而是通过 dockershim 获得特殊支持。现在该特殊支持已被弃用,并在未来删除,最早可能会在 v1.23。从 kubernetes 角度来看,最好使用 CRI,例如 containerd。

Q:能否在技术上谈论 Kubernetes 的测试和持续集成相关内容?

A:v1.19 有个问题是,很多事情合并后,导致代码库的整体稳定性以及运行状态下降。通过测试可以看出这点,但这的确需要大量的调查和改进才能解决。因此,这次我们非常关注相关趋势,并更加主动地去解决问题。v1.20 中进行了更多工作,例如端对端测试,以提高质量。

Q:Kubernetes 的发布是否可能进行季度发布?

A:我认为有可能回到季度发布,但有人希望放缓发布节奏,甚至永久调整到每年三次发布。v1.21 版本应该会遵循正常的季度发布,不过尚未决定。

相关阅读:《社区热议 K8s 发布频率》

原文链接:https://www.infoq.com/news/2020/12/kubernetes-120-rickard/

K8s 成本管理的 5 个技巧

如果在 Kubernetes 上的支出超出预期,不必感到疑惑,许多企业都出现了这样的情况。管理或降低成本也是一场挑战,这里介绍了五个基本技巧来实现更具成本效益的 Kubernetes 部署。

确定工作负载是否适合 Kubernetes

Kubernetes 可以为许多工作负载提供显着的成本优势,但如果把所有东西都扔进 Kubernetes ,那可能会造成严重的技术债务。

了解工作负载的一般资源要求

在将工作负载转移到 Kubernetes 之前,我们必须决定要在集群中使用的节点的大小和类型,因此必须计算所有工作负载中的资源需求(主要是 CPU 和 内存)。对于有状态的工作负载,还需要考虑需要多少存储空间。在需要扩展之前,对资源消耗及其可以处理的负载量有所了解将有助于总体成本估算。

选择大小合适的节点

没有选择正确大小的节点的绝对答案,更难的是 Kubernetes 允许调整节点大小以适合工作负载。节点的选择很大程度上取决于部署的应用程序数量、资源要求。归根结底,要记住主要目标是减轻操作负担和提高容器编排利用率。

正确设置资源请求和限制

根据对工作负载的资源消耗分析,适当地设置资源请求和限制。这可以充分发挥容器编排带来的利用率。掌握了资源需求的知识后,Kubernetes 可以更有效地对节点进行打包,而不会浪费资源。

应用程序应具有可观察性

如果仅监控 Kubernetes,但并没有监控在其中运行的应用程序,那么只能看到一半内容。除了了解每个 Pod 占用的 CPU、内存、网络和存储量之外,也要知道对组织有意义的基础应用程序度量标准,例如每秒请求数、每分钟新用户数等。

原文链接:https://thenewstack.io/5-essential-tips-to-manage-kubernetes-costs/

K8s 社区披露近期漏洞

近日 Kubernetes 社区披露了使用 LoadBalancer 或 External IPs 进行中间人攻击漏洞 CVE-2020-8554 以及 GHSA-36xw-fx78-c5r4 安全漏洞 CVE-2020-15257。

CVE-2020-8554

在多租集群中,攻击者可以通过下面两种方式完成对指定Service的流量劫持。

  • 创建 ClusterIP 类型的 Service,并设置服务实例 spec 中的 externalIP 字段来指定劫持该 IP 内的流量。
  • 对于 LoadBalancer 类型的 Service,攻击者可以通过设置 Service 实例中的 spec.loadBalancerIP 字段并且修改 status.loadBalancer.ingress.ip 达到流量劫持的目的。

影响范围当前所有版本的 Kubernetes 集群均在该漏洞影响范围内,该漏洞源自 Kubernetes 设计上的安全缺陷。防范措施目前 Kubernetes 社区官方还没有提供针对该漏洞的修复方案,由于漏洞修复可能涉及原生模型较大的改动,预计在官方正式修复版本发布前还需一段较长的时间。建议优先采用以下方案防范攻击:对于 external IPs 的使用建议如下:

  • 通过 admission webhook 的准入校验方式限制 external IPs 的使用。
  • 通过OPA Gatekeeper来限制external IPs的使用范围。

对于 LoadBalancer 类型的 IP 使用建议如下:

  • 尽可能收敛对 Service 的 status 对象的 patch 权限。
  • 可采用上述 external IPs 的使用建议,通过 admission webhook 或 OPA Gatekeeper 的方式来限制对 LoadBalancer IP 的使用。

CVE-2020-15257

containerd 和 containerd-shim 之间采用 abstract socket 通信,当容器共享了宿主机的网络 namespace 且容器内部 UID 设置为 0 时,攻击者就可以以 Root 用户访问宿主机上的 containerd-shim 进程,进而逃逸出容器并使用 containerd-shim 的相关接口发起下一步的提权攻击。影响范围containerd 社区在 1.3.9 和 1.4.3 版本修复了该漏洞。可以使用以下 kubectl 命令查看集群内有哪些 Pod 共享了主机网络。

kubectl get pods -A -o json |
jq -c '.items[] | select(.spec.hostNetwork==true) |[.metadata.namespace, .metadata.name]'

防范措施

为了尽可能降低您受到提权攻击的概率,需要尽可能地让业务应用运行在独立的五个核心 Net、Mount、IPC、PID 或 UTS Namespace内,与宿主机共享的 namespace 越多,被攻击的概率就越高。同样,尽可能不要在 Pod 配置中使用 Host Networking 配置,可以通过以下方式限制 Host Networking 的使用:

  • 开启 PSP 特性,通过 PSP 策略中的 hostNetwork 配置可以限制指定 namespace 的 Pod 无法使用共享主机网络。
  • 装 gatekeeper 组件。

流水线框架 Tekton 详解!

在计算机中,流水线是把一个重复的过程分解为若干个子过程,使每个子过程与其他子过程并行进行的技术,也叫 Pipeline。由于这种工作方式与工厂中的生产流水线十分相似, 因此也被称为流水线技术。从本质上讲,流水线技术是一种时间并行技术。

以“构建镜像”过程为例:在每一次构建镜像中,我们都需要拉下代码仓库中的代码,进行代码编译,构建镜像,最后推往镜像仓库。在每一次代码更改过后,这一过程都是不变的。使用流水线工具可以极大的提升这一过程的效率,只需要进行简单的配置便可以轻松的完成重复性的工作。这样的过程也被称之为 CI。这里主要介绍诞生于云原生时代的流水线框架——Tekton。

Tekton 是一个基于 Kubernetes 的云原生 CI/CD 开源框架,属于 CD 基金会的项目之一。Tekton 通过定义 CRD 的方式,让用户以灵活的自定义流水线以满足自身 CI/CD 需求。

详情请点击:《Kubernetes 原生 CI/CD 构建框架 Tekton 详解!》

本周 K8s 开源项目推荐

dynamic-pv-scaler

  • 该应用程序基于 Golang,用于解决 Kubernetes 中持久卷的扩展问题。
  • github.com/opstree/dynamic-pv-scaler

cheekymonkey

  • 这是一个 Chaos Monkey 游戏。
  • github.com/richstokes/cheekymonkey

yh

  • 它作为 YAML Highlighter,可为 YAML 标记颜色。
  • github.com/andreazorzetto/yh

kotary

  • 其用于管理 Kubernetes 资源配额。
  • github.com/ca-gip/kotary

hyscale

  • 其用于部署单体或微服务应用程序。
  • github.com/hyscale/hyscale

kapitan

  • 它是一个通用的配置管理工具,可以帮助我们管理 terraform 、kubernetes 以及其他配置。
  • github.com/deepmind/kapitan