Tomcat安装--虚拟机和k8s对比

实验目的

工作之余,学习Docker和K8S有一段时间了,算是略懂皮毛……

开始的时候,觉得使用Docker和K8S各种不习惯,慢慢的,发现还是K8S操作起来方便,比自己“吭哧吭哧”上官网、查资料,配置yum仓库,在虚拟机上一步步安装各种应用比起来,K8S还是省事儿不少,再考虑到生产环境的集群管理、服务自动发现、系统自动修复等,还是应该学习新技术。

这期就针对Tomcat安装,分别用CentOS虚拟机,和K8S+Docker对比一下。

Tomcat安装--虚拟机和k8s对比_第1张图片

实验准备

虚拟机环境准备:

1)操作系统CentOS 7.5

2)Tomcat 7 (可选,如果是通过二进制解压安装,需要在官网上下载,然后在虚拟机本地解压,配置环境变量)

3)JAVA 1.8 (可选,如果Tomcat选择二进制解压安装,或者是yum安装没有包含JAVA,需要手动安装,然后配置环境变量)

K8S + Docker环境准备:

1)Docker 18.03.1-ce

2)Kubernetes环境(可以是集群,也可以是单节点,即Master和Node在一台虚拟机或物理机上)

 

实验过程

1. 虚拟机CentOS 7.5 实验过程:

步骤一:安装Tomcat。因为只是做测试,图省事儿,这次并没有上官网,也没有采用二进制解压安装,而是直接使用yum安装,所以Tomcat版本比较低(Tomcat 7,官网已发布到Tomcat 10),但这并不影响实验结果,只要能出现Tomcat欢迎界面即可。

如果不确定自己的虚拟机环境是干净的,之前没有安装过Tomcat或JAVA,可以使用命令查看:

yum info tomcat

rpm -q tomcat

tomcat version

java -version

如果没有任何tomcat和JAVA信息的话,就正式开始安装吧。

yum install tomcat -y

安装完成后,使用tomcat version查看版本信息,如果能够看到相关信息,说明安装成功。

Tomcat安装--虚拟机和k8s对比_第2张图片

 

步骤二:安装JAVA。但我发现在yum安装Tomcat的时候,依赖包中已经安装了java,索性用java -version查看了一下版本信息,发现确实已安装。

Tomcat安装--虚拟机和k8s对比_第3张图片

 

 

Tomcat安装--虚拟机和k8s对比_第4张图片

步骤三:配置环境变量。正常情况下,为了后续工作都会手动配置一下环境变量,比如Tomcat的CATALINA_BASE和CATALINA_HOME,还有JAVA的JAVA_HOME,CLASSPATH等。由于我只是简单测试,查看Tomcat运行状态,好像也关联了环境变量,索性就省略了,抱着“侥幸”心态只追求那个欢迎界面。

tomcat start   //启动tomcat服务

systemctl status tomcat   //查看tomcat服务运行状态

 

步骤四:验证安装结果。Tomcat服务已启动,但此时还不能访问tomcat欢迎页面,还需要安装tomcat管理包。

yum install -y tomcat-webapps tomcat-admin-webapps

关闭防火墙firewalld服务,并重新启动tomcat服务,然后使用curl命令进行本地验证。

systemctl stop firewalld       //关闭防火墙

tomcat start              //可使用tomcat stop停止服务,再start启动服务

ss -ntl | grep 8080        //查看监听端口,能看到8080,说明tomcat启动正常

curl localhost:8080        //测试本地8080端口上的服务

 

Tomcat安装--虚拟机和k8s对比_第5张图片

可以看到tomcat欢迎页面的HTML内容,为了直观可见,在浏览器中输入虚拟机IP地址和8080端口,正常可看到tomcat欢迎页面。

Tomcat安装--虚拟机和k8s对比_第6张图片

 

2. Kubernetes + Docker环境试验

 

Tomcat安装--虚拟机和k8s对比_第7张图片

在K8S中,最小的部署单元是Pod,一个Pod里面可以创建多个容器,也就是docker,所以在本实验中,Node2就相当于一台虚拟机(生产环境中肯定是物理机),在这个Node2中创建一个Pod,可以叫Pod1(在实验中名字为“demo-tomcat-”前缀加一串随机字符),然后在Pod1中运行着一个tomcat容器(docker),即上图红色框框中。

