一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情。
一、前言
使用 Deployment 进行 Pod 的部署、升级与回滚。
Deployment为Pod和ReplicaSet提供了声明式定义方法,可以替代之前使用的ReplicationController(RC)来管理应用。
Deployment 资源对象为 Pod 和 ReplicaSet(ReplicationController 的升级版)提供了声明式定义,在 Deployment YAML 文件中描述期望达到的目标状态。
Deployment Controller会创建符合目标状态的ReplicaSet和Pod,如果更新Deployment,对应的ReplicaSet和Pod的状态也会改变以符合新的目标状态。
(1)典型应用场景
- 定义
Deployment来创建ReplicaSet和Pod
使用
Deployment来创建ReplicaSet,ReplicaSet又会在后台创建Pod。可以检查Pod的启动状态,观察是成功还是失败。也可以根据Deployment的状态判断上线是否hang住了。
- 滚动升级和回滚应用
通过更新
Deployment的PodTemplateSpec字段来声明Pod的新状态,更新Deployment后会创建一个新的ReplicaSet,Deployment会按照控制的速率删除由旧的ReplicaSet创建的Pod、并使用新的ReplicaSet创建新的Pod,当新生成的Pod达到要求的目标状态后,会清除旧的ReplicaSet。如果当前状态不稳定,可以回滚到之前的
Deployment revision,每次回滚都会更新Deployment的revision。
- 扩容和缩容
根据系统负载进行
Deployment的扩容和缩容。
- 暂停和继续
Deployment
暂停
Deployment并修改PodTemplateSpec字段,然后重新恢复上线。
二、实验
需求:
- 使用
Deployment创建 3 个镜像名为mysql:5.7的pod。 - 创建完成后,将
mysql:5.7镜像升级到mysql:8.0
步骤如下:
- 编写
deploymentyaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-deployment
spec:
selector:
matchLabels:
app: mysql
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: database
image: registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
- 执行创建
$ kubectl create -f mysql-deployment.yaml --record
deployment.apps/mysql-deployment created
创建后查看 Deployment RS Pods:
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
mysql-deployment 3/3 3 3 3m50s
$ kubectl get rs
NAME DESIRED CURRENT READY AGE
mysql-deployment-7f7c764c46 3 3 3 3m55s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
mysql-deployment-7f7c764c46-5lnwc 1/1 Running 0 18s
mysql-deployment-7f7c764c46-5mhsd 1/1 Running 0 18s
mysql-deployment-7f7c764c46-jsdbb 1/1 Running 0 18s
- 升级
将 mysql:5.7 的镜像升级为 mysql:8.0镜像:
$ kubectl set image deployment/mysql-deployment database=registry-vpc.cn-hangzhou.aliyuncs.com/chenshi-kubernetes/mysql:8.0
deployment.extensions/mysql-deployment image updated
可以通过查看 describe 信息:kubectl describe deployment