K8s常见问题(5)

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能够灵活的使用不同类型的指

打赏链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值