K8s面试题

腾讯智影

K8s

  • 如何通过 kubeproxy 保证两个 Pod 之间的相互通信?

    kubeproxy 会监听 pod 的变化,在 node 上配置 iptables规则,将访问的 service ip,做 DNAT,转到 service 负载均衡的endpoint ip。但是 iptables 查找负载均衡的 endpoint 是 O(n)复杂度,当集群 pod 数量庞大时,性能低下。而 ipvs 实现方案,可以实现 O(1)复杂度查找,性能更好。

    iptables 实现方案还有个缺点,无法额外配置自定义的 nat 规则。因为在nat表里面对数据包进行dnat操作过后,数据包就不在执行nat表里面的其它规则

  • K8S环境之下,从 service 进来的一个流量,它经过很多层,例如kubeproxy,iptable规则,然后完了之后它又要 net 到容器里面去。那有些容器可能还是 overlay 的。K8S 内的网络问题的话有什么手段?

  • 比如说他有些在 overlay 的网络,比如说 vxlan ,或者是 GRE 或者 IPIP 类似于这种,那你 TCPdump 的时候你是不知道。因为你的 pod 的 IP 是包在里面的。

  • 有哪些工作负载的资源?

    • 无状态工作负载

      • Deployment、ReplicaSet
    • 有状态工作负载

      • StatefulSet
    • 守护进程工作负载,保证每个节点上运行着这样一个守护进程

      • DaemonSet
    • 批处理工作负载,适用于一次性的任务

      • Job、CronJob
  • K8S 的这个权限体系

  • 有基于 K8S 的那个 Ingress 来做路由吗?

  • operator 的原理

  • 你是订阅了事件以后,然后自己又塞到队列里面吗?还是用K8s那个informer 他自己带的那个队列?

  • 那你有没有考虑过操作失败的一个兜底方案。

  • K8s 的一些自带的一些资源,我要修改它,怎么保证进程安全。

    1. K8 它自己有这个安全性的保证相关的逻辑吗?

      乐观锁,通过 resourceVersion

  • K8s 的不同版本之间有什么区别?更新的时候有什么注意事项你有了解过吗?

    稳定版、beta、alpha 版本针对弃用 api 的区别

    1. GA API 版本可以被标记为已弃用,但不得在 Kubernetes 的主要版本中删除

    2. Beta API 版本在引入后不超过 9 个月或 3 个次要版本(以较长者为准)将被弃用, 并且在弃用后 9 个月或 3 个次要版本(以较长者为准)不再提供服务

    3. Alpha API 版本可能会在任何版本中被删除,不另行通知

    更新的注意事项

    1. 阅读发布说明,如果有弃用的 api,通常会保留几个版本,然后
    2. 先在测试环境验证
    3. 备份数据
    4. 参考升级说明进行升级
    5. 滚动升级,Kubernetes 允许你逐个升级控制平面的组件和工作节点,这样可以在升级过程中保持集群的可用性。
    6. 验证
  • client-go 在用的时候有什么注意事项你知道吗?

  • k8s 的 request limit,哪一块会对应到 cgroup 里面去?

  • 容器网络方面的排查

  • 容器的网络方面你了解吗?比如说那些。就两个 Pod 之间,他那个网络是怎么通信。

  • indexer 的实现

  • workerqueue的实现

  • informer 这种就是比如说像你自定义的一些 CR,然后你比如说你也想做一些cache,因为这样来说可能够他只会去缓存一些 core source,就是你想做一些 CR 的一些 resource 的一些扩展,这个我们要怎么做?

    1. 我问的是如何去扩展它的 Informer 里面的资源,而不是说你自己cache。
    2. 你自己去缓存,那如果更新了,你怎么去同步?
    3. 在你本地缓存如何去扩展
    4. core resource 会缓存,但是那个 CR 会吗?

容器

  • docker两个容器之间如何通信?

    1. 使用docker 网络
      1. 先创建一个网络(docker network create my-bridge-network)后,其他容器加入该网络。
      2. 创建容器时加入其他容器的网络
      3. 创建两个容器,默认加入bridge网络,通过容器 ip 可通信
    2. 使用 docker compose,会创建一个默认网络,可通过服务名访问
    3. 使用主机网络,A 容器映射端口到主机,B 容器通过访问主机的该端口进行通信
  • host 网络模式是通过什么样的技术手段实现?

    使用宿主机的 network namespace,包括网络设备、路由表、防火墙规则、协议栈,可通过 lo 网络设备和宿主机通信。

  • 网络的 namespace 里面大概有哪些是隔离呢?比如说协议站隔离,然后路由表,然后 ARP 或者是那个 ARP 的nearby,那个 nearby 系统这些地方它都隔离吗?还有包括Netfilter、 IP tables 这些。

    协议栈、路由表、网络设备、防火墙规则、网络状态

  • 那比如说容器内和容器外,它是使用什么样的一个方式来做联通?

    虚拟网卡对

  • 如果比如说我不使用 iptables 的话,那么这个容器里面的 IP 能够直接通我宿主机的 IP 吗?我宿主机 IP 肯定是挂在宿主机的网卡,不管是物理的还是虚拟的其他网卡。嗯,这个场景它是直接通吗?如果不去设置任何 iptables 的话。

    可以。通过虚拟网卡对-》docker 网桥-》ip 路由表-》宿主机网卡

  • 如比如说我不借助任何 NAT,那么仅靠 IP forward,我把 IP forward 设置成一,那么他去容器内去ping我宿主机一个网卡上的一个IP,这个能 ping 通吗?

  • 我容器是确实看不到,但是你不是已经在 bridge 上了吗?已经到bridge,比如说做的有能力,比如说 IP 经过 IP forward 能够通一个物理网卡上的i,一个 IP 同一个宿主机情况下。

    可以。通过虚拟网卡对-》docker 网桥-》ip 路由表-》宿主机网卡

  • 如果能 ping 本机的物理网卡通的话,那么ping那个跨物理机,比如跨节点之间的,那么它能通吗?

    不可以。宿主机网卡出去时,需要做 iptables SNAT,否则回不来。

  • 不需要改原 IP 或者什么的吗?

  • IPtables 它的四表 5 链

  • 你们现在那个容器的版本和内核版本是多少?那个 Linux 的内核版本

  • 你在用 cgroups 去限制内存或者限制 CPU 的时候有遇到一些问题吗?

  • 有时候去排查,比如说要进到容器的 namespace 里面去,有时候可能会用一些,比如说像 nsenter 或者一些其他的系统调用。那比如说像 nsenter 这种类似它的原理是什么呢?

  • 比如说我们容器里面发出了一些威胁的流量,那从系统的角度来说,我怎么去关联这个流量和我的PID?然后我 pid 又怎么关联上容器呢?那关联到我的 Pod 呢?

  • namespace、cgroup 这方面你有哪些了解?

  • 内存 limit 在 memory cgroup 下,是通过哪个文件指定的

作者:Yuyy
博客:https://yuyy.info

评论

  1. hawli
    Windows Edge
    4天前
    2024-11-17 23:13:40

    这是哪个厂的面试题 ? 强度不低呀

    • Yuyy
      博主
      hawli
      Macintosh Chrome
      3天前
      2024-11-18 15:35:47

      这是我整合的今年遇到的面试题,有小公司的,也有大厂的,例如滴滴和阿里。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