春衣少年当酒歌,起舞四顾以笑和。这篇文章主要讲述[kubernetes] deployment相关的知识,希望能为你提供帮助。
?
Deployment 是最常用的用于部署无状态服务的方式。Deployment 控制器使得我们能够以声明的方式更新 Pod(容器组)和 ReplicaSet(副本集)。目前生产上几乎不会直接使用ReplicaSet,而是直接使用Deployment?
??01 创建Deployment??
1)创建Deployment
# 创建dp.yaml
cat dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3# 3副本
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: harbor.ywsn.com/library/nginx:latest# 镜像
ports:
- containerPort: 80# 暴露的端口
# 创建svc.yaml
cat svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-svc
name: nginx-svc
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx
# 应用
[root@host211 ~]# kubectl apply -f http://k8s-yaml.ywsn.com/nginx/dp.yaml
deployment.apps/nginx-deployment created
[root@host211 ~]# kubectl apply -f http://k8s-yaml.ywsn.com/nginx/svc.yaml
service/nginx-svc created
2)查看Deployment
kubect get deployment # 或者 kubect get deploy
3)查看svc
kubectl get svc # 或者 kubect get service
4)测试访问
??02 Deployment更新策略
??
02.1
RollingUpdate
滚动升级策略
RollingUpdate实际上是启动一个新的ReplicaSet,创建一部分新Pod,并缩减历史的ReplicaSet的数量,一直循环往复,直到达到预期值。
a)修改和更新dp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
annotations:
kubernetes.io/change-cause: "http.v1.2"# 更新描述
spec:
revisionHistoryLimit: 10# 保留更新历史版本数量,系统默认也是保留10个
strategy:
rollingUpdate:
type: RollingUpdate# 更新策略
replicas: 10# 副本数
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: harbor.ywsn.com/library/nginx:v1.2
ports:
- containerPort: 80
# 更新
kubectl apply -f http://k8s-yaml.ywsn.com/nginx/dp.yaml
b)查看pod情况,同一时间至少会有8个pod处于READY状态(10*0.25)
kubectl get pods
c)查看更新历史和更新进度
kubectl rollout history deploy/nginx-deployment
kubectl rollout status deploy/nginx-deployment
d)设置maxUnavailable
# 修改dp.yaml
kubernetes.io/change-cause: "http.v1.4"# 修改描述
strategy:
rollingUpdate:
maxUnavailable: 5 # 10个pod,同时最少处于running的pod为5个
...
image: harbor.ywsn.com/library/nginx:v1.4
# 更新
kubectl apply -f http://k8s-yaml.ywsn.com/nginx/dp.yaml
可以看出最少有5个pod处于READY状态。
e)修改maxsurge
# 修改dp.yaml
kubernetes.io/change-cause: "http.v1.4"# 修改描述
strategy:
rollingUpdate:
maxsurge: 4 # 同一时间,containerCreateing 最多比 Terminating多4个
...
image: harbor.ywsn.com/library/nginx:v1.5
# 更新
kubectl apply -f http://k8s-yaml.ywsn.com/nginx/dp.yaml
可以看的到同一时间containerCreateing比terminating最多多了4个
f)需要注意的是,maxSurge和maxUnavailable不能同时设置为0
?
02.2 Recreate升级策略?
Recreate即先将老的ReplicaSet期望实力数修改为0,等所有的pod终止后,再创建新的ReplicaSet,次更新策略生产上几乎不会使用,这里做个简单的演示即可。
a)修改dp.yaml和更新
# vi dp.yaml
kubernetes.io/change-cause: "http.v1.6"
strategy:
rollingUpdate:
type: Recreate
...
image: harbor.ywsn.com/library/nginx:v1.6
# 更新
kubectl apply -f http://k8s-yaml.ywsn.com/nginx/dp.yaml
可以看到是全部删除了pod再拉起的。
??03
Deployment回滚??
Deployment回滚比较简单,主要是前期一定要做好更新的描述,以便自己能准确的选择回滚版本。回滚和更新是一样的,也是由新旧ReplicaSet进行交替部署。
a)查看更新的历史版本
kubectl rollout history deploy/nginx-deployment
b)进行回滚
# 如果不指定--to-revision参数,则默认回滚到上一个版本
kubectl rollout undo deploy/nginx-deployment --to-revision=2
【[kubernetes] deployment】
推荐阅读
- [kubernetes] 交付dubbo之jenkins联动docker
- linux开机破密码
- [kubernetes] 持久化存储之静态PV/PVC
- Linux CentOS7本地源编写
- 什么鬼,开了redis之后我的阿里云服务器被植入了挖矿病毒!
- 在Ubuntu20.04上安装Kubernetes-Kubeadm和Minikube
- [kubernetes] kubernetes集群平滑升级
- Windows or Linux(操作系统有那些作用,要如何选择)
- [kubernetes] POD健康检测和自愈