则么做网站,jsp网站开发书籍推荐,系部网站建设需求分析,goood 谷德设计网官网目录
1、简述ETCD及其特点?
2、简述ETCD适应的场景?
3、简述什么是Kubernetes?
4、简述Kubernetes和Docker的关系?
5、简述Kubernetes中什么是Minikube、Kubectl、Kubelet?
6、简述Kubernetes常见的部署方式?
7、简述Kubernetes如何实现集群管理?
8、简述Kubern…
目录
1、简述ETCD及其特点?
2、简述ETCD适应的场景?
3、简述什么是Kubernetes?
4、简述Kubernetes和Docker的关系?
5、简述Kubernetes中什么是Minikube、Kubectl、Kubelet?
6、简述Kubernetes常见的部署方式?
7、简述Kubernetes如何实现集群管理?
8、简述Kubernetes的优势、适应场景及其特点?
8.1Kubernetes作为一个完备的分布式系统支撑平台其主要优势
8.2Kubernetes常见场景
8.3Kubernetes相关特点
9、简述Kubernetes的缺点或当前的不足之处?
10、简述Kubernetes相关基础概念?
11、简述Kubernetes集群相关组件?
12、简述Kubernetes RC的机制?
13、简述kube-proxy作用?
14、简述kube-proxy iptables原理?
15、简述kube-proxy ipvs原理?
16、简述kube-proxy ipvs和iptables的异同?
17、简述Kubernetes中什么是静态Pod?
18、简述Kubernetes中Pod可能位于的状态?
19、简述Kubernetes创建一个Pod的主要流程?
20、简述Kubernetes中Pod的重启策略?
21、简述Kubernetes中Pod的健康检查方式?
22、简述Kubernetes Pod的LivenessProbe探针的常见方式?
23、简述Kubernetes Pod的常见调度方式?
Taints和Tolerations污点和容忍
24、简述Kubernetes初始化容器init container?
25、简述Kubernetes deployment升级过程?
26、简述Kubernetes deployment升级策略?
27、简述Kubernetes DaemonSet类型的资源特性?
28、简述Kubernetes自动扩容机制?
29、简述Kubernetes Service类型?
30、简述Kubernetes Service分发后端的策略?
31、简述Kubernetes Headless Service?
32、简述Kubernetes外部如何访问集群内的服务?
33、简述Kubernetes ingress?
34、简述Kubernetes镜像的下载策略?
35、简述Kubernetes的负载均衡器?
36、简述Kubernetes各模块如何与API Server通信?
37、简述Kubernetes Scheduler作用及实现原理?
38、简述Kubernetes Scheduler使用哪两种算法将Pod绑定到worker节点?
39、简述Kubernetes kubelet的作用?
40、简述Kubernetes kubelet监控Worker节点资源是使用什么组件来实现的?
41、简述Kubernetes如何保证集群的安全性?
42、简述Kubernetes准入机制?
43、简述Kubernetes RBAC及其特点优势?
44、简述Kubernetes Secret作用?
45、简述Kubernetes Secret有哪些使用方式?
46、简述Kubernetes PodSecurityPolicy机制?
47、简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略?
48、简述Kubernetes网络模型?
49、简述Kubernetes CNI模型?
50、简述Kubernetes网络策略?
51、简述Kubernetes网络策略原理?
52、简述Kubernetes中flannel的作用?
53、简述Kubernetes Calico网络组件实现原理?
54、简述Kubernetes共享存储的作用?
55、简述Kubernetes数据持久化的方式有哪些?
56、简述Kubernetes PV和PVC?
57、简述Kubernetes PV生命周期内的阶段?
58、简述Kubernetes所支持的存储供应模式?
59、简述Kubernetes CSI模型?
60、简述Kubernetes Worker节点加入集群的过程?
61、简述Kubernetes Pod如何实现对节点的资源控制?
62、简述Kubernetes Requests和Limits如何影响Pod的调度?
63、简述Kubernetes Metric Service?
64、简述Kubernetes中如何使用EFK实现日志的统一管理
65、简述Kubernetes如何进行优雅的节点关机维护?
66、简述Kubernetes集群联邦?
67、简述Helm及其优势?
68、标签与标签选择器的作用是什么?
69、考虑一家拥有分布式系统的跨国公司拥有大量数据中心虚拟机和许多从事各种任务的员工。您认为这样公司如何以与Kubernetes一致的方式管理所有任务?
70、考虑一种情况即公司希望通过维持最低成本来提高其效率和技术运营速度。您认为公司将如何实现这一目标?
71、假设一家公司想要修改它的部署方法并希望建立一个更具可扩展性和响应性的平台。您如何看待这家公司能够实现这一目标以满足客户需求?
72、考虑一家拥有非常分散的系统的跨国公司期待解决整体代码库问题。您认为公司如何解决他们的问题?
73、我们所有人都知道从单片到微服务的转变解决了开发方面的问题但却增加了部署方面的问题。公司如何解决部署方面的问题?
74、考虑一家拼车公司希望通过同时扩展其平台来增加服务器数量,公司如何有效地实现这种资源分配?
75、您认为公司如何处理服务器及其安装?
76、考虑一种情况公司希望向具有各种环境的客户提供所有必需的分发。您认为他们如何以动态的方式实现这一关键目标?
77、假设公司希望在不同的云基础架构上运行各种工作负载从裸机到公共云。公司将如何在不同界面的存在下实现这一目标?
78、什么是Google容器引擎?
79、您如何看待公司从单—服务转向微服务并部署其服务容器?
80、什么是Headless Service 1、简述ETCD及其特点?
etcd是一个分布式的、高可用的、一致的key-value存储数据库基于Go语言实现主要用于共享配置和服务发现。
特点
完全复制集群中的每个节点都可以使用完整的存档高可用性Etcd可用于避免硬件的单点故障或网络问题一致性每次读取都会返回跨多主机的最新写入简单包括一个定义良好、面向用户的APIgRPC安全实现了带有可选的客户端证书身份验证的自动化TLS快速每秒10000次写入的基准速度可靠使用Raft算法实现了强一致、高可用的服务存储目录
2、简述ETCD适应的场景?
服务发现服务发现要解决的也是分布式系统中最常见的问题之一即在同一个分布式集群中的进程或服务要如何才能找到对方并建立连接。本质上来说服务发现就是想要了解集群中是否有进程在监听udp或tcp端口并且通过名字就可以查找和连接。
消息发布与订阅在分布式系统中最实用对的一种组件间的通信方式消息发布与订阅。构建一个配置共享中心数据提供者在这个配置中心发布消息而消息使用者订阅他们关心的主题一旦主题有消息发布就会实时通知订阅者。达成集中式管理与动态更新。应用中用到的一些配置信息放到etcd上进行集中管理。
负载均衡分布式系统中为了保证服务的高可用以及数据的一致性通常都会把数据和服务部署多份以此达到对等服务即使其中的某一个服务失效了也不影响使用。etcd本身分布式架构存储的信息访问支持负载均衡。
分布式通知与协调通过注册与异步通知机制实现分布式环境下不同系统之间的通知与协调从而对数据变更做到实时处理。
分布式锁因为etcd使用Raft算法保持了数据的强一致性某次操作存储到集群中的值必然是全局一致的所以很容易实现分布式锁。锁服务有两种使用方式一是保持独占二是控制时序。
分布式队列分布式队列的常规用法与场景五中所描述的分布式锁的控制时序用法类似即创建一个先进先出的队列保证顺序。
集群监控与Leader精选通过etcd来进行监控实现起来非常简单并且实时性强。 3、简述什么是Kubernetes?
kubernetes简称K8s是一个开源的用于管理云平台中多个主机上的容器化的应用Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署规划更新维护的一种机制。
4、简述Kubernetes和Docker的关系?
Docker开源的容器引擎一种更加轻量级的虚拟化技术。Kubernetes容器管理工具用来管理容器pod的集合它可以实现容器集群的自动化部署、自动扩缩容、维护等功能。
5、简述Kubernetes中什么是Minikube、Kubectl、Kubelet?
Minikube 是一种可以在本地轻松运行一个单节点 Kubernetes 群集的工具。
Kubectl 是一个命令行工具可以使用该工具控制Kubernetes集群管理器如检查群集资源创建、删除和更新组件查看应用程序。
Kubelet 是一个代理服务它在每个节点上运行并使从服务器与主服务器通信。
6、简述Kubernetes常见的部署方式?
kubeadm也是推荐的一种部署方式二进制
minikube在本地轻松运行一个单节点 Kubernetes 群集的工具。
7、简述Kubernetes如何实现集群管理?
在集群管理方面Kubernetes将集群中的机器划分为一个Master节点和一群工作节点Node。其中在Master节点运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler这些进程实现了整个集群的资源管理、Pod调度、弹性伸缩、安全控制、系统监控和纠错等管理能力并且都是全自动完成的。
8、简述Kubernetes的优势、适应场景及其特点?
8.1Kubernetes作为一个完备的分布式系统支撑平台其主要优势
容器编排轻量级开源弹性伸缩负载均衡
8.2Kubernetes常见场景
快速部署应用快速扩展应用无缝对接新的应用功能节省资源优化硬件资源的使用
8.3Kubernetes相关特点
可移植: 支持公有云、私有云、混合云、多重云multi-cloud。可扩展: 模块化,、插件化、可挂载、可组合。自动化: 自动部署、自动重启、自动复制、自动伸缩/扩展。
9、简述Kubernetes的缺点或当前的不足之处?
安装过程和配置相对困难复杂。管理服务相对繁琐。运行和编译需要很多时间。它比其他替代品更昂贵。对于简单的应用程序来说可能不需要涉及Kubernetes即可满足。
10、简述Kubernetes相关基础概念?
masterk8s集群的管理节点负责管理集群提供集群的资源数据访问入口。拥有Etcd存储服务可选运行Api Server进程Controller Manager服务进程及Scheduler服务进程。
nodeworkerNodeworker是Kubernetes集群架构中运行Pod的服务节点是Kubernetes集群操作的单元用来承载被分配Pod的运行是Pod运行的宿主机。运行docker eninge服务守护进程kunelet及负载均衡器kube-proxy。
pod运行于Node节点上若干相关容器的组合。Pod内包含的容器运行在同一宿主机上使用相同的网络命名空间、IP地址和端口能够通过localhost进行通信。Pod是Kurbernetes进行创建、调度和管理的最小单位它提供了比容器更高层次的抽象使得部署和管理更加灵活。一个Pod可以包含一个容器或者多个相关容器。
labelKubernetes中的Label实质是一系列的Key/Value键值对其中key与value可自定义。Label可以附加到各种资源对象上如Node、Pod、Service、RC等。一个资源对象可以定义任意数量的Label同一个Label也可以被添加到任意数量的资源对象上去。Kubernetes通过Label Selector标签选择器查询和筛选资源对象。
Replication ControllerReplication Controller用来管理Pod的副本保证集群中存在指定数量的Pod副本。集群中副本的数量大于指定数量则会停止指定数量之外的多余容器数量。反之则会启动少于指定数量个数的容器保证数量不变。Replication Controller是实现弹性伸缩、动态扩容和滚动升级的核心。
DeploymentDeployment在内部使用了RS来实现目的Deployment相当于RC的一次升级其最大的特色为可以随时获知当前Pod的部署进度。
HPAHorizontal Pod AutoscalerPod的横向自动扩容也是Kubernetes的一种资源通过追踪分析RC控制的所有Pod目标的负载变化情况来确定是否需要针对性的调整Pod副本数量
ServiceService定义了Pod的逻辑集合和访问该集合的策略是真实服务的抽象。Service提供了一个统一的服务访问入口以及服务代理和发现机制关联多个相同Label的Pod用户不需要了解后台Pod是如何运行。
VolumeVolume是Pod中能够被多个容器访问的共享目录Kubernetes中的Volume是定义在Pod上可以被一个或多个Pod中的容器挂载到某个目录下。
NamespaceNamespace用于实现多租户的资源隔离可将集群内部的资源对象分配到不同的Namespace中形成逻辑上的不同项目、小组或用户组便于不同的Namespace在共享使用整个集群的资源的同时还能被分别管理。
11、简述Kubernetes集群相关组件?
Kubernetes Master控制组件调度管理整个系统集群包含如下组件:
Kubernetes API Server作为Kubernetes系统的入口其封装了核心对象的增删改查操作以RESTful API接口方式提供给外部客户和内部组件调用集群内各个功能模块之间数据交互和通信的中心枢纽。 Kubernetes Scheduler为新建立的Pod进行节点(node)选择(即分配机器)负责集群的资源调度。 Kubernetes Controller负责执行各种控制器目前已经提供了很多控制器来保证Kubernetes的正常运行。
Replication Controller管理维护Replication Controller关联Replication Controller和Pod保证Replication Controller定义的副本数量与实际运行Pod数量一致。 Node Controller管理维护Node定期检查Node的健康状态标识出(失效 | 未失效)的Node节点。 Namespace Controller管理维护Namespace定期清理无效的Namespace包括Namesapce下的API对象比如Pod、Service等。 Service Controller管理维护Service提供负载以及服务代理。 EndPoints Controller管理维护Endpoints关联Service和Pod创建Endpoints为Service的后端当Pod发生变化时实时更新Endpoints。 Service Account Controller管理维护Service Account为每个Namespace创建默认的Service Account同时为Service Account创建Service Account Secret。 Persistent Volume Controller管理维护Persistent Volume和Persistent Volume Claim为新的Persistent Volume Claim分配Persistent Volume进行绑定为释放的Persistent Volume执行清理回收。 Daemon Set Controller管理维护Daemon Set负责创建Daemon Pod保证指定的Node上正常的运行Daemon Pod。 Deployment Controller管理维护Deployment关联Deployment和Replication Controller保证运行指定数量的Pod。当Deployment更新时控制实现Replication Controller和Pod的更新。 Job Controller管理维护Job为Jod创建一次性任务Pod保证完成Job指定完成的任务数目 Pod Autoscaler Controller实现Pod的自动伸缩定时获取监控数据进行策略匹配当满足条件时执行Pod的伸缩动作。
12、简述Kubernetes RC的机制?
Replication Controller用来管理Pod的副本保证集群中存在指定数量的Pod副本。当定义了RC并提交至Kubernetes集群中之后Master节点上的Controller Manager组件获悉并同时巡检系统中当前存活的目标Pod并确保目标Pod实例的数量刚好等于此RC的期望值若存在过多的Pod副本在运行系统会停止一些Pod反之则自动创建一些Pod。
13、简述kube-proxy作用?
kube-proxy 运行在所有节点上它监听 apiserver 中 service 和 endpoint 的变化情况创建路由规则以提供服务 IP 和负载均衡功能。简单理解此进程是Service的透明代理兼负载均衡器其核心功能是将到某个Service的访问请求转发到后端的多个Pod实例上。
14、简述kube-proxy iptables原理?
Kubernetes从1.2版本开始将iptables作为kube-proxy的默认模式。iptables模式下的kube-proxy不再起到Proxy的作用其核心功能通过API Server的Watch接口实时跟踪Service与Endpoint的变更信息并更新对应的iptables规则Client的请求流量则通过iptables的NAT机制“直接路由”到目标Pod。
15、简述kube-proxy ipvs原理?
IPVS在Kubernetes1.11中升级为GA稳定版。IPVS则专门用于高性能负载均衡并使用更高效的数据结构Hash表允许几乎无限的规模扩张因此被kube-proxy采纳为最新模式。
在IPVS模式下使用iptables的扩展ipset而不是直接调用iptables来生成规则链。iptables规则链是一个线性的数据结构ipset则引入了带索引的数据结构因此当规则很多时也可以很高效地查找和匹配。
可以将ipset简单理解为一个IP段的集合这个集合的内容可以是IP地址、IP网段、端口等iptables可以直接添加规则对这个“可变的集合”进行操作这样做的好处在于可以大大减少iptables规则的数量从而减少性能损耗。
16、简述kube-proxy ipvs和iptables的异同?
iptables与IPVS都是基于Netfilter实现的但因为定位不同二者有着本质的差别iptables是为防火墙而设计的IPVS则专门用于高性能负载均衡并使用更高效的数据结构Hash表允许几乎无限的规模扩张。
与iptables相比IPVS拥有以下明显优势
为大型集群提供了更好的可扩展性和性能 支持比iptables更复杂的复制均衡算法最小负载、最少连接、加权等 支持服务器健康检查和连接重试等功能 可以动态修改ipset的集合即使iptables的规则正在使用这个集合。
17、简述Kubernetes中什么是静态Pod?
静态pod是由kubelet进行管理的仅存在于特定Node的Pod上他们不能通过API Server进行管理无法与ReplicationController、Deployment或者DaemonSet进行关联并且kubelet无法对他们进行健康检查。静态Pod总是由kubelet进行创建并且总是在kubelet所在的Node上运行。
18、简述Kubernetes中Pod可能位于的状态?
PendingAPI Server已经创建该Pod且Pod内还有一个或多个容器的镜像没有创建包括正在下载镜像的过程。RunningPod内所有容器均已创建且至少有一个容器处于运行状态、正在启动状态或正在重启状态。SucceededPod内所有容器均成功执行退出且不会重启。FailedPod内所有容器均已退出但至少有一个容器退出为失败状态。Unknown由于某种原因无法获取该Pod状态可能由于网络通信不畅导致。
19、简述Kubernetes创建一个Pod的主要流程?
客户端提交Pod的配置信息可以是yaml文件定义的信息到kube-apiserver。 Apiserver收到指令后通知给controller-manager创建一个资源对象。 Controller-manager通过api-server将pod的配置信息存储到ETCD数据中心中。 Kube-scheduler检测到pod信息会开始调度预选会先过滤掉不符合Pod资源配置要求的节点然后开始调度调优主要是挑选出更适合运行pod的节点然后将pod的资源配置单发送到node节点上的kubelet组件上。 Kubelet根据scheduler发来的资源配置单运行pod运行成功后将pod的运行信息返回给schedulerscheduler将返回的pod运行状况的信息存储到etcd数据中心。
20、简述Kubernetes中Pod的重启策略?
Pod重启策略RestartPolicy应用于Pod内的所有容器并且仅在Pod所处的Node上由kubelet进行判断和重启操作。当某个容器异常退出或者健康检查失败时kubelet将根据RestartPolicy的设置来进行相应操作。
Pod的重启策略包括Always、OnFailure和Never默认值为Always。
Always当容器失效时由kubelet自动重启该容器OnFailure当容器终止运行且退出码不为0时由kubelet自动重启该容器Never不论容器运行状态如何kubelet都不会重启该容器。
同时Pod的重启策略与控制方式关联当前可用于管理Pod的控制器包括ReplicationController、Job、DaemonSet及直接管理kubelet管理静态Pod。
不同控制器的重启策略限制如下
RC和DaemonSet必须设置为Always需要保证该容器持续运行 JobOnFailure或Never确保容器执行完成后不再重启 kubelet在Pod失效时重启不论将RestartPolicy设置为何值也不会对Pod进行健康检查
21、简述Kubernetes中Pod的健康检查方式?
LivenessProbe探针用于判断容器是否存活running状态如果LivenessProbe探针探测到容器不健康则kubelet将杀掉该容器并根据容器的重启策略做相应处理。若一个容器不包含LivenessProbe探针kubelet认为该容器的LivenessProbe探针返回值用于是“Success”。ReadineeProbe探针用于判断容器是否启动完成ready状态。如果ReadinessProbe探针探测到失败则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的EndpointstartupProbe探针启动检查机制应用一些启动缓慢的业务避免业务长时间启动而被上面两类探针kill掉。
22、简述Kubernetes Pod的LivenessProbe探针的常见方式?
ExecAction在容器内执行一个命令若返回码为0则表明容器健康。TCPSocketAction通过容器的IP地址和端口号执行TCP检查若能建立TCP连接则表明容器健康。HTTPGetAction通过容器的IP地址、端口号及路径调用HTTP Get方法若响应的状态码大于等于200且小于400则表明容器健康。
23、简述Kubernetes Pod的常见调度方式?
Deployment或RC该调度策略主要功能就是自动部署一个容器应用的多份副本以及持续监控副本的数量在集群内始终维持用户指定的副本数量。
NodeSelector定向调度当需要手动指定将Pod调度到特定Node上可以通过Node的标签Label和Pod的nodeSelector属性相匹配。
NodeAffinity亲和性调度亲和性调度机制极大的扩展了Pod的调度能力目前有两种节点亲和力表达
requiredDuringSchedulingIgnoredDuringExecution硬规则必须满足指定的规则调度器才可以调度Pod至Node上类似nodeSelector语法不同。preferredDuringSchedulingIgnoredDuringExecution软规则优先调度至满足的Node的节点但不强求多个优先级规则还可以设置权重值。
Taints和Tolerations污点和容忍
Taint使Node拒绝特定Pod运行 Toleration为Pod的属性表示Pod能容忍运行标注了Taint的Node。
24、简述Kubernetes初始化容器init container?
init container的运行方式与应用容器不同它们必须先于应用容器执行完成当设置了多个init container时将按顺序逐个运行并且只有前一个init container运行成功后才能运行后一个init container。当所有init container都成功运行后Kubernetes才会初始化Pod的各种信息并开始创建和运行应用容器。
25、简述Kubernetes deployment升级过程?
初始创建Deployment时系统创建了一个ReplicaSet并按用户的需求创建了对应数量的Pod副本。
当更新Deployment时系统创建了一个新的ReplicaSet并将其副本数量扩展到1然后将旧ReplicaSet缩减为2。
之后系统继续按照相同的更新策略对新旧两个ReplicaSet进行逐个调整。
最后新的ReplicaSet运行了对应个新版本Pod副本旧的ReplicaSet副本数量则缩减为0。
26、简述Kubernetes deployment升级策略?
在Deployment的定义中可以通过spec.strategy指定Pod更新的策略目前支持两种策略Recreate重建和RollingUpdate滚动更新默认值为RollingUpdate。
Recreate设置spec.strategy.typeRecreate表示Deployment在更新Pod时会先杀掉所有正在运行的Pod然后创建新的Pod。 RollingUpdate设置spec.strategy.typeRollingUpdate表示Deployment会以滚动更新的方式来逐个更新Pod。同时可以通过设置spec.strategy.rollingUpdate下的两个参数maxUnavailable和maxSurge来控制滚动更新的过程。
27、简述Kubernetes DaemonSet类型的资源特性?
DaemonSet资源对象会在每个Kubernetes集群中的节点上运行并且每个节点只能运行一个pod这是它和deployment资源对象的最大也是唯一的区别。因此在定义yaml文件中不支持定义replicas。
它的一般使用场景如下
在去做每个节点的日志收集工作。 监控每个节点的的运行状态。
28、简述Kubernetes自动扩容机制?
Kubernetes使用Horizontal Pod AutoscalerHPA的控制器实现基于CPU使用率进行自动Pod扩缩容的功能。HPA控制器周期性地监测目标Pod的资源性能指标并与HPA资源对象中的扩缩容条件进行对比在满足条件时对Pod副本数量进行调整。
29、简述Kubernetes Service类型?
通过创建Service可以为一组具有相同功能的容器应用提供一个统一的入口地址并且将请求负载分发到后端的各个容器应用上。其主要类型有
ClusterIP虚拟的服务IP地址该地址用于Kubernetes集群内部的Pod访问在Node上kube-proxy通过设置的iptables规则进行转发NodePort使用宿主机的端口使能够访问各Node的外部客户端通过Node的IP地址和端口号就能访问服务LoadBalancer使用外接负载均衡器完成到服务的负载分发需要在spec.status.loadBalancer字段指定外部负载均衡器的IP地址通常用于公有云。
30、简述Kubernetes Service分发后端的策略?
Service负载分发的策略有RoundRobin和SessionAffinity
RoundRobin默认为轮询模式即轮询将请求转发到后端的各个Pod上。 SessionAffinity基于客户端IP地址进行会话保持的模式即第1次将某个客户端发起的请求转发到后端的某个Pod上之后从相同的客户端发起的请求都将被转发到后端相同的Pod上。
31、简述Kubernetes Headless Service?
在某些应用场景中若需要人为指定负载均衡器不使用Service提供的默认负载均衡的功能或者应用程序希望知道属于同组服务的其他实例。Kubernetes提供了Headless Service来实现这种功能即不为Service设置ClusterIP入口IP地址仅通过Label Selector将后端的Pod列表返回给调用的客户端。
32、简述Kubernetes外部如何访问集群内的服务?
映射Pod到物理机将Pod端口号映射到宿主机即在Pod中采用hostPort方式以使客户端应用能够通过物理机访问容器应用。映射Service到物理机将Service端口号映射到宿主机即在Service中采用nodePort方式以使客户端应用能够通过物理机访问容器应用。映射Sercie到LoadBalancer通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。
33、简述Kubernetes ingress? Kubernetes的Ingress资源对象用于将不同URL的访问请求转发到后端不同的Service以实现HTTP层的业务路由机制。 Kubernetes使用了Ingress策略和Ingress Controller两者结合并实现了一个完整的Ingress负载均衡器。使用Ingress进行负载分发时Ingress Controller基于Ingress规则将客户端请求直接转发到Service对应的后端EndpointPod上从而跳过kube-proxy的转发功能kube-proxy不再起作用全过程为ingress controller ingress 规则 ---- services。
同时当Ingress Controller提供的是对外服务则实际上实现的是边缘路由器的功能。
34、简述Kubernetes镜像的下载策略? K8s的镜像下载策略有三种Always、Never、IFNotPresent。 Always镜像标签为latest时总是从指定的仓库中获取镜像。Never禁止从仓库中下载镜像也就是说只能使用本地镜像。IfNotPresent仅当本地没有对应镜像时才从目标仓库中下载。
默认的镜像下载策略是当镜像标签是latest时默认策略是Always当镜像标签是自定义时也就是标签不是latest那么默认策略是IfNotPresent。
35、简述Kubernetes的负载均衡器?
负载均衡器是暴露服务的最常见和标准方式之一。
根据工作环境使用两种类型的负载均衡器即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器而外部负载均衡器将流量从外部负载引导至后端容器。
36、简述Kubernetes各模块如何与API Server通信?
Kubernetes API Server作为集群的核心负责集群各功能模块之间的通信。集群内的各个功能模块通过API Server将信息存入etcd当需要获取和操作这些数据时则通过API Server提供的REST接口用GET、LIST或WATCH方法来实现从而实现各模块之间的信息交互。
如kubelet进程与API Server的交互每个Node上的kubelet每隔一个时间周期就会调用一次API Server的REST接口报告自身状态API Server在接收到这些信息后会将节点状态信息更新到etcd中。
如kube-controller-manager进程与API Server的交互kube-controller-manager中的Node Controller模块通过API Server提供的Watch接口实时监控Node的信息并做相应处理。
如kube-scheduler进程与API Server的交互Scheduler通过API Server的Watch接口监听到新建Pod副本的信息后会检索所有符合该Pod要求的Node列表开始执行Pod调度逻辑在调度成功后将Pod绑定到目标节点上。
37、简述Kubernetes Scheduler作用及实现原理?
Kubernetes Scheduler是负责Pod调度的重要功能模块Kubernetes Scheduler在整个系统中承担了“承上启下”的重要功能“承上”是指它负责接收Controller Manager创建的新Pod为其调度至目标Node“启下”是指调度完成后目标Node上的kubelet服务进程接管后继工作负责Pod接下来生命周期。
Kubernetes Scheduler的作用是将待调度的PodAPI新创建的Pod、Controller Manager为补足副本而创建的Pod等按照特定的调度算法和调度策略绑定Binding到集群中某个合适的Node上并将绑定信息写入etcd中。
在整个调度过程中涉及三个对象分别是待调度Pod列表、可用Node列表以及调度算法和策略。
Kubernetes Scheduler通过调度算法调度为待调度Pod列表中的每个Pod从Node列表中选择一个最适合的Node来实现Pod的调度。随后目标节点上的kubelet通过API Server监听到Kubernetes Scheduler产生的Pod绑定事件然后获取对应的Pod清单下载Image镜像并启动容器。
38、简述Kubernetes Scheduler使用哪两种算法将Pod绑定到worker节点?
预选Predicates输入是所有节点输出是满足预选条件的节点。kube-scheduler根据预选策略过滤掉不满足策略的Nodes。如果某节点的资源不足或者不满足预选策略的条件则无法通过预选。如“Node的label必须与Pod的Selector一致”。优选Priorities输入是预选阶段筛选出的节点优选会根据优先策略为通过预选的Nodes进行打分排名选择得分最高的Node。例如资源越富裕、负载越小的Node可能具有越高的排名。
39、简述Kubernetes kubelet的作用?
在Kubernetes集群中在每个Node又称Worker上都会启动一个kubelet服务进程。该进程用于处理Master下发到本节点的任务管理Pod及Pod中的容器。每个kubelet进程都会在API Server上注册节点自身的信息定期向Master汇报节点资源的使用情况并通过cAdvisor监控容器和节点资源。
40、简述Kubernetes kubelet监控Worker节点资源是使用什么组件来实现的?
kubelet使用cAdvisor对worker节点资源进行监控。在 Kubernetes 系统中cAdvisor 已被默认集成到 kubelet 组件内当 kubelet 服务启动时它会自动启动 cAdvisor 服务然后 cAdvisor 会实时采集所在节点的性能指标及在节点上运行的容器的性能指标。
41、简述Kubernetes如何保证集群的安全性?
Kubernetes通过一系列机制来实现集群的安全控制主要有如下不同的维度
基础设施方面保证容器与其所在宿主机的隔离
权限方面
最小权限原则合理限制所有组件的权限确保组件只执行它被授权的行为通过限制单个组件的能力来限制它的权限范围。 用户权限划分普通用户和管理员的角色。
集群方面
API Server的认证授权Kubernetes集群中所有资源的访问和变更都是通过Kubernetes API Server来实现的因此需要建议采用更安全的HTTPS或Token来识别和认证客户端身份Authentication以及随后访问权限的授权Authorization环节。 API Server的授权管理通过授权策略来决定一个API调用是否合法。对合法用户进行授权并且随后在用户访问时进行鉴权建议采用更安全的RBAC方式来提升集群安全授权。 敏感数据引入Secret机制对于集群敏感数据建议使用Secret方式进行保护。 AdmissionControl准入机制对kubernetes api的请求过程中顺序为先经过认证 授权然后执行准入操作最后对目标对象进行操作。
42、简述Kubernetes准入机制?
在对集群进行请求时每个准入控制代码都按照一定顺序执行。如果有一个准入控制拒绝了此次请求那么整个请求的结果将会立即返回并提示用户相应的error信息。
准入控制AdmissionControl准入控制本质上为一段准入代码在对kubernetes api的请求过程中顺序为先经过认证 授权然后执行准入操作最后对目标对象进行操作。常用组件控制代码如下
AlwaysAdmit允许所有请求 AlwaysDeny禁止所有请求多用于测试环境。 ServiceAccount它将serviceAccounts实现了自动化它会辅助serviceAccount做一些事情比如如果pod没有serviceAccount属性它会自动添加一个default并确保pod的serviceAccount始终存在。 LimitRanger观察所有的请求确保没有违反已经定义好的约束条件这些条件定义在namespace中LimitRange对象中。 NamespaceExists观察所有的请求如果请求尝试创建一个不存在的namespace则这个请求被拒绝。
43、简述Kubernetes RBAC及其特点优势?
RBAC是基于角色的访问控制是一种基于个人用户的角色来管理对计算机或网络资源的访问的方法。
相对于其他授权模式RBAC具有如下优势
对集群中的资源和非资源权限均有完整的覆盖。 整个RBAC完全由几个API对象完成 同其他API对象一样 可以用kubectl或API进行操作。 可以在运行时进行调整无须重新启动API Server。
44、简述Kubernetes Secret作用?
Secret对象主要作用是保管私密数据比如密码、OAuth Tokens、SSH Keys等信息。将这些私密信息放在Secret对象中比直接放在Pod或Docker Image中更安全也更便于使用和分发。
45、简述Kubernetes Secret有哪些使用方式?
创建完secret之后可通过如下三种方式使用
在创建Pod时通过为Pod指定Service Account来自动使用该Secret。通过挂载该Secret到Pod来使用它。在Docker镜像下载时使用通过指定Pod的spc.ImagePullSecrets来引用它。
46、简述Kubernetes PodSecurityPolicy机制?
Kubernetes PodSecurityPolicy是为了更精细地控制Pod对资源的使用方式以及提升安全策略。在开启PodSecurityPolicy准入控制器后Kubernetes默认不允许创建任何Pod需要创建PodSecurityPolicy策略和相应的RBAC授权策略Authorizing PoliciesPod才能创建成功。
47、简述Kubernetes PodSecurityPolicy机制能实现哪些安全策略?
在PodSecurityPolicy对象中可以设置不同字段来控制Pod运行时的各种安全策略常见的有
特权模式privileged是否允许Pod以特权模式运行。宿主机资源控制Pod对宿主机资源的控制如hostPID是否允许Pod共享宿主机的进程空间。用户和组设置运行容器的用户ID范围或组范围。提升权限AllowPrivilegeEscalation设置容器内的子进程是否可以提升权限通常在设置非root用户MustRunAsNonRoot时进行设置。SELinux进行SELinux的相关配置。
48、简述Kubernetes网络模型?
Kubernetes网络模型中每个Pod都拥有一个独立的IP地址并假定所有Pod都在一个可以直接连通的、扁平的网络空间中。所以不管它们是否运行在同一个Node宿主机中都要求它们可以直接通过对方的IP进行访问。设计这个原则的原因是用户不需要额外考虑如何建立Pod之间的连接也不需要考虑如何将容器端口映射到主机端口等问题。
同时为每个Pod都设置一个IP地址的模型使得同一个Pod内的不同容器会共享同一个网络命名空间也就是同一个Linux网络协议栈。这就意味着同一个Pod内的容器可以通过localhost来连接对方的端口。
在Kubernetes的集群里IP是以Pod为单位进行分配的。一个Pod内部的所有容器共享一个网络堆栈相当于一个网络命名空间它们的IP地址、网络设备、配置等都是共享的。
49、简述Kubernetes CNI模型?
CNI提供了一种应用容器的插件化网络解决方案定义对容器网络进行操作和配置的规范通过插件的形式对CNI接口进行实现。CNI仅关注在创建容器时分配网络资源和在销毁容器时删除网络资源。在CNI模型中只涉及两个概念容器和网络。
容器Container是拥有独立Linux网络命名空间的环境例如使用Docker或rkt创建的容器。容器需要拥有自己的Linux网络命名空间这是加入网络的必要条件。
网络Network表示可以互连的一组实体这些实体拥有各自独立、唯一的IP地址可以是容器、物理机或者其他网络设备比如路由器等。
对容器网络的设置和操作都通过插件Plugin进行具体实现CNI插件包括两种类型CNI Plugin和IPAMIP Address ManagementPlugin。CNI Plugin负责为容器配置网络资源IPAM Plugin负责对容器的IP地址进行分配和管理。IPAM Plugin作为CNI Plugin的一部分与CNI Plugin协同工作。
50、简述Kubernetes网络策略?
为实现细粒度的容器间网络访问隔离策略Kubernetes引入Network Policy。
Network Policy的主要功能是对Pod间的网络通信进行限制和准入控制设置允许访问或禁止访问的客户端Pod列表。Network Policy定义网络策略配合策略控制器Policy Controller进行策略的实现。
51、简述Kubernetes网络策略原理?
Network Policy的工作原理主要为policy controller需要实现一个API Listener监听用户设置的Network Policy定义并将网络访问规则通过各Node的Agent进行实际设置Agent则需要通过CNI网络插件实现。
52、简述Kubernetes中flannel的作用?
Flannel可以用于Kubernetes底层网络的实现主要作用有
它能协助Kubernetes给每一个Node上的Docker容器都分配互相不冲突的IP地址。 它能在这些IP地址之间建立一个覆盖网络Overlay Network通过这个覆盖网络将数据包原封不动地传递到目标容器内。
53、简述Kubernetes Calico网络组件实现原理?
Calico是一个基于BGP的纯三层的网络方案与OpenStack、Kubernetes、AWS、GCE等云平台都能够良好地集成。
Calico在每个计算节点都利用Linux Kernel实现了一个高效的vRouter来负责数据转发。每个vRouter都通过BGP协议把在本节点上运行的容器的路由信息向整个Calico网络广播并自动设置到达其他节点的路由转发规则。
Calico保证所有容器之间的数据流量都是通过IP路由的方式完成互联互通的。Calico节点组网时可以直接利用数据中心的网络结构L2或者L3不需要额外的NAT、隧道或者Overlay Network没有额外的封包解包能够节约CPU运算提高网络效率。
54、简述Kubernetes共享存储的作用?
Kubernetes对于有状态的容器应用或者对数据需要持久化的应用因此需要更加可靠的存储来保存应用产生的重要数据以便容器应用在重建之后仍然可以使用之前的数据。因此需要使用共享存储。
55、简述Kubernetes数据持久化的方式有哪些?
Kubernetes通过数据持久化来持久化保存重要数据常见的方式有
EmptyDir空目录没有指定要挂载宿主机上的某个目录直接由Pod内保部映射到宿主机上。类似于docker中的manager volume。
场景
只需要临时将数据保存在磁盘上比如在合并/排序算法中 作为两个容器的共享存储。 特性
同个pod里面的不同容器共享同一个持久化目录当pod节点删除时volume的数据也会被删除。 emptyDir的数据持久化的生命周期和使用的pod一致一般是作为临时存储使用。 Hostpath将宿主机上已存在的目录或文件挂载到容器内部。类似于docker中的bind mount挂载方式。
特性增加了pod与节点之间的耦合。
PersistentVolume简称PV如基于NFS服务的PV也可以基于GFS的PV。它的作用是统一数据持久化目录方便管理。
56、简述Kubernetes PV和PVC?
PV是对底层网络共享存储的抽象将共享存储定义为一种“资源”。
PVC则是用户对存储资源的一个“申请”。
57、简述Kubernetes PV生命周期内的阶段?
某个PV在生命周期中可能处于以下4个阶段Phaes之一。
Available可用状态还未与某个PVC绑定。 Bound已与某个PVC绑定。 Released绑定的PVC已经删除资源已释放但没有被集群回收。 Failed自动资源回收失败。
58、简述Kubernetes所支持的存储供应模式?
Kubernetes支持两种资源的存储供应模式静态模式Static和动态模式Dynamic。
静态模式集群管理员手工创建许多PV在定义PV时需要将后端存储的特性进行设置。 动态模式集群管理员无须手工创建PV而是通过StorageClass的设置对后端存储进行描述标记为某种类型。此时要求PVC对存储的类型进行声明系统将自动完成PV的创建及与PVC的绑定。
59、简述Kubernetes CSI模型?
Kubernetes CSI是Kubernetes推出与容器对接的存储接口标准存储提供方只需要基于标准接口进行存储插件的实现就能使用Kubernetes的原生存储机制为容器提供存储服务。CSI使得存储提供方的代码能和Kubernetes代码彻底解耦部署也与Kubernetes核心组件分离显然存储插件的开发由提供方自行维护就能为Kubernetes用户提供更多的存储功能也更加安全可靠。 CSI包括CSI Controller和CSI Node
CSI Controller的主要功能是提供存储服务视角对存储资源和存储卷进行管理和操作。 CSI Node的主要功能是对主机Node上的Volume进行管理和操作。
60、简述Kubernetes Worker节点加入集群的过程?
通常需要对Worker节点进行扩容从而将应用系统进行水平扩展。主要过程如下 在该Node上安装Docker、kubelet和kube-proxy服务 然后配置kubelet和kubeproxy的启动参数将Master URL指定为当前Kubernetes集群Master的地址最后启动这些服务 通过kubelet默认的自动注册机制新的Worker将会自动加入现有的Kubernetes集群中 Kubernetes Master在接受了新Worker的注册之后会自动将其纳入当前集群的调度范围。
61、简述Kubernetes Pod如何实现对节点的资源控制?
Kubernetes集群里的节点提供的资源主要是计算资源计算资源是可计量的能被申请、分配和使用的基础资源。当前Kubernetes集群中的计算资源主要包括CPU、GPU及Memory。CPU与Memory是被Pod使用的因此在配置Pod时可以通过参数CPU Request及Memory Request为其中的每个容器指定所需使用的CPU与Memory量Kubernetes会根据Request的值去查找有足够资源的Node来调度此Pod。
通常一个程序所使用的CPU与Memory是一个动态的量确切地说是一个范围跟它的负载密切相关负载增加时CPU和Memory的使用量也会增加。
62、简述Kubernetes Requests和Limits如何影响Pod的调度?
当一个Pod创建成功时Kubernetes调度器Scheduler会为该Pod选择一个节点来执行。对于每种计算资源CPU和Memory而言每个节点都有一个能用于运行Pod的最大容量值。调度器在调度时首先要确保调度后该节点上所有Pod的CPU和内存的Requests总和不超过该节点能提供给Pod使用的CPU和Memory的最大容量值。
63、简述Kubernetes Metric Service?
在Kubernetes从1.10版本后采用Metrics Server作为默认的性能数据采集和监控主要用于提供核心指标Core Metrics包括Node、Pod的CPU和内存使用指标。对其他自定义指标Custom Metrics的监控则由Prometheus等组件来完成。
64、简述Kubernetes中如何使用EFK实现日志的统一管理
在Kubernetes集群环境中通常一个完整的应用或服务涉及组件过多建议对日志系统进行集中化管理通常采用EFK实现。
EFK是 Elasticsearch、Fluentd 和 Kibana 的组合其各组件功能如下
Elasticsearch是一个搜索引擎负责存储日志并提供查询接口 Fluentd负责从 Kubernetes 搜集日志每个node节点上面的fluentd监控并收集该节点上面的系统日志并将处理过后的日志信息发送给Elasticsearch Kibana提供了一个 Web GUI用户可以浏览和搜索存储在 Elasticsearch 中的日志。 通过在每台node上部署一个以DaemonSet方式运行的fluentd来收集每台node上的日志。Fluentd将docker日志目录/var/lib/docker/containers和/var/log目录挂载到Pod中然后Pod会在node节点的/var/log/pods目录中创建新的目录可以区别不同的容器日志输出该目录下有一个日志文件链接到/var/lib/docker/contianers目录下的容器日志输出。
65、简述Kubernetes如何进行优雅的节点关机维护?
由于Kubernetes节点运行大量Pod因此在进行关机维护之前建议先使用kubectl drain将该节点的Pod进行驱逐然后进行关机维护。
66、简述Kubernetes集群联邦?
Kubernetes集群联邦可以将多个Kubernetes集群作为一个集群进行管理。因此可以在一个数据中心/云中创建多个Kubernetes集群并使用集群联邦在一个地方控制/管理所有集群。
67、简述Helm及其优势?
Helm 是 Kubernetes 的软件包管理工具。类似 Ubuntu 中使用的apt、Centos中使用的yum 或者Python中的 pip 一样。
Helm能够将一组K8S资源打包统一管理, 是查找、共享和使用为Kubernetes构建的软件的最佳方式。 Helm中通常每个包称为一个Chart一个Chart是一个目录一般情况下会将目录进行打包压缩形成name-version.tgz格式的单一文件方便传输和存储。
Helm优势
在 Kubernetes中部署一个可以使用的应用需要涉及到很多的 Kubernetes 资源的共同协作。使用helm则具有如下优势
统一管理、配置和更新这些分散的 k8s 的应用资源文件 分发和复用一套应用模板 将应用的一系列资源当做一个软件包管理。 对于应用发布者而言可以通过 Helm 打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。 对于使用者而言使用 Helm 后不用需要编写复杂的应用部署文件可以以简单的方式在 Kubernetes 上查找、安装、升级、回滚、卸载应用程序。
68、标签与标签选择器的作用是什么?
标签可以附加在kubernetes任何资源对象之上的键值型数据常用于标签选择器的匹配度检查从而完成资源筛选 标签选择器用于表达标签的查询条件或选择标准Kubernetes API目前支持两个选择器基于等值关系equality-based的标签选项器以及基于集合关系set-based的标签选择器。
69、考虑一家拥有分布式系统的跨国公司拥有大量数据中心虚拟机和许多从事各种任务的员工。您认为这样公司如何以与Kubernetes一致的方式管理所有任务?
正如我们所有人都知道IT部门推出了数千个容器其任务在分布式系统中遍布全球众多节点。
在这种情况下公司可以使用能够为基于云的应用程序提供敏捷性横向扩展功能和DevOps实践的东西。
因此该公司可以使用Kubernetes来定制他们的调度架构并支持多种容器格式。这使得容器任务之间的亲和性成为可能从而提供更高的效率并为各种容器网络解决方案和容器存储提供广泛支持。
70、考虑一种情况即公司希望通过维持最低成本来提高其效率和技术运营速度。您认为公司将如何实现这一目标?
公司可以通过构建CI/CD管道来实现DevOps方法但是这里可能出现的一个问题是配置可能需要一段时间才能启动并运行。因此在实施CI/CD管道之后公司的下一步应该是在云环境中工作。一旦他们开始处理云环境他们就可以在集群上安排容器并可以在Kubernetes的帮助下进行协调。这种方法将有助于公司缩短部署时间并在各种环境中加快速度。
71、假设一家公司想要修改它的部署方法并希望建立一个更具可扩展性和响应性的平台。您如何看待这家公司能够实现这一目标以满足客户需求?
为了给数百万客户提供他们期望的数字体验公司需要一个可扩展且响应迅速的平台以便他们能够快速地将数据发送到客户网站。现在要做到这一点公司应该从他们的私有数据中心如果他们使用任何转移到任何云环境如AWS。不仅如此他们还应该实现微服务架构以便他们可以开始使用Docker容器。一旦他们准备好基础框架他们就可以开始使用最好的编排平台即Kubernetes。这将使团队能够自主地构建应用程序并快速交付它们。
72、考虑一家拥有非常分散的系统的跨国公司期待解决整体代码库问题。您认为公司如何解决他们的问题?
那么为了解决这个问题我们可以将他们的单片代码库转移到微服务设计然后每个微服务都可以被视为一个容器。因此所有这些容器都可以在Kubernetes的帮助下进行部署和协调。
73、我们所有人都知道从单片到微服务的转变解决了开发方面的问题但却增加了部署方面的问题。公司如何解决部署方面的问题?
团队可以试验容器编排平台例如Kubernetes并在数据中心运行。因此通过这种方式公司可以生成模板化应用程序在五分钟内部署它并在此时将实际实例集中在暂存环境中。这种Kubernetes项目将有数十个并行运行的微服务以提高生产率即使节点出现故障也可以立即重新安排而不会影响性能。 74、考虑一家拼车公司希望通过同时扩展其平台来增加服务器数量,公司如何有效地实现这种资源分配?
这个问题的解决方案就是Kubernetes。Kubernetes确保资源得到有效优化并且只使用特定应用程序所需的那些资源。因此通过使用最佳容器编排工具公司可以有效地实现资源分配。 75、您认为公司如何处理服务器及其安装?
公司可以采用集装箱化的概念。一旦他们将所有应用程序部署到容器中他们就可以使用Kubernetes进行编排并使用像Prometheus这样的容器监视工具来监视容器中的操作。因此利用容器的这种使用在数据中心中为它们提供更好的容量规划因为它们现在将受到更少的限制因为服务和它们运行的硬件之间存在抽象。
76、考虑一种情况公司希望向具有各种环境的客户提供所有必需的分发。您认为他们如何以动态的方式实现这一关键目标?
该公司可以使用Docker环境组建一个横截面团队使用Kubernetes构建Web应用程序。这种框架将帮助公司实现在最短的时间内将所需产品投入生产的目标。因此在这样的机器运行的情况下公司可以向所有具有各种环境的客户发放电子邮件。 77、假设公司希望在不同的云基础架构上运行各种工作负载从裸机到公共云。公司将如何在不同界面的存在下实现这一目标?
该公司可以将其基础设施分解为微服务然后采用Kubernetes。这将使公司在不同的云基础架构上运行各种工作负载。
78、什么是Google容器引擎?
Google Container EngineGKE是Docker容器和集群的开源管理平台。这个基于 Kubernetes的引擎仅支持在Google的公共云服务中运行的群集。
79、您如何看待公司从单—服务转向微服务并部署其服务容器?
由于公司的目标是从单一应用程序转向微服务它们最终可以逐个构建并行构建只需在后台切换配置。然后他们可以将这些内置微服务放在Kubernetes平台上。因此他们可以从一次或两次迁移服务开始并监控它们以确保一切运行稳定。一旦他们觉得一切顺利他们就可以将其余的应用程序迁移到他们的Kubernetes集群中。
80、什么是Headless Service
Headless Service类似于“普通”服务但没有群集IP。此服务使您可以直接访问pod而无需通过代理访问它。 熬最深的夜黑眼圈越来越浓烈