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