个人名片

🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢?
码农阿豪系列专栏导航 面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️ Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻 Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡 全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀
在现代云计算环境中,优化资源使用和成本是关键。Kubernetes作为一个强大的容器编排平台,提供了丰富的功能来管理和扩展应用程序。尤其是,当我们希望在保证业务连续性的同时,降低成本并优化资源利用时,抢占式(或称竞价)Pod的使用就显得尤为重要。在本文中,我们将探讨如何在Kubernetes环境中实现抢占式Pod与固定Pod的弹性伸缩,并提供详细的步骤和配置示例。
Kubernetes通过部署(Deployment)和水平Pod自动扩展(HPA)等功能,允许我们根据实际的工作负载动态地调整Pod的数量。这对于处理不断变化的流量和业务需求至关重要。然而,在一些情况下,我们希望将业务流量分配到不同类型的节点上,以实现成本节约和资源优化。例如,腾讯云的抢占式(竞价)实例提供了显著的成本优势,但其特性是这些实例可能会被回收,这就要求我们对这些Pod进行特殊的处理和配置。
在本文中,我们的Kubernetes环境包含以下主要组件:
我们的目标是:
首先,我们需要确保两个现有的Deployment(主查日志和扩缩容)的Pod数量是固定的。这样做可以确保业务的稳定性,而不受弹性伸缩策略的影响。
主查日志 Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment-main
spec:
replicas: 10 # 固定为 10
selector:
matchLabels:
app: test-deployment
template:
metadata:
labels:
app: test-deployment
spec:
containers:
- name: main
image: advertise.tencentcloudcr.com/advertise/api-test:latest
resources:
requests:
cpu: "4"
memory: 8Gi
limits:
cpu: "4"
memory: 8Gi扩缩容 Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment-scale
spec:
replicas: 10 # 固定为 10
selector:
matchLabels:
app: test-deployment
template:
metadata:
labels:
app: test-deployment
spec:
containers:
- name: main
image: advertise.tencentcloudcr.com/advertise/api-index:latest
resources:
requests:
cpu: "4"
memory: 8Gi
limits:
cpu: "4"
memory: 8Gi接下来,我们创建一个新的Deployment,运行相同的业务代码,但配置它使用抢占式节点池。这可以通过在Pod模板中添加节点选择器(nodeSelector)来实现。
抢占式 Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-deployment-preemptible
spec:
replicas: 0 # 初始时不创建任何 Pod
selector:
matchLabels:
app: test-deployment
template:
metadata:
labels:
app: test-deployment
spec:
nodeSelector:
type: preemptible # 确保使用抢占式节点
containers:
- name: main
image: advertise.tencentcloudcr.com/advertise/api-test:latest
resources:
requests:
cpu: "4"
memory: 8Gi
limits:
cpu: "4"
memory: 8Gi为了实现弹性伸缩,我们需要配置水平Pod自动扩展(HPA)。HPA可以依据CPU使用率等指标动态调整Pod的数量。
HPA 配置:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: test-deployment-preemptible-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: test-deployment-preemptible
minReplicas: 0
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # 设置 CPU 使用率超过 50% 时扩容所有的Deployment共享相同的CPU指标,是通过相同的selector标签来实现的。由于selector标签一致,Kubernetes会将这些Pod视为同一组,从而可以使用相同的CPU指标。
在本文中,我们探讨了如何在Kubernetes环境中实现抢占式Pod与固定Pod的弹性伸缩。通过固定现有两个Deployment的Pod数量,新建一个使用抢占式Pod的Deployment,并配置水平Pod自动扩展(HPA),我们可以在保证业务连续性的同时,利用抢占式节点池实现成本优化。
这种配置不仅能帮助我们降低成本,还能确保在业务需求变化时,能够动态调整资源使用,提高资源利用效率。在实际应用中,务必根据具体的业务需求和环境配置进行调整和优化,确保系统的稳定性和性能。
希望这篇指南对你在Kubernetes环境中管理和优化Pod的使用有所帮助。如果有任何问题或需要进一步的帮助,请随时联系我。