前言:

  2018年12月6日 今天终于把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、弄好了,弄好了,啊西吧,浏览器打开:192.168.26.228: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的主页,恭喜请看本文章最前面那里的第二个大坑解决笔记

成功啦啦啦啦啦啦啦。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2018年12月11日15:5:53更新

》》》》》来测试一下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

这就是k8s的自愈功能,啦啦啦啦

k8s简单的来部署一下tomcat,并测试自愈功能的更多相关文章

  1. JAX-WS(三)构建简单webservice部署到tomcat上

    前言: 虽然构建本地的jax-ws的webservice很简单,但要部署到tomcat上要绕过点弯. tomcat本身和jdk都没有jaw-ws的API,所以部署的时候需要额外做点事情,有两种选择 1 ...

  2. Eclipse中的Web项目自动部署到Tomcat

    原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写博客,现在感觉还是很有必要的,编程中每个人对于犯过的错误 ...

  3. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  4. 有关使用Maven常见问题总结(Eclipse中使用Maven、Maven项目部署到tomcat等问题)

    http://blog.csdn.net/sunitjy/article/details/42709311 ********************************************** ...

  5. Eclipse中WEB项目自动部署到Tomcat

    原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错,以前很少写博客,现在感觉还是很有必要的,编程中每个人对于犯过的错误 ...

  6. maven自动部署到tomcat的问题

    最近需要使用Maven将项目自动部署到Tomcat,在网络上也查找了很多文章,内容大同小异,今天打算在这里给自己做一个小总结 参考网址:http://blog.csdn.net/dilaomimi/a ...

  7. MyEclipse Web Project导入Eclipse Dynamic Web Project,无法部署到tomcat问 题

    做作业遇到一个小问题,将MyEclipse Web Project导入到Eclipse中开发.在部署到tomcat时,发现无法发布这个项目. 问题分析: MyEclipse Web Project被识 ...

  8. eclipse创建的maven项目无法部署到tomcat

    今天在eclipse中创建了个maven项目,想运行起来看看,发现代码开发完成后无法发布到tomcat. 解决办法如下: 第一种: 选中项目-右键属性-Project Facets 勾选上面三项并选择 ...

  9. 将应用部署到Tomcat根目录的方法

    将应用部署到Tomcat根目录的目的是可以通过“http://[ip]:[port]”直接访问应用,而不是使用“http://[ip]:[port]/[appName]”上下文路径进行访问.   方法 ...

随机推荐

  1. [MySQL] 索引中的b树索引

    1.索引如果没有特别指明类型,一般是说b树索引,b树索引使用b树数据结构存储数据,实际上很多存储引擎使用的是b+树,每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历 2.底层的 ...

  2. C-sizeof和strlen区别,以及sizeof如何计算结构体大小

    sizeof和strlen区别 sizeof是关键字,在编译时就能计算出值,可以计算任何类型 strlen是函数,只有在运行时才能去计算,且只能计算字符型的. 对于数组时,strlen是判断’\0’为 ...

  3. 设计模式总结(Java)—— 观察者模式

    概述 它用于建立一种对象与对象之间的依赖关系,一个对象发生改变时将自动通知其他对象,其他对象将相应作出反应.在观察者模式中,发生改变的对象称为观察目标,而被通知的对象称为观察者,一个观察目标可以对应多 ...

  4. csharp: LocalDataCache.sync

    app.config: <?xml version="1.0" encoding="utf-8" ?> <configuration> ...

  5. [JS设计模式]:工厂模式(3)

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况. 说的通俗点,就像公司茶水间的饮料 ...

  6. 当桌面的快捷方式图标左下角出现一个X(叉)的时候应该怎么去掉

    win+r打开运行,然后复制粘贴如下命令就OK辣 cmd /k reg delete "HKEY_CLASSES_ROOT\lnkfile" /v IsShortcut /f &a ...

  7. 【Dojo 1.x】笔记4 文字动画效果

    这个笔记,仅仅演示dojo/fx模块的slideTo()方法的简单使用. 有关该模块的用法,见API:有关Dojo的动画.效果,见页面 效果  和  动画 1. 页面组织 html部分同笔记3,js部 ...

  8. Android: 在native中访问assets全解析

    本文总结在Android Native C++开发中访问APK中的assets资源的方法 在CMake中添加相关NDK LIB的 依赖 因为我们接下来用到的一些函数实现在NDK库libandroid. ...

  9. 性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据

    基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据   by:授客 QQ:1033553122 实现功能 测试环境 环境搭建 使用前提 使用方法 运行程序 效果展 ...

  10. 推荐一款MongoDB的客户端管理工具--nosqlbooster

    今天给大家推荐一款MongoDB的客户端工具--nosqlbooster,这个也是我工作中一直使用的连接管理MongoDB的工具.这个工具还有个曾用名--mongobooster.nosqlboost ...