1,Kubernetes不同更新方式的优缺点和适用场景
| 核心思想 | 优点 | 缺点 | 适用场景 |
| 在现有集群的节点上直接更新Kubernetes组件的版本 | 资源利用率高:无需新节点,节省资源。操作相对标准:流程有官方文档和工具支持。耗时较短:无需数据大规模迁移 |
回滚复杂:若升级失败,回滚到旧版本可能较困难。存在中断风险;升级过程中可能引起服务短暂中断。 版本跨度限制:通常不支持跨多个大版本升级,需要逐个大版本升级 | 版本跨度不大的常规升级;集群内规模不大,希望快速完成的场景 |
| 先搭建一个全新版本的目标集群,然后将原有集群的应用和数据迁移过去 | 风险隔离:新集群稳定后再切换流量,对业务影响可控。回滚简单:若新集群有问题,只需将流量切回就集群即可。无版本跨度限制:可以一次性升级到任何目标版本 | 资源成本高:需要额外准备一套集群资源。操作复杂耗时:涉及数据备份,应用迁移,流量切换等多个复杂环节。对技术能力要求高,需要熟悉迁移工具和流程 | 大版本跨越升级;现有集群架构陈旧,希望借此机会优化;对业务连续性要求极高,能接受迁移成本 |
2,启动探针的典型使用场景
启动探针主要解决以下问题:
1,启动时间长的应用:对于Java应用,大型单体应用等启动时间可能超过30秒的应用,如果使用存活探针,可能会因为探针检查失败导致容器被反复杀死重启,形成”crashloopbackoff“状态。启动探针可以设置较长的初始延迟和失败阈值,给应用足够的启动时间
2,避免存活探针误杀:在应用启动过程中,存活探针可能会因为应用尚未完全初始化而失败,导致容器被误杀。启动探针可以保护应用在启动阶段不被存活探针干扰
3,冷启动优化:对于需要加载大量数据或进行复杂初始化的应用,启动探针可以确保应用完全就绪后在开始接受流量
3,pod的unknown状态和terminating状态
| unknown | 无法从pod所在节点的kubelet获取其状态信息 | 这通常意味着节点与控制平面之间的通信出现了问题,可能是节点宕机,网络分区或kubelet进程一场。此时应检查节点状态 |
| terminating | 当pod被删除时,它会进入此状态。这并非标准phase,而是pod在收到删除指令后,完全停止前的一个过渡期 | 若长时间处于此状态,可能原因包括:容器未正确处理SIGTERM信号,PreStop Hook执行时间过长或失败,或存在Finalizers等待清理操作完成。此时可检查Pod详情和节点kubelet记录 |
4,pod内如何实现资源共享和通信?
网络共享:pod内的所有容器共享一个网络命名空间,这意味着它们拥有相同的IP地址和端口空间。因此,容器之间可以直接通过localhost以及对方监听的端口进行通信
存储共享:pod可以定义一个或多个共享存储卷。这些卷可以被挂载到pod内所有容器的文件系统中,从而让它们能够共享和交换数据
简单来说,pod内的容器通信非常直接,无需通过Service或Endpoint,这些机制主要用于pod与pod之间的通信
5,resourcequota和limitrange的差别
resourcequota作用于命名空间级别,其核心目标是防止一个命名空间消耗过多的集群资源,确保不同团队之间的资源公平性。它为整个命名空间设置了资源使用的“天花板“
而limitrange则作用于命名空间内的pod或容器级别,其核心目标是规范单个pod或容器的资源使用行为,防止因个别应用配置不当而影响同一命名空间下的其他应用。它为单个应用设置了资源使用的”交通规则"。
6,secret的不足
base64只是编码转换,任何人都可以轻松解码还原原始内容
使用echo <base64-string> | base64 -d即可解码
secret数据以明文形式存储在etcd中
攻击者获取etcd访问权限即可读取所有secret
如果RBAC配置不当,用户或服务账户可能拥有过高的Secret访问权限
默认情况下,拥有命名空间”get"权限的用户可以读取该命名空间的所有secret
容器内挂载的secret文件可能被应用日志记录
环境变量中的secret可能被进程列表或调试工具暴露
secret更新后,已运行的pod不会自动重新加载,需要重启才能获取新值
8,污点和容忍度的核心功能
| 概念 | 作用对象 | 核心功能 |
| 污点 | 节点 | 给节点打上一个”标记“,声明该节点存在某些特定”问题“或”特性“。它会阻止不能容忍这些污点的被调度上来,甚至去注意运行的pod |
| 接受度 | pod | 给pod配置一种”豁免“属性,表示这个pod能够”忍受“某些节点的污点。它允许pod被调度到带有匹配污点的节点上 |
9,污点的几种类型
| 效应 | 对新建pod的影响 | 对已运行pod的影响 | 运用场景 |
| NoSchedule | 不能被调度到该节点 | 不受影响,继续运行 | 节点具有特殊硬件,或专用于特定租户 |
| PreferNoSchedule | 尽量避免调度到此节点,非强制 | 不受影响,继续运行 | 软性限制,希望优先使用其他节点 |
| NoExecute | 不能被调度到该节点 | 会被驱逐 | 节点维护,节点故障 |
10,init container和应用容器的差别
目的不同:init container是一次性任务,运行到完成及终止;应用容器是长时服务,旨在持续运行
探针支持:init ocntainer不支持readinessprobe和livenessprobe等健康检查探针,因为它们的健康状态简单的尤其退出代码决定。应用容器通常需要配置这些探针来管理其生命周期
镜像分离:init container可以使用包含实用工具的景象,而无需将这些工具打包进通常追求最小化的应用容器镜像,这有助于提升安全性和减小应用镜像体积
init container资源调度策略
Kubernetes调度器再决定将pod放到哪个节点上时,考虑的pod资源请求量是一个“有效值”。这个有效值是以下两者中的较大者:
所有应用容器的资源请求之和
所有init container中单个最大的资源请求。这种机制确保了节点上有足够资源来运行任何一个init container,即使应用容器所需资源更少
幂等性要求
由于pod的重启会导致所有init container重新执行,因此其操作必须是幂等的。这意味着多次执行同一操作应产生与依次执行相同的效果。例如,如果init container是下载文件,需要确保重复下载不会导致问题
11,HPA Controller的作用
HPA Controller作为一个决策中心,并不直接采集指标,而是通过Kubernetes的API聚合层来获取数据。这种设计解耦了指标的收集与消费,使得HPA能够灵活的使用不同类型的指
打赏链接:

&spm=1001.2101.3001.5002&articleId=157810911&d=1&t=3&u=43e00d9426a64da1a2b3a97e2f456653)
3881

被折叠的 条评论
为什么被折叠?



