欢迎光临
我们一直在努力

通过一个实际例子理解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/v1beta1

kind: Deployment

metadata:

annotations:

deployment.kubernetes.io/revision: "1"

creationTimestamp: 2018-11-29T08:29:06Z

generation: 1

labels:

run: jerry-nginx

name: jerry-nginx

namespace: part-0110

resourceVersion: "7203445"

selfLink: /apis/extensions/v1beta1/namespaces/part-0110/deployments/jerry-nginx

uid: d5c64f72-f3b0-11e8-b308-a20cb743f347

spec:

progressDeadlineSeconds: 600

replicas: 1

revisionHistoryLimit: 2

selector:

matchLabels:

run: jerry-nginx

strategy:

rollingUpdate:

maxSurge: 25%

maxUnavailable: 25%

type: RollingUpdate

template:

metadata:

creationTimestamp: null

labels:

run: jerry-nginx

spec:

containers:

– image: nginx:1.12.2

imagePullPolicy: IfNotPresent

name: jerry-nginx

resources: {}

terminationMessagePath: /dev/termination-log

terminationMessagePolicy: File

dnsPolicy: ClusterFirst

restartPolicy: Always

schedulerName: default-scheduler

securityContext: {}

terminationGracePeriodSeconds: 30

status:

availableReplicas: 1

conditions:

  • lastTransitionTime: 2018-11-29T08:29:07Z

    lastUpdateTime: 2018-11-29T08:29:07Z

    message: Deployment has minimum availability.

    reason: MinimumReplicasAvailable

    status: "True"

    type: Available

  • lastTransitionTime: 2018-11-29T08:29:06Z

    lastUpdateTime: 2018-11-29T08:29:07Z

    message: ReplicaSet "jerry-nginx-69fd9f6c4" has successfully progressed.

    reason: NewReplicaSetAvailable

    status: "True"

    type: Progressing

    observedGeneration: 1

    readyReplicas: 1

    replicas: 1

    updatedReplicas: 1

另一个有用的命令:

kubectl describe deployment jerry-nginx

Name: jerry-nginx

Namespace: part-0110

CreationTimestamp: Thu, 29 Nov 2018 16:29:06 +0800

Labels: run=jerry-nginx

Annotations: deployment.kubernetes.io/revision: 1

Selector: run=jerry-nginx

Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable

StrategyType: RollingUpdate

MinReadySeconds: 0

RollingUpdateStrategy: 25% max unavailable, 25% max surge

Pod Template:

Labels: run=jerry-nginx

Containers:

jerry-nginx:

Image: nginx:1.12.2

Port: <none>

Host Port: <none>

Environment: <none>

Mounts: <none>

Volumes: <none>

Conditions:

Type Status Reason


Available True MinimumReplicasAvailable

Progressing True NewReplicaSetAvailable

OldReplicaSets: <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的原创文章,请关注公众号"汪子熙":

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。