聊聊 Kubectl scale 命令的优秀实践

使用 kubectl 管理 Kubernetes 容器平台 k8s 阅读详情

kubectl scale 是帮助我们管理 Kubernetes 部署的众多工具之一。在本文中我们将了解如何使用此工具以及最佳使用实践。

概述

kubectl scale命令通过调整正在运行的容器的数量来立即缩放应用程序。这是增加部署副本数量的最快、最简单的方法,可用于应对服务高峰以及日常维护变更。

在本文中,我们将了解如何使用kubectl scale来​扩展一个简单的Kubernetes Deployment​,同时,我们还将更深入的了解该命令相关的各种参数。最终形成kubectl scale的最佳实践,以及一些用于调整 Kubernetes 副`本数的替代方法。

kubectl scale用例

kubectl scale用于更改Kubernetes deployment, replica set, replication controller和 statefulset 等对象的副本数码。当我们增加副本数时,Kubernetes将启动新的Pod来扩我们的服务。降低副本数将导致 Kubernetes 优雅地终止一些 pod,从而释放集群资源。

我们可以运行kubectl scale来手动调整应用程序的副本数,以响应不断变化的服务容量需求。增加的流量负载可以通过增加副本数来处理,提供更多的应用程序实例来服务用户流量。当业务突发降低的时候,可以减少副本的数量。这有助于通过避免使用不需要的资源来降低成本。

使用 kubectl

kubectl scale最基本的用法是这样的:

$ kubectl scale --replicas=3 deployment/demo-deployment

执行此命令将调整名为demo-deployment 的部署,使其拥有三个正在运行的副本。我们可以通过替换其名称而不是部署来定位不同类型的资源:

# ReplicaSet
$ kubectl scale --replicas=3 rs/demo-replicaset


# ReplicationController
$ kubectl scale --replicas=3 rc/demo-replicationcontroller


# StatefulSet
$ kubectl scale --replicas=3 sts/demo-statefulset

基础缩放

现在我们将看一个使用kubectl scale扩展部署的完整示例。这是一个定义简单部署的 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 1
selector:
  matchLabels:
    app: demo-app
template:
  metadata:
    labels:
      app: demo-app
  spec:
    containers:
      - name: nginx
        image: nginx:latest

将此 YAML 保存到工作目录中的demo-deployment.yaml 。接下来,使用kubectl将部署添加到我们的集群:

$ kubectl apply -f demo-deployment.yaml
deployment.apps/demo-deployment created

现在运行kubectl get pods命令来查看已为部署创建的 pod:

$ kubectl get pods


NAME   READY   STATUS   RESTARTS   AGE
demo-deployment-86897ddbb-jl6r6    1/1   Running    0   33s

只有一个 pod 正在运行。这是意料之中的,因为部署的清单在其spec.replicas字段中声明了一个副本。

单个副本不足以用于生产应用程序。如果托管 pod 的节点出于任何原因离线,我们可能会遇到停机时间。使用kubectl scale增加副本数以提供更多空间:

$ kubectl scale --replicas=5 deployment/demo-deployment
deployment.apps/demo-deployment scaled

重复kubectl get pods命令以确认部署已成功扩容:

$ kubectl get pods
NAME                             READY   STATUS   RESTARTS   AGE
demo-deployment-86897ddbb-66lzc    1/1   Running    0   46s
demo-deployment-86897ddbb-66s9d    1/1   Running    0   46s
demo-deployment-86897ddbb-jl6r6    1/1   Running    0   3m33s
demo-deployment-86897ddbb-sgcjb    1/1   Running    0   46s
demo-deployment-86897ddbb-tgvnw    1/1   Running    0   46s

现在有五个 Pod 正在运行。从AGE列可以看到scale命令保留了原来的 pod 并新增了 4 个。

经过进一步思考,我们可能会决定此应用程序不需要五个副本。它只运行一个静态 NGINX Web 服务器,因此每个用户请求的资源消耗应该很低。再次使用scale命令来降低副本数并避免浪费集群容量:

$ kubectl scale --replicas=3 deployment/demo-deployment
deployment.apps/demo-deployment created

重复kubectl get pods命令:

$ kubectl get pods


NAME                           READY   STATUS   RESTARTS   AGE
demo-deployment-86897ddbb-66lzc    1/1   Terminating    0   3m21s
demo-deployment-86897ddbb-66s9d    1/1   Terminating    0   3m21s
demo-deployment-86897ddbb-jl6r6    1/1   Running    0   6m8s
demo-deployment-86897ddbb-sgcjb    1/1   Running    0   3m21s
demo-deployment-86897ddbb-tgvnw    1/1   Running    0   3m21s

Kubernetes 已将两个正在运行的 pod 标记为终止。这会将正在运行的副本计数减少到请求的三个 pod。选择要驱逐的 pod 会被发送一个SIGTERM(https://www.containiq.com/post/sigterm-signal-15-linux-graceful-termination-exit-code-143) 信号并允许优雅地终止(https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-terminating-with-grace)。停止后,它们将从 pod 列表中删除。

条件缩放

有时我们可能想要扩展资源,但前提是已经有特定数量的副本在运行。这可以避免意外覆盖以前的副本,例如集群中其他用户所做的更改。

在命令中包含--current-replicas标志可以达到效果:

$ kubectl scale --current-replicas=3 --replicas=5 deployment/demo-deployment
deployment.apps/demo-deployment scaled

此示例将演示deployment扩展到五个副本,但前提是当前有三个副本正在运行。--current -replicas值始终完全匹配;我们不能将条件表示为“小于”或“大于”特定计数。

扩展多个资源

当我们提供多个名称作为参数时, kubectl scale​命令可以一次缩放多个资源。每个资源都将缩放到由--replicas标志设置的相同副本计数。

$ kubectl scale --replicas=5 deployment/app deployment/database
deployment.apps/app scaled
deployment.apps/database scaled

此命令将应用程序和数据库deployment扩展到每个五个副本。

我们可以通过提供--all标志来扩展特定类型的每个资源,例如此示例以扩展默认命名空间中的所有部署:

$ kubectl scale --all --replicas=5 --namespace=default deployment
deployment.apps/app scaled
deployment.apps/database scaled

这会选择当前活动命名空间内的每个匹配资源。缩放的对象显示在命令的输出中。

我们可以对使用--selector​标志缩放的对象进行精细控制。这我们可以使用标准选择语法根据对象的标签(https://www.containiq.com/post/using-kubernetes-labels-selectors-annotations) 过滤对象。这是一个使用app-name=demo-app标签扩展所有部署的示例:

$ kubectl scale --replicas=5 --selector=app-name=demo-app deployment
deployment.apps/app scaled
deployment.apps/database scaled

更改超时

--timeout标志设置 Kubectl 在放弃缩放操作之前将等待的时间。默认情况下,没有等待期。该标志接受可读的时间值,例如5m或1h:

$ kubectl scale --replicas=5 --timeout=1m deployment/demo-deployment

如果无法立即完成缩放更改,这可以让我们避免长时间的终端挂起。尽管kubectl scale是一个命令式命令,但在将新 pod 调度到节点时,对缩放的更改有时可能需要几分钟才能完成。

最佳实践

使用kubectl scale通常是扩展工作负载的最快、最可靠的方法。但是,为了安全操作,需要记住一些最佳实践。如下所示:

  • 避免过于频繁地缩放:对副本计数的更改应响应特定事件,例如导致请求运行缓慢或丢包的拥塞。最好分析当前的服务性能,估算一下当前需要满足性能的资源需求,同时也预估一下未来的增长容量。避免过于频繁地扩展应用程序,因为在创建和终止POD时,每个操作都可能导致延迟。
  • 副本缩小到零将会导致服务停止。您可以运行kubectl scale--replicas=0​,这将删除选定对象中的所有容器。通过使用该命令,调整replicas的参数,从而实现向上的扩容。
  • 确保我们选择了正确的对象。没有确认提示,因此请务必注意正在选择的对象。按名称手动选择对象是最安全的方法,可以防止您意外地扩展应用程序的其他部分,从而导致停机或资源浪费。
  • 使用 --current-replicas​来避免意外。使用--current replications​标志可以确保仅当当前计数符合您的期望时,缩放才会更改,从而提高安全性。否则,您可能会无意中覆盖其他用户或Kubernetes autoscaler应用的缩放更改。

kubectl Scale的替代方式

运行kubectl scale​是一项必不可少的操作,它对集群有着直接的影响。您正在指示Kubernetes尽快提供特定数量的副本。如果使用命令式的kubectl create​命令创建对象,这是合乎逻辑的,但是如果最初使用声明性的YAML文件运行kubectl apply​,则这是不合适的,如上所示。运行scale​命令后,集群中的副本数量将不同于YAML的spec.replications​字段中定义的副本数量。更好的做法是修改YAML文件,然后将其重新应用于集群。

首先将spec.replicas字段更改为我们所需的新副本数:

apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-deployment
spec:
replicas: 5
selector:
  matchLabels:
    app: demo-app
template:
  metadata:
    labels:
      app: demo-app
  spec:
    containers:
      - name: nginx
        image: nginx:latest

现在对修改后的文件重复kubectl apply命令:

$ kubectl apply -f demo-deployment.yaml

kubectl​ 将自动区分更改并采取措施将集群的状态演变为文件中声明的状态。这将导致 Pod 被自动创建或终止,因此运行实例的数量再次与spec.replicas字段匹配。

kubectl scale的另一个替代方案是 Kubernetes 对自动缩放的支持。配置此机制允许 Kubernetes 根据 CPU 使用率和网络活动等指标在配置的最小值和最大值之间自动调整副本计数。

最后的总结

kubectl scale命令是扩展 Kubernetes deployments, replica sets, replication controllers以及stateful sets的通用方式。它在每次调用时以一个或多个对象为目标,并对其进行缩放,以便运行指定数量的 pod。

我们可以选择设置条件,因此只有在存在特定数量的现有副本时才会更改比例,从而避免在错误方向上意外调整大小。

同时我们也希望能够遵循一些本文所提到的最佳时实践,从而平稳,可靠的实现资源的扩缩容。

浅谈 SAP HANA 执行引擎的选择,对执行性能的影响问题 摘要:SAP HANA 的性能问题常源于优化器在不同场景下为同一条 SQL 选择不同的执行引擎(如 join engine、OLAP engine、HEX engine 等),导致执行效率差异。本文介绍了如何通过 USE_<engine>_PLAN 和 NO_USE_<engine>_PLAN 的 Hint 显式控制引擎选择,并分析了优化器决策偏差的原因(如统计信息误差、引擎能力边界、版本演进等)。同时提供了实战场景中的优化建议,包括使用 PlanViz 工具分析、计划缓存绑定等工程 阅读详情

相关推荐

FPGA八股文(2)——笔试的FPGA问题汇总(持续更新)

常见FPGA笔试题的概念总结

居安士的博客 8912

kubectl系列(六)-kubectl scale 命令最佳实践

kubectl scale命令是扩展 Kubernetes deployments, replica sets, replication controllers以及stateful sets的通用方式。它在每次调用时以一个或多个对象为目标,并对其进行缩放,以便运行指定数量的 pod。可以选择设置条件,因此只有在存在特定数量的现有副本时才会更改比例,从而避免在错误方向上意外调整大小。同时也希望能够遵循一些本文所提到的最佳时实践,从而平稳,可靠的实现资源的扩缩容。

sre救赎之路 3127

遥感新手别纠结!实测ENVI 5.3、5.6、6.0三个免费版,教你混搭安装避坑

本文为遥感新手提供ENVI 5.3、5.6、6.0三个免费版的实测对比与混搭安装指南,帮助用户构建零成本高效工作流。详细解析各版本功能差异、共存安装技巧及常见问题解决方案,特别适合课程作业、毕业论文分析和遥感入门练习。

weixin_30819085的博客 479

kubectl scale命令扩展或缩减正在运行的 Pod 的数量详解

kubectl scale 是 Kubernetes 提供的一个命令行工具,用于调整 Pod 的副本数量。它可以用来扩展或缩减正在运行的 Pod 的数量。

多年后端开发经验,专注于Golang和PHP语言的开发 3796

Framelet Transform

需要定义 Framelet 的基函数。Framelet 基函数可以是通过组合不同的小波函数生成的。# 这里可以定义 Framelet 基函数,例如一些小波基函数的线性组合# 这是一个示例函数,具体实现需要根据具体的 Framelet 设计# 示例:正弦函数。

qq_33009429的博客 1212

STM32CUBEMX 使用教程5 — DMA配置 & 串口结合DMA实现数据搬运

DMA(Direct Memory Access),直接存储器访问(或数据搬运),是STM32中很实用的一个外设。DMA 传输数据方式不需要 CPU 参与控制传输,也不用中断处理的方式进行数据搬运处理,纯粹通过硬件为 RAM 与 I/O 设备之间开辟一条直接传送数据的通路,使 CPU 的效率大大提高。

weixin_43866583的博客 1500

容器编排技术 -- Kubernetes kubectl scale 命令详解

容器编排技术 -- Kubernetes kubectl scale 命令详解 1kubectl scale 2语法 3示例 4Flags kubectl scale 扩容或缩容 Deployment、ReplicaSet、Replication Controller或 Job 中Pod数量。 scale也可以指定多个前提条件,如:当前副本数量或 --resource-v...

YunWisdom 7347

Android音频子系统分析-car_audio_configuration.xml

先附上一个例子,再逐一解释。概括来说,该文件描述了车里有哪些区域,每个区域划分了多少组,每个组包含了哪些设备,每个设备接收哪些类型的音频流。

不定时记录分享一些有用没用的东西 989

Kubectl scale 命令最佳实践

新钛云服已累计为您分享661篇技术干货kubectl scale 是帮助我们管理 Kubernetes 部署的众多工具之一。在本文中我们将了解如何使用此工具以及最佳使用实践。概述kubectl scale命令通过调整正在运行的容器的数量来立即缩放应用程序。这是增加部署副本数量的最快、最简单的方法,可用于应对服务高峰以及日常维护变更。在本文中,我们将了解如何使用kubect...

NewTyun的博客 4893

【基于CKF的IMM】CV和CT两个模型下的IMM,二维,滤波使用CKF(容积卡尔曼滤波),附完整的matlab代码

该文章摘要: 本文提出了一种基于交互多模型(IMM)和容积卡尔曼滤波(CKF)的融合定位算法,用于解决目标在直线运动和转弯机动之间的模型切换问题。通过MATLAB仿真实现了IMM-CKF算法,并与单一的CV-CKF(匀速模型)和CT-CKF(匀角速转弯模型)方法进行对比。实验结果表明,在包含直线段和转弯段的复合轨迹跟踪中,IMM-CKF方法能够自适应调整模型权重,显著提高了定位精度。轨迹跟踪图、位置/速度误差对比图以及模型概率曲线直观展示了IMM算法的优势。文章提供了完整的MATLAB实现代码,可用于目标跟

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 615

基于Simulink的无线充电系统LCC补偿网络建模与控制

本文详细介绍了基于Simulink的无线充电系统LCC补偿网络建模与控制方法。首先分析了无线充电系统面临的核心挑战,提出LCC补偿网络解决方案,阐述了其恒流输出和输入阻抗解耦原理。通过Simulink分步演示了系统建模过程,包括松耦合变压器、LCC+LC补偿网络、功率变换级搭建以及频率跟踪控制实现。仿真结果表明,LCC补偿系统在气隙变化和负载跳变下能保持输出电压稳定(波动±3%),效率达89%。文章还总结了工程实现要点,并探讨了动态充电、多负载系统等扩展应用。该教程为开发高效智能的无线充电系统提供了实用指导

amy_mhd的博客 63

kubectl 命令详解(十四):scale

kubectl scale 命令详解。

youzhouliu的博客 4949

Simulink仿真模块-Signal Generator

Signal Generator:生成各种波形 所在的位置库为:Simulink / Sources 模型为: 说明 Signal Generator模块可以产生四种不同波形: 正弦波 方波 锯齿波 随机 可以使用 hertz 或 rad/sec 为单位表示信号参数。双击模型可以选择需要生成的波形,如图所示: 使用默认参数值,可以获得下列波形之一: 波形 波形输出 正弦波 ...

jk_101的博客 2655

【Kubernetes】云原生小技巧 2 之 kubectl scale 命令

这是一篇关于如何使用 kubectl scale 命令的文章!

mm1234556的博客 628

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

kubectl常用命令

1 namespace 查看所有namespace:kubectl get namespace 查看默认的配置:kubectl config view 1 get :展示资源 获取集群里的各种资源信息,某些资源未指定namespace时,默认指定default 常见用法: kubectl get pods/rc/svc/deployment/namespace 获取po...

海贼懒懒 7万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

k8s入门基本操作

1、部署一个Tomcat kubectl create deployment tomcat6 --image=tomcat:6.0.53-jre8 [root@k8s-node1 k8s]# kubectl get all NAME READY STATUS RESTARTS AGE pod/tomcat6-5f7ccf4cb9-tft59 1/1 Running 0 77m NAME

赞的心路历程 914

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Kubernetes第二弹 - kubectl 命令

一、概述 kubectl 是 Kubernetes 集群的命令行工具, 通过 kubectl 能够对集群本身进行管理, 并能够在集群上进行容器化应用的安装部署。 二、kubectl 命令的语法 kubectl [command] [TYPE] [NAME] [flags] (1)comand:指定要对资源执行的操作,例如 create、get、describe 和 delete # create # 创建一个名字为web,镜像是ginx的部署(又名deploy:是k8s中的一种资源,后面会讲到) [roo

u011830181的博客 560

kubernetes Deployment 详解 更新/回滚/缩放/暂停/恢复部署操作

Deployments 更新/回滚官方 一、创建 Deployment对象 1、创建Deployment Pod vim nginx-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx templa

qq_37377136的博客 1万+

Kubernetes deployment 常用操作命

K8S deployment 常用命令 创建 kubectl create -f https://kubernetes.io/docs/user-guide/nginx-deployment.yaml --record 将kubectl的 --record 的 flag 设置为 true可以在 annotation 中记录当前命令创建或者升级了该资源。这在未来会很有用,例如,查看在每个 Depl...

xiliangMa的博客 3435

k8s入门之Deployment(五)

Deployment控制器通常用来部署无状态的应用,这样可以在任意的节点上扩容或者删除,而不用考虑数据的问题,它可以管理pod对象。一、多副本1.使用命令行方式创建Deployment在dev名称空间下创建3个副本的nginx podkubectl create deployment nginx --image=nginx --replicas=3 -n dev监控创建进度kubectl get deploy -n dev -w可以看到副本可用数量从0变到32.查看Deployment的描述kubectl

霸天虎的专栏 4554

Kubernetes — 了解k8s中的deployment部署单元

一个 Deployment 为 Pod 和 ReplicaSet 提供声明式的更新能力。Kubernetes中的Deployment是一种资源对象,用于定义和管理Pod的副本集。它提供了一种声明式的方式来创建、更新和删除Pod副本。Deployment可以确保指定数量的Pod副本在集群中运行,并且可以自动处理Pod的扩容和缩容。Deployment通过使用ReplicaSet(RS)来实现Pod的副本控制。RS是一个控制器,它确保指定数量的Pod副本在集群中运行,并且可以根据需要进行扩展或缩减。

qq_38658567的博客 2160

K8S-kubectl scale(静态)扩缩容pod,K8S-kubectl autoscale(动态)扩缩容pod,K8S的HorizontalPodAutoscaler(HPA)机制自动扩容缩容

1、静态调整pod方式 1.1 通过kubectl scale 命令扩缩pod 1.2 使用yml文件扩缩容pod 2、HPA自动扩容 2.1 通过kubectl autoscale命令自动扩缩容pod(不推荐) 2.2 通过yml文件自动扩缩容pod(推荐配置)

DLWH_HWLD的博客 1万+

K8s知识点梳理

1.k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署, 应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器 挂了,可以自动将这个服务器上的服务调度到另一个主机上进行运行,无需进行人工干涉。2.k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机, 从开发环境到测试环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。3. k8s的全生命周期管理 在k8s进行管理应用的时候..

Pastthewind的博客 723

k8s控制器之Deployment第五弹之伸缩Deployment

伸缩(Scaling) Deployment,是指改变 Deployment 中 Pod 的副本数量,以应对实际业务流量的变化。

linus.lin的博客 1815

Kubernetes基础(八)-工作负载

工作负载是在kubernetes上运行的应用程序。

sre救赎之路 4878
上一篇: 互联网公司都怎么实现分页的,拿 MySQL 使劲Limit?
下一篇: 字节跳动 Flink 状态查询实践与优化
程序员职业指南
博客等级 码龄4年 2138粉丝 960原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值