kubernetes 面试题

1,Docker 和虚拟机有哪些不同。

1,Docker 和虚拟机有哪些不同。

docker是轻量级得沙盒,在其中运行应用程序,而虚拟机里有额外的操作系统

2,简述 kube-proxy ipvs 和 iptables 的异同?

相同点: 都是通过netfilter内核进行转发。

iptables是为防火墙而设计的: ipvs 则专门用于高性能负载均衡集群, 并使用更高效的数据结构(hash表 并支持索引)

iptables与ipvs比较:

1 ipvs 为大型集群提供了更好的可扩展性和性能

2 ipvs 支持比iptables更复杂的负载均衡算法 (rr wrr lc wlc)

3 ipvs 支持服务监控检测和连接重试等功能

4 ipvs 可以动态修改ipset集合

3,简述蓝绿发布的优势和不足有哪些

优势:

升级切换和回退速度非常快。

不足:

全量切换,需要两倍的集群资源

4,简述 kuberentes 数据持久化的方式有哪些?

1, emptydir:生命周期与Pod一致,临时存储。

2, hostpath:将宿主机已经存在的目录和文件挂载到容器内部,类似与docker的bind mount

3, pv(persistentVolume):nfs gfs ceph 数据持久化存储解决方案。

5,Pod 生命周期

Pod在整个生命周期中被系统定义为各种状态,熟悉Pod的各种状态对理解如何设置Pod的调度策略,重启策略是很有必要的。

Pod 的状态如下:

状态值 描述
Pending API Server已经创建该Pod,但在Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程
Running Pod内所有容器均已创建,且至少有一个容器处于运行状态,正在启动状态或正在重启状态
Succeded Pod内所有容器均成功执行后退出,且不会再重启
Failed Pod内所有容器均已退出,但至少有一个容器退出为失败状态
Unknown 由于某种原因无法胡哦去该Pod的状态,可能由于网络通信不畅导致

6,容器探针

Probe 是由kubelet 对容器执行的定期诊断。要执行诊断,kubelet 既可以在容器内执行代码,也可以发送一个网络请求。

检查机制

使用探针来检查容器有四种不同的方式。每个探针都必须准确定义为这四种机制中的一种:

exec

在容器内执行指定指令。如果命令退出是返回码为0则任务诊断成功。

grpc

使用gRPC执行一个远程调用。目标应该实现gRPC健康检查。如果响应的状态是"SERVING",则任务诊断成功。gRPC探针是一个alpha特性,只要你启用了“GRPCContainerProbe”特性门控时才能使用。

httpGet

对容器的IP地址上指定端口和路径执行HTTP GET请求。如果响应的状态码大于等于200且小于400,则诊断被认为时成功的。

tcpSocket

对容器的IP地址上的指定端口执行TCP检查。如果端口打开,则诊断被认为时成功的。如果远程系统(容器)在打开连接后立即将其关闭,这算作是健康的。

探测结果

每次探测都将获得以下三种结果之一:

Success(成功):容器通过了诊断

Failure(失败):容器未通过诊断

Unknown(未知):诊断失败,因此不会采取任何行动。

探测类型

针对运行中的容器,kubelet可以选择是否执行以下三种探针,以下如何针对探测结果作出反应:

livenessProbe

指定容器是否正在运行。如果存活态探测失败,则kubelet会杀死容器,并且容器将根据重启策略绝对未来。如果容器不提供存活探针,则默认状态为Success。

readinessProbe

指定容器是否提供服务。如果就绪探测失败,端点控制器将从与Pod匹配的所有服务的端点列表删除改Pod的IP地址。初始延迟之前的就绪态的状态默认为Failure。如果容器不提供就绪态探针,则默认状态为Success。

startupProbe

指定容器中的应用是否已经启动。如果提供了启动探针,则所有其他探针都会被禁用,直到此探针成功为止。如果启动探测失败,kubelet将杀死容器,而容器依其重启策略进行重启。如果容器没有提供启动探测,则默认状态为Success。

7,docker 网络模式

我们在使用docker run 创建Docker容器时,可以使用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式:

  • host模式:使用 --net=host 指定。

和宿主机器共用一个 Network Namespace。容器中的网络环境(ip 地址,路由等)和宿主机器的网络环境一模一样。

  • none模式:使用 --net=none 指定。

关闭网络环境

  • bridge模式:使用 --net=bridge 指定,默认设置。

容器使用独立的 Network Namespace,并连接到docker虚拟网桥。通过iptables nat表配置和宿主机进行通信。

  • container模式:使用 --net=container:NAME_or_ID 指定。

指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP,端口范围等。


发表回复 0

Your email address will not be published. Required fields are marked *