CKA备考实验 | 创建和删除deployment

书籍来源:《CKA/CKAD应试指南:从Docker到Kubernetes完全攻略》

一边学习一边整理老师的课程内容及实验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:CKA备考实验 | 汇总_热爱编程的通信人的博客-CSDN博客


本节主要讲的是如何生成deployment所需要的yaml文件,以及这个yaml文件里字段的意义,然后根据自己的需要来修改此yaml文件。

通过yaml文件的方式创建deployment

可以通过命令行的方式,也可以通过yaml文件的方式来创建deployment。不过不建议使用命令行的方式创建,因为从k8s v1.18.x开始,在命令行里基本上除了--image之外,不再支持其他选项。建议通讨yaml文件来创建deployment,因为这样可以在yaml里指定各种各样的参数。可以通过命令来生成yaml文件,然后在其基础上进行修改。

用命令行生成deployment的yaml文件,语法如下。

kubectl create deployment 名字 --image=镜像 --dry-run=client -o yaml > d1.yaml

我们把本章所需要的文件单独放在一个deploy目录里。

步骤1:创建deploy目录,并进入此目录。

##########实操验证##########
[root@vms10 ~]# mkdir deploy
[root@vms10 ~]# cd deploy/
[root@vms10 deploy]#

本章所有实验均在命名空间nsdeploy里操作,创建并切换至命名空间nsdeploy。

##########实操验证##########
[root@vms10 deploy]# kubectl create ns nsdeploy
namespace/nsdeploy created
[root@vms10 deploy]# kubens nsdeploy
Context "kubernetes-admin@kubernetes" modified.
Active namespace is "nsdeploy".
[root@vms10 deploy]#

步骤2:通过命令创建名字为test1的deployment的yaml文件,如图8-2所示。

##########实操验证##########
[root@vms10 deploy]# kubectl create deployment test1 --image=nginx --dry-run=client -o yaml > d1.yaml
[root@vms10 deploy]#

在deployment的yaml文件里,replicas用于指定此deployment要创建的pod的数目,deployment创建出来的pod都具有相同的标答,这个标签是app=test1(在pod设置里定义)。

在deployment中设置了selector,用于定义标签为app=test的那些pod,这个值必须要和pod里标签一致。当然pod里可以设置多个标签,selector至少要和这多个标签里的一个一致。

请自行把副本数改成3,设置镜像下载策略为IfNotPresent,如图8-3所示。

步骤3:创建此deployment。

##########实操验证##########
[root@vms10 deploy]# kubectl apply -f d1.yaml 
deployment.apps/test1 created
[root@vms10 deploy]# 
[root@vms10 deploy]# kubectl get pods -o wide --no-headers
test1-6d5588f8cc-7jxmn   1/1   Running   0     11s   10.244.81.101   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-l98f8   1/1   Running   0     11s   10.244.14.32    vms12.rhce.cc   <none>   <none>
test1-6d5588f8cc-sgcj5   1/1   Running   0     11s   10.244.14.31    vms12.rhce.cc   <none>   <none>
[root@vms10 deploy]#

步骤4:删除一个pod,验证是否能自动创建出来新的pod。

删除test1-57cb6d465f-gwsfc测试。

##########实操验证##########
[root@vms10 deploy]# kubectl delete pod test1-6d5588f8cc-sgcj5
pod "test1-6d5588f8cc-sgcj5" deleted
[root@vms10 deploy]# kubectl get pod -o wide --no-headers
test1-6d5588f8cc-7jxmn   1/1   Running   0     42s   10.244.81.101   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-l98f8   1/1   Running   0     42s   10.244.14.32    vms12.rhce.cc   <none>   <none>
test1-6d5588f8cc-rwgcs   1/1   Running   0     8s    10.244.81.102   vms11.rhce.cc   <none>   <none>
[root@vms10 deploy]#

因为deployment要设置3个pod,所以删除一个之后,deployment会马上生成一个新的pod,保证环境里有3个pod。

deployment健壮性测试

前面讲了通过deployment管理的pod,如果删除一个之后会创建出一个新的pod,如果一个节点关机的话,那么原来运行在此节点的pod会怎么样呢?下面开始测试。

步骤1:查看现有pod运行在哪个节点。

##########实操验证##########
[root@vms10 deploy]# kubectl get pod -o wide --no-headers
test1-6d5588f8cc-7jxmn   1/1   Running   0     68s   10.244.81.101   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-l98f8   1/1   Running   0     68s   10.244.14.32    vms12.rhce.cc   <none>   <none>
test1-6d5588f8cc-rwgcs   1/1   Running   0     34s   10.244.81.102   vms11.rhce.cc   <none>   <none>
[root@vms10 deploy]#

可以看到有的运行在vms11上,有的运行在vms12上。

步骤2:现在把vms12关机,过一段时间查看pod状态。

##########实操验证##########
[root@vms10 deploy]# kubectl get pod -o wide --no-headers
test1-6d5588f8cc-7jxmn   1/1   Running       0     7m21s   10.244.81.101   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-l98f8   1/1   Terminating   0     7m21s   10.244.14.32    vms12.rhce.cc   <none>   <none>
test1-6d5588f8cc-rwgcs   1/1   Running       0     6m47s   10.244.81.102   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-vpzgw   1/1   Running       0     10s     10.244.81.103   vms11.rhce.cc   <none>   <none>
[root@vms10 deploy]#

可以看到pod都会到vms11上运行。在故障的几分钟内,master仍会等待pod的恢复,若等几分钟还没恢复,会执行删除,删除完毕后,master会重新调度新pod替代。但是vms12处于关机状态,master无法和vms12通信,所以vms12上的pod就处于“失联”状态,才会看到删除的两个pod状态为Terminating。

步骤3:当vms12开机之后,被标记为删除的pod会被删除。

##########实操验证##########
[root@vms10 deploy]# kubectl get pod -o wide --no-headers
test1-6d5588f8cc-7jxmn   1/1   Running   0     11m     10.244.81.101   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-rwgcs   1/1   Running   0     11m     10.244.81.102   vms11.rhce.cc   <none>   <none>
test1-6d5588f8cc-vpzgw   1/1   Running   0     4m44s   10.244.81.103   vms11.rhce.cc   <none>   <none>
[root@vms10 deploy]#

但是,在vms12恢复之后,已经运行在vms11上的pod并不会再次调度到vms12上运行。

删除deployment的方法有如下两种。

(1)kubectl delete -f d1.yaml。

(2)kubectl delete deploy 名字。

步骤4:删除此deployment。

##########实操验证##########
[root@vms10 deploy]# kubectl delete -f d1.yaml 
deployment.apps "test1" deleted
[root@vms10 deploy]#

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/131473740