Deployment
用于部署无状态的服务,这个是最常用的控制器。一般用于管理维护企业内部无状态的微服务,比如configServer,springboot。可以管理多个副本的Pod实现无缝迁移、自动扩容缩容、自动灾难恢复、一键回滚等。
手动创建
$ kubectl create deployment nginx --image=nginx:1.15.2
deployment.apps/nginx created
$ kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-76446799f9-6ck7t 1/1 Running 0 26s
查看配置文件
# kubectl get deployment nginx -o yaml > nginx-deploy.yaml
# cat nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2020-09-19T02:41:11Z"
generation: 1
labels:
app: nginx
name: nginx
namespace: default
spec:
progressDeadlineSeconds: 600
replicas: 2 #副本数
revisionHistoryLimit: 10 # 设置保留RS旧的revision的个数
selector:
matchLabels:
app: nginx
strategy: #滚动更新策略 默认是RollingUpdate(先创建一个新的,在删除一个旧的,交替更新) Recreate:重建,先删除旧的Pod,在创建新的Pod
rollingUpdate:
maxSurge: 25% # 可以超过期望值的最大Pod数 可以设置成数字或百分比
maxUnavailable: 25% #指定在回滚或更新时最大不可用的Pod的数量 可以设置成数字或百分比
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.15.2
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
Deployment更新
-- 更改deployment的镜像并记录
$ kubectl edit deploy nginx
-- 将nginx版本改为1.15.3 副本数改为2
- image: nginx:1.15.3
replicas: 2
-- 查看更新过程
kubectl rollout status deploy nginx**
deployment "nginx" successfully rolled out
# kubectl rollout status deploy nginx
Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 1 out of 2 new replicas have been updated...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
Waiting for deployment "nginx" rollout to finish: 1 old replicas are pending termination...
deployment "nginx" successfully rolled out
Deployment回滚
-- 再次更新
$ kubectl set image deploy nginx nginx=1.15.4
-- 查看历史版本
$ kubectl rollout history deploy nginx
deployment.apps/nginx
REVISION CHANGE-CAUSE
1 <none>
2 <none>
3 kubectl set image deploy nginx nginx=1.15.4 --record=true
1924 Desktop/k8s »
-- 查看指定版本信息
$ kubectl rollout history deploy nginx --revision=1
-- 回滚指定版本
$ kubectl rollout undo deploy nginx --to-revision=1
deployment.apps/nginx rolled back
扩容和缩容
» kubectl scale --replicas=3 deploy nginx
deployment.apps/nginx scaled
» kubectl get deploy
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 3/3 3 3 17m
» kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-76446799f9-j2v2s 1/1 Running 0 4m42s
nginx-76446799f9-pxg8g 1/1 Running 0 4m43s
nginx-76446799f9-vvfvk 1/1 Running 0 35s
更新暂停和恢复
» kubectl rollout pause deployment nginx
deployment.apps/nginx paused
» kubectl set image deploy nginx nginx=nginx:1.15.3
deployment.apps/nginx image updated
» kubectl set resources deploy nginx -c nginx --limits=cpu=200m,memory=128Mi --requests=cpu=10m,memory=16Mi
deployment.apps/nginx resource requirements updated
-- 查看配置文件 版本号和资源调整已修改(见下图)
» kubectl get deploy nginx -oyaml
-- 通过AGE可以看出来,并没有更新
» kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-76446799f9-j2v2s 1/1 Running 0 15m
nginx-76446799f9-pxg8g 1/1 Running 0 15m
nginx-76446799f9-vvfvk 1/1 Running 0 11m
-- 更新
» kubectl rollout resume deploy nginx
deployment.apps/nginx resumed
» kubectl get po
NAME READY STATUS RESTARTS AGE
nginx-7b7c775868-26brv 1/1 Running 0 3s
nginx-7b7c775868-594f6 1/1 Running 0 2s
nginx-7b7c775868-g2qdp 1/1 Running 0 5s
» kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-5cfd47cfc5 0 0 0 22m
nginx-76446799f9 0 0 0 30m
nginx-7b7c775868 3 3 3 8s
nginx-d45498588 0 0 0 29m