Pod 相关问题总结

1.controller和scheduler区别

controller 是整个集群对象资源的控制中心,是Kubernetes中各种操作系统的管理者,是集群内部的管理控制中心,也是Kubernetes自动化功能的核心。负责维护集群状态。

scheduler 是负责调度Pod,将Pod调度到相应位置上。

2. k8s为什么要以pod为单位?

Pod可以任务是对容器封装后的实体。
原因1:容器是一个存在的实体,并指向一个具体的事物。不特指是Dokcer,可是是其他容器。
原因2:为了管理容器,kubernetes需要更多的信息。
比如重启策略,它定义了容器终止后要采取的策略;或者是一个可用性探针,从应用程序的角度去探测是否一个进程还存活着。所以需要外层封装获取信息。

3. 为什么一个Pod里可以包括多个容器?

为了解偶把应用分别放在不同容器里,而为了便于管理管紧耦合的应用把它们的容器放在同一个pod里.一会强调耦合,一个强调解偶看似矛盾,实际上普遍存在,高内聚低耦合是我们的追求,然而一个应用的业务逻辑模块不可能完全完独立不存在耦合,这就需要我们从实际上来考量。

4.为什么要有静态pod?

静态pod一般用于Node上需要的应当持续运行的长期设施,比如在环境部署时使用静态Pod实现一部分组件。

而DaemonSet 能够替换由于任何原因(例如节点失败、例行节点维护、内核升级) 而被删除或终止的 Pod。
和daemonset不同,静态pod是不能被apiserver管理的,只能通过文件配置创建静态pod。后面静态pod可能会被弃用。

参考:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/#static-pods

5.statefulset 某台机器挂了,如何恢复?包括Pod、存储等

机器挂了,数据怎么补回来?

因为statefuleset对每个pod都有编号,所以,假如当mongo-0 编号的挂了之后,
那k8s会重新创建一个mongo-0,并绑定之前的PV(PVC在创建的时候是和pod编号一致的,一般使用的共享磁盘,数据不会丢失),同时在mongo中会发生主备切换。mongo-0转换为secondary。

参考:https://blog.51cto.com/newfly/2140004

6.job 批处理,work queue之间任务是否有关联?

任务之间是无关联的。
Job批处理的三种模式:

Job批处理 含义 特点
Job Template Expansion模式 一个Job只处理一个任务 不配置 非并行
Queue with Pod Per Work Item模式 Job会启动N个Pod,每个Pod都对应一个Workitem。 只配置parallelism 并行
Queue with Variable Pod Count模式 也是采用一个任务队列存放Work item,一个Job对象作为消费者去完成这些Work item,但与上面的模式不同,Job启动的Pod数量是可变的 parallelism,completions均配置 并行

备注:队列模式是需要借助消息队列之类的实现任务池。


image.png
image.png

7.多调度器调度?

https://k8smeetup.github.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
支持出默认调度器之外,配置自定义调度器,指定调度器。

8.容忍和污点:容忍时间是啥

toleration 有三种:
NoSchedule
NoExecute
PreferNoScheduled,软性的限制,避免向有瑕疵的节点调度,但不是强制条件

分别配置含义:
如果至少有一个未匹配到的taints的效果是NoSchedule,则Pod不会被调度到Node上
如果仅有一个未匹配到的taints的效果是PreferNoSchedule,则尽量不向这个Node调度
如果至少有一个未匹配到的taints的效果是NoExecute,则Pod不会被调度到Node上,已经在Node上运行的Pod会被驱逐。通常,一个NoExcute添加到节点后,不能容忍的Pod会被立即驱逐,可以通过tolerationSeconds设置延时驱逐。

结论:设置tolerationsSeconds 是在配置NoExecute是设置驱逐容忍时间,如果不设置该时间,则不驱逐。
参考:https://www.cnblogs.com/cocowool/p/taints_and_tolerations.html

taint和tolertion的用途:
其目的是优化 pod 在集群间的调度,这跟节点亲和性类似,只不过它们作用的方式相反,具有 taint 的 node 和 pod 是互斥关系,而具有节点亲和性关系的 node 和 pod 是相吸的。

