51. 简述 Kubernetes 网络策略?
答:为实现细粒度的容器间网络访问隔离策略,Kubernetes 引入 Network Policy。Network Policy 的主要功能是对 Pod 间的网络通信进行限制和准入控制,设置允许访问或禁止访问的客户端 Pod 列表。Network Policy 定义网络策略,配合策略控制器(Policy Controller)进行策略的实现。
52. 简述 Kubernetes 网络策略原理?
答:Network Policy 的工作原理主要为:policy controller 需要实现一个 API Listener,监听用户设置的 Network Policy 定义,并将网络访问规则通过各 Node 的 Agent 进行实际设置(Agent 则需要通过 CNI 网络插件实现)。
53. 简述 Kubernetes 中 flannel 的作用?
答:Flannel 可以用于 Kubernetes 底层网络的实现,主要作用有:
- 它能协助 Kubernetes,给每一个 Node 上的 Docker 容器都分配互相不冲突的IP 地址。
- 它能在这些 IP 地址之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,将数据包原封不动地传递到目标容器内。
54. 简述 Kubernetes Calico 网络组件实现原理?
答:
Calico 是一个基于 BGP 的纯三层的网络方案,与 OpenStack、Kubernetes、AWS、GCE 等云平台都能够良好地集成。
Calico 在每个计算节点都利用 Linux Kernel 实现了一个高效的 vRouter 来负责数据转发。每个 vRouter 都通过 BGP 协议把在本节点上运行的容器的路由信息向整个Calico 网络广播,并自动设置到达其他节点的路由转发规则。
Calico 保证所有容器之间的数据流量都是通过 IP 路由的方式完成互联互通的。Calico节点组网时可以直接利用数据中心的网络结构(L2 或者 L3),不需要额外的 NAT、隧道或者 Overlay Network,没有额外的封包解包,能够节约 CPU 运算,提高网络
效率。
55. 简述 Kubernetes 共享存储的作用?
答:Kubernetes 对于有状态的容器应用或者对数据需要持久化的应用,因此需要更加可靠的存储来保存应用产生的重要数据,以便容器应用在重建之后仍然可以使用之前的数据。因此需要使用共享存储。
56. 简述 Kubernetes 数据持久化的方式有哪些?
答:Kubernetes 通过数据持久化来持久化保存重要数据,常见的方式有:
- EmptyDir(空目录):没有指定要挂载宿主机上的某个目录,直接由 Pod 内保
部映射到宿主机上。类似于 docker 中的 manager volume。 - 场景:
- 只需要临时将数据保存在磁盘上,比如在合并/排序算法中;
- 作为两个容器的共享存储。
- 特性:
- 同个 pod 里面的不同容器,共享同一个持久化目录,当 pod 节点删除时,volume 的数据也会被删除。
- emptyDir 的数据持久化的生命周期和使用的 pod 一致,一般是作为临时存储使用。
- Hostpath:将宿主机上已存在的目录或文件挂载到容器内部。类似于 docker 中的 bind mount 挂载方式。
- 特性:增加了 pod 与节点之间的耦合。
PersistentVolume(简称 PV):如基于 NFS 服务的 PV,也可以基于 GFS 的 PV。它的作用是统一数据持久化目录,方便管理。
57. 简述 Kubernetes PV 和 PVC?
答:
PV 是对底层网络共享存储的抽象,将共享存储定义为一种“资源”。
PVC 则是用户对存储资源的一个“申请”。
58. 简述 Kubernetes PV 生命周期内的阶段?
答:某个 PV 在生命周期中可能处于以下 4 个阶段(Phaes)之一。
- Available:可用状态,还未与某个 PVC 绑定。
- Bound:已与某个 PVC 绑定。
- Released:绑定的 PVC 已经删除,资源已释放,但没有被集群回收。
- Failed:自动资源回收失败。
59. 简述 Kubernetes 所支持的存储供应模式?
答:Kubernetes 支持两种资源的存储供应模式:静态模式(Static)和动态模式(Dynamic)。
- 静态模式:集群管理员手工创建许多 PV,在定义 PV 时需要将后端存储的特性进行设置。
- 动态模式:集群管理员无须手工创建 PV,而是通过 StorageClass 的设置对后端存储进行描述,标记为某种类型。此时要求 PVC 对存储的类型进行声明,系统将自动完成 PV 的创建及与 PVC 的绑定。
60. 简述 Kubernetes CSI 模型?
答:Kubernetes CSI 是 Kubernetes 推出与容器对接的存储接口标准,存储提供方只需要基于标准接口进行存储插件的实现,就能使用 Kubernetes 的原生存储机制为容器提供存储服务。CSI 使得存储提供方的代码能和 Kubernetes 代码彻底解耦,部署也
与 Kubernetes 核心组件分离,显然,存储插件的开发由提供方自行维护,就能为Kubernetes 用户提供更多的存储功能,也更加安全可靠。
CSI 包括 CSI Controller 和 CSI Node:
- CSI Controller 的主要功能是提供存储服务视角对存储资源和存储卷进行管理和操作。
- CSI Node 的主要功能是对主机(Node)上的 Volume 进行管理和操作。