K8S中Pod的水平扩展,收缩

概念:更新Deployment的Pod模板,会滚动更新,依赖Kubernetes项目中的ReplicaSet。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-set
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.16.1

通过副本数量的定义  replicas: 3和Pod模板组成,是Deployment的子集。

Deployment控制器实际操纵的是ReplicaSet对象,而不是Pod对象。

Deployment管理的Pod,其ownerReference是ReplicaSet。

Deployment ,ReplicaSet以及Pod的关系

 

水平扩展的命令:kubectl scale

事例:

$ kubectl scale deployment nginx-deployment --replicas=4 --record
deployment.apps/nginx-deployment scaled

--record 记录每次操作所执行的命令,方便后面查看。

检查Deployment的状态信息

$ kubectl get deployments
NAME               DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
nginx-deployment   3         0         0            0           1s

实时查看状态变化

kubectl rollout status;

查看ReplicaSet

kubectl get rs

滚动更新策略RollingUpdateStrategy

直接使用kubectl edit指令,打开API对象,修改Pod模板,保存退出会立即出发“滚动更新

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
...
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1

也可以用百分比的方式表示,比如maxUnavailable=50%

版本回滚

$ kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment

如果是要回滚到比较早的版本

首先,我需要使用 kubectl rollout history 命令,查看每次 Deployment 变更对应的版本

通过这个 kubectl rollout history 指令,看到每个版本对应的 Deployment 的 API 对象的细节,具体命令如下所示


$ kubectl rollout history deployment/nginx-deployment --revision=2

然后,我们就可以在 kubectl rollout undo 命令行最后,加上要回滚到的指定版本的版本号,就可以回滚到指定版本了

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