拓冰建站拓冰建站
首页 / 资讯中心 / 正文

refine 项目实战:Kubernetes kubectl scale 完全指南——从手动扩缩容到 HPA 自动弹性

refine 项目实战Kubernetes kubectl scale 完全指南——从手动扩缩容到 HPA 自动弹性【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refine本指南以 refine 开源仓库中 2023-12-25-kubectl-scale.md 为核心内容系统讲解kubectl scale的语法、条件缩放、多资源缩放等高级用法并对照仓库内真实的 Helm Chartdeployment.yaml、hpa.yaml、values.yaml说明 Kubernetes 中 replicas 与 HPA 的落地形态。读完本文你将掌握如何手动调整 Deployment/StatefulSet 等资源的副本数、如何在缩放前校验当前副本数、如何一条命令同时缩放多个资源以及如何用 Horizontal Pod AutoscalerHPA实现自动化弹性伸缩并能在生产环境与开发环境中做出正确的手动/自动缩放决策。一、理解 Kubernetes 工作负载kubectl scale 的作用对象在 Kubernetes 中我们会遇到多种类型的工作负载Workloads每一种都有其独特用途。kubectl scale之所以强大正是因为它能统一作用于这些工作负载之上按需调整运行实例的数量。Deployments部署可以把 Deployment 想象成应用实例的经理它确保指定数量的实例即 Pod在任何时刻都处于运行状态。通过kubectl scale你可以告诉 Kubernetes 增加或减少某个 Deployment 中的 Pod 数量。StatefulSets有状态副本集StatefulSet 像带记忆的 Deployment常用于需要保存状态的应用例如数据库。你也可以用kubectl scale缩放 StatefulSet在调整副本数的同时保持每个实例的稳定网络标识unique identities和持久化存储。仓库内另一篇文档 2024-01-04-k8s-statefulset.md 也验证了这一点kubectl scale statefulsets [statefulset-name] --replicas[new-replica-count]即可调整 StatefulSet 的副本数。ReplicaSets副本集ReplicaSet 是 Deployment 背后的执行团队负责确保正确数量的 Pod 副本在运行。虽然它通常由 Deployment 托管但在需要时你也可以直接用kubectl scale缩放 ReplicaSet。DaemonSets守护进程集DaemonSet 确保集群中的每个节点都运行一个 Pod 副本就像每台办公室电脑都安装了相同的工具软件。缩放 DaemonSet 的方式略有不同它不能通过改变 Pod 数量来扩容通常需要向集群添加或移除节点来实现。理解这些工作负载以及如何高效缩放它们是 Kubernetes 运维的关键能力——它既能保证应用在需要时获得资源也能避免在空闲期浪费资源。无论是应对高峰流量还是低峰期收缩kubectl scale都赋予了你灵活管理应用需求的自由度。二、基础缩放kubectl scale 的语法与实战语法与用法缩放资源的基本语法如下kubectl scale --replicasnumber resource-type/resource-name该命令允许你为某个特定资源如 Deployment 或 ReplicaSet指定期望的副本数量。其中--replicasnumber期望的副本数必填resource-type/resource-name资源类型与名称例如deployment/printing、statefulset/demo-statefulset、replicaset/my-rs。实战示例假设集群中有一个名为printing的 Deployment当前只有 1 个副本。先用kubectl get deployment printing查看当前状态重点关注输出中的AVAILABLE列它显示当前可对外提供服务的副本数目前为 1。kubectl get deployment printing现在将其扩容到 3 个副本kubectl scale --replicas3 deployment/printing命令执行后printingDeployment 的副本数即变为 3。你可以再次运行kubectl get deployment printing确认AVAILABLE列变为 3并配合kubectl get pods观察新增 Pod 的创建过程。专家提示不要把 Replica 与 Pod 混为一谈Replica 是期望运行的 Pod 数量desired state而 Pod 是实际运行的应用实例current state。一个声明 3 个副本的 Deployment如果某个 Pod 不健康实际可能只有 2 个 Pod 在运行——这是 Kubernetes 自我修复机制的正常表现。使用--dry-run标志可以只模拟缩放命令而不真正应用变更非常适合在正式操作前确认命令语法、访问权限以及 Deployment 名称是否正确。三、高级缩放选项A. 条件缩放Conditional Scaling条件缩放允许你基于当前状态进行缩放逻辑类似于如果现在有 X 个副本就把它变成 Y 个。kubectl scale --current-replicasnumber --replicasnew-number resource注意这里的resource可以指前文提到的任意工作负载类型例如 deployment、replicaset、statefulset 等。我们来实际执行一次假设当前deployment/printing是 3 个副本执行以下命令尝试扩容到 5 个kubectl scale --current-replicas3 --replicas5 deployment/printing从直觉上看这条命令应该把副本数增加到 5对吧但关键在于如果当前实际副本数与你指定的--current-replicas不一致条件缩放会直接失败。这正是条件缩放与普通非条件缩放的本质区别——普通缩放命令无论当前副本数是多少都会直接把副本数改成期望值而条件缩放会先校验当前副本数是否与声明一致不一致则拒绝执行。因此在失败后应先用kubectl get deployment printing核实真实副本数再以正确的--current-replicas重试。条件缩放的价值在于避免并发场景下的竞态覆盖——例如其他操作者或自动缩放器刚刚改过副本数你基于过期信息的无条件覆盖可能破坏集群期望状态。B. 同时缩放多个资源有时你需要同时缩放多个资源例如一次缩放 API 服务和前端两个 Deploymentkubectl scale --replicasnumber deployment/deployment1 deployment/deployment2示例将hello-app和printing两个 Deployment 同时缩放到 3 个副本kubectl scale --replicas3 deployment/hello-app deployment/printing可以先用kubectl get deployments确认你的 Deployment 名称。执行后两个 Deployment 都会被成功缩放。专家提示同一条命令可以缩放超过两个 Deployment只需按上述格式继续追加资源即可。部分失败行为如果同时指定两个 Deployment其中一个是错误名称那么名称正确的 Deployment 会成功缩放而名称错误的那一个会失败并输出对应的错误信息。这一行为意味着多资源缩放是逐资源独立执行的并不会因为一个失败而回滚其他成功项——线上操作时需要留意错误输出。四、自动化缩放 vs. 手动缩放Horizontal Pod AutoscalerHPA自动化缩放的基石Kubernetes 中的自动化缩放主要由 Horizontal Pod AutoscalerHPA承担。HPA 会基于观测到的 CPU 利用率或其他自定义指标自动调整 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量。它就像一个智能助手时刻盯着应用负载并在无需人工干预的情况下调整资源。创建 HPA 的命令kubectl autoscale deployment [deployment-name] --min[min-pods] --max[max-pods] --cpu-percent[target-percentage]该命令告诉 Kubernetes把 Pod 数量保持在最小值和最大值之间并根据 CPU 使用率进行伸缩。示例kubectl autoscale deployment hello-app --min2 --max5 --cpu-percent80在上面的例子中80% 是部署内所有 Pod 的目标平均 CPU 利用率。当平均 CPU 利用率超过该阈值时Kubernetes 会添加 Pod不超过 max 值 5当平均 CPU 利用率低于该阈值时Kubernetes 会移除 Pod不少于 min 值 2。专家提示本文讨论的缩放范围仅限于水平缩放横向增加/减少实例数量。Kubernetes 同样支持垂直缩放——就像 HPA 一样也存在 VPAVertical Pod Autoscaler它调整的是单个 Pod 的 CPU/内存配额而非副本数。根据需求你也可以使用 VPA这个话题可以另文专述。从仓库源码看 HPA 与 replicas 的真实形态在本仓库的documentation/k8s/refine-documentation目录下就有一套真实的 Helm Chart其中的 deployment.yaml 与 hpa.yaml 恰好演示了手动副本数与HPA如何在同一套部署中协同在 deployment.yaml 中副本数是这样渲染的spec: {{- if not .Values.autoscaling.enabled }} replicas: {{ .Values.replicaCount }} {{- end }}也就是说当自动缩放未启用autoscaling.enabledfalse时Deployment 的副本数直接来自values.yaml中的replicaCount此时你手动执行kubectl scale --replicasn deployment/name才能生效而一旦启用了 HPA模板就不再渲染静态replicas字段副本数交由 HPA 动态控制——这也解释了为什么 HPA 生效后手动kubectl scale的调整很快会被 HPA 拉回到它计算出的期望值。对应的 hpa.yaml 展示了 HPA 声明式配置的完整形态{{- if .Values.autoscaling.enabled }} apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: name: {{ include refine-documentation.fullname . }} spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: {{ include refine-documentation.fullname . }} minReplicas: {{ .Values.autoscaling.minReplicas }} maxReplicas: {{ .Values.autoscaling.maxReplicas }} metrics: - type: Resource resource: name: cpu targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} {{- end }}而 values.yaml 中给出的默认值与kubectl autoscale命令的参数一一对应autoscaling: enabled: false minReplicas: 1 maxReplicas: 100 targetCPUUtilizationPercentage: 80这组默认配置与本文示例kubectl autoscale deployment hello-app --min2 --max5 --cpu-percent80的参数完全同构minReplicas对应--minmaxReplicas对应--maxtargetCPUUtilizationPercentage对应--cpu-percent。由此可见无论是命令式kubectl autoscale还是声明式Helm/HPA YAMLHPA 的核心三要素都是最小副本数、最大副本数、目标 CPU 利用率阈值此外该 Chart 还预留了内存指标targetMemoryUtilizationPercentage的扩展位。默认enabled: false也意味着团队默认采用手动缩放kubectl scale需要自动化弹性时才显式开启 HPA——这与本文手动 vs 自动的决策框架完全一致。何时使用手动缩放特定事件驱动的场景如果你预知将出现流量高峰如促销活动或大型线上事件可以主动提前扩容避免 HPA 的反应式伸缩存在延迟。测试与开发环境在开发环境中你可能需要在不同负载下测试应用行为例如进行负载测试load testing、压测等手动缩放可以精确控制副本数以制造目标负载条件。手动 vs 自动的取舍手动缩放优点是确定性强、可预期、操作即时缺点是依赖人工判断与响应速度且容易在高峰过后忘记缩回导致资源浪费。自动缩放HPA优点是无人值守、随负载自适应能同时避免资源不足与资源浪费缺点是需要合理的指标配置默认基于 CPU复杂场景需自定义指标且扩容存在短暂延迟不适合瞬间暴增型流量。五、总结本文围绕kubectl scale这条 Kubernetes 日常运维命令进行了系统性梳理工作负载认知Deployment、StatefulSet、ReplicaSet 都可以直接通过--replicas调整副本数而 DaemonSet 的缩放通常依赖节点数量变化。基础缩放掌握kubectl scale --replicasnumber resource-type/resource-name语法并牢记 Replica期望值与 Pod实际值的差异善用--dry-run降低操作风险。高级用法条件缩放--current-replicas能在并发环境下防止竞态覆盖多资源缩放一次指定多个 resource能批量操作但要留意部分成功、部分失败的输出行为。自动化弹性kubectl autoscale deployment name --minn --maxn --cpu-percentn创建 HPA将副本数托管给控制器声明式场景下可参考仓库 hpa.yaml 与 values.yaml 的配置方式。决策框架事件驱动与测试环境优先手动缩放生产环境的平稳负载优先交给 HPA 自动化二者也可以结合——用 HPA 兜底、用预扩容应对已知高峰。掌握手动缩放与自动缩放的完整工具箱你就能在 Kubernetes 中做到按需供给资源既保障应用在高峰期的可用性又在低谷期控制成本——这正是云原生资源管理的核心能力。【免费下载链接】refineA React Framework for building internal tools, admin panels, dashboards B2B apps with unmatched flexibility.项目地址: https://gitcode.com/GitHub_Trending/re/refine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门