当咱们执行建立资源的命令后,deployment这个控制器会经过replicaset控制器去管理pod,下面经过一个实例来分析,当咱们执行建立资源的命令后,k8s都作了些什么(经过其NAME便可发现规律)?html
[root@master ~]# kubectl run test01 --image=nginx:latest --replicas=2 #运行一个nginx容器,指定副本数量为2个 [root@master ~]# kubectl get deployments. #查看deployment控制器 NAME READY UP-TO-DATE AVAILABLE AGE test01 2/2 2 2 48s #能够看到deployment的name是咱们指定的test01 [root@master ~]# kubectl get replicasets. #而后查看replicasets这个控制器 #注:replicasets能够简写为“rs” NAME DESIRED CURRENT READY AGE test01-799bb6cd4d 2 2 2 119s #能够看到replicasets的NAME就是在deployment的NAME后面追加了一串ID号 [root@master ~]# kubectl get pod #查看pod的name NAME READY STATUS RESTARTS AGE test01-799bb6cd4d-d88wd 1/1 Running 0 3m18s test01-799bb6cd4d-x8wpm 1/1 Running 0 3m18s #能够看到该pod的NAME就是在上面replicasets的后面又追加了一段ID
同时,能够查看每个资源对象的详细信息,来验证上面的说法,以下:node
[root@master ~]# kubectl describe deployments test01 #查看test01的详细信息
返回的信息以下,能够看到其生成了一个新的replicasets控制器,以下:nginx
那么,如今查看其replicasets详细信息,以下:web
若是须要client来访问k8s部署的服务,那么须要建立一个service资源对象,而且其类型必须是NodePort,客户端经过访问service这个资源对象映射的端口,与k8s集群中的proxy进行联系,以便访问到部署的服务。docker
[root@master ~]# kubectl run test02 --image=nginx:latest --port=80 --replicas=2 #基于nginx镜像建立deployment资源对象,映射容器的80端口到宿主机 [root@master ~]# kubectl expose deployment test02 --name=web01 --port=80 --type=NodePort #建立一个service,将部署的test02的80端口映射出来 [root@master ~]# kubectl get svc web01 #查看建立的web01这个service的信息 NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE web01 NodePort 10.103.223.105 <none> 80:30230/TCP 86s #能够看到将部署的服务端口映射到了宿主机的30230,
客户端访问k8s群集中的任意一个节点的30230端口,均可以访问到服务的首页,以下:vim
#搭建registry仓库,并在群集中的节点指定到私有仓库 [root@master ~]# docker run -tid --name registry -p 5000:5000 --restart always registry:latest [root@master ~]# vim /usr/lib/systemd/system/docker.service #编辑配置文件 ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.20.6:5000 #将修改后的配置文件发送到k8s群集中的其余节点 [root@master ~]# scp /usr/lib/systemd/system/docker.service root@node01:/usr/lib/systemd/system/ [root@master ~]# scp /usr/lib/systemd/system/docker.service root@node02:/usr/lib/systemd/system/ #全部更改了docker配置文件的节点都须要进行如下操做,以便更改生效 [root@master ~]# systemctl daemon-reload [root@master ~]# systemctl restart docker #制做自定义镜像 [root@master ~]# vim Dockerfile FROM nginx:latest ADD index.html /usr/share/nginx/html/ [root@master ~]# echo "hello k8s" > index.html [root@master ~]# docker build -t 192.168.20.6:5000/nginx:1.10 . [root@master ~]# docker push 192.168.20.6:5000/nginx:1.10 #上传至私有仓库 #基于自定义镜像运行一个Deployment资源对象,replicas数量为4个。 [root@master ~]# kubectl run test03 --image=192.168.20.6:5000/nginx:1.10 --port=80 --replicas=4 [root@master ~]# kubectl get pod -o wide | grep test03 | awk '{print $6}' #查看四个副本的IP地址 10.244.2.20 10.244.1.18 10.244.1.19 10.244.2.21 #接下来在k8s群集内部访问该上述四个任意IP,便可看到其提供的服务,以下: #访问测试 [root@master ~]# curl 10.244.2.21 hello k8s [root@master ~]# curl 10.244.2.20 hello k8s
#更新镜像并上传至私有仓库 [root@master ~]# echo "Hello update" > index.html [root@master ~]# docker build -t 192.168.20.6:5000/nginx:2.20 . [root@master ~]# docker push 192.168.20.6:5000/nginx:2.20 #更新资源对象,进行扩容 [root@master ~]# kubectl set image deployment test03 test03=192.168.20.6:5000/nginx:2.20 && kubectl scale deployment test03 --replicas=6 #查看pod的IP地址 [root@master ~]# kubectl get pod -o wide | grep test03 | awk '{print $6}' 10.244.2.24 10.244.2.22 10.244.1.21 10.244.2.23 10.244.1.22 10.244.1.20 #访问测试 [root@master ~]# curl 10.244.1.20 Hello update [root@master ~]# curl 10.244.1.22 Hello update
[root@master ~]# kubectl rollout undo deployment test03 #执行回滚操做 [root@master ~]# kubectl get pod -o wide | grep test03 | wc -l #查看replicas的数量仍是6个 6 #访问测试 [root@master ~]# kubectl get pod -o wide | grep test03 | awk '{print $6}' 10.244.1.23 10.244.2.27 10.244.1.24 10.244.1.25 10.244.2.26 10.244.2.25 [root@master ~]# curl 10.244.2.25 hello k8s [root@master ~]# curl 10.244.2.26 hello k8s
———————— 本文至此结束,感谢阅读 ————————curl