[kubernetes] deployment
Posted 运维少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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 滚动升级策略
maxUnavailable:表示在更新过程中能够进入不可用状态的pod最大值(个人理解就是同一时间最多可以删除几个Pod,默认最多是25%)
maxSurge:表示额外创建的Pod个数(个人理解就是同一时间最多可以创建几个Pod,默认最多是25%)
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的主要内容,如果未能解决你的问题,请参考以下文章
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Deployment (Deploy)
Docker&Kubernetes ❀ Kubernetes集群Pod控制器 - Deployment (Deploy)