乐趣区

关于kubernetes:K8S-生态周报-containerd-存在-bug-会导致-Pod-被重启建议升级

「K8S 生态周报」内容次要蕴含我所接触到的 K8S 生态相干的每周值得举荐的一些信息。欢送订阅知乎专栏「k8s 生态」。

大家好,我是张晋涛。

这是 2023 年的第一篇『K8S 生态周报』,在上个月的月中之后我因为阳了就进行更新了,始终在涵养身材。生病相干的内容我在上一篇文章 张晋涛:我的 2022 总结 | MoeLove 有做介绍。愿大家都留神身材,放弃衰弱。

这篇中的内容同样也蕴含了近一个月中值得关注的内容。

containerd v1.6.15 公布

只管 containerd 的 1.7.0-beta.2 也曾经于近期公布,但正式版公布还须要一段时间。当初 containerd 应用最多的还是 v1.6 和 v1.5 这两个次要版本,
这次公布的 v1.6.15 中有一个十分要害的变更,是 #7845 – CRI: Fix no CNI info for pod sandbox on restart by dcantah

我次要也是想聊一下这个,从 v1.6.9 开始的最近几个 containerd 版本中都受到了此问题影响。

简略来说就是 containerd 重启后,Sandbox IP 没能保留,最终导致 kubelet 将会重启 Pod(如果重启 kubelet)。

具体景象如下,在 Node 上通过 crictl 工具查看任意未应用 HostNetwork 的 Pod 的 .status.network 字段,能够看到如下后果:

