《kubernetes-1.8.0》14-examples-javaweb-tomcat-sidecar
来源:互联网 发布:vb自学教程 编辑:程序博客网 时间:2024/06/03 15:38
《kubernetes-1.8.0》14-examples-javaweb-tomcat-sidecar
《kubernetes 1.8.0 测试环境安装部署》
时间:2017-12-04
一、tomcat在k8s中的几种部署方式:
一般而言tomcat在k8s中部署应用有以下两种方式:
- 加载本地宿主机上war包的方式:加载tomcat镜像,并在yaml文件中定义
hostPath
的volume
,在镜像启动时,预先将本地宿主机上的war包加载到容器中的文件系统,后续启动tomcat进程加载该war包。这种方式的几个问题很突出,首先要保证群集中有可能启动该tomcat容器的node节点上都必须存在war包,否则镜像启动加载将找不到对应的war包(可以采用共享文件系统glusterfs,nfs等等,结合上亲和性部署降低负责性),其次更新复杂,一致性维护困难,需要维护多个node上的war包,不能随镜像自动升级。 - 将war包做到tomcat镜像中去:找一个tomcat版本,写dockerfile,将war包打包进去。但这样做就将中间件和应用打包在一起,导致镜像过大,无法拆分,后续升级不方便的因素。
二、tomcat sidecar mode:
kubernetes官网的example给了一个解决方案叫做 sidecar mode
:
简单说明一下:
这种模式将中间件版本和war包分离,放在一个pod里的两个不同容器,充分利用pod内container之间的volume及网络的共享实现war包的加载:
As you can see, user can create a sample:v2 container as sidecar to “provide” war file to Tomcat by copying it to the shared emptyDir volume. And Pod will make sure the two containers compose an “atomic” scheduling unit, which is perfect for this case. Thus, your application version management will be totally separated from web server management.
如你所见,用户能够创建一个sample:v2的容器,作为sidecar通过拷贝war包到共享的emptyDir volume方式提供war包给tomcat。pod将确定两个容器分别为原子级别的调度单元,很适合这种场景。因此,你的应用版本管理与web服务管理奖完全的分离。
三、kubernetes上提供的example:
javaweb.yaml
apiVersion: v1kind: Podmetadata: name: javawebspec: containers: - image: resouer/sample:v1 name: war volumeMounts: - mountPath: /app name: app-volume - image: resouer/mytomcat:7.0 name: tomcat command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"] volumeMounts: - mountPath: /root/apache-tomcat-7.0.42-v2/webapps name: app-volume ports: - containerPort: 8080 hostPort: 8001 volumes: - name: app-volume emptyDir: {}
- 两个
containers
:war
-来自镜像resouer/sample:v1
,tomcat
-来自镜像resouer/mytomcat:7.0
*volumes
:定义了一个名字叫app-volume
的emptydir类型的volume
,该volume
在pod
内的两个container
之间共享,分别被挂载到war
的/app
目录以及tomcat
的/root/apache-tomcat-7.0.42-v2/webapps
目录: - resouer/sample:v1:该镜像是寄语busybox做的,dockerfile超级简单(后续自己的war包可参考):
- 另外 hostport好像不管用了,参考
javaweb-2.yaml
的配置
FROM busybox:latestADD sample.war sample.warADD mv.sh mv.shCMD "sh" "mv.sh"
- mv.sh就做了这个事情:
cp /sample.war /apptail -f /dev/null
将 sample.war 拷到/app目录下,tail -f /dev/null 就是为了container活着
后续需要维护的是sample images,新的应用版本发布的时候更新该镜像,然后rolling update。
如果不想把mv.sh 放到 sample镜像内,可以利用pod lifecycle handler
的poststart
阶段执行相应命令:
* javaweb-2.yaml*
apiVersion: apps/v1beta2kind: Deploymentmetadata: name: javaweb-2spec: replicas: 1 selector: matchLabels: name: javaweb-2 template: metadata: labels: name: javaweb-2 spec: containers: - image: resouer/sample:v2 name: war lifecycle: postStart: exec: command: - "cp" - "/sample.war" - "/app" volumeMounts: - mountPath: /app name: app-volume - image: resouer/mytomcat:7.0 name: tomcat command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"] volumeMounts: - mountPath: /root/apache-tomcat-7.0.42-v2/webapps name: app-volume ports: - containerPort: 8080 volumes: - name: app-volume emptyDir: {}---kind: ServiceapiVersion: v1metadata: name: javaweb-2-servicespec: selector: name: javaweb-2 ports: - protocol: TCP port: 8080 targetPort: 8080 nodePort: 38002 type: NodePort
- resouer/sample:v2 Dockerfile is quite simple
FROM busybox:latestADD sample.war sample.warCMD "tail" "-f" "/dev/null"
加载这个yaml:
kubectl create -f javaweb-2.yaml
测试访问:
本系列其他内容:
01-环境准备
02-etcd群集搭建
03-kubectl管理工具
04-master搭建
05-node节点搭建
06-addon-calico
07-addon-kubedns
08-addon-dashboard
09-addon-kube-prometheus
10-addon-EFK
11-addon-Harbor
12-addon-ingress-nginx
13-addon-traefik
参考资料
https://github.com/kubernetes/examples/tree/master/staging/javaweb-tomcat-sidecar
- 《kubernetes-1.8.0》14-examples-javaweb-tomcat-sidecar
- 《kubernetes-1.8.0》16-examples-vSphere Volume
- 《kubernetes-1.8.0》17-examples-Running ZooKeeper
- 《kubernetes-1.8.0》18-examples-configmap
- 《kubernetes-1.8.0》19-examples-secrets
- 《kubernetes-1.8.0》20-examples-Deployments
- tomcat examples
- Tomcat Servlet Examples threats
- JavaWeb--Tomcat
- Tomcat-JavaWeb
- 【JavaWeb】Tomcat
- javaweb--Tomcat>>认识Tomcat
- kubernetes中 demo: tomcat + mysql
- 越来越稳!Kubernetes 1.8.0 版本发布
- 《kubernetes-1.8.0》01-环境准备
- 《kubernetes-1.8.0》02-etcd群集搭建
- 《kubernetes-1.8.0》03-kubectl管理工具
- 《kubernetes-1.8.0》04-master搭建
- 何恺明团队推出Mask^X R-CNN,将实例分割扩展到3000类
- iOS 定时器
- 秒杀系统架构优化思路
- C# 含runat="server"属性 select控件的value和text赋值(实际值和显示文本)
- activiti使用
- 《kubernetes-1.8.0》14-examples-javaweb-tomcat-sidecar
- numpy简易教程
- ubuntu server17.10无线网络连接
- myql在windows上的安装
- 自动将jsx转化为js
- Centos下 Nginx安装与配置
- input数字区间,前边的大于后边的
- Bootstrap——排版
- OpenNI2 Arm-Linux下的安装配置