【架构师面试-云原生-2】-云原生面试之Kubernetes(k8s)面试题大全100题

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的资源打包统⼀管理。

上一篇:1045-access denied for user 'root'@


下一篇:C++版 - Lintcode 77-Longest Common Subsequence最长公共子序列(LCS) - 题解