【架构师面试-云原生-2】-云原生面试之Kubernetes(k8s)面试题大全100题
1 答疑1 Docker在发布微服务项⽬实例时候通常是怎么做?服务打镜像发布到镜像仓库⾥⾯去在Kubernetes运⾏我们的镜像2 Docker运⾏起来后,关于⼀些动态的ip地址配置项(⽐如 eureka集群加了⼀个服务节点怎么通知项⽬)通过Kubernetes中的Service的对象去解决。3 K8S是否能帮我们做到启动容器时添加相对环境变量参数可以添加新的变量参数。4 在实际项⽬应⽤的过程,我
1 答疑
1 Docker在发布微服务项⽬实例时候通常是怎么做?
服务打镜像
发布到镜像仓库⾥⾯去
在Kubernetes运⾏我们的镜像
2 Docker运⾏起来后,关于⼀些动态的ip地址配置项(⽐如 eureka集群加了⼀个服务节点怎么通知项⽬)
通过Kubernetes中的Service的对象去解决。
3 K8S是否能帮我们做到启动容器时添加相对环境变量参数
可以添加新的变量参数。
4 在实际项⽬应⽤的过程,我们⼀般把哪些类型的应⽤K8S来做管理(应⽤实例?数据库?第三⽅中间件)
⽆状态的应⽤或者中间件都可以直接部署到K8S当中。
对于有状态的应⽤,对性能要求极⾼的情况下,不建议部署,否则是可以部署到K8S当中的。
5 K8S对于这些第三⽅⾃带持久化的软件能做到故障恢复吗?
能,通过持久化存储PV、PVC做到的,通过有状态存储StatefulSet来与PV和PVC对应。
应⽤所在的容器可以与PV与PVC对应,即使我们的应⽤所在的容器down了,新启动的容器仍然可以使⽤之前的持
久化存储做到的。
2 总论
1 简述 etcd 及其特点?
开源项⽬,构建⼀个⾼可⽤的分布式键值对数据库,底层使⽤go语⾔实现的。
特点:
简单:⽀持Rest⻛格的API。
访问速度:1k/s的写操作。
安全可靠:基于Raft⼀致性算法。
2 简述 etcd 适应的场景?
典型的使⽤场景:
服务发现
分布式锁
配置中⼼
消息的发布与订阅
3 简述什么是 Kubernetes?
Kubernetes是容器的集群管理系统。Kubernetes在Docker的基础上,可以做到以下的核⼼功能:
部署运⾏、服务发现:集群⽅⾯
资源调度管理:哪些节点运⾏哪些容器
动态伸缩:根据集群的访问压⼒,动态调整容器的实例数⽬
安全管理:认证,授权,准⼊控制
4 简述 Kubernetes 和 Docker 的关系?
Docker是容器的⽣命周期的管理。
Kubernetes在容器基础上,进⾏容器的编排与管理。
5 简述 Kubernetes 中什么是 Minikube、Kubectl、Kubelet?
Minikube:单节点的Kubernetes集群⼯具。
Kubectl:⼀个命令⾏的⼯具,使⽤这个⼯具可以控制Kubernetes集群。
Kubelet:⼀个代理服务,在每个节点上运⾏,主要作⽤,与Kubernetes中的Master节点通信,执⾏Master节点
下发的相关任务。
6 简述 Kubernetes 常⻅的部署⽅式?
常⻅的部署⽅式有三种:
minikube:本地的最简单的安装⽅式。
kubeadm:安装的⼯具,⼀些组件以容器化的⽅式进⾏安装,简化了其中的⼀些步骤。
⼆进制的安装:最复杂的,原⽣的安装⽅式。
7 简述 Kubernetes 如何实现集群管理?
Kubernetes的集群是由⼀个Master节点和多个Node节点构成的。
其中的Master节点实现了整个Kubernetes的集群的管理。
Master节点上运⾏着⼀组进程:
kube-apiserver:Master的api⼊⼝,将数据存储到etcd当中。==只有kube-api-server可以直接操作ectd=。
kube-controller-manager:控制管理器
kube-scheduler:调度器
8 简述 Kubernetes 的优势、使⽤场景及其特点?
优势:
开源
轻量级
弹性伸缩
负载均衡
使⽤场景:
快速部署应⽤
快速扩展应⽤
节省资源,优化硬件资源的使⽤
相关特点:
可移植性:各种云之间⽅便迁移。
可扩展性:提供很⽅便的插件机制。
⾃动化:⾃动部署,⾃动伸缩。
9 简述 Kubernetes 的缺点或当前的不⾜之处?
安装过程⽐较困难和复杂。
学习⾥⾯的各种概念,⽐较繁琐。
初次运⾏应⽤的时候,拉取镜像的速度会⽐较慢。
3 组件
1 简述 Kubernetes 相关基础概念?
master
node:是Pod运⾏的宿主机。
pod:是⼀组相关的容器的组合,可以是单个容器,运⾏在node节点上。Pod是K8S当中最⼩的调度、创建、
管理的最⼩单位。
label:是⼀系列key、value的形式。标签选择器通过标签来筛选资源对象。
Replication Controller(副本控制器):⽤来管理Pod的副本。
Deployment(部署):控制Pod的部署,内部使⽤了Replication Controller来控制Pod副本的数量的。
Service(服务):封装了⼀组相同label的Pod,Service提供⼀个统⼀的服务访问⼊⼝,及实现了服务的代理和发现。
Namespace(命名空间):⽤于实现多租户的资源隔离,实际上是⼀个逻辑上的分组。
volume(卷):volume是定义在Pod上的,可以被Pod中的容器挂载到对应的⽬录下进⾏访问,实现了Pod
中的多个容器访问的共享。
2 简述 Kubernetes 集群相关组件?
Master节点上运⾏着⼀组进程:
kube-apiserver:Master的api⼊⼝,将数据存储到etcd当中。只有kube-api-server可以直接操作ectd。
kube-controller-manager:控制管理器
Replication Controller
Node Controller
Namespace Controller
Service Controller
EndPoints Controller
Service Account Controller
Persistent Volume Controller
DamonSet Controller
Deployment Controller
Job Controller
Pod Autoscaler Controller
kube-scheduler:调度器
3 简述 Kubernetes RC (Replication Controller)的机制?
Replication Controller控制管理是Pod的副本数⽬,当我们定义了RC提交到Kubernetes集群当中的时候,Master节点上Controller Manager根据要求与K8S⽬前运⾏的状态作对⽐,多了我就给你停⽌Pod,少了我就给你创建新的Pod。
4 简述 Kubernetes Replica Set 和 Replication Controller 之间有什么区别?
RC是后来发展出来的概念,RC⽐RS在选择Pod时,对label的选择的表达式更加丰富。所以建议⼤家都使⽤RC。
5 简述 kube-proxy 作⽤?
kube-proxy运⾏在所有节点上的,核⼼的功能时监听Service和后端的Endpoints的变化情况,创建对应的路由规则。总之kube-proxy是Service的透明代理以及负载均衡器。
6 简述 kube-proxy iptables 原理?
iptables是kube-proxy的默认模式。
通过监控Service与后端的Endpoint的变更信息,更新到iptables的规则⾥⾯。
Client通过Service访问的时候就可以通过iptables⾥的规则将访问路由到后端的Endpoint对应的Pod上⾯去了。
7 简述 kube-proxy ipvs 原理?
在Kubernetes1.11版本中才是GA稳定版。ipvs主要应⽤在⾼性能的负载均衡的场景,底层使⽤更⾼效的数据结构Hash表,允许⼏乎⽆限的规模扩张。
ipvs成为了Kubernetes最新的最优选择。
8 简述 kube-proxy ipvs 和 iptables 的异同?
ipvs与iptables基于Netfilter实现的。
不同点:
ipvs的性能更好,主要原因在于ipvs底层的数据结构更优秀。
ipvs的负载均衡算法,可以⽀持(最⼩负载,最少连接,加权)。
4 POD
1 简述 Kubernetes 中什么是静态 Pod?
静态Pod仅运⾏在特定的Node上,直接由kubelet创建的,不受到Master节点上kube-api-server的管理。同时也不与Kubernetes集群中的控制器(Deployment、Replication Controller、Daemonset)进⾏关联。
2 简述 Kubernetes 中 Pod 可能处于的状态?
Pending:Pod 已被 Kubernetes 系统接受,但有⼀个或者多个容器尚未创建亦未运⾏。此阶段包括等待 Pod被调度的时间和通过⽹络下载镜像的时间。
Running:Pod内所有的容器都已经创建,⾄少有⼀个容器处于运⾏、启动、重启的状态。
Succeeded:Pod内所有的容器都已经成功执⾏退出,不会再重启。
Failed:Pod内所有的容器都已经退出,但是⾄少有⼀个容器是失败退出的。
Unknown:⽹络的原因,导致我们⽆法获取Pod的状态。
3 简述 Kubernetes 创建⼀个 Pod 的主要流程?
通过Master节点上的组件的配合完成的,所有信息的通信都是通过api-server实现的,api-server会将对应的信息
持久化到etcd当中。
所有的组件会watch到api-server当中的资源上,根据对应的事件,进⾏相关的操作。
4 简述 Kubernetes 中 Pod 的重启策略?
重启策略有三种:
Always:总是重启,Deployment、RC、DaemonSet必须设置为Always。
Never:都不重启。
OnFailure:当容器⾮0返回码的时候,⾃动重启容器。
Job可以设置为Never,OnFailure。
5 简述 Kubernetes 中 Pod 的健康检查⽅式?
Kubernetes中提供了两类探针来对Pod的健康情况进⾏检查:
LivenessProbe:探活的探针。
ReadinessProbe:判断容器是否启动完成。只有启动完成,才会把Pod对应的Endpoint挂载到Service。
startupProbe:应⽤在⼀些启动特别缓慢的业务。
6 简述 Kubernetes Pod 的 LivenessProbe 探针的常⻅⽅式?
常⻅的三种探针的⽅式:
1. exec:执⾏⼀个命令。
2. tcp:能正确的建⽴tcp连接。
3. http:get⽅法,是否获取到正确的状态响应码。
7 简述 Kubernetes Pod 的常⻅调度⽅式?
常⻅的调度策略:
NodeSelector:指定Node
NodeAffinity:亲和度调度
Taint:污点 Node节点上打污点 key=value:effect
Toleration:容忍 可以部署在我可以容忍的污点的Node上
硬规则:必须满⾜的规则
软规则:优先满⾜的规则
8 简述 Kubernetes 初始化容器(init container)?
初始化容器是最先创建的,然后创建应⽤容器。
5 Deployment与Service
1 简述 Kubernetes Deployment 升级过程?
Deployment底层ReplicaSet,ReplicaSet控制版本的数⽬。
加⼊v1版本升级到v2版本。集群两个副本集v1的ReplicaSet与v2的ReplicaSet。
v2的实例先创建⼀个,v1的实例销毁⼀个,依此下去。
2 简述 Kubernetes Deployment 升级策略?
Recreate:先去杀掉所有正在运⾏的Pod,然后新建新的Pod。
RollingUpdate:默认的策略,滚动更新,滚动更新的策略如上个问题。
3 简述 Kubernetes DaemonSet 类型的资源特性?
DaemonSet在Kubernetes集群中的每个节点上运⾏⼀个Pod,⽽且每个节点上只能运⾏⼀个Pod。
应⽤场景:
每个节点的⽇志收集⼯作。
每个节点的运⾏状态的采集。
4 简述 Kubernetes ⾃动扩缩容机制?
HPA:⽔平Pod扩容,实现的步骤:
在HPA当中定义扩容与缩容的规则。
Kubernetes当中Metric Server⽤于采集所有的Pod使⽤资源的情况。
HPA根据我们预先定义的规则,再根据采集的资源⽬前的使⽤情况,最终决定是否要进⾏扩容与缩容。
5 简述 Kubernetes Service 类型?
主要有三种类型,Service主要是给相关功能的容器提供⼀个统⼀的⼊⼝地址:
ClusterIP:创建了就不会发⽣变化,在Kubernetes的集群内部访问的地址。
NodePort:宿主机的端⼝的⽅式,这种⽅式可以使Kubernetes集群外的机器可以访问我们的服务。
LoadBalancer:⼀般⽤在公有云上,⽤于服务的负载转发。
6 简述 Kubernetes Service 分发后端的策略?
Service分发后端的策略:
RoundRobin:默认的,轮询。
SessionAffinity:基于客户端的IP进⾏会话保持。
7 简述 Kubernetes Headless Service?
⽆头服务,与ClusterIP形式的Service对⽐,既不会产⽣ClusterIP,也不会给我们做负载均衡。
会直接返回同样标签的⼀组Pod的列表。
8 简述 Kubernetes 外部如何访问集群内的服务?
可以通过将Service的type应⽤NodePort。
Pod可以采⽤hostPort⽅式暴露给外部。
公有云的LoadBalancer的⽅式也是可以的。
9 简述 Kubernetes ingress?
Ingress是Kubernetes的资源对象,可以将我们的请求转发到后端的Service上。
Ingress由两部分组成:
1. Ingress规则:规则是⽤来应⽤到Ingress Controller上的。
2. Ingress Controller:我们最常⽤的就是Nginx。
6 通信
1 简述 Kubernetes 镜像的下载策略?
有三种镜像的下载策略:
1. Always
2. Never
3. IfNotPresent
2 简述 Kubernetes 的负载均衡器?
暴露服务的最常⻅的⽅式。
根据情况,分为两种类型的负载均衡器:
内部的负载均衡器
外部的负载均衡器
3 简述 Kubernetes 各模块如何与 API Server 通信?
所有的信息都存在我们的etcd当中,etcd只有API Server可以操作。
所有的组件的通信都是通过API Server间接进⾏的。
4 简述 Kubernetes Scheduler 作⽤及实现原理?
核⼼的作⽤就是判断将Pod部署到哪个节点上。
Scheduler⼀直在watch是否有新的Pod需要创建。
Scheduler根据调度策略,就算出哪个节点最适合部署我们的Pod。将结果写到etcd。
Kubelet watch到有Pod需要创建到⾃⼰的节点上,于是开始创建对应的Pod。
5 简述 Kubernetes Scheduler 使⽤哪两种算法将 Pod 绑定到
worker 节点?
调度策略分为两种:
预选:先筛选出符合Pod需求的Node的列表。
优选:从符合⼀要求的Node中,我们再进⾏打分,打分最⾼的称为胜利者。举例:资源⽐较多的,负载最⼩的。
6 简述 Kubernetes kubelet 的作⽤?
每个Node节点上都有⼀个kubelet的进程,这个进程可以作为Master节点下发任务的执⾏者,⽐如可以创建Pod,
采集Pod的资源使⽤情况。
7 简述 Kubernetes kubelet 监控 Worker Node 节点资源是使⽤什
么组件来实现的?
kubelet使⽤CAdvisor对Node节点上Pod的资源情况,以及节点本身的资源情况进⾏采集。
7 安全
1 简述 Kubernetes 如何保证集群的安全性?
保证集群的安全性:
基础设施⽅⾯:容器与宿主机的隔离。(Namespace Cgroup)
Kubernetes的权限控制:RBAC、准⼊控制。
⼀些敏感数据,可以通过Kubernetes中的Secret的对象封装。
2 简述 Kubernetes 准⼊机制?
访问Kubernetes的资源的时候,访问的过程:⽤户的认证----->授权----->准⼊控制。
准⼊控制就是⼀段代码。
3 简述 Kubernetes RBAC 及其特点(优势)?
RBAC是基于⻆⾊的访问控制。优势:
便于管理对应的⽤户权限。
⽅便的的使⽤Kubernetes中的kubectl的命令或者是API进⾏操作⽉管理。
4 简述 Kubernetes Secret 作⽤?
保管⼀些秘密的数据,更加的安全,便于使⽤和分发。
5 简述 Kubernetes Secret 有哪些使⽤⽅式?
主要有三种⽅式使⽤Secret:
1. 在创建的Pod的时候,通过为Pod指定Service Account来⾃动使⽤Secret。
2. 通过挂载Secret到Pod当中使⽤。
3. 在下载Docker镜像的时候使⽤。
6 简述 Kubernetes PodSecurityPolicy 机制?
PodSecurityPolicy 是为了更更精细的控制Pod对资源的使⽤⽅式,⽬的提升安全性。
7 简述 Kubernetes PodSecurityPolicy 机制能实现哪些安全策略?
PodSecurityPolicy 机制能实现的安全策略,主要有以下的⽅式:
特权模式
宿主机资源模式
提升权限的模式
8 ⽹络
1 简述 Kubernetes ⽹络模型?
Kubernetes中的每个Pod都有⾃⼰独⽴的IP(独⽴的⽹络栈),集群的每个Pod都是可以互相访问的。不管这些
Pod是否在同⼀台机器上。
这样设计的⽬标就是让我们⽆需考虑任何因素,直接使⽤对应的Pod就好。
2 简述 Kubernetes CNI 模型?
CNI:容器⽹络接⼝。是⼀个扩展Kubernetes中的⽹络的解决⽅案,它可以帮容器分配IP,建⽴⽹络互连机制。
3 简述 Kubernetes ⽹络策略?
⽬标是实现细粒度的容器间⽹络访问的隔离策略,主要功能就是对Pod间的⽹络进⾏限制与准⼊控制。
4 简述 Kubernetes ⽹络策略原理?
实现⼀个API listener,监听⽤设置的⽹络策略,根据这些⽤户的策略,进⾏对应的策略的判定。
5 简述 Kubernetes 中 Flannel 的作⽤?
Flannel的主要作⽤:
给每个Node上的每个Pod都分配互不冲突的地址。
在这些IP地址之间创建⼀个覆盖⽹络,通过这个⽹络,我们可以进⾏跨主机的通信。
6 简述 Kubernetes Calico ⽹络组件实现原理?
Calico是⼀个基于BGP的纯三层的⽹络⽅案。可以与私有云,公有云都可以良好的集成。
Calico利⽤Linux Kernel实现的⾼效的Router实现路由的转发。
Calico不需要额外的NAT、隧道、Overlay Network,没有额外的封包,解包,能够节约CPU运算,提⾼⽹络的性
能。
9 存储
1 简述 Kubernetes 共享存储的作⽤?
Kubernetes当中⼀些有状态的容器应⽤或者是对数据需要持久化的应⽤,需要保存应⽤产⽣的重要的数据,容器
重建的时候仍然可以使⽤这部分数据。
2 简述 Kubernetes 数据持久化的⽅式有哪些?
场景的数据持久化⽅式:
EmptyDIR:不指定宿主机上的⽬录,⽤于临时存储⼀些数据,⽐如排序算法,或者同⼀个Pod内的多个容器
共享存储。
HostPath:在宿主机上指定⽬录,当我们的容器重建的时候,⽬录以及⾥⾯的数据仍然存在。
远程的存储⽅式:Ceph、Gluster FS。
3 简述 Kubernetes PV 和 PVC?
PV:持久化存储介质 接⼝的实现 是真正存储资源的地⽅
PVC:申请持久化存储 持久化存储的接⼝
4 简述 Kubernetes PV ⽣命周期内的阶段?
主要有以下四个阶段:
1. Available 可⽤状态 还没有与PVC进⾏绑定
2. Bound 被PVC绑定
3. Released PVC被删除 资源已经被释放 但是没有被删除
4. Failed ⾃动资源回收的时候失败了
5 简述 Kubernetes 所⽀持的 PV 存储供应模式?
分为两种:
静态模式:⼿动创建PV
动态模式:通过Kubernetes中的StorageClass,可以根据PVC,⾃动的创建PV
6 简述 Kubernetes CSI 模型?
CSI:容器的存储接⼝,⽤来定义扩展Kubernetes当中存储插件的。
定义如何提供存储资源,以及如何对存储资源进⾏管理和操作。
10 其他
1 简述 Kubernetes Worker 节点加⼊集群的过程?
Worker节点先要安装Docker Kubelet kube-proxy。
Worker节点指定Master的地址,以及持有对应的权限的token,加⼊Master节点。
2 简述 Kubernetes Pod 如何实现对节点的资源控制?
可以通过对应的参数,控制CPU 以及 内存的使⽤量。分为两类:
request:需要的资源
limit:最⼤可以使⽤的限制
3 简述 Kubernetes Requests 和 Limits 如何影响 Pod 的调度?
request:需要的资源,节点需要满⾜这个需求,Pod才可以部署到这样的节点上。
limit:最⼤可以使⽤的限制。
4 简述 Kubernetes Metric Service?
采集节点以及节点上的Pod所占⽤的资源。
5 简述 Kubernetes 中,如何使⽤ EFK 实现⽇志的统⼀管理?
EFK:
Fluentd:在每个Node节点上运⾏,采集⽇志的。
ElasticSearch:负责存储⽇志,并提供查询接⼝。
Kibana:查看⽇志的管理平台,⽽且提供了图形化的界⾯。
6 简述 Kubernetes 如何进⾏优雅的节点关机维护?
运⾏kubectl drain命令,可以将该节点上的Pod进⾏驱逐。
7 简述 Kubernetes 集群联邦?
多个Kubernetes集群,使⽤集群联邦来管理多个集群。
8 简述 Helm 及其优势?
Helm就是Kubernetes的软件包的管理⼯具。
优势是可以将⼀组Kubernetes的资源打包统⼀管理。
更多推荐
所有评论(0)