k8s入门-Deployment控制器
Deployment 为 Pod 和 ReplicaSet(下一代 Replication Controller)提供声明式更新,有了Deployment之后我们就不再单独的使用RC和RS了。 您只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和 ReplicaSet 的实际状态改变到您的目标状态。 Deployment
Deployment 为 Pod 和 ReplicaSet(下一代 Replication Controller)提供声明式更新,有了Deployment之后我们就不再单独的使用RC和RS了。 您只需要在 Deployment 中描述您想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和 ReplicaSet 的实际状态改变到您的目标状态。 Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。
一、创建Deployment
Deployment对象的创建同样是一开YAML的配置文件。
[root@k8s-01 ~]# cat nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.13.12
ports:
- containerPort: 80
可以发现,这里我特意在镜像中指定了一下nginx的版本,以方便后面升级的时候做对比。
使用kubectl创建Deployment
[root@k8s-01 ~]# kubectl create -f nginx-deployment.yaml
deployment.apps/nginx-deployment created
查看Deployment
[root@k8s-01 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 3 3 16s
- UP-TO-DATE 的 replica 的数目已经达到了配置中要求的数目。
- CURRENT 的 replica 数表示 Deployment 管理的 replica 数量
- AVAILABLE 的 replica 数是当前可用的 replica 数量。
查看RS和pod
[root@k8s-01 ~]# kubectl get rs
NAME DESIRED CURRENT READY AGE
nginx-deployment-56689dc4b8 3 3 3 29s
[root@k8s-01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-56689dc4b8-9v72r 1/1 Running 1 26m
nginx-deployment-56689dc4b8-mt4n2 1/1 Running 1 26m
nginx-deployment-56689dc4b8-twlx2 1/1 Running 1 26m
查看Deployment扩展信息
[root@k8s-01 ~]# kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 28m nginx nginx:1.13.12 app=nginx
查看pod的lables
[root@k8s-01 ~]# kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx-deployment-56689dc4b8-9v72r 1/1 Running 1 30m app=nginx,pod-template-hash=56689dc4b8
nginx-deployment-56689dc4b8-mt4n2 1/1 Running 1 30m app=nginx,pod-template-hash=56689dc4b8
nginx-deployment-56689dc4b8-twlx2 1/1 Running 1 30m app=nginx,pod-template-hash=56689dc4b8
注意: pod-template-has
这个 label 不是用户指定的!
注意上面示例输出中的 pod label 里的 pod-template-hash label。当 Deployment 创建或者接管 ReplicaSet 时,Deployment controller 会自动为 Pod 添加 pod-template-hash label。这样做的目的是防止 Deployment 的子ReplicaSet 的 pod 名字重复。通过将 ReplicaSet 的 PodTemplate 进行哈希散列,使用生成的哈希值作为 label 的值,并添加到 ReplicaSet selector 里、 pod template label 和 ReplicaSet 管理中的 Pod 上。
二、更新Deployment
更新Deployment,并增加–recode参数
[root@k8s-01 ~]# kubectl set image deployment nginx-deployment nginx=nginx:1.14.2 --record
deployment.apps/nginx-deployment image updated
查看更新状态
[root@k8s-01 ~]# kubectl rollout status deployment nginx-deployment
deployment "nginx-deployment" successfully rolled out
查看更新后的Deploymnet
[root@k8s-01 ~]# kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 49m nginx nginx:1.14.2 app=nginx
可以看到,一开始定义的nginx版本是1.13.12,现在已经变成了1.14.2 。
三、Deployment升级历史
查看升级历史
[root@k8s-01 ~]# kubectl rollout history deployment nginx-deployment
deployment.apps/nginx-deployment
REVISION CHANGE-CAUSE
1 <none>
2 kubectl set image deployment nginx-deployment nginx=nginx:1.14.2 --record=true
因为我们创建 Deployment 的时候使用了–record参数可以记录命令,我们可以很方便的查看每次 revision 的变化。可以看到有两次的历史记录。
查看单个revision 的详细信息:
[root@k8s-01 ~]# kubectl rollout history deployment nginx-deployment --revision=1
deployment.apps/nginx-deployment with revision #1
Pod Template:
Labels: app=nginx
pod-template-hash=56689dc4b8
Containers:
nginx:
Image: nginx:1.13.12
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
四、Deployment版本回滚
回滚到上一个版本
[root@k8s-01 ~]# kubectl rollout undo deployment nginx-deployment
deployment.apps/nginx-deployment rolled back
[root@k8s-01 ~]# kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 54m nginx nginx:1.13.12 app=nginx
很神奇吧,可以直接进行回滚,真是太舒服了。
还可以使用--revision
参数指定某个历史版本:
[root@k8s-01 ~]# kubectl rollout undo deployment nginx-deployment --to-revision=2
deployment.apps/nginx-deployment rolled back
[root@k8s-01 ~]# kubectl get deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 57m nginx nginx:1.14.2 app=nginx
注意:版本号在Deployment的升级历史中查找
五、Deployment扩容
[root@k8s-01 ~]# kubectl scale deployment nginx-deployment --replicas 2
deployment.apps/nginx-deployment scaled
[root@k8s-01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-574b87c764-b6jhm 1/1 Running 0 3m25s
nginx-deployment-574b87c764-tgsb8 1/1 Running 0 3m24s
[root@k8s-01 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 63m
[root@k8s-01 ~]# kubectl scale deployment nginx-deployment --replicas 4
deployment.apps/nginx-deployment scaled
[root@k8s-01 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-574b87c764-7sw2x 1/1 Running 0 3s
nginx-deployment-574b87c764-9mnmn 1/1 Running 0 3s
nginx-deployment-574b87c764-b6jhm 1/1 Running 0 3m36s
nginx-deployment-574b87c764-tgsb8 1/1 Running 0 3m35s
[root@k8s-01 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 4/4 4 4 64m
更多推荐
所有评论(0)