K8s知识点总结

一、K8s基本概念

  1. 什么是K8s?
    Kubernetes是一个开源容器管理工具,负责容器部署,容器扩缩容以及负载平衡。作为Google的创意之作,它提供了出色的社区,并与所有云提供商合作。因此,我们可以说Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。
    对于大多数用户来说,k8s的主要作用是在一个给定的集群上把一个应用运行起来。更进一步说,k8s需要提供的是网关、水平拓展、监控、备份、灾难恢复等一系列运维能力。并且在任务与任务之间的关系处理,才是作业编排和系统管理最困难的地方。

  2. 在主机上和在容器上部署应用的区别?
    K8s知识点总结_第1张图片
    主机上:这种架构将具有操作系统,然后操作系统将具有内核,该内核将在应用程序所需的操作系统上安装各种库。因此,在这种框架中,您可以拥有n个应用程序,并且所有应用程序将共享该操作系统中存在的库,而在容器中部署应用程序时,体系结构则略有不同。这种架构将有一个内核,这是唯一一个在所有应用程序之间唯一共同的东西。因此,如果有一个需要Java的特定应用程序,那么我们将获得访问Java的特定应用程序,如果有另一个需要Python的应用程序,则只有该特定应用程序才能访问Python。
    容器上:您可以在图表右侧看到的各个块基本上是容器化的,并且这些块与其他应用程序隔离。因此,应用程序具有与系统其余部分隔离的必要库和二进制文件,并且不能被任何其他应用程序侵占。

  3. 容器编排?
    考虑一个应用程序有5-6个微服务的场景。现在,这些微服务被放在单独的容器中,但如果没有容器编排就无法进行通信。因此,由于编排意味着所有乐器在音乐中和谐共处,所以类似的容器编排意味着各个容器中的所有服务协同工作以满足单个服务器的需求。

  4. K8s四大特性?
    K8s知识点总结_第2张图片

  5. Heapster?
    Heapster是由每个节点上运行的Kubelet提供的集群范围的数据聚合器。此容器管理工具在Kubernetes集群上本机支持,并作为pod运行,就像集群中的任何其他pod一样。因此,它基本上发现集群中的所有节点,并通过机上Kubernetes代理查询集群中Kubernetes节点的使用信息。

  6. Minikube?
    Minikube是一种工具,可以在本地轻松运行Kubernetes。这将在虚拟机中运行单节点Kubernetes群集。

  7. kubectl?
    Kubectl是一个平台,您可以使用该平台将命令传递给集群。因此,它基本上为CLI提供了针对Kubernetes集群运行命令的方法,以及创建和管理Kubernetes组件的各种方法。

  8. kubelet?
    这是一个代理服务,它在每个节点上运行,并使从服务器与主服务器通信。因此,Kubelet处理PodSpec中提供给它的容器的描述,并确保PodSpec中描述的容器运行正常。

  9. node?
    K8s知识点总结_第3张图片

