1、在NFS SERVER上为tomcat、nginx创建相关目录

NFS SERVER的部署配置参考:https://www.cnblogs.com/yanql/p/15410308.html 1.3.1 部署NFS server

# tomcat
mkdir /data/k8s-data/tomcat/webapps/apps1 -p
echo 'tomcat index' > /data/k8s-data/tomcat/webapps/apps1/index.html # nginx
mkdir /data/k8s-data/nginx/html
echo 'nginx html index' > /data/k8s-data/nginx/html/index.html

2、制作tomcat镜像

2.1、准备tomcat优化配置文件

# catalina.sh 增加内存优化参数
JAVA_OPTS="-Dfile.encoding=UTF-8-server -Xms1024m -Xmx2048m -XX:NewSize=512m -XX:MaxNewSize=1024m -XX:MaxTenuringThreshold=10 -XX:NewRatio=2 -XX:+DisableExplicitGC" # server.xml 开启Nio2线程模式并设置最大最新连接数
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="500" minSpareThreads="50" prestartminSpareThreads="true" maxQueueSize="100"/> <Connector executor="tomcatThreadPool"
port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"
connectionTimeout="20000"
redirectPort="8443" /> # tomcat-users.xml 在tomcat-users标签增加如下内容,开启tomcat页面管理
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="admin"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="FggOueSastmtlQzB" roles="admin-gui,admin,manager-gui,manager"/> # 开启tomcat页面管理,还需要修改webapps/manager/META-INF/context.xml,将一下行注释掉。
<!--<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> -->

2.2、编写tomcat镜像Dockerfile

# 目录中的文件如下:
-rw-r--r-- 1 root root 10564666 8月 10 03:52 apache-tomcat-8.5.70.tar.gz
-rwxr-x--- 1 root root 25458 10月 20 09:31 catalina.sh*
-rw-r--r-- 1 root root 1057 10月 20 10:14 Dockerfile
-rw-r--r-- 1 root root 2054960 9月 10 19:58 glibc-2.29-r0.apk
-rw-r--r-- 1 root root 191757099 9月 10 19:23 jdk-8u192-linux-x64.tar.gz
-rw------- 1 root root 7647 10月 20 09:31 server.xml
-rw------- 1 root root 3024 10月 20 10:13 tomcat-users.xml
-rw-r--r-- 1 root root 1494714 10月 20 09:53 webapps.tgz # Dockerfile
FROM 192.168.1.110/base/alpine:v20211010-1704
LABEL maintainer="yanql<yanqianling@faxuan.net>" ADD jdk-8u192-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.70.tar.gz /usr/local/
ADD webapps.tgz /opt/
COPY catalina.sh /usr/local/apache-tomcat-8.5.70/bin/catalina.sh
COPY glibc-2.29-r0.apk /
COPY server.xml /usr/local/apache-tomcat-8.5.70/conf/
COPY tomcat-users.xml /usr/local/apache-tomcat-8.5.70/conf/ RUN set -x \
&& addgroup -g 101 -S nginx \
&& adduser -S -D -H -u 101 -h /var/cache/nginx -s /sbin/nologin -G nginx -g nginx nginx \
&& chown -R nginx:nginx /opt/webapps /usr/local/apache-tomcat-8.5.70 \
&& sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
&& wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
&& apk add glibc-2.29-r0.apk \
&& rm -rf /usr/local/apache-tomcat-8.5.70/webapps ENV JAVA_HOME /usr/local/jdk1.8.0_192
ENV PATH ${PATH}:${JAVA_HOME}/bin EXPOSE 8080 CMD ["/usr/local/apache-tomcat-8.5.70/bin/catalina.sh", "run"]

2.3 构建镜像并长传到本地harbor

# docker build -t 192.168.1.110/web/alpine-jdk-8u192-tomcat-8.5.70:v20211020-1014 .

# docker push 192.168.1.110/web/alpine-jdk-8u192-tomcat-8.5.70:v20211020-1014

3、部署tomcat服务

3.1、编写tomcat ymal文件

root@k8-deploy:~/k8s-yaml/web/tomcat# cat tomcat.yml
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc
namespace: yun
spec:
type: NodePort
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
nodePort: 38080
selector:
app: tomcat-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deploy
namespace: yun
spec:
replicas: 1
selector:
matchLabels:
app: tomcat-app
template:
metadata:
labels:
app: tomcat-app
spec:
containers:
- name: tomcat-ct
image: 192.168.1.110/web/alpine-jdk-8u192-tomcat-8.5.70:v20211020-1014
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
protocol: TCP
name: http-8080
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
volumeMounts:
- name: tomcat-webapps
mountPath: "/opt/webapps"
volumes:
- name: tomcat-webapps
nfs:
server: 192.168.2.10
path: /data/k8s-data/tomcat/webapps

