15. 什么是 Pod 的根容器?
答:每个 Pod 都有一个特殊的被称为“根容器”的 pause 容器,pause 容器有时候也称为 infra 容器,
被当作 Pod 中所有容器的“父容器”,pause Pod 中作为共享 Linux Namespace 的基础,同时
提供 PID Namespace 共享,为每个 Pod 提供 1 号进程,并收集 Pod 内的僵停进程。
16. 解释 Pod 的生命周期。
答:Pod 遵循预定义的生命周期,起始于 Pending 阶段, 如果至少其中有一个主要容器正常启动,则
进入 Running,之后取决于 Pod 中是否有容器以失败状态结束而进入 Succeeded 或者 Failed
- Pending(挂起):Pod 已被 K8s 系统接受,但有一个或者多个容器镜像尚未创建。等待时间包
括调度 Pod 的时间和通过网络下载镜像的时间。
- Running(运行中):该 Pod 已经绑定到了一个节点上,Pod 中所有的容器都已被创建,至少有
一个容器正在运行,或者正处于启动或重启状态。
- Succeeded(成功):Pod 中的所有容器都被成功终止,并且不会再重启。
- Failed(失败):Pod 中的所有容器都已终止了,并且至少有一个容器是因为失败终止,即容器
以非 0 状态退出或者被系统终止。
- 未知(Unknown):因为某些原因无法取得 Pod 的状态,通常是因为与 Pod 所在主机通信失败。
17. Init 类型容器有什么特点,主要用途?
答:Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行,Init 容器需要在 Pod 规约中添加
initContainers 字段来声明。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。
18. Sidecar 类型容器和 Init 容器的区别在哪?
答:Sidecar 容器用来提供辅助功能以增强主容器应用,最经典的是日志跟踪,它与主容器并行运行。
Init 容器是在主容器启动前提前执行一些准备工作,运行完就处于 pause 状态。
19. 什么是静态 Pod
答:静态 Pod 在指定各自节点上由 kubelet 守护进程直接管理的 Pod,它不需要监管,但通过一个镜
Podapi-server 任然可以监控静态 Pod 的运行状态。静态 Pod 的名称连字符开头的节点主机
名作为后缀。静态 Pod 的创建和销毁方法和由 api-server 创建的 Pod 完全不同。
20. 说明 K8s 控制器的作用?
答:K8s 中,控制器就像 K8s 的大脑,控制器通过监控集群的公共状态来确保集群的当前状态与期望
状态保持一致,该期望值就是资源对象的 spec 字段。每个控制器只负责管理某种类型的特定资源。
21. 什么是 ReplicaSet,说明它的主要用途。
答:ReplicaSet 简称 RS,它控制 pod 的副本数始终与预设的值相等,RS 会持续监视这些 Pod 的运行 状态,并在 Pod 发生故障时重启 PodK8s 官方建议使用 Deployments 代替 RS 来控制 Pod 副本
的量,因为 Deployments 支持记录了历史变更的声明式更新,方便进行 RS 的升级和回退等。
22. Deployment 控制器是如何工作的,举例说明其常见用途。
答:一个 Deployment 能够为 Pod ReplicaSet 提供声明式的更新能力。管理员描述 Deployment
中的目标状态,Deployment 控制器会以可控的进度更改 RS 的实际状态使其变为期望状态。
Deployments 的典型用例有:
- 创建 Deployment 以将 ReplicaSet 上线。
- 通过更新 Deployment PodTemplateSpec,声明 Pod 的新状态 。
- 回滚到较早的 Deployment 版本。
- 扩大 Deployment 规模以承担更多负载。
23. 解释 DaemonSet,列举其使用场景。
答:DaemonSet 能确保集群全部(或者某些)节点上都运行一个 Pod 的副本。当有节点加入时,会为其
新增一个 Pod。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建
的所有 Pod
DaemonSet 的一些典型用法:
- 在每个节点上运行集群守护进程。
- 在每个节点上运行日志收集守护进程。
- 在每个节点上运行监控守护进程。
24. 什么是 StatefulSet,其主要作用是什么?
答:StatefulSet 是用来管理有状态应用工作负载的 API 对象。和 Deployment 类似,StatefulSet
可管理基于相同容器规约的一组 Pod。但和 Deployment 不同的是,StatefulSet 为它们的每个
Pod 维护了一个有粘性的 ID,也就是这些 Pod 是基于相同的规约来创建的,但是不能相互替换:无
论怎么调度,每个 Pod 都有一个永久不变的 ID
例如,如果希望使用存储卷为工作负载提供持久存储,就可以引入 StatefulSet 作为解决方案。
在这种环境中,StatefulSet 中的单个 Pod 一旦出现故障,则启动新 Pod 替换失败 Pod 时,持久
Pod 标识符就使得新 Pod 与持久卷的的匹配变得更加容易。
25. 说明 Job CronJob 的功能。
答:Job 负责批量处理短暂的一次性任务,仅执行一次,并保证处理的一个或者多个 Pod 成功结束。
CronJob 负责定时任务,在指定的时间周期运行指定的任务,比如备份、生成报表等。
26. Kubernetes 如何在集群的 Pod 之间提供网络服务?
答:K8s 使用 Service 让一组 Pod 可在网络上被访问并让客户端就能与之交互。
Service API K8s 的组成部分,它是将运行在一个或一组 Pod 上的网络应用程序公开为网络
服务的方法。每个 Service 对象定义端点的一个逻辑集合(通常这些端点就是 Pod)以及如何访问
到这些 Pod 的策略。
27. 解释 iptables IPVS 代理模式 Service 的区别。
答:iptables 代理模式的 Service
- kube-proxy 会监视 K8s 控制节点对 Service 对象和 Endpoints 对象的添加和移除。对每个
Service,它会配置 iptables 规则,从而捕获到达该 Service clusterIP 和端口的请求,
进而将请求重定向到 Service 的一组后端中的某个 Pod 上面。对于每个 Endpoints 对象,它也
会配置 iptables 规则,这个规则会选择一个后端组合。默认的策略是,kube-proxy
iptables 模式下随机选择一个后端。
使用 iptables 处理流量具有较低的系统开销,因为流量由 Linux netfilter 处理,而无需在
用户空间和内核空间之间切换。
IPVS 代理模式的 Service
- IPVS (IP Virtual Server)模式下,kube-proxy 监视 K8s 服务和端点,并调用 netlink
接口创建相应的 IPVS 规则,并定期将 IPVS 规则与 K8s 服务和端点同步。该控制循环可确保
IPVS 状态与所需状态匹配。访问服务时,IPVS 将流量定向到其中之一的后端 Pod
IPVS 代理模式基于类似于 iptables 模式的 netfilter 挂钩函数,但是使用哈希表作为基础
数据结构,并且在内核空间中工作,这意味着,与 iptables 模式下的 kube-proxy 相比,IPVS
模式下的 kube-proxy 重定向通信的延迟要短,并且在同步代理规则时具有更好的性能。与其他
代理模式相比,IPVS 模式还支持更高的网络流量吞吐量。
28. 举例说明 ClusterIP 类型 Service 的用法。
答:ClusterIP 类型服务发现通过集群的内部 IP 暴露服务,选择该值时服务只能够在集群内部访问。
这也是默认的 ServiceType
比如,创建服务,对外提供 8000 端口,并把流量引流到具有 app:nginx 的后端 80 端口上。这个
场景下,在主机 shell 下是不能直接使用 Pod IP 访问 nginx,需要在 Pod IP(ClusterIP)
后添加 8000 端口[P45]
29. 举例说明 NodePort 类型 Service 的用法。
答:NodePort 类型服务发现是通过每个节点上的 IP 和静态端口(NodePort)暴露服务。NodePort
服务会路由到自动创建的 ClusterIP 服务,通过请求<节点 IP>:<节点端口>,就可以从集群的外
部访问一个 NodePort 服务。
比如,NodePort 会在节点的特定端口上开通服务,指定的端口为 31788:这个场景下,在主机的
IP 后添加 31788 端口就可以访问到 Pod[P45]
30. 举例说明 Headless 类型 Service 的用法。
答:Headless 类型的 Service 中,Pod 创建时不会直接返回 Pod Service IP,也就是不提供
Pod ClusterIP,而是直接返回众多 Pod IP。这种场景下,需要进入 Pod 内部用集群内的
DNS 进行访问测试。[P46]
31. 详细说明 Ingress 的实现原理和它所实现的功能。
答:Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP
Ingress 公开了从集群外部到集群内服务的 HTTP HTTPS 路由,流量路由由 Ingress 资源上定
义的规则控制。为了让 Ingress 资源工作,集群必须有一个正在运行的 Ingress 控制器。
Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管。
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