一、资源创建的方式之一

命令的方式创建资源,理解命令运行之后的动作,通过查看资源的方式,总结Pod名称的由来

当我们执行创建资源的命令后,deployment这个控制器会通过replicaset控制器去管理pod,下面通过一个实例来分析,当我们执行创建资源的命令后,k8s都做了些什么(通过其NAME即可发现规律)?

运行一个deployment

#运行一个nginx容器,指定副本数量为2个
[root@docker-k8s01 ~]# kubectl run test01 --image=nginx:latest --replicas=2
 #查看deployment控制器
[root@docker-k8s01 ~]# kubectl get deployments.           # 可以看到deployment的name是我们指定的test01
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
test01   2/2     2            2           81s
#查看replicasets这个控制器
[root@docker-k8s01 ~]# kubectl get replicasets.
NAME                DESIRED   CURRENT   READY   AGE
test01-799bb6cd4d   2         2         2       2m36s
[root@docker-k8s01 ~]# kubectl get rs            # 注:replicasets可以简写为“rs”
NAME                DESIRED   CURRENT   READY   AGE
test01-799bb6cd4d   2         2         2       2m41s
#可以看到replicasets的NAME就是在deployment的NAME后面追加了一串ID号
 #查看pod的name
[root@docker-k8s01 ~]# kubectl get pod         
NAME                      READY   STATUS    RESTARTS   AGE
test01-799bb6cd4d-8429z   1/1     Running   0          8m33s
test01-799bb6cd4d-kfhvn   1/1     Running   0          8m33s
#可以看到该pod的NAME就是在上面replicasets的后面又追加了一段ID

同时,可以查看每一个资源对象的详细信息,来验证上面的说法

#查看test01的详细信息
[root@docker-k8s01 ~]# kubectl describe deployments test01

返回的信息如下,可以看到其生成了一个新的replicasets控制器
k8s资源对象的升级、回滚、扩容、缩容_第1张图片
那么,现在查看其replicasets详细信息
k8s资源对象的升级、回滚、扩容、缩容_第2张图片
二、如果想要client访问部署的服务,需要怎么做?关键点在哪里?
如果需要client来访问k8s部署的服务,那么需要创建一个service资源对象,并且其类型必须是NodePort,客户端通过访问service这个资源对象映射的端口,与k8s集群中的proxy进行联系,以便访问到部署的服务
实现过程如下:

#基于nginx镜像创建deployment资源对象,映射容器的80端口到宿主机
[root@docker-k8s01 ~]# kubectl run test02 --image=nginx:latest --port=80 --replicas=2
#创建一个service,将部署的test02的80端口映射出来
[root@docker-k8s01 ~]# kubectl expose deployment test02 --name=web01 --port=80 --type=NodePort
#可以看到将部署的服务端口映射到了宿主机的30949
[root@docker-k8s01 ~]# kubectl get svc web01
NAME    TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
web01   NodePort   10.103.199.152           80:30949/TCP   33s

客户端访问k8s群集中的任意一个节点的30949端口,都可以访问到服务的首页
k8s资源对象的升级、回滚、扩容、缩容_第3张图片
三、搭建registry仓库,基于nginx自定义镜像,将默认访问界面更改为:hello k8s。此为1.10版本。并基于此镜像运行一个Deployment资源对象,replicas数量为4个

#搭建registry仓库,并在群集中的节点指定到私有仓库
[root@docker-k8s01 ~]# docker  run -itd --name registry -p 5000:5000 --restart always registry:latest
[root@docker-k8s01 ~]# vim /usr/lib/systemd/system/docker.service 

ExecStart=/usr/bin/dockerd -H unix:// --insecure-registry 192.168.171.151:5000
#将修改后的配置文件发送到k8s群集中的其他节点
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service root@docker-k8s02:/usr/lib/systemd/system/
[root@docker-k8s01 ~]# scp /usr/lib/systemd/system/docker.service root@docker-k8s03:/usr/lib/systemd/system/
#所有更改了docker配置文件的节点都需要进行以下操作,以便更改生效
[root@docker-k8s02 ~]# systemctl daemon-reload 
[root@docker-k8s02 ~]# systemctl restart docker
#制作自定义镜像
[root@docker-k8s01 ~]# mkdir test
[root@docker-k8s01 ~]# cd test/
[root@docker-k8s01 test]# vim Dockerfile
FROM nginx:latest
ADD index.html /usr/share/nginx/html
[root@docker-k8s01 test]# echo "hello k8s" > index.html
[root@docker-k8s01 test]# docker build -t 192.168.171.151:5000/nginx:1.10 .             # 不要忽略最后的'.'
[root@docker-k8s01 test]# docker push 192.168.171.151:5000/nginx:1.10               # 上传
 #基于自定义镜像运行一个Deployment资源对象,replicas数量为4个
[root@docker-k8s01 test]# kubectl run test03 --image=192.168.171.151:5000/nginx:1.10 --port=80 --replicas=4
 #查看四个副本的IP地址
[root@docker-k8s01 test]# kubectl get pod -o wide | grep test03 | awk '{print$6}' 
10.244.2.8
10.244.1.7
10.244.2.7
10.244.1.8
#接下来在k8s群集内部访问该上述四个任意IP,即可看到其提供的服务,如下:
#访问测试
[root@docker-k8s01 ~]# curl 10.244.2.8
hello k8s
[root@docker-k8s01 ~]# curl 10.244.1.7
hello k8s
[root@docker-k8s01 ~]# curl 10.244.2.7
hello k8s
[root@docker-k8s01 ~]# curl 10.244.1.8
hello k8s

四、将上述Deployment资源对象,进行更新、扩容操作,replicas数量更新为6个.镜像仍为自定义镜像,且默认访问界面更改为:Hello update

#更新镜像并上传至私有仓库
[root@docker-k8s01 test]# echo "Hello update" > index.html
[root@docker-k8s01 test]# docker build -t 192.168.171.151:5000/nginx:2.20 .
[root@docker-k8s01 test]# docker push  192.168.171.151:5000/nginx:2.20 
#更新资源对象,进行扩容
[root@docker-k8s01 test]# kubectl set image deployment test03 test03=192.168.171.151:5000/nginx:2.20 && kubectl scale deployment test03 --replicas=6
#查看pod的IP地址
[root@docker-k8s01 test]# kubectl get pod -o wide |grep test03 | awk '{print $6}'
10.244.2.9
10.244.1.11
10.244.2.12
10.244.1.10
10.244.2.13
10.244.1.9
10.244.2.11
#访问测试
[root@docker-k8s01 ~]# curl 10.244.2.9
Hello update
[root@docker-k8s01 ~]# curl 10.244.1.11
Hello update
[root@docker-k8s01 ~]# curl 10.244.1.10
Hello update

五、对此Deployment资源对象进行回滚操作,查看验证最后版本的访问界面内容和replicas数量

#执行回滚操作
[root@docker-k8s01 ~]# kubectl rollout undo deployment test03     
[root@docker-k8s01 ~]# kubectl get pod -o wide |grep test03 | wc -l
6                     #查看replicas的数量还是6个
#访问测试
[root@docker-k8s01 ~]# kubectl get pod -o wide |grep test03 | awk '{print $6}'
10.244.1.13
10.244.2.16
10.244.2.15
10.244.1.14
10.244.1.12
10.244.2.14
[root@docker-k8s01 ~]# curl 10.244.1.13
hello k8s
[root@docker-k8s01 ~]# curl 10.244.2.16
hello k8s
[root@docker-k8s01 ~]# curl 10.244.2.15
hello k8s