二、K8s架构

  1. K8s architecture 不同组件
    K8s知识点总结_第4张图片
    Master节点(默认不参加实际工作):
    Kubectl:客户端命令行工具,作为整个K8s集群的操作入口;
    Api Server:在K8s架构中承担的是“桥梁”的角色,作为资源操作的唯一入口,它提供了认证、授权、访问控制、API注册和发现等机制。客户端与k8s群集及K8s内部组件的通信,都要通过Api Server这个组件;
    Controller-manager:负责维护群集的状态,比如故障检测、自动扩展、滚动更新等;
    Scheduler:负责资源的调度,按照预定的调度策略将pod调度到相应的node节点上;
    Etcd:担任数据中心的角色,保存了整个群集的状态;

    Node节点:
    Kubelet:负责维护容器的生命周期,同时也负责Volume和网络的管理,一般运行在所有的节点,是Node节点的代理,当Scheduler确定某个node上运行pod之后,会将pod的具体信息(image,volume)等发送给该节点的kubelet,kubelet根据这些信息创建和运行容器,并向master返回运行状态。(自动修复功能:如果某个节点中的容器宕机,它会尝试重启该容器,若重启无效,则会将该pod杀死,然后重新创建一个容器);
    Kube-proxy:Service在逻辑上代表了后端的多个pod。负责为Service提供cluster内部的服务发现和负载均衡(外界通过Service访问pod提供的服务时,Service接收到的请求后就是通过kube-proxy来转发到pod上的);
    container-runtime:是负责管理运行容器的软件,比如docker
    Pod:是k8s集群里面最小的单位。每个pod里边可以运行一个或多个container(容器),如果一个pod中有两个container,那么container的USR(用户)、MNT(挂载点)、PID(进程号)是相互隔离的,UTS(主机名和域名)、IPC(消息队列)、NET(网络栈)是相互共享的。我比较喜欢把pod来当做豌豆夹,而豌豆就是pod中的container;

  2. master node中的工作情况?
    Kubernetes master控制容器存在的节点和节点内部。现在,这些单独的容器包含在容器内部和每个容器内部,您可以根据配置和要求拥有不同数量的容器。因此,如果必须部署pod,则可以使用用户界面或命令行界面部署它们。然后,在节点上调度这些pod,并根据资源需求,将pod分配给这些节点。kube-apiserver确保在Kubernetes节点和主组件之间建立通信。

  3. ETCD
    Etcd是用Go编程语言编写的,是一个分布式键值存储,用于协调分布式工作。因此,Etcd存储Kubernetes集群的配置数据,表示在任何给定时间点的集群状态。

  4. k8s服务类型
    K8s知识点总结_第5张图片

  5. K8s load balancer
    负载均衡器是暴露服务的最常见和标准方式之一。根据工作环境使用两种类型的负载均衡器,即内部负载均衡器或外部负载均衡器。内部负载均衡器自动平衡负载并使用所需配置分配容器,而外部负载均衡器将流量从外部负载引导至后端容器。

  6. ingress 网络工作原理
    ngress网络是一组规则,充当Kubernetes集群的入口点。这允许入站连接,可以将其配置为通过可访问的URL,负载平衡流量或通过提供基于名称的虚拟主机从外部提供服务。因此,Ingress是一个API对象,通常通过HTTP管理集群中服务的外部访问,是暴露服务的最有效方式。
    现在,让我以一个例子向您解释Ingress网络的工作。
    有2个节点具有带有Linux桥接器的pod和根网络命名空间。除此之外,还有一个名为flannel0(网络插件)的新虚拟以太网设备被添加到根网络中。
    现在,假设我们希望数据包从pod1流向pod 4.请参阅下图。
    K8s知识点总结_第6张图片

  • 因此,数据包将pod1的网络保留在eth0,并进入veth0的根网络。
  • 然后它被传递给cbr0,这使得ARP请求找到目的地,并且发现该节点上没有人具有目的地IP地址。
  • 因此,桥接器将数据包发送到flannel0,因为节点的路由表配置了flannel0。
  • 现在,flannel守护程序与Kubernetes的API服务器通信,以了解所有pod IP及其各自的节点,以创建pods IP到节点IP的映射。
  • 网络插件将此数据包封装在UDP数据包中,其中额外的标头将源和目标IP更改为各自的节点,并通过eth0发送此数据包。
  • 现在,由于路由表已经知道如何在节点之间路由流量,因此它将数据包发送到目标节点2。
  • 数据包到达node2的eth0并返回到flannel0以解封装并在根网络命名空间中将其发回。
  • 同样,数据包被转发到Linux网桥以发出ARP请求以找出属于veth1的IP。
  • 数据包最终穿过根网络并到达目标Pod4。
  1. 容器资源监控工具
    K8s知识点总结_第7张图片
  2. pod 工作全景图
    在这里插入图片描述

三、多项选择面试问题

这部分问题将包括多项面试问题,这些问题在面试中经常被问到。

Q1。什么是Kubernetes集群中的minions?
它们是主节点的组件。

