关于linux:超详细k8s-面试题总结

4次阅读

共计 4009 个字符,预计需要花费 11 分钟才能阅读完成。

一个指标:容器操作;两地三核心;四层服务发现;五种 Pod 共享资源;六个 CNI 罕用插件;七层负载平衡;八种隔离维度;九个网络模型准则;十类 IP 地址;百级产品线;千级物理机;万级容器;相如无亿,k8s 有亿:亿级日服务人次。

一个指标:容器操作

Kubernetes(k8s)是自动化容器操作的开源平台。这些容器操作包含:部署、调度和节点集群间扩大。

具体性能:
  • 自动化容器部署和复制。
  • 实时弹性膨胀容器规模。
  • 容器编排成组,并提供容器间的负载平衡。
  • 调度:容器在哪个机器上运行。
组成:
  • kubectl:客户端命令行工具,作为整个零碎的操作入口。
  • kube-apiserver:以 REST API 服务模式提供接口,作为整个零碎的管制入口。
  • kube-controller-manager:执行整个零碎的后台任务,包含节点状态情况、Pod 个数、Pods 和 Service 的关联等。
  • kube-scheduler:负责节点资源管理,接管来自 kube-apiserver 创立 Pods 工作,并调配到某个节点。
  • etcd:负责节点间的服务发现和配置共享。
  • kube-proxy:运行在每个计算节点上,负责 Pod 网络代理。定时从 etcd 获取到 service 信息来做相应的策略。
  • kubelet:运行在每个计算节点上,作为 agent,接管调配该节点的 Pods 工作及治理容器,周期性获取容器状态,反馈给 kube-apiserver。
  • DNS:一个可选的 DNS 服务,用于为每个 Service 对象创立 DNS 记录,这样所有的 Pod 就能够通过 DNS 拜访服务了。

上面是 k8s 的架构拓扑图:

两地三核心


两地三核心包含本地生产核心、本地灾备核心、异地灾备核心。

两地三核心要解决的一个重要问题就是数据一致性问题。

k8s 应用 etcd 组件作为一个高可用、强一致性的服务发现存储仓库。用于配置共享和服务发现。

它作为一个受到 Zookeeper 和 doozer 启发而催生的我的项目。除了领有他们的所有性能之外,还领有以下 4 个特点:

  • 简略:基于 HTTP+JSON 的 API 让你用 curl 命令就能够轻松应用。
  • 平安:可选 SSL 客户认证机制。
  • 疾速:每个实例每秒反对一千次写操作。
  • 可信:应用 Raft 算法充沛实现了分布式。

四层服务发现

先一张图解释一下网络七层协定:

k8s 提供了两种形式进行服务发现:

  • 环境变量:当创立一个 Pod 的时候,kubelet 会在该 Pod 中注入集群内所有 Service 的相干环境变量。须要留神的是,要想一个 Pod 中注入某个 Service 的环境变量,则必须 Service 要先比该 Pod 创立。这一点,简直使得这种形式进行服务发现不可用。比方,一个 ServiceName 为 redis-master 的 Service,对应的 ClusterIP:Port 为 10.0.0.11:6379,则对应的环境变量为:

  • DNS:能够通过 cluster add-on 的形式轻松的创立 KubeDNS 来对集群内的 Service 进行服务发现。

以上两种形式,一个是基于 TCP,DNS 基于 UDP,它们都是建设在四层协定之上。

五种 Pod 共享资源

Pod 是 k8s 最根本的操作单元,蕴含一个或多个严密相干的容器。

一个 Pod 能够被一个容器化的环境看作应用层的“逻辑宿主机”;一个 Pod 中的多个容器利用通常是严密耦合的,Pod 在 Node 上被创立、启动或者销毁;每个 Pod 里运行着一个非凡的被称之为 Volume 挂载卷,因而他们之间通信和数据交换更为高效。在设计时咱们能够充分利用这一个性将一组密切相关的服务过程放入同一个 Pod 中。

同一个 Pod 里的容器之间仅需通过 localhost 就能相互通信。

一个 Pod 中的利用容器共享五种资源:

  • PID 命名空间:Pod 中的不同应用程序能够看到其余应用程序的过程 ID。
  • 网络命名空间:Pod 中的多个容器可能拜访同一个 IP 和端口范畴。
  • IPC 命名空间:Pod 中的多个容器可能应用 SystemV IPC 或 POSIX 音讯队列进行通信。
  • UTS 命名空间:Pod 中的多个容器共享一个主机名。
  • Volumes(共享存储卷):Pod 中的各个容器能够拜访在 Pod 级别定义的 Volumes。

Pod 的生命周期通过 Replication Controller 来治理;通过模板进行定义,而后调配到一个 Node 上运行,在 Pod 所蕴含容器运行完结后,Pod 完结。

Kubernetes 为 Pod 设计了一套独特的网络配置,包含为每个 Pod 调配一个 IP 地址,应用 Pod 名作为容器间通信的主机名等。

六个 CNI 罕用插件

CNI(Container Network Interface)容器网络接口是 Linux 容器网络配置的一组规范和库,用户须要依据这些规范和库来开发本人的容器网络插件。CNI 只专一解决容器网络连接和容器销毁时的资源开释,提供一套框架。所以 CNI 能够反对大量不同的网络模式,并且容易实现。

