k8s部署tomcat并且映射本地目录

1.编写Dockerfile
[root@VM-12-7-centos opt]# cat Dockerfile
FROM centos:7.2.1511
VOLUME /tmp
FROM centos
MAINTAINER Harry
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD apache-tomcat-8.5.54.tar.gz /usr/local/
ADD jdk-8u11-linux-x64.tar.gz /usr/local/
ENV MYPATH /usr/local/
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.54
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.54
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.54/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.54/bin/logs/cataline.out
2.执行dockerfile
docker build -f Dockerfile -t tomcat . >/dev/null 2>&1
3.上传镜像到Harbor 仓库
17.3.1 给tomcat:latest修改标记为192.168.32.131/tomcat/tomcat:v4.14.1
docker tag tomcat:v4.14.1 192.168.32.131/tomcat/tomcat:v4.14.1
17.3.1 推送镜像到192.168.32.131/tomcat/tomcat:v4.14.1
docker push 192.168.32.131/tomcat/tomcat:v4.14.1

启动docker例子:
-p: 9090(外部映射端口) 8080(容器内部监控端口)
-d: 后台运行
docker run -id -d -p 9090:80 --name testnginx -v /usr/local/nginx/conf/nginx.conf:/usr/local/nginx/conf/nginx.conf 192.168.32.131/nginx/nginx:22401

docker run -id -p 9090:8080 --name tomcat 192.168.32.131/tomcat/tomcat:v4.18.1

进入镜像:
docker exec -it 镜像名 /bin/bash

k8s部署tomcat并且映射本地目录_第1张图片

4. 创建namespace 命名空间
kubectl create namespace tomcat
5. 创建NFS 共享目录

使master主机下:/usr/local/www-data/内容发生改变node1、node2下的/mnt目录内容都将会改变,达到同步效果

作用:
node1、node2下的/mnt目录都是maser下/www-data/目录的映射
主要/www-data/内容发生改变node1、node2下的/mnt目录内容都将会改变
下载安装nfs-utils、rpcbind(Master节点)
yum install -y nfs-utils rpcbind
配置开放的目录(Master节点)
nno_root_squash: 无论主节点还是其他节点,映射的目录都以root权限执行,拥有rwx全部权限

mkdir -p /usr/local/data/www-data
echo "/usr/local/data/www-data 192.168.32.128/24(rw,sync,no_root_squash)" > /etc/exports

启动nfs-utils、rpcbind(Master节点)
systemctl restart rpcbind.service
systemctl restart nfs.service

子节点下载安装nfs-utils(Node节点)
yum install -y nfs-utils rpcbind

查看Master节点开放目录(Node节点)
[root@k8s-node1 ~]# showmount -e 192.168.32.128
Export list for 192.168.32.128:
/usr/local/data/www-data 192.168.32.128/24

node1、node2节点永久挂载nfs:
vim /etc/fstab
192.168.32.128:/usr/local/data/www-data /mnt    xfs     defaults     0 0
[root@k8s-node1 ~]# mount -a

设置开机启动(Master、Node1、Node2)
systemctl enable nfs.service

k8s部署tomcat并且映射本地目录_第2张图片

6. 编写tomcat-deploy.yaml 文件
[root@k8s-master tomcat]# cat tomcat-deploy.yaml 
apiVersion: extensions/v1beta1
kind: Deployment		#绑定的是Deployment模板
metadata:
  name: tomcat-deployment		# deployment模板的名字
  labels:					   # 标签
    app: tomcat				    # app 名字,需要和后面的service.yaml 一致
spec:						   # pod 的描述信息
  replicas: 2					# 开启两个pods
  selector:						# 选择器
    matchLabels:
      app: tomcat				# 需要和app 一致
  template:
    metadata:
      labels:
        app: tomcat				# 需要和app 名字一致
    spec:
      volumes:					# 宿主机挂载目录
      - name: web-app-webapps     # 给需要挂载的宿主机路径起个名字
        hostPath:				 # 宿主机路径
          path: /mnt/webapps	  # 路径: 宿主机路径目录	
      - name: web-app-logs
        hostPath:
          path: /mnt/logs
      containers:				 # 容器描述	
      - name: tomcat			 # 容器的名字	
        image: 192.168.32.131/tomcat/tomcat:v4.18.1   # 要拉取的镜像地址
        ports:		 			# 容器内部映射的端口号									
        - containerPort: 8080    #  容器内部映射的端口号
        volumeMounts:			# 容器内部映射的目录路径
        - name: web-app-webapps  # 给需要映射的目录路径起个名字,名字要和上面的宿主机器的名字对应
          mountPath: /usr/local/apache-tomcat-8.5.54/webapps  # 容器内部映射挂载的目录路径
        - name: web-app-logs
          mountPath: /usr/local/apache-tomcat-8.5.54/logs
7. 创建启动tomcat-deploy.yaml
[root@k8s-master tomcat]# kubectl apply -f tomcat-deploy.yaml -n tomcat 
获取tomcat 命名空间下的pods,deploy情况
[root@k8s-master tomcat]# kubectl get pods,deploy -n tomcat -o wide

在这里插入图片描述

8.创建Service
[root@k8s-master tomcat]# cat tomcat-service.yaml

apiVersion: v1			# service api版本 
kind: Service			# 使用service 模块
metadata:			    # 元数据
  name: tomcat-service   # 新建自定义service 模块的名字
spec:                    # service 信息
  type: NodePort		# 使用Nodeport协议,对外提供开放端口 
  ports:        		# 端口信息
    - port: 8080   		# service 的端口
      targetPort: 8080  # 容器tomcat的端口
      nodePort: 30090   # 自定义对外开发的端口
  selector: 		   #  选择标签器
    app: tomcat		   # app tomcat 此名字要匹配deployment 的app: tomcat

18.4 创建启动tomcat-service.yaml

[root@k8s-master tomcat]# kubectl apply -f tomcat-service.yaml -n tomcat
获取tomcat 命名空间下的pods,svc,deploy情况
[root@k8s-master tomcat]# kubectl get pods,svc,deploy -n tomcat -o wide
9. 查看master主机挂载目录

k8s部署tomcat并且映射本地目录_第3张图片

10. 查看各节点的/mnt 目录是否同步了master 的挂载目录

k8s部署tomcat并且映射本地目录_第4张图片

18.5.3 查看pod 容器内部目录

[root@k8s-master tomcat]# kubectl exec -it tomcat-deployment-7cd7f897b7-5hbtt -n tomcat -- /bin/bash

k8s部署tomcat并且映射本地目录_第5张图片

可以看到node1,bode2宿主机下的/mnt/目录已经被映射进去了,node1,和pods 容器里的文件一致。

k8s部署tomcat并且映射本地目录_第6张图片

修改pods 容器里的文件,查看是否自动同步到外部宿主机/mnt 目录下

[root@tomcat-deployment-7cd7f897b7-5hbtt ROOT]# echo '

this is test page3

' > test.txt

在这里插入图片描述

查看node1 节点下的/mnt 目录是否同步了pods 容器内生成了test.txt文件

在这里插入图片描述

接着载查看master 节点,是否也同步了各节点下的test.txt文件

k8s部署tomcat并且映射本地目录_第7张图片

18.6 访问tomcat
curl 192.168.32.128:30090

在这里插入图片描述k8s部署tomcat并且映射本地目录_第8张图片
k8s部署tomcat并且映射本地目录_第9张图片

你可能感兴趣的:(k8s,linux,kubernetes,tomcat)