它们是集群的工作节点。[答案]

他们正在监控kubernetes中广泛使用的引擎。

他们是docker容器服务。

Q2。Kubernetes集群数据存储在以下哪个位置?
KUBE-API服务器

Kubelet

ETCD [答案]

以上都不是

Q3。哪个是Kubernetes控制器?
ReplicaSet

Deployment

Rolling Updates

ReplicaSet和Deployment [答案]

Q4。以下哪个是核心Kubernetes对象?
Pods

Services

Volumes

以上所有[答案]

Q5。Kubernetes Network代理在哪个节点上运行?
Master Node

Worker Node

所有节点[答案]

以上都不是

Q6。 节点控制器的职责是什么?
将CIDR块分配给节点

维护节点列表

监视节点的运行状况

以上所有[答案]

Q7。Replication Controller的职责是什么?
使用单个命令更新或删除多个pod

有助于达到理想状态

如果现有Pod崩溃,则创建新Pod

以上所有[答案]

Q8。如何在没有选择器的情况下定义服务?
指定外部名称[答案]

指定具有IP地址和端口的端点

只需指定IP地址即可

指定标签和api版本

Q9。1.8版本的Kubernetes引入了什么?
Taints and Tolerations [答案]

Cluster level Logging

Secrets

Federated Clusters

Q10。Kubelet 调用的处理检查容器的IP地址是否打开的程序是?
HTTPGetAction

ExecAction

TCPSocketAction [答案]

以上都不是

四、经典问答题

  1. 如何在 Kubernetes 中实现负载均衡?
  2. 在生产中,你如何实现 Kubernetes 自动化?
  3. 你如何扩展 Kubernetes 集群?
  4. 你能解释 Deployment、ReplicaSets、StatefulSets、Pod、CronJob 的不同用途吗?
  5. Kubernetes 如何处理持久性?
  6. 服务和 ingress 的作用是什么?
  7. 你何时会使用像 ConfigMap 或 secret 这样的东西?
  8. Pod 亲和性作用是什么?
  9. 你能举例说明何时使用 Init Container 么?
  10. 什么是 sidecar 容器?你能给出一个用例,说明你为什么要使用它么?
  11. 在构建和管理生产集群时遇到的主要问题是什么?
  12. 为什么你会建议公司在云中构建自己的 K8S 集群而不是使用托管服务?
  13. 什么是 Istio 和 Linkerd?
  14. 什么是 Kubernetes Operator?
  15. kubernetes包含几个组件。 各个组件的功能是什么。组件之间是如何交互的。
  16. k8s的pause容器有什么用。是否可以去掉。
  17. k8s中的pod内几个容器之间的关系是什么。
  18. 一个经典pod的完整生命周期。
    Pending:表示pod已经被同意创建,正在等待kube-scheduler选择合适的节点创建,一般是在准备镜像;
    Running:表示pod中所有的容器已经被创建,并且至少有一个容器正在运行或者是正在启动或者是正在重启;
    Succeeded:表示所有容器已经成功终止,并且不会再启动;
    Failed:表示pod中所有容器都是非0(不正常)状态退出;
    Unknown:表示无法读取Pod状态,通常是kube-controller-manager无法与Pod通信。
    原文链接:https://blog.csdn.net/lvjianzhaoa/article/details/103240449
  19. k8s的service和ep是如何关联和相互影响的。
  20. 详述kube-proxy原理, -个请求是如何经过层层转发落到某个pod.上的整个过程。请求可能来自pod也可能来自外部。
  21. rc/rs功能是怎么实现的。详述从API接收到-一个创建rc/rs的请求,到最终在节点上创建pod的全过程,尽可能详细。另外,当-个pod失效时,kubernetes是如何发现并重启另一个pod的?
  22. deployment/rs有什么区别。 其使用方式使用条件和原理是什么。
  23. cgroup中的cpu有哪几种限制方式。 k8s是如何使用实现request和limit的。

你可能感兴趣的:(面试)