1. 概述与应用场景
- 什么是
Controller
- 在集群上管理和运行容器的对象
- Pod与Controller的关系
-
Pod通过Controller实现应用的运维,比如伸缩,滚动升级等等
-
Pod与Controller之间通过
label
标签建立关系
- Deployment控制器应用场景
- 部署无状态应用
- 管理Pod和ReplicaSet
- 部署,滚动升级等功能
适用于:web服务,微服务
2. 使用Deployment发布应用
使用命令生成web-deployment.yaml
kubectl create deployment web --image=nginx --dry-run -o yaml > web-deployment.yaml
# 生成的yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: web
name: web
spec:
replicas: 1
selector:
matchLabels:
app: web
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: web
spec:
containers:
- image: nginx
name: nginx
resources: {}
status: {}
运行web-deployment.yaml
kubectl apply -f web-deployment.yaml
通过Service的NodePort对外暴露端口
# 生成yaml
kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web-service --dry-run -o yaml > web-service.yaml
# 执行
kubectl apply -f web-service.yaml
# 生成的yaml
apiVersion: v1
kind: Service
metadata:
creationTimestamp: null
labels:
app: web
name: web-service
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: web
type: NodePort
status:
loadBalancer: {}
删除对外暴露端口的service
kubectl get service
kubectl delete service [servicename]
3. 应用升级与回滚
3.1 升级
kubectl升级
kubectl set image deployment web nginx=nginx:1.15
或者直接修改web-deployment.yaml中image的版本号
kubectl apply -f web-deployment.yaml
需要注意的是升级是基于镜像版本的升级,如果镜像版本没有变就不会做任何操作
# 查看是否升级成功
kubectl rollout status deployment web
3.2 回滚
查看历史版本
# 查看升级历史
kubectl rollout history deployment web
回退到上一个版本
kubectl rollout undo deployment web
先查看下命令
kubectl rollout undo deployment web --help
然后指定版本1进行回滚
# 执行操作
kubectl rollout undo deployment web --to-revision=1
4. 弹性伸缩
kubectl scale deployment web --replicas=10
还有更高一级的弹性伸缩,根据CPU使用量判断是否需要扩容,感觉非常适合电商公司有大促活动时,短时间流量急剧增加的情况使用
使用 Horizontal Pod Autoscaling (平滑扩展)