专业的JAVA编程教程与资源

网站首页 > java教程 正文

最简单的K8S入门(四)扩缩容&滚动更新

temp10 2024-12-31 14:49:04 java教程 13 ℃ 0 评论

前文:

最简单的K8S入门(一)

最简单的K8S入门(四)扩缩容&滚动更新

最简单的K8S入门(二)运行容器并访问

最简单的K8S入门(三)自我修复


扩缩容

生产环境中,K8S的扩缩容用的是Horizontal Pod Autoscaler(以下简称HPA),Pod水平扩缩器。与“水平”对应的是“垂直”。

“水平”是指增加或减少Pod。

“垂直”是指增加或减少资源(CPU或内存等)给运行中的Pod。

其原理就是K8S监听Pod的资源利用指标,根据指定的指标&标准,自动进行扩缩容。

具体细节就不介绍了,毕竟本文也不是给专业的K8S运维人员看的,简单的算法就是:

期望副本数=ceil(当前副本数*(当前指标/期望指标))

例如,当前副本数=2,当前指标CPU利用率=100%,期望指标=50%,可得期望副本数=(2*(1/0.5))=4,进行自动扩容。

反之,当前副本数=4,当前指标CPU利用率=50%,期望指标=100%,可得期望副本数=(4*(0.5/1))=2,进行自动缩容。

与之配套的还有很多API、配置,本文就不讲这么复杂的了。在实际生产中,自动扩缩容应用起来还是很慎重的,毕竟指标这个东西,不可控的因素多,配置不好,动不动就扩缩容,反而会造成不稳定。

本文就讲一下怎么用上文的Deployment,手动扩缩容。

其实很简单,修改文件deployment.yml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 3
  selector:
    matchLabels:
      project: k8sdemo
  template:
    metadata:
      labels:
        project: k8sdemo
    spec:
      containers:
        - name: web-service
          image: 用户名/k8sdemo:1.0
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

将spec.replicas由2改为3,重新执行就扩容了,同理,改为1,就缩容。

滚动更新

这个很实用,我还记得早年间没有K8S,甚至没有Jenkins、Sentinel、Nacos等这些CI/CD工具时,给多个副本升级是一件很手工的事情。先下线1个副本,升级,上线;再下线1个副本,升级,上线......

K8S就省事很多。

我们先把工程升级版本,按照前文的步骤推送镜像到Docker Hub。

修改deployment.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-deploy
spec:
  replicas: 5
  selector:
    matchLabels:
      project: k8sdemo
  minReadySeconds: 20
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        project: k8sdemo
    spec:
      containers:
        - name: web-service
          image: 用户名/k8sdemo:1.1
          imagePullPolicy: Always
          ports:
            - containerPort: 8080

说明:

滚动更新的目的是:将旧Pod删除至0,新Pod增加至期望副本数。

  • 为了演示,事先将期望副本数扩容到了5个。
  • 镜像版本改为1.1
  • spec.minReadySeconds=20。代表更新一个副本后,强制等待20秒,再更新下一个。
  • spec.strategy.type=RollingUpdate。强制要求用滚动更新的方式进行。
  • spec.strategy.rollingUpdate.maxUnavailable=0。此次滚动更新过程中,不可用副本数的最大值(或最大比例),值越小,系统就越稳定,升级越平滑。本例设为0,代表滚动更新期间,不可以让副本数小于期望副本数。
  • spec.strategy.rollingUpdate.maxSurge=1。此次滚动更新过程中,超过期望副本数的最大值(或最大比例),值越大,更新速度越快。本例设为1,代表滚动更新期间,副本数可以是5+1个。
  • maxUnavailable=0,maxSurge=1,代表先增加1个新Pod,再删除1个旧Pod,直到新Pod5个增加完毕,旧Pod删除完毕。

执行命令后,可以通过监测命令看一下状态

kubectl rollout status deployment web-deploy

访问接口:

完结撒花[撒花][撒花]

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表