5.3.1 创建 Deployment
Deployment 是标准 Kubernetes API 资源,它构建于 ReplicaSet 资源之上,于是其 spec 字段中嵌套使用的字段包含了 ReplicaSet 控制器支持 replicas、selector、template 和 miniReadySeconds,它也正是利用这些信息完成了其二级资源 ReplicaSet 对象的创建。下面是一个 Deployment 控制器资源的配置清单示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deploy
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
ports:
- name: http
containerPort: 80
上面的内容显示出,除了控制器类型和名称之外,它与前面 ReplicaSet 控制器示例中的内容几乎没有什么不同。下面在集群中创建以了解它的工作方式:
**[terminal]
**[delimiter $ ]**[command kubectl apply -f myapp-deploy.yaml --record]
deployment.apps/myapp-deploy created
“kubectl get deployment” 命令可以列出创建的 Deployment 对象 myapp-deploy 及其相关的信息。下面显示的字段中,UP-TO-DATE 表示已经达到期望状态的 Pod 副本数量,AVAILABLE 则表示当前处于可用状态的应用程序的数量:
**[terminal]
**[delimiter $ ]**[command kubectl get deployment]
NAME READY UP-TO-DATE AVAILABLE AGE
myapp-deploy 3/3 3 3 4m15s
Deployment 控制器会自动创建相关的 ReplicaSet 控制器资源,并以 “[DEPLOYMENT-NAME]-[POD-TEMPLATE-HASH-VALUE]” 格式为其命令,其中的 hash 值由 Deployment 控制器自动生成。由 Deployment 创建的 ReplicaSet 对象会自动使用相同的标签选择器,因此,可使用类似如下命令查看其相关的信息:
**[terminal]
**[delimiter $ ]**[command kubectl get replicasets -l app=myapp]
NAME DESIRED CURRENT READY AGE
myapp-deploy-5fdb5f69f 3 3 3 9m48s
相关的 Pod 对象的信息可以用相似的命令进行获取。下面的命令结果中,Pod 对象的名称遵循 ReplicaSet 控制器的命令格式,它以 ReplicaSet 控制器的名称为前缀,后跟 5 位随机字符:
**[terminal]
**[delimiter $ ]**[command kubectl get pods -l app=myapp]
NAME READY STATUS RESTARTS AGE
myapp-deploy-5fdb5f69f-df4qn 1/1 Running 0 12m
myapp-deploy-5fdb5f69f-gnbcz 1/1 Running 0 12m
myapp-deploy-5fdb5f69f-p2s6b 1/1 Running 0 12m
由此验证了 Deployment 借助于 ReplicaSet 管理 Pod 资源的机制,于是可以得知,其大部分管理操作与 ReplicaSet 相同。不过,Deployment 也有 ReplicaSet 所不具有的部分高级功能,这其中最著名的当属其自动滚动更新的机制。