K8S扩缩容及滚动更新和回滚
目录:
- 1、滚动更新
- 1、定义Deployment配置
- 2、应用更新
- 2、版本回滚
- 1. 使用kubectl rollout undo命令
- 3、更新暂停与恢复
- 1、暂停更新
- 2、更新镜像(例如,使用kubectl set image命令)
- 3、恢复更新
- 4、弹性扩缩容
- 1、扩容命令
- 2、缩容命令
- 3、自动扩缩容
1、滚动更新
在Kubernetes中,滚动更新(Rolling Update)是一种常用的部署策略,它允许你逐步将应用的旧版本替换为新版本,而不是一次性替换所有实例。这有助于减少服务中断的风险,并允许你在更新期间监控应用的健康状况。
1、定义Deployment配置
首先,你需要有一个Deployment配置文件(通常是YAML格式),其中定义了你的应用镜像和所需的副本数。例如:
apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-deployment
spec:replicas: 3strategy:type: RollingUpdaterollingUpdate:maxSurge: 1 # 最大额外可以存在的副本数,可以为数字或百分比maxUnavailable: 1 # 最大不可用副本数,可以为数字或百分比selector:matchLabels:app: myapptemplate:metadata:labels:app: myappspec:containers:- name: myapp-containerimage: myapp:v1
2、应用更新
使用kubectl命令行工具来更新你的Deployment。例如,如果你想将镜像版本从myapp:v1更新到myapp:v2,你可以使用以下命令:
kubectl set image deployment/myapp-deployment myapp-container=myapp:v2 --record
或者,你也可以通过修改原始的YAML文件,然后使用kubectl apply命令:
spec:containers:- name: myapp-containerimage: myapp:v2
然后应用这个更改:
kubectl apply -f deployment.yaml
2、版本回滚
1. 使用kubectl rollout undo命令
这是最直接的方法来触发回滚。你可以通过指定回滚到上一个版本或者指定一个特定的历史版本。
回滚到上一个版本:
kubectl rollout undo deployment <deployment-name>
回滚到特定的历史版本:
首先,你可以使用kubectl rollout history命令查看所有的发布历史:
kubectl rollout history deployment <deployment-name>
然后,根据显示的版本号回滚到特定版本:
kubectl rollout undo deployment <deployment-name> --to-revision=<revision-number>
3、更新暂停与恢复
假设你有一个名为my-app的Deployment,并且你希望在更新镜像之前先暂停更新:
1、暂停更新
kubectl rollout pause deployment/my-app
2、更新镜像(例如,使用kubectl set image命令)
kubectl set image deployment/my-app my-app-container=new-image:tag
3、恢复更新
kubectl rollout resume deployment/my-app
4、弹性扩缩容
1、扩容命令
kubectl scale deployment <deployment-name> --replicas=5
2、缩容命令
kubectl scale deployment <deployment-name> --replicas=3
两者修改replicas的副本数即可。
3、自动扩缩容
如果使用的是自动缩放(Horizontal Pod Autoscaler, HPA),则 Kubernetes 会根据设置的指标自动调整 Pod 的数量,而不是手动设置副本数。你可以通过设置 HPA 来实现自动扩容和缩容。例如:
kubectl autoscale deployment <deployment-name> --cpu-percent=50 --min=1 --max=10
这将基于 CPU 使用率自动调整副本数,最小为1,最大为10。