步骤一:创建运行tomcat的Pod。通过一个yaml文件来创建(如果对于yaml格式的文件不熟悉,可先百度扫盲一下,这种文件格式在K8S中经常遇到),该yaml文件为tomcat-deployment.yaml,详细代码如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo-tomcat
  labels:
    app: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
      - name: tomcat
        image: kubeguide/tomcat-app:v1
        ports:
        - containerPort: 8080

先不要因为看到上面的代码而胆怯,后续我会详细的介绍这些代码,看多了就习惯了,而且会发现越来越“好看”。关键几条解释如下:

Tomcat安装--虚拟机和k8s对比_第8张图片

 

使用kubectl命令行创建该Pod,注意yaml文件的名字必须跟自己创建的一致,创建过程大概几十秒,直到该Pod运行状态为Running。

kubectl apply -f tomcat-deployment.yaml

kubectl get pod

Tomcat安装--虚拟机和k8s对比_第9张图片

 

步骤二:验证结果。可以通过kubectl命令行,获取该Pod的IP地址,同样使用IP地址加端口号,即可访问该Pod中运行的tomcat容器服务。

kubectl get pod -o wide

Tomcat安装--虚拟机和k8s对比_第10张图片

curl 10.122.16.169:8080

Tomcat安装--虚拟机和k8s对比_第11张图片

实际上,实验到此就算是成功了,如果想为了直观的用浏览器看到欢迎页面,还需要再做点工作。在K8S中,Pod是不直接对外暴露访问IP地址和端口的,为了集群好管理,如果需要对外提供web服务,可通过Service组件实现。

步骤三:使用浏览器验证tomcat欢迎页面。与创建Pod类似,我们需要先编写一个yaml文件,然后创建一个Service组件,并且与运行Tomcat的Pod关联起来,外部用户通过浏览器访问到Service组件的IP地址和端口号,然后进一步映射到Pod上,从而能够顺利打开Tomcat的欢迎页面。

创建tomcat-svc.yaml文件,详细代码如下:

apiVersion: v1
kind: Service
metadata:
  name: mytomcat
spec:
  type: NodePort
  ports:
  - port: 8080
    nodePort: 30001
  selector:
    app: demo

同样不要因为看到这些代码而发懵,看多了就习惯了。需要强调的是,创建的这个Service文件中一些信息,必须要跟之前创建的Pod文件中关联起来,否则彼此是找不到的。

Tomcat安装--虚拟机和k8s对比_第12张图片

使用kubectl命令行创建Service,然后根据生成的nodePort端口号(即30001),然后使用Node(即虚拟机)IP地址加上此端口号,通过浏览器访问。如果成功,可访问到Tomcat欢迎界面。

kubectl apply -f tomcat-svc.yaml

kubectl get svc

Tomcat安装--虚拟机和k8s对比_第13张图片

 

Tomcat安装--虚拟机和k8s对比_第14张图片

实验总结

1)在虚拟机环境下,安装Tomcat,需要自行配置和设置的地方多,我选择还是“懒人做法”,直接用yum安装了,如果选择二进制解压安装,需要单独安装Tomcat、JAVA,配置环境变量,还得设置防火墙(要么关闭,要么放通8080端口),安装Tomcat管理包。

在K8S + Docker环境下,只要编写好yaml文件,镜像(安装包)是直接从K8S公共镜像仓库拉取的,整个镜像包含了完整的运行环境,不需要额外的配置。如果要修改映射端口等信息,仍然是在yaml文件中完成,不需要打开其它配置文件。

2)在权限隔离方面,虚拟机环境下安装了Tomcat,在此虚拟机上如果还安装其它应用,彼此是会互相影响的,且可以看到彼此的配置文件等关键信息,内部几乎没有隔离。从浏览器访问,也是直接访问的虚拟机上的Tomcat服务,也没有内部和外部的逻辑隔离。

而K8S + Docker环境下,权限隔离明显要好很多,Node里面不同Pod的隔离,比如安装Tomcat的Pod和安装Nginx的Pod之间就是隔离的,无论是资源还是权限;对内服务和对外服务的隔离,比如创建Pod后,内部可以直接访问Tomcat欢迎页面,如果外部要通过浏览器访问,需要再创建Service并且暴露nodePort,才能被访问。

 

你可能感兴趣的:(技术交流,docker,kubernetes,linux,tomcat,云计算)