3.k8s常用的资源
3.1 创建pod资源
k8s yaml的主要组成
上传nginx镜像文件,并且上传私有仓库里面
指定文件创建pod
可以看到nodeIP地址和一个容器IP地址,从本地私有仓库pull的镜像文件
nginx详细信息
下图可以看到容器ID与上图nginx服务信息显示一致,创建并启动容器
注释:启动一个pod下图会起两个容器,
下图可以看到pod容器有IP地址,nginx容器没有IP地址
nginx容器详细信息
nginx没有IP地址,是因为网络类型为Container:一个容器与另一个运行中的容器共享网络,也就是nginx容器共享pod容器网络;
注释:使用pod也就是为了实现k8s的核心功能,单单考简单的容器无法实现k8s核心功能。
一个pod资源:至少由两个容器组成,pod基础容器和业务容器组成
举例子:pod配置文件2,一个pod资源多个业务容器:
创建一个pod两个业务容器
在192.168.111.13的宿主机上可以看到3个容器,两个业务容器公用pod容器网络,也就是3个容器使用一个IP地址;
业务容器端口分配方式:端口谁先占谁先得。
pod是k8s最小的资源单位
3.2 ReplicationController资源
rc:保证指定数量的pod始终存活,rc通过标签选择器(selector)来关联pod
rc即:ReplicationController:副本控制器:功能就是起多个相同的pod,而且保证pod数量,多了就删除,少了就增加
创建一个rc
查看同一瞬间起一个rc和5个pod,并且分配宿主机均衡,
rc的名字为nginx,5个pod都是根据rc的名字后面接随机组成的名字
测试删除一个pod,rc会自动有创建出一个pod
测试删除一个node192.168.111.13节点,rc会将pod转移到12上自动创建pod,始终保持5个pod,就是这么倔
将删除的node节点添加回来,在支节点node13上重启服务
master节点11会自动纳管node13
标签选择器作用测试,始终保持5个pod
注释:rc创建5个pod的标签是myweb;则单独一个pod:nginx的标签为web
手动编辑nginx的标签,与rc标签一致
上下对比查看,rc保持5个pod,优先删除年龄小的3s的pod,删除一个资历浅的
rc的滚动升级
查看当前nginx版本为nginx.1.13
拷贝rc配置文件
新建一个k8s_rc2.yaml并且编辑内容,进行与之前的进行对比
升级
如下图所示:首先会创建一个nginx2的rc升级pod从0到5,降级nginx的rc从5到0,最后nginx2升级成功,删除旧得rc的nginx
同时查看pod之间间隔时间为10s,并且每个pod的名字为nginx2****
在查看nginx的版本为nginx1.15,升级成功
回滚,就是将升级的步骤反过就可以,指定旧版本的yaml文件即可
回滚完成
回滚时间
查看nginx版本为1.13,回滚成功
3.3 service资源
service帮助pod暴露端口
cluster实现负载均衡的功能(轮询,rr策略),如果pod存活,cluster会自动将pod加入到vip里面;
每个nodeip端口都会映射到VIP上面
创建一个service
创建svc
可以看到标签、端口映射、VIP
关联的pod
浏览器访问node节点IP地址加30000端口即可,出现nginx
修改nodePort范围扩大
3.4 deployment资源
有rc在滚动升级之后,会造成服务访问中断(就是标签不一致导致的),于是k8s引入了deployment资源
创建deployment
创建deploy.yaml文件,rs的标签:app=nginx,pod-template-hash=642398064与rc的标签不一样
deployment,先启动一个rs资源,rs控制pod的数量;
rs 90%的功能和rc一样,甚至比rc更强;
在根据deploy.yaml文件创建一个svc;
注意:nodePort不能和其他的svc端口发生冲突;selector标签选择器要和上面的deploy中pod的nginx一致;
创建svc与rs一致的标签,node端口3000,curl node的IP:3000请求信息为200状态码
deployment升级和回滚
编辑修改deployment配置文件,进行升级NG
由原来的nginx:1.13改为nginx:1.15,保存即可
会重新启一个rs,nginx版本为15,又新启动3个pod,访问NG服务版本为15
回滚历史版本
查看历史版本
回滚上一个版本,可以看到NG版本回到了13版本
由原来的1版本变成了3版本
回滚到指定的版本
历史版本查看,有一点不好的地方就是change一直为空,不美观
命令行创建deployment
历史变化会记录
命令行升级到指定的版本
上面的nginx=192.168.111.11:5000/nginx:1.15;就是指定容器的名字nginx
因为一个pod里面可能存在多个业务的容器,每个容器的业务版本也不一致,使用的镜像也不一致,所以要指定容器
举例子说明
常用操作命令如下:
3.5 tomcat+mysql测试
在k8s中容器之间相互访问,通过VIP地址!保证不管pod或者node死掉了,都可以互相通信
先创建mysql-rc.yaml文件,启动pod
在创建mysql-svc.yaml文件,为pod添加一个clusterIP关联pod
创建mysql-svc.yaml之后过去clusterIP,然后将该IP地址添加到tomcat-rc.yaml配置文件中,让pod通过VIP地址找mysql数据库
创建tomcat-rc.yaml文件,启动pod
创建tomcat-svc.yaml文件,为pod添加一个clusterIP关联pod
创建完成,查看状态
浏览器访问nodeip地址http://192.168.111.12:30008/
在访问一下http://192.168.111.12:30008/demo/
这是要连接数据库的,也可以提交数据
点击啊上图的Add,添加名字和等级,随意添加然后提交即可
信息添加到数据库成功
去系统数据库中查看提交的数据,进数据库中的操作命令和docker命令几乎一样
可以看到数据库中的数据和提交的一样