k8s 面试题汇总

一、基础

1、k8s的部署方式有那几种?

答:二进制、kubeadmin,kubesphere,开发环境和生产环境部署有什么不同?要注意什么?

2、k8s核心组件有哪些?之间是怎么通信的?master和worker怎么收集信息的?

master: apiServer, scheduler, ControllerManager
worker: kubelet,kubeprox
etcd

题2.1:Kubernetes 中 kube-proxy 有什么作用?
kube-proxy运行在所有节点上,它监听apiserver中service和endpoint的变化情况,创建路由规则以提供服务IP和负载均衡功能。简单理解此进程是Service的透明代理兼负载均衡器,其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。

题2.2:Kube-apiserver 和 Kube-scheduler 的作用是什么?

Kube-apiserver 遵循横向扩展架构,是主节点控制面板的前端。这将公开 Kubernetes 主节点组件的所有 API,并负责在 Kubernetes 节点和 Kubernetes 主组件之间建立通信。

kube-scheduler 负责工作节点上工作负载的分配和管理。因此,它根据资源需求选择最合适的节点来运行未调度的 Pod,并跟踪资源利用率。它确保不在已满的节点上调度工作负载。

题2.3 什么是 Etcd?怎么实现高可用?

Etcd 是用 Go 编程语言编写的一个分布式键值存储,用于协调分布式工作的软件。因此,Etcd 用来存储 Kubernetes 集群的配置数据,这些数据代表在任何给定时间点的集群状态。

3、部署一个pod,如果该pod未运行起来,有那几种情况,怎么排查?

答:
kubeclt describe
kubectl logs -f -n xxx.pod

4、k8s如何实现不同服务间的服务发现?从集群外部访问集群内部的服务该如何实现?

  • ①、集群内部(集群内部如何实现服务发现、服务通信?)
    答:集群内部访问,如果两个pod要相互访问,可以通过 pod ip 来访问,但这不是一个很好的方式,因为pod ip 是不稳定的,会经常变化(pod 挂了之后会重新拉取一个新的pod),这时候可以通过service 来解决该问题;service可以对应多个pod,通过内部机制来实现负载均衡,只要service不被删掉,则IP 永远是不变的;
    如果集群中布满了service,也是不够优雅的,这时候k8s提供了DNS的概念,可以通过service 的名字来访问到service,比如名字叫(SerB),这个DNS可以解析service ip(10.0.0.1),从而实现对pod的访问;
    这种方案我们叫做 DNS + ClusterIP
    还有一种方案,Pod C 有多个实例,Pod A 访问HeadlessService,会将pod C 的实例列表返回,客户端拿到实例列表后自己来确定访问。

  • ②、集群内部访问集群外部的访问方式:
    示例:集群内部访问集群外部的MySQL服务,第一种在pod内部直接访问外部的服务,第二种通过将外部的服务以 Endpoint 的方式添加,更加优雅。

  • ③、集群外部如何访问集群内部的服务,有那几种方式?
    答:NodePort, Ingress

5、Ingress是什么?怎么实现其高可用?

公开了从集群外部到集群内部的 Http/https服务路由。

就是一个负载均衡的玩意,其主要用来解决使用NodePort暴露Service的端口时Node IP会漂移的问题。同时,若大量使用NodePort暴露主机端口,管理会非常混乱。

好的解决方案就是让外界通过域名去访问Service,而无需关心其Node IP及Port。那为什么不直接使用Nginx?这是因为在K8S集群中,如果每加入一个服务,我们都在Nginx中添加一个配置,其实是一个重复性的体力活,只要是重复性的体力活,我们都应该通过技术将它干掉。

6、kubectl create 和 kubectl apply区别

kubectl create命令,是先删除所有现有的东西,重新根据yaml文件生成新的。所以要求yaml文件中的配置必须是完整的
kubectl apply命令,根据配置文件里面列出来的内容,升级现有的。所以yaml文件的内容可以只写需要升级的属性

7、在k8s部署策略中,如何实现灰度发布,通过什么组件可以实现?

答:可通过Istio来实现,具体sidecar, Envoy 代理,服务网络,配置。

8、在k8s中如何实现日志采集?都有哪些方案,最常用的是哪些?

9、如何监控k8s组件状态,pod状态,通过哪些监控组件来实现的?

答:prometheus,内置时间序列数据库TSDB,pod的cup、内存又是通过什么实现的?metric server

10、如何搭建高可用k8s集群?假如有 10台机器做集群(cpu 16C, 内存:256G,硬盘 500G),如何进行规划?

如何规划设计?k8s安装方式?二进制,kubeadmin,kubekey

二、进阶

三、高阶

为者常成,行者常至