9.计算资源:实际资源不够但是pod request和够这啥情况?

a. Pod 内存< Reuest, Pod可以正常运行(除非出现操作系统级别内存不足)

b. request

  • b1: Request
  • b2: Request

c. Pod 内存> Limit,操作系统内核会杀掉Pod所有容器的所有进程中内存最多的一个,知道内存不超过limits为止。

10. LimitRange: Default Request、Default Limit container中用途

如果在limitRange中设置这些值,则任何未明确设置这些值的容器都将被分配默认值。

11. Pod如何限制网络带宽?

通过Ingress或者Istio 配置。具体的需要学习网络插件相关内容。

参考:https://www.jianshu.com/p/bfaa566f17fe
http://blog.itpub.net/31543630/viewspace-2213615/

资源紧缺时的Pod驱逐机制:

12. 驱逐阈值如果达到阈值后宽限期内,恢复正常怎么处理?

k8s 软阈值驱逐:如果k8s在持续时间超过宽限期,那么k8s会驱逐该pod。
代码详情:实际是通过定时去检测,是否在超过宽限期了,仍然超过驱逐阈值,那么会被驱逐。

软阈值需要和一个宽限期参数协同工作。当系统资源消耗达到软阈值时,这一状况的持续时间超过了宽限期之前,Kubelet 不会触发任何动作。如果没有定义宽限期,Kubelet 会拒绝启动。
另外还可以定义一个 Pod 结束的宽限期。如果定义了这一宽限期,那么 Kubelet 会使用 pod.Spec.TerminationGracePeriodSeconds 和最大宽限期这两个值之间较小的那个(进行宽限),如果没有指定的话,kubelet 会不留宽限立即杀死 Pod。

参考:https://www.cnblogs.com/luozhiyun/p/13583772.html

13. 节点状态抖动,如果脱离压力状态时间如何缓解抖动?

如上

14. 系统OOM是什么时候出发?在内存不足还是啥?restartPolocy没有配置怎么解决?

结论: kubelet 首先会处理超过阈值的Pod,如果内存激增,会引发OOM killer驱逐

因为 kubelet 默认每 10 秒抓取一次 cAdvisor 的监控数据,所以有可能在 kubelet 驱逐 Pod 回收内存之前发生内存使用量激增的情况,这时就有可能触发内核 OOM killer。这时删除容器的权利就由kubelet 转交到内核 OOM killer 手里,但 kubelet 仍然会起到一定的决定作用,它会根据 Pod 的 QoS 来设置其 oom_score_adj 值。

restart policy:
Pod的重启策略包括:Always、OnFailure和Never,默认值为Always。
Always:只要退出就重启
OnFailure:失败退出时(exit code不为0)才重启
Never:永远不重启

参考:https://www.jianshu.com/p/5dfb650a1290

15. 监控频率?默认值?

Housekeeping interval 参数定义一个时间间隔,Kubelet 每隔这一段就会对驱逐阈值进行评估。
housekeeping-interval:容器检查的时间间隔。

16. 如何解决OOM kiiler观测不到压力?K8s遗留问题

手动修改OOM 评分。
https://www.jianshu.com/p/b46dc7e3c2c5

17.主动驱逐保护和deployment滚动升级的区别?

image.png

作用范围不一样:

  • RollingUpdate 是对于某个任务级,在升级过程中,允许Pod的数量限制。防止服务降级。
  • PodDisruptionBudget 是在集群资源主动驱逐过程中,防止因为节点升级或者集群扩缩等原因,大量Pod驱逐而影响服务降级甚至服务不可用。保证节点对应任务的Pod数量。

总结:RollingUpdate是部署过程中兼顾高可用和更新效率的策略;而PDB是集群管理级别保障某些服务高可用的兜底方案。

  • 一个是应用级别(应用内多Pod),一个是集群级别(集群内多应用多Pod)。

参考:https://www.zhihu.com/question/414846962/answer/1418703755
https://kubernetes.io/zh/docs/concepts/workloads/pods/disruptions/#voluntary-and-involuntary-disruptions

你可能感兴趣的:(Pod 相关问题总结)