3.2 启动并检查tomcat服务

root@k8-deploy:~/k8s-yaml/web/tomcat# kubectl apply -f tomcat.yml
service/tomcat-svc created root@k8-deploy:~/k8s-yaml/web/tomcat# kubectl get pod -n yun
NAME READY STATUS RESTARTS AGE
tomcat-deploy-74564db6d6-tbh98 1/1 Running 0 15s root@k8-deploy:~/k8s-yaml/web/tomcat# kubectl get svc -n yun
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tomcat-svc NodePort 10.0.106.99 <none> 8080:38080/TCP 2m17s # curl 192.168.2.18:38080/app1/index.html
tomcat index # kubectl exec tomcat-deploy-74564db6d6-tbh98 -n yun -it -- sh
/ # df -h
Filesystem Size Used Available Use% Mounted on
...
192.168.2.10:/data/k8s-data/tomcat/webapps
97.9G 18.0G 74.9G 19% /opt/webapps
...

4、制作nginx镜像

4.1、准备nginx配置文件

# nginx.conf
root@k8-deploy:~/k8s-yaml/web/nginx/dockerfile# cat nginx.conf
user nginx;
worker_processes auto; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid; events {
worker_connections 4096;
} http {
include mime.types;
default_type application/octet-stream;
client_max_body_size 200M;
sendfile on;
keepalive_timeout 65;
add_header Access-Control-Allow-Origin *; log_format main '$time_local|$remote_addr|$server_name|$request|'
'$status|$body_bytes_sent|$request_time|$bytes_sent|$request_length|'
'$upstream_response_time|$http_referer|$http_user_agent';
access_log /var/log/nginx/access.log main; gzip on;
gzip_min_length 100;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/octet-stream;
gzip_vary on; upstream tomcat_webserver {
server tomcat_svc:8080;
} include conf.d/*.conf;
} # default.conf
cat default.conf
server {
listen 80;
server_name localhost; location / {
root /usr/share/nginx/html;
index index.html index.htm;
} location /app1 {
proxy_pass http://tomcat_webserver;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}

4.2、编写nginx镜像Dockerfile

 vim Dockerfile
FROM nginx:1.21.1
COPY nginx.conf /etc/nginx/
COPY default.conf /etc/nginx/conf.d/

4.3、构建nginx镜像并上传本地harbor

docker build -t 192.168.1.110/web/nginx:1.21.1-v3 .

docker push 192.168.1.110/web/nginx:1.21.1-v3

5、部署nginx服务

5.1、编写nginx ymal文件

root@k8-deploy:~/k8s-yaml/web/nginx/yaml# cat nginx.yml
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
namespace: yun
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: 80
nodePort: 30080
selector:
app: nginx-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: yun
spec:
replicas: 1
selector:
matchLabels:
app: nginx-app
template:
metadata:
labels:
app: nginx-app
spec:
containers:
- name: nginx-ct
image: 192.168.1.110/web/nginx:1.21.1-v3
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
protocol: TCP
name: http
resources:
limits:
cpu: 2
memory: 2Gi
requests:
cpu: 500m
memory: 1Gi
volumeMounts:
- name: nginx-html
mountPath: "/usr/share/nginx/html"
volumes:
- name: nginx-html
nfs:
server: 192.168.2.10
path: /data/k8s-data/nginx/html

5.2 启动并检查nginx服务

# kubectl apply -f nginx.yml

# kubectl get pod -n yun
NAME READY STATUS RESTARTS AGE
nginx-deploy-7b9475c5b-2kzg9 1/1 Running 0 6s
tomcat-deploy-74564db6d6-tbh98 1/1 Running 0 88m # 进入nginx pod 查看nfs挂载
# kubectl exec nginx-deploy-7b9475c5b-2kzg9 -n yun -it -- bash
root@nginx-deploy-7b9475c5b-2kzg9:/# df -h
Filesystem Size Used Avail Use% Mounted on
...
192.168.2.10:/data/k8s-data/nginx/html 98G 18G 75G 20% /usr/share/nginx/html
... # nginx index.html
# curl 192.168.2.17:30080
nginx html index # 通过nginx代理的tomcat index.html
# curl 192.168.2.17:30080/app1/index.html
tomcat index

7.3 自定义镜像-运行nginx与tomcat并结合PV/PVC/NFS以实现动静分离示例的更多相关文章

  1. 19.Tomcat多实例部署及负载均衡、动静分离

    Tomcat多实例部署及负载均衡.动静分离 目录 Tomcat多实例部署及负载均衡.动静分离 Tomcat多实例部署 安装jdk 设置jdk环境变量 安装tomcat 配置 tomcat 环境变量 修 ...

  2. Nginx入门简介和反向代理、负载均衡、动静分离理解

    场景 Nginx简介 Nginx ("engine x")是一个高性能的 HTTP 和反向代理服务器 特点是占有内存少,并发能力强,事实上 nginx 的并发能力确实在同类型的网页 ...

  3. 【Linux运维-集群技术进阶】Nginx+Keepalived+Tomcat搭建高可用/负载均衡/动静分离的Webserver集群

    额.博客名字有点长.. . 前言 最终到这篇文章了,心情是有点激动的. 由于这篇文章会集中曾经博客讲到的全部Nginx功能点.包含主要的负载均衡,还有动静分离技术再加上这篇文章的重点.通过Keepal ...

  4. Nginx动静分离经典

    Nginx:安装nginx之前需要安装pcre包和zlib以支持重写,正则以及网页压缩等等]把所需的包下载到/usr/src下[根据自己的习惯,路径可以改变]1.首先安装pcre: cd /usr/s ...

  5. Nginx动静分离知识及配置

    Nginx动静分离知识及配置,本质上与分离上传下载功能是相同功能,本质就是在文件服务器也是需要部署WEB应用的,只是在进行代理分离的时候分配到对应的文件服务器上去. 随着Nginx高性能Web服务器大 ...

  6. Nginx配置实例-动静分离实例:搭建静态资源服务器

    场景 Nginx入门简介和反向代理.负载均衡.动静分离理解: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/102790862 U ...

  7. nginx的应用【静态代理、动静分离】

    Nginx主要应用: 静态web服务器 负载均衡 静态代理虚拟主机 静态代理 :把所有静态资源的访问改为访问nginx,而不是访问tomcat,因为nginx更擅长于静态资源的处理,性能更好,效率更高 ...

  8. Nginx动静分离经典案例配置

    随着Nginx高性能Web服务器大量被使用,目前Nginx最新稳定版为1.2.6,张宴兄在实际应用中大量使用Nginx,并分享Nginx高性能Web服务器知识,使得Nginx在国内也是飞速的发展.那今 ...

  9. 001/Nginx高可用模式下的负载均衡与动静分离(笔记)

    Nginx高可用模式下的负载均衡与动静分离 Nginx(engine x)是一个高性能的HTTP和反向代理服务器,具有内存少,并发能力强特点. 1.处理静态文件.索引文件以及自动索引:打开文件描述符缓 ...

随机推荐

  1. Java(46)类加载器

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201673.html 博客主页:https://www.cnblogs.com/testero ...

  2. Python代码阅读(第21篇):将变量名称转换为蛇式命名风格

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现将变量名称转换为蛇式命名风格(snake case)的功能. 本篇阅读的代码片段来自于30-second ...

  3. Stream中的Collector收集器原理

    前言 Stream的基本操作因为平时工作中用得非常多(也能看到一些同事把Stream操作写得很丑陋),所以基本用法就不写文章记录了. 之所以能把Stream的操作写得很丑陋,完全是因为Stream底层 ...

  4. BUAA软件工程个人作业-软件案例分析

    BUAA个人博客作业-软件案例分析 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 软件案例分析 我在这个课程的目标是 学习开发软件的能力 这个作 ...

  5. ssh后门反向代理实现内网穿透

    如图所示,内网主机ginger 无公网IP地址,防火墙只允许ginger连接blackbox.example.com主机 假如你是ginger的管理员root,你想要用tech主机连接ginger主机 ...

  6. STM32定时器学习---基本定时器

    STM32F1系列的产品,除了互联网产品外,工作8个,3种定时器,其中一种就是基本定时器.那么STM32单片机的基本定时器如何操作以及编程呢? 下面我们就来详细的了解一下 STM32F1系列的产品,除 ...

  7. Linux C语言链表详细分析

    链表是一种常见的基础数据结构,结构体指针在这里得到了充分的利用.链表可以动态的进行存储分配,也就是说,链表是一个功能极为强大的数组,他可以在节点中定义多种数据类型,还可以根据需要随意增添,删除,插入节 ...

  8. 修炼Servlet

    修炼Servlet 一.Servlet简单认识 1.Servlet是什么 Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的 ...

  9. 攻防世界 杂项 3.神奇的Modbus

    [目标] 了解modbus协议 [工具] Wireshark [分析过程] 在数据包中寻找flag就行,flag是明文形式存储. 工业设备消息传输使用modbus协议.所以我就采集了modbus的通信 ...

  10. 字符串与模式匹配算法(二):MP算法

    一.MP算法介绍 MP 算法(Morris-Pratt算法)是一种快速串匹配算法,它是詹姆斯·莫里斯(James Morris)和沃恩·普莱特(Vaughan Pratt)在1970年提出的一种快速匹 ...