写点什么

通过一个实际例子理解 Kubernetes 里 pod 的自动 scale - 水平自动伸缩

作者:Jerry Wang
  • 2021 年 12 月 30 日
  • 本文字数:1711 字

    阅读完需:约 6 分钟

通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩

kubectl scale 命令用于程序在负载加重或缩小时进行 pod 扩容或缩小,我们通过一些实际例子来观察 scale 命令到底能达到什么效果。


命令行创建一个 deployment:


kubectl run jerry-nginx --image=nginx:1.12.2
复制代码



kubectl get deploy 查看刚刚创建的 deployment:



自动被 deployment 创建的 pod:


kubectl get pod:



使用下列命令查看生成的 deployment 明细:


kubectl get deployment jerry-nginx -o yaml
复制代码




apiVersion: extensions/v1beta1kind: Deploymentmetadata:annotations:deployment.kubernetes.io/revision: "1"creationTimestamp: 2018-11-29T08:29:06Zgeneration: 1labels:run: jerry-nginxname: jerry-nginxnamespace: part-0110resourceVersion: "7203445"selfLink: /apis/extensions/v1beta1/namespaces/part-0110/deployments/jerry-nginxuid: d5c64f72-f3b0-11e8-b308-a20cb743f347spec:progressDeadlineSeconds: 600replicas: 1revisionHistoryLimit: 2selector:matchLabels:run: jerry-nginxstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:run: jerry-nginxspec:containers:- image: nginx:1.12.2imagePullPolicy: IfNotPresentname: jerry-nginxresources: {}terminationMessagePath: /dev/termination-logterminationMessagePolicy: FilednsPolicy: ClusterFirstrestartPolicy: AlwaysschedulerName: default-schedulersecurityContext: {}terminationGracePeriodSeconds: 30status:availableReplicas: 1conditions:


  • lastTransitionTime: 2018-11-29T08:29:07ZlastUpdateTime: 2018-11-29T08:29:07Zmessage: Deployment has minimum availability.reason: MinimumReplicasAvailablestatus: "True"type: Available

  • lastTransitionTime: 2018-11-29T08:29:06ZlastUpdateTime: 2018-11-29T08:29:07Zmessage: ReplicaSet "jerry-nginx-69fd9f6c4" has successfully progressed.reason: NewReplicaSetAvailablestatus: "True"type: ProgressingobservedGeneration: 1readyReplicas: 1replicas: 1updatedReplicas: 1


另一个有用的命令:


kubectl describe deployment jerry-nginx
复制代码



Name: jerry-nginxNamespace: part-0110CreationTimestamp: Thu, 29 Nov 2018 16:29:06 +0800Labels: run=jerry-nginxAnnotations: deployment.kubernetes.io/revision: 1Selector: run=jerry-nginxReplicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailableStrategyType: RollingUpdateMinReadySeconds: 0RollingUpdateStrategy: 25% max unavailable, 25% max surgePod Template:Labels: run=jerry-nginxContainers:jerry-nginx:Image: nginx:1.12.2Port: <none>Host Port: <none>Environment: <none>Mounts: <none>Volumes: <none>Conditions:Type Status Reason




Available True MinimumReplicasAvailableProgressing True NewReplicaSetAvailableOldReplicaSets: <none>NewReplicaSet: jerry-nginx-69fd9f6c4 (1/1 replicas created)Events:Type Reason Age From Message




Normal ScalingReplicaSet 9m41s deployment-controller Scaled up replica set jerry-nginx-69fd9f6c4 to 1


现在我们使用下面的命令对 deployment 进行水平扩展:


kubectl scale deployment jerry-nginx --replicas=3
复制代码



kubectl get pods -l run=jerry-nginx
复制代码


下图这个 Age 为 15 分钟之前的是第一次创建 deployment 时生成的,其他两个 Age 为 1 分钟之前的是执行了 scale 命令后自动创建的。



选中一个才创建的 pod,查看其事件记录:


kubectl describe pod jerry-nginx-69fd9f6c4-8dpvb
复制代码



kubectl get replicaset
复制代码


得到自动创建的 replication set:



desired = 3 意思就是我们水平扩展时指定的参数 3.


即使手动删除一个 pod 实例,replication set 又会很快自动创建一个新的:



自动创建的新 pod:



要获取更多 Jerry 的原创文章,请关注公众号"汪子熙"。

发布于: 刚刚
用户头像

Jerry Wang

关注

个人微信公众号:汪子熙 2017.12.03 加入

SAP成都研究院开发专家,SAP社区导师,SAP中国技术大使。

评论

发布
暂无评论
通过一个实际例子理解Kubernetes里pod的自动scale - 水平自动伸缩