k8s简单的来部署一下tomcat,并测试自愈功能
k8s简单的来部署一下tomcat,并测试自愈功能
前言:
这位大佬写的k8s的内容很详细,很适合新人,我做一下记录,大佬的地址为:k8s简单的来部署一下tomcat,并测试自愈功能 - 下课后我要去放牛 - 博客园。
先记录一些操作时的错误:
《《《《《《《《《《《第一个创建资源对象一直为ContainerCreating大坑《《《《《《《《《《《《《《《《《
1、kubectl create -f xxx.yaml在创建资源对象时,xxx.yaml配置文件里我配置了rc和service,下面表示创建成功,但问题来了
2、kubectl get pods时两个pods的状态都是ContainerCreating,而不是running,说明kubectl create -f xxx操作是失败的
3、kubectl describe pods myweb-3889544643-3sxrb 查看此pods的日志是什么问题,找到问题关系所在,下图:
4、查看另一个pod的日志:如下图,错误跟上一个pod的描述是一样的,都是少了一个文件。
5、我将错误内容翻译了一下:大意是说在pul镜像image的时候没有凭据,没有redhat-ca.crt文件
或者“POD”与ErrImagePull:“image pull for registration .access.redhat.com/rhel7/pod-infrastructure:latest失败,这可能是因为这个请求上没有凭据。 ”详情:(打开/etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt:无此文件或目录)”
6、查到其他博客的解决办法,也确实解决了:
其实就是我的两个node节点机上没有一个叫redhat-ca.crt文件,此文件应该是用来连接主机master作凭证的吧,接下来下载这个凭证文件就是了。 在node节点机192.168.26.228上(192.168.26.108节点机也如此),执行以下命令: 1、wget http://mirror.centos.org/centos/7/os/x86_64/Packages/python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm 2、rpm2cpio python-rhsm-certificates-1.19.10-1.el7_4.x86_64.rpm | cpio -iv --to-stdout ./etc/rhsm/ca/redhat-uep.pem | tee /etc/rhsm/ca/redhat-uep.pem 3、docker pull registry.access.redhat.com/rhel7/pod-infrastructure:latest
7、报错or "POD" with ErrImagePull: "image pull failed for registry.access.redhat.com/rhel7/pod-infrastructure:latest, this may be because there are no credentials on this request. details: (open /etc/docker/certs.d/registry.access.redhat.com/redhat-ca.crt: no such file or directory)"的问题解决成功了,成功如下图:
再用Kubectl get pods查看一下pod,发现两个pod的status状态都变成了Running
》》》》》》》第一个大坑第一个创建资源对象一直为ContainerCreating结束》》》》》》》》》》》》》》》》
》》》》》第二个大坑浏览器无法访问k8s中的tomcat开始》》》》》》》》》》》》》》
1、当kubect create -f xxx.yaml命令,把资源对象都创建好了,经过第一个大坑的解决,kubectl get pods查看所有的pod也都变成了running状态,再使用:kubectl get pods -o wide命令查看所有pod的运行,发现有两个pod分别运行到我的两个节点机上192.168.26.228和192.168.26.108,如下:
#查看所有pod,加-o wide可以看到每个pod运行在哪个node节点机上 kubectl get pods -o wide
再看一下service:kubectl get svc
2、那么问题来了,一切看似很完美,很成功,现在知道了有两个pod,每个pod里面都有一个tomcat容器,两个pod分别运行两个node节点机上:192.168.26.228和192.168.26.108,接下来只要在浏览器上随便输入一台的node节点机的ip:端口就可以访问节点机上的tomcat了,然而并卵如下:
3、这是什么原因呢?又是让我一顿好找,百度查了半天,终于发现是iptables问题(好像是网关问题,不是太懂),借鉴博客:https://blog.csdn.net/fei79534672/article/details/78710858,但是我并没有用它这篇博客的方法,而是使用命令把iptables FORWARD DROP修改成FORWARD ACCEPT,解决步骤如下:
3.1、原因已经找到node节点上的tomcat访问不了,好像是网关没有打通,我们在192.168.26.228节点机上查看iptables,命令如下:
(注意这是在...228节点机上操作)
3.2、使用命令把FORWARD DROP 修改成FORWARD ACCEPT
iptables -P FORWARD ACCEPT #机器重启之后,又恢复DROP了,再此加一条防止重启还原DROP的命令 sleep 60 && /sbin/iptables -P FORWARD ACCEPT #再查看 sudo iptables -S
4、如果上面的操作完成后还是不能显示tomcat页面,出现404,则通过一下方法来解决:
进入容器查看:
发现类似webapps名字的存在两个目录,进入webapps文件夹,发现里面内容为空,进入另外一个webapps.dist文件夹,发现文件都在这里面,于是进行替换
退出bash有2种操作:1)Ctrl + d 退出并停止容器;2)Ctrl + p + q 退出并在后台运行容器;
再次访问页面:http://192.168.16.159:31111/
问题解决
》》》》》》》》》》》第二个大坑浏览器无法访问k8s中的tomcat结束》》》》》》》》》》》》》》
》》》》》》》正式部署tomcat开始》》》》》》》》
借鉴博客:https://blog.csdn.net/u013201439/article/details/79306417
第一步:准备
根据我上次安装的k8s集群环境3台机器继续开始撸:
master主机:192.168.26.227
node节点机:192.168.26.228
node节点机:192.168.26.108
三台机器必须都安装了docker,并且防火墙都关闭。
三台机器上建立目录/usr/local/dev/k8s
在主机192.168.26.227上查看两台节点连接情况:kubectl get nodes
第二步:创建资源对象配置文件:
下面是192.168.26.227主机操作:
1、在/usr/local/dev/k8s目录下,创建一个名为:tomcat01.yaml的配置文件(我同事叫编排文件)
vi tomcat01.yaml
2、tomcat01.yaml文件的内容如下:
我复制出来的文件内容没有格式缩进,所以以后还复制借鉴博客:https://blog.csdn.net/u013201439/article/details/79306417里的内容吧。
借鉴博客里用了两个文件,而我整合在一起了,写在了一个文件里。它用了两文件是什么意思呢?一个是创建RC(也就是副本控制器)的配置文件,另一个是创建Service服务的配置文件
3、根据上面截图配置好后,使用创建命令:
kubectl create -f tomcat01.yaml #如果配置错了,创建了一个错误的service和pod,可以用删除命令,配置正确后再重新创建一遍 kubectl delete -f tomcat01.yaml
使用创建命令创建成功之后,会出现两条成功的信息:
4、查看pod是否创建成功并运行:kubectl get pods -o wide
成功如下:
失败如下:出现ContainerCreating,恭喜出现第一个大坑,请看本文章最前面那里的第一个大坑解决笔记
5、在浏览器打开192.168.26.228:31111,或另一个node节点ip,如果没有出现tomcat的主页,恭喜请看本文章最前面那里的第二个大坑解决笔记
》》》》》来测试一下k8s的自愈功能》》》》》》
1、之前的tomcat01.yaml配置文件里面启了2个pod,现在试试只起一个pods,并在node节点机上干死这个tomcat服务,看k8s会不会自愈(就是自动重启容器)。此功能不明白的自己去百度了解。
1.1、先在master主机上删除创建的deployment和service
kubectl delete -f tomcat01.yaml
1.2、查看有没有运行的servce和pod:(我的master主机上显示什么都没运行,kubernetes这条是k8s自己的服务)
2、下面来创建pod:
2.1、把tomcat01.yaml里面配置的pod数据改成只分配一个:
2.2、tomcat01.yaml配置文件保存退出,执行创建tomcat镜像资源服务的对象命令:
kubectl create -f tomcat01.yaml
(可以看到运行了一个pod,并分配到了192.168.26.228节点机上)
3、在192.168.26.228节点机上查看tomcat服务的运行:
ps -ef|grep tomcat
4、在...228机器 上把tomcat干死:kill -9 65160
5、过几秒钟之后再查看(发现k8s已经自己又重新启动了):ps -ef|grep tomcat
更多推荐
所有评论(0)