Kubernetes pod 控制器 之 Deployment
1.基本概念
新版本选择器必须要选择的
说白了就是,我匹配的你必须要有,多了不管,少了不干,要是匹配标签写两个,必须两个全全匹配
2.实验一
创建 1.deployment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp-deploy
name: myapp-deploy
spec:
replicas: 1
selector:
matchLabels:
app: myapp-deploy
template:
metadata:
labels:
app: myapp-deploy
spec:
containers:
- image: wangyanglinux/myapp:v1.0
name: myapp
kubectl apply -f 1.deployment.yaml
不写replicas 默认值为1
kubectl get deployment [deployment名] -o yaml
将deployment的详细清单打印出来
修改副本数量
kubectl scale deployment [deployment名字] --replicas=10
kubectl scale deployment myapp-deploy --replicas=10
当前版本是1.0版
我们想升级为2.0
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp-deploy
name: myapp-deploy
spec:
replicas: 1
selector:
matchLabels:
app: myapp-deploy
template:
metadata:
labels:
app: myapp-deploy
spec:
containers:
- image: wangyanglinux/myapp:v2.0
name: myapp
直接将版本改为2.0
kubectl apply -f 1.deployment.yaml
就更新了
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp-deploy
name: myapp-deploy
spec:
selector:
matchLabels:
app: myapp-deploy
template:
metadata:
labels:
app: myapp-deploy
spec:
containers:
- image: wangyanglinux/myapp:v3.0
name: myapp
执行
kubectl replace -f 1.deployment.yaml
重新替换 就变成一个 了
版本号 为 3.0
对比我现在的资源清单 与 我已经运行的资源清单运行出来的对象 发生了哪些变化
kubectl diff -f 1.deployment.yaml
deployment 下面管控这 rs 由rs 去管理pod 当实现更新的时候 他会滚动更新 来逐渐替换下面的pod这就是 apply的原理
金丝雀部署 黑白 蓝绿部署
左边这个rs 是不会删除的 如果需要回滚到上一个版本 它可以利用上一个版本的 rs 回滚到上一个版本
deployment 实际本质 就是 管理rs 滚动更新 或者滚动回滚
如果 用RS 只能 全部重新创建 ,不能实现滚动回滚
1.kubectl create -f deployment.yaml --record
--record 基于这个一个deployment 资源清单 去实现我们创建 并记录我们当前的命令 在我回滚的时候 给到一个信息提示的作用 现在也可以不加
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deployment-demo
name: deployment-demo
spec:
replicas: 5
selector:
matchLabels:
app: deployment-demo
template:
metadata:
labels:
app: deployment-demo
spec:
containers:
- image: wangyanglinux/myapp:v1.0
name: deployment-demo-container
我们改成 2.0版本
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: deployment-demo
name: deployment-demo
spec:
replicas: 5
selector:
matchLabels:
app: deployment-demo
template:
metadata:
labels:
app: deployment-demo
spec:
containers:
- image: wangyanglinux/myapp:v2.0
name: deployment-demo-container
create 报错
因为已经创建过了 不允许重复创建
资源对象已经有了 就不会去创建的
好
先基于此文件删除对应的deployment对象
kubectl delete -f 2.deployment.yaml
再看看apply命令
kubectl apply -f 2.deployment.yaml
2.scale 改变pod 的副本数量 扩缩容
3.autoscale
[root@k8s-master01 deployment]# kubectl top pod
error: Metrics API not available
现在暂时没办法测
查看pod的资源使用情况
kubectl top pod
4.set image
更新容器的镜像
kubectl set image 类型/类型名 容器名=镜像名
创建一个service 名字 会匹配 app= {service名} 的pod 做对应的负载均衡
kubectl create svc clusterip deployment-demo --tcp=80:80
现在版本已经变成 25%~25%
kubectl get deployment deployment-demo -o yaml
Recreate:适合可以容忍短暂停机的场景,更新速度快,但会有停机时间。