(MoeLove) ➜ crictl -r unix:///run/containerd/containerd.sock  inspectp e03077da768e6  | jq .status.network
{"additionalIps": [],
  "ip": "10.244.1.5"

在重启 containerd 后,再次反复操作,就会发现 .status.network.ip 字段为空了:

(MoeLove) ➜ crictl -r unix:///run/containerd/containerd.sock  inspectp e03077da768e6  | jq .status.network
{"additionalIps": [],
  "ip": ""

不过次是如果在 Kubernetes 集群中通过 kubectl 查看该 Pod 的状态,会发现 Pod 的 IP 还在。

(MoeLove) ➜ kubectl get pods moelove-test-pods -o json | jq .status.podIPs
[
  {"ip": "10.244.1.5"}
]

但如果在 Node 上重启 kubelet,再次查看 Pod 的状态,则会发现它的 IP 产生了变动,并且还重启了。

(MoeLove) ➜ kubectl get pods moelove-test-pods -o json | jq '{podIPs: .status.podIPs, restartCount: .status.containerStatuses[].restartCount}'
{
  "podIPs": [
    {"ip": "10.244.1.8"}
  ],
  "restartCount": 1
}

在生产环境中,比方要进行版本升级,或者一些保护操作,kubelet 产生重启是一件惯例的事件。
但上述这种状况,在大多数生产环境都是不能承受的。 这将会导致 Node 上的 Pod 都产生重启,进而可能会影响到业务的稳定性。

当初 containerd 上游曾经进行了修复,也 cherry-pick 到了 v1.6.15 中。
所以,如果想要防止或者修改此问题,
能够应用低于 containerd v1.6.9 的版本,或者间接更新到 v1.6.15

更多对于 containerd 新版本的变更,请参考其 ReleaseNote

Apache APISIX Ingress v1.6 公布

间隔上一个版本 v1.5 公布,曾经过了 3 个月,Apache APISIX Ingress v1.6 终于正式公布!

在这个版本中,共有 29 位贡献者 参加代码提交,其中 17 位是新增贡献者,感激大家的反对和参加!

本次公布的 Apache APISIX Ingress v1.6 版本带来了泛滥新个性,次要集中在对 Gateway API 的反对,扩大 APISIX Ingress 的应用场景,和一些易用性方面的晋升。以下是一些重点个性的介绍。

扩大对 Gateway API 的反对

Gateway API 是 Kubernetes 中下一代的 Ingress 标准,致力于提供富裕表现力,可扩大和面向角色的接口来倒退 Kubernetes 的网络,各个 Ingress controller 我的项目都在踊跃推动对该标准的反对。Apache APISIX Ingress 我的项目自 2021 年开始就在踊跃的紧跟上游社区的倒退,并踊跃推动 Gateway API 在 APISIX Ingress 我的项目中的实现。

以后,Apache APISIX Ingress 我的项目中通过 Gateway API 进行配置的个性尚处于 beta 阶段,欢送大家在测试环境中踊跃进行测试,并提供反馈,咱们将继续的对此个性进行优化和改良,尽早实现此个性的 GA。

在 APISIX Ingress v1.6 版本中,咱们增加了对 Gateway API 中的 TCPRouteUDPRoute 这两种资源的反对,同时,扩大了对 HTTPRoute 资源中 Filters 的反对,这样用户在应用 HTTPRoute 资源的时候,就能够在该资源中利用一些重定向,Header 改写等能力了。

例如能够应用如下配置:

apiVersion: gateway.networking.k8s.io/v1alpha2
kind: HTTPRoute
metadata:
  name: http-route
spec:
  hostnames: ["httpbin.org"]
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /headers
    filters:
    - type: RequestHeaderModifier
      requestHeaderModifier:
        add:
        - name: X-Api-Version
          value: v1
        - name: X-api-key
          value: api-value
        set:
        - name: X-Auth
          value: filter
        remove:
        - Remove-header
    backendRefs:
    - name: httpbin
      port: 80

通过应用此配置,client 在对 httpbin.org 进行申请时,将会增加 "X-Api-Version": "v1""X-Api-Key": "api-value" 的申请头,并将 "X-Auth" 申请头的值设置为 filter,同时将移除 "Remove-Header" 这个申请头。

另外就是在这个版本中,减少了对外部服务的代理以及 ExternalName Service 反对;还有反对和内部服务注册发现组件的集成,比方 Consul, Nacos,Eureka, DNS 等,
这些性能在很多 Ingress controller 中是不具备的

此外,咱们也踊跃的和泛滥开源我的项目进行了合作,比方能够和 Flagger 以及 Argo 等 GitOps 畛域的支流我的项目集成。对于 Flagger 和 Argo 等相干我的项目的应用,能够查看我之前写的文章。

欢送感兴趣的小伙伴查看具体的 ReleaseNote

KEDA v2.9 正式公布

KEDA 是一个基于 Kubernetes,由事件驱动的主动扩容组件,它为部署在 Kubernetes 上的利用提供了非常灵活的弹性伸缩的能力。

它最新公布的 v2.9 蕴含了很多值得注意的更新:

  • 新增了基于 CouchDB, Etcd 和 Loki 的缩放器;
  • 为应用程序主动所放引入现成的 Grafana Dashboard;
  • 提供了通过改良的 Prometheus metrics;
  • 实验性的反对了在轮询距离期间为缩放器缓存指标值的性能;
  • 对于 metrics 指标如何裸露给 Kubernetes 的性能改良和架构变动;
  • Azure Key Vault 身份验证提供程序当初反对用于身份验证的容器标识;
  • 针对咱们 50 多个缩放器中的一些缩放器的大量新性能和修复;

另外须要留神的是,依据 KEDA 的废除策略,自 v2.9 开始官网仅为 Kubernetes v1.23 及更新版本提供反对。

HPA 的 apiVersion 也从 autoscaling/v2beta2 降级到了 autoscaling/v2

更多对于此版本的变更,请查看 ReleaseNote

上游停顿

  • kubernetes components using leader election to leases by aimuz · Pull Request #114055 · kubernetes/kubernetes 我在之前的文章中介绍过,Kubernetes 中的选举机制,之前应用基于 ConfigMap 和 secrets 的比拟多,然而自 Kubernetes v1.27 开始,将仅仅容许应用 Lease 的接口进行选举相干操作了;
  • Add metric for max no. of CIDRs available by aryan9600 · Pull Request #112260 · kubernetes/kubernetes 新增了 cidrset_cidrs_max_totalmulticidrset_cidrs_max_total metrics,用于裸露有多少 CIDRs 可供调配;
  • Migrate to runtime.v1 for CRI · Issue #125 · Mirantis/cri-dockerd 目前 Mirantis 保护的 cri-dockerd 我的项目也曾经将 CRI 降级到了 runtime.v1 了,这样就能够和 Kubernetes 新版本进行兼容,配合应用了;
  • Release v1.9.0-beta.1 · kyverno/kyverno Kyverno 公布了 v1.9.0-beta.1 版本;
  • Release v1.13.0-rc4 · cilium/cilium Cilium v1.13.0-rc4 公布;
  • Release v23.0.0-rc.1 · moby/moby Docker v23.0.0-rc1 公布,这次应该不会跳票了,当初试用外面便有我的一些致力;

其余

  • CircleCI security alert: Rotate any secrets stored in CircleCI (Updated Jan 7) CircleCI 中的一些信息可能受到了透露,所以倡议用户尽快批改其中的机密信息。(我曾经登记了账户)
  • update image to v1.7.0 by wangyang0616 · Pull Request #2636 · volcano-sh/volcano 看起来 volcano 是打算公布 v1.7 版本了

欢送订阅我的文章公众号【MoeLove】

退出移动版