上面用一张图示意六个 CNI 罕用插件:

七层负载平衡


提负载平衡就不得不先提服务器之间的通信。

IDC(Internet Data Center)也可称数据中心、机房,用来搁置服务器。IDC 网络是服务器间通信的桥梁。

上图里画了很多网络设备,它们都是干啥用的呢?

路由器、交换机、MGW/NAT 都是网络设备,依照性能、内外网划分不同的角色。

  • 内网接入交换机:也称为 TOR(top of rack),是服务器接入网络的设施。每台内网接入交换机下联 40-48 台服务器,应用一个掩码为 /24 的网段作为服务器内网网段。
  • 内网外围交换机:负责 IDC 内各内网接入交换机的流量转发及跨 IDC 流量转发。
  • MGW/NAT:MGW 即 LVS 用来做负载平衡,NAT 用于内网设施拜访外网时做地址转换。
  • 外网外围路由器:通过动态互联运营商或 BGP 互联美团对立外网平台。

先说说各层负载平衡:

  • 二层负载平衡:基于 MAC 地址的二层负载平衡。
  • 三层负载平衡:基于 IP 地址的负载平衡。
  • 四层负载平衡:基于 IP+ 端口 的负载平衡。
  • 七层负载平衡:基于 URL 等应用层信息的负载平衡。

这里用一张图来说说四层和七层负载平衡的区别:

下面四层服务发现讲的次要是 k8s 原生的 kube-proxy 形式。k8s 对于服务的裸露次要是通过 NodePort 形式,通过绑定 minion 主机的某个端口,而后进行 Pod 的申请转发和负载平衡,但这种形式有上面的缺点:

  • Service 可能有很多个,如果每个都绑定一个 Node 主机端口的话,主机须要凋谢外围的端口进行服务调用,管理混乱。
  • 无奈利用很多公司要求的防火墙规定。

现实的形式是通过一个内部的负载均衡器,绑定固定的端口,比方 80;而后依据域名或者服务名向前面的 Service IP 转发。

Nginx 很好的解决了这个需要,但问题是如果有的新的服务退出,如何去批改并且加载这些 Nginx 配置?

Kubernetes 给出的计划就是 Ingress。这是一个基于七层的计划。

八种隔离维度

k8s 集群调度这边须要对下面从上到下、从粗粒度到细粒度的隔离做相应的调度策略。

九个网络模型准则

k8s 网络模型要合乎四个根底准则、三个网络要求准则、一个架构准则、一个 IP 准则。

每个 Pod 都领有一个独立的 IP 地址,而且假设所有 Pod 都在一个能够间接连通的、扁平的网络空间中,不论是否运行在同一 Node 上都能够通过 Pod 的 IP 来拜访。

k8s 中的 Pod 的 IP 是最小粒度 IP。同一个 Pod 内所有的容器共享一个网络堆栈,该模型称为 IP-per-Pod 模型。

  • Pod 由 docker0 理论调配的 IP。
  • Pod 外部看到的 IP 地址和端口与内部保持一致。
  • 同一个 Pod 内的不同容器共享网络,能够通过 localhost 来拜访对方的端口,相似同一个虚拟机内不同的过程。

IP-per-Pod 模型从端口调配、域名解析、服务发现、负载平衡、利用配置等角度看,Pod 能够看做是一台独立的虚拟机或物理机。

  • 所有容器都能够不必 NAT 的形式同别的容器通信。
  • 所有节点都能够在不同 NAT 形式下同所有容器通信,反之亦然。
  • 容器的地址和他人看到的地址是同一个地址。

要合乎上面的架构:

由上图架构引申进去 IP 概念从集群内部到集群外部:

十类 IP 地址


大家都晓得 IP 地址分为 ABCDE 类,另外还有五类非凡用处的 IP。

第一类

A 类:1.0.0.0-1226.255.255.255,默认子网掩码 /8,即 255.0.0.0。B 类:128.0.0.0-191.255.255.255,默认子网掩码 /16,即 255.255.0.0。C 类:192.0.0.0-223.255.255.255,默认子网掩码 /24,即 255.255.255.0。D 类:224.0.0.0-239.255.255.255,个别用于组播。E 类:240.0.0.0-255.255.255.255(其中 255.255.255.255 为全网播送地址)。E 类地址个别用于钻研用处。

第二类

0.0.0.0
严格来说,0.0.0.0 曾经不是一个真正意义上的 IP 地址了。它示意的是这样一个汇合:所有不分明的主机和目标网络。这里的不分明是指在本机的路由表里没有特定条目指明如何达到。作为缺省路由。127.0.0.1 本机地址。

第三类

224.0.0.1 组播地址。如果你的主机开启了 IRDP(internet 路由发现,应用组播性能),那么你的主机路由表中应该有这样一条路由。

第四类

169.254.x.x
应用了 DHCP 性能主动获取了 IP 的主机,DHCP 服务器产生故障,或响应工夫太长而超出了一个零碎规定的工夫,零碎会为你调配这样一个 IP,代表网络不能失常运行。

第五类

10.xxx、172.16.x.x~172.31.x.x、192.168.x.x 公有地址。大量用于企业外部。保留这样的地址是为了防止亦或是哪个接入公网时引起地址凌乱。

转自:stackpush 链接:blog.csdn.net/huakai_sun/article/details/82378856

正文完
 0