写在前面,k8s集群均已经搭建好,具体步骤可以查看前面文章。
成都创新互联公司主要从事网站制作、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务雁峰,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108
编写Dockerfile文件,目的创建一个可以公用的image,每次部署tomcat直接使用该镜像不用每次都进行build镜像。
# 开始本来想使用tomcat的官方镜像,但是无奈官方镜像的系统用的都是diban 8的系统,因为我要做日志切割,需要安装cronolog软件, # 翻篇google、百度并没有找到如何使用apt-get 安装,无奈只能使用源码安装,但是安装过程需要gcc和make的支持 # 使用diban 8的如果不对apt-get update 操作,安装不上,但是由于系统落后原因,导致官方或163或清华的源都不支持了。最后无奈使用了ubuntu 14的镜像。 FROM ubuntu:14.04.5 # tomcat安装目录 ENV TOMCAT_HOME /usr/local/tomcat # 这里是放server.xml的文件的目录,这个目录需要跟tomcat/conf文件夹下的server.xml做一个超链接,为什么呢? # 因为我要使用configmap的方式对配置文件挂载,如果直接挂载到conf目录下,那么目录下的其它文件就都没了。所以我们关在的时候挂载新创建的目录,然后做一个超链接映射。 ENV SERVER_XML /configfile # 配置jdk环境 ENV JAVA_HOME /opt/jdk1.7.0_21 ENV JRE_HOME $JAVA_HOME/jre ENV JAVA_BIN $JAVA_HOME/bin ENV CLASSPATH $CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib ENV PATH $TOMCAT_HOME/bin:$JAVA_BIN:$JAVA_HOME/jre/bin:$PATH:$HOME/bin # 增加jdk压缩包到/opt目录下 ADD jdk-7u21-linux-x64.tar.gz /opt ADD apache-tomcat-7.0.77.tar.gz /usr/local RUN ADD ./catalina.sh $TOMCAT_HOME/bin/ ADD ./cronolog-1.6.2.tar.gz /opt/ # 这个是自己手动编写的tomcat启动脚本, # 内容很简单,就两行,第一行是启动tomcat使用 sh /usr/local/tomcat/bin/startup.sh; # 容器要求必须要有前台执行的进程的容器才不会退出,所以第二行随便tail -f 了一个日志即可。 ADD ./start.sh $TOMCAT_HOME/bin/ WORKDIR /opt/cronolog-1.6.2 RUN mv /usr/local/apache-tomcat-7.0.77 /usr/local/tomcat && chmod a+x /usr/local/tomcat/bin/*.sh && \ apt-get update -y && apt-get install gcc make -y && \ ./configure && make && make install && chmod a+x $TOMCAT_HOME/bin/start.sh $TOMCAT_HOME/bin/catalina.sh && \ rm -rf $TOMCAT_HOME/webapps/* && rm -rf $TOMCAT_HOME/conf/server.xml && mkdir $SERVER_XML && \ touch $SERVER_XML/server.xml && ln -s $SERVER_XML/server.xml $TOMCAT_HOME/conf/server.xml EXPOSE 8080 ENTRYPOINT ["/bin/sh", "/usr/local/tomcat/bin/start.sh"]
需要用到配置文件内容如下:
start.sh
#!/bin/sh sh /usr/local/tomcat/bin/startup.sh tail -f /usr/local/tomcat/bin/catalina.sh
catalina.sh
################以上与原有tomcat默认配置文件一致################ 421 #touch "$CATALINA_OUT" 422 if [ "$1" = "-security" ] ; then 423 if [ $have_tty -eq 1 ]; then 424 echo "Using Security Manager" 425 fi 426 shift 427 eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 428 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 429 -classpath "\"$CLASSPATH\"" \ 430 -Djava.security.manager \ 431 -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ 432 -Dcatalina.base="\"$CATALINA_BASE\"" \ 433 -Dcatalina.home="\"$CATALINA_HOME\"" \ 434 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 435 org.apache.catalina.startup.Bootstrap "$@" start \ 436 >> "$CATALINA_OUT" 2>&1 "&" 437 438 else 439 eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 440 -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 441 -classpath "\"$CLASSPATH\"" \ 442 -Dcatalina.base="\"$CATALINA_BASE\"" \ 443 -Dcatalina.home="\"$CATALINA_HOME\"" \ 444 -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 445 org.apache.catalina.startup.Bootstrap "$@" start 2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null & 446 447 fi ################以下与原有tomcat默认配置文件一致################
下面直接build镜像就可以了。
创建一个configmap用于存放tomcat的server.xml文件。
kubectl create configmap cm-server.xml --from-file=‘server.xml的绝对路径’
编写k8s的yaml文件
apiVersion: apps/v1 kind: Deployment metadata: name: dubbo-admin labels: app: dubbo-admin spec: replicas: 1 selector: matchLabels: app: dubbo-admin template: metadata: labels: app: dubbo-admin spec: # 需要仔细说明的地方,这里我们创建了3个volume,分别存放tomcat的log、java项目代码和一个使用configmap形式存放的tomcat配置文件(server.xml) volumes: - name: "code-war" hostPath: path: "/Disk/data/tomcat/dubbo-admin/code/" - name: "tomcat-log" hostPath: path: "/Disk/data/tomcat/dubbo-admin/log/" - name: "serverxml" configMap: name: tomcat-dubbo-admin-server.xml items: - key: server.xml path: server.xml containers: - name: dubbo-admin # 容器使用刚刚build过的镜像 image: fushuitong/tomcat:jdk7u21-tomcat7.0.77-cronolog1.6.2 ports: - containerPort: 8080 #挂载3个volume,挂载目录如下 volumeMounts: - name: code-war mountPath: /usr/local/tomcat/webapps - name: tomcat-log mountPath: /usr/local/tomcat/logs - name: serverxml mountPath: /configfile
直接创建这个Deployment即可。
创建一个service,把tomcat的端口应道node上,以供外面访问,如果tomcat前面还有nginx,可以直接映射到clusterIP.使用nginx进行转发即可。
变了service的yaml文件
apiVersion: v1 kind: Service metadata: name: dubbo-admin spec: ports: - port: 8080 nodePort: 32333 targetPort: dubbo-admin protocol: TCP selector: app: dubbo-admin type: NodePort
最后通过访问任意node的ip的32333端口就能访问到对应的tomca项目了。