K8s生产中如何为不同的业务做资源配置和服务质量保证呢?
对于关键基础组件,可设置等值的 Request 和 Limit 以确保资源稳定性和服务质量。对于资源使用波动的服务,Java 应用,应配置 Request 为稳态需求,Limit 为启动峰值需求,以处理瞬时资源消耗。
在生产环境中,强烈建议为每一个工作负载配置资源限制
工作负载配置资源 Request 和 Limit 有三种情况,分别对应着三种服务质量。
未配置资源配额:服务质量为 BestEffort,意思是“尽力而为”,服务质量中优先级最低,当产生驱逐行为时候,kubernetes 首先驱逐这一类型的 Pod
Request 小于 Limit:服务质量为 Burstable,意思是“突发”,优先级介于 BestEffort 和 Guaranteed 之间
Request 等于 Limit:服务质量为 Guaranteed,字面意思是“保证”,优先级最高
k8s故障自愈能解决哪些问题?
1、当业务进程意外中断、节点产生故障时,系统可以快速识别,自动重启并恢复服务
2、自愈能够自动转移故障,也就是让业务不健康的节点不接收流量,保证用户体验
要实现Kubernetes(k8s)的故障自愈功能,通过以下方式配置:
- 定义健康检查
Kubernetes通过健康检查来判断容器或Pod的状态,常见的健康检查包括:
Liveness Probe(存活探针):用于判断容器是否存活,如果探针失败,则Kubernetes会重启该容器。
Readiness Probe(就绪探针):用于判断容器是否准备好接收流量,如果探针失败,则Kubernetes会暂停将流量发送到该容器。
探针可以通过在Pod配置文件(如Deployment或StatefulSet)中定义来实现。例如:
apiVersion: v1
kind: Pod
metadata:
name: test
spec:
containers:
name: test
image: test:v1.0
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 3
periodSeconds: 5
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe和readinessProbe分别配置了HTTP GET请求来检查容器的健康状态。
2. 使用控制器和自动重启
Kubernetes中的控制器(Deployment、StatefulSet)负责管理Pod的生命周期,包括自动重启故障的Pod。如果Pod崩溃或节点故障,控制器会负责重新创建Pod,确保应用程序的高可用性。
- 节点自动恢复
Kubernetes具有自动故障转移的能力,即当节点或Pod故障时,Kubernetes可以自动将应用程序的流量转移到健康的节点或Pod上,从而保证服务的连续性和可用性。这需要适当的配置和使用高可用性的组件,如多个副本的Deployment或StatefulSet。