修改pod的dns配置文件/etc/resolv.conf内容

kubernetes提供了修改pod的/etc/resolv.conf文件配置方法,即spec.dnsConfigspec.dnsPolicy,具体可以访问[Customizing DNS Service],但是这种方法会导致pod重新生成。

我们有个业务场景:pod访问本地的localdns方式,取代中心化的访问coredns。kubelet的cluster dns配置已经改成localdns地址,但是在变更之前生成的pod还是使用coredns,需要将这部分pod的dns的nameserver改成localdns。但是不能主动删除pod或重启container(这的确不是一个好的容器使用方式(把容器当成宠物),这里公司文化决定的(业务程序没有实现优雅退出))。 即需要将pod直接访问coredns进行域名解析方式,切换到pod访问本地的node local dns,但是不能让pod进行重启。

kubernetes升级后出现很多pod probe失败

背景

kubernetes集群版本从1.18升级到1.23后出现许多运行正常的pod,由于liveness probe失败导致重启,还有一些是readiness probe失败。

起初怀疑pod重启,不应该是kubernetes升级导致的,由于1.18和1.23版本的container hash算法没有修改,所以升级kubelet不会导致已经运行的container重新生成。后面排查到pod重启时间在kubernetes升级之后,不是升级那个时间。所以可以排除升级kubelet导致的重启。

探索knative里根据路径转发和header转发解决方案

目前knative v1.1.0版本还是基于域名进行转发流量到服务。

而大多数使用场景是:

  1. 服务对外域名一般都是固定的,而且可能有多个。
  2. 服务一般都是在域名的某一路径下面,即一个域名由多个服务组成。
  3. 灰度基于多个header头之间and or关系。

下面讨论如何实现这些需求