一起养成写作习惯!这是我参与「掘金日新计划 · 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
步骤如下:
- 编写
deployment
yaml
文件
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