项目要求
使用deploy部署3个pod,要求如下:
1、- 两个pod提供tomcat服务, 一个pod提供nginx代理tomcat;
2、- 删除tomcat,或者nginx的Pod保证数据不丢失;
3、- 要求windows通过nginx能够访问到tomcat业务;
业务架构

技术解析:
①nginx 使用反向代理 tomcat
②3 个 pod 都要使用 NFS
③tomcat 之间使用 ClusterIP 网络
④ nginx 使用NodePort 网络
技术细节
1、将 tomcat 与 nginx 推送到 harbor 仓库
docker push harbor250.oldboyedu.com/greytracks/tomcat:9.0.87-jdk17
docker push harbor250.oldboyedu.com/greytracks/xiuxian:v1.0
2、准备数据目录
mkdir -pv /data/nfs-server/lb/{tomcat01,tomcat02,nginx}
3、部署 NFS
#K8S 所有节点 安装 NFS 服务
apt -y install nfs-kernel-server
#nfs server 端 即 master 配置共享目录 并配置 共享权限
mkdir -pv /data/nfs-server
vim /etc/exports
/data/nfs-server *(rw,no_root_squash)
#开机自启并重启服务
systemctl enable --now nfs-server
systemctl restart nfs-server
#验证是否生效
exportfs
4、编写资源清单
vim 01-deploy-tomcat-nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-tomcat01
spec:
replicas: 1
selector:
matchLabels:
apps: tomcat01
template:
metadata:
labels:
apps: tomcat01
spec:
volumes:
- name: data
nfs:
server: 10.0.0.231
path: /data/nfs-server/lb/tomcat01
containers:
- name: tomcat01
image: harbor250.oldboyedu.com/greytracks/tomcat:9.0.87-jdk17
volumeMounts:
- name: data
mountPath: /usr/local/tomcat/webapps/ROOT
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-tomcat02
spec:
replicas: 1
selector:
matchLabels:
apps: tomcat02
template:
metadata:
labels:
apps: tomcat02
spec:
volumes:
- name: data
nfs:
server: 10.0.0.231
path: /data/nfs-server/lb/tomcat02
containers:
- name: tomcat02
image: harbor250.oldboyedu.com/greytracks/tomcat:9.0.87-jdk17
volumeMounts:
- name: data
mountPath: /usr/local/tomcat/webapps/ROOT
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-nginx
spec:
replicas: 1
selector:
matchLabels:
apps: nginx
template:
metadata:
labels:
apps: nginx
spec:
volumes:
- name: data
nfs:
server: 10.0.0.231
path: /data/nfs-server/lb/nginx
containers:
- name: xiuxian
image: harbor250.oldboyedu.com/greytracks/xiuxian:v1.0
volumeMounts:
- name: data
mountPath: /etc/nginx/conf.d
5、准备 tomcat 测试数据
kubectl exec -it deploy-tomcat01-6fb8b5888d-kfsws -- bash
echo tomcat01 > webapps/ROOT/index.html
kubectl exec -it deploy-tomcat02-694ff867f4-l25wm -- bash
echo tomcat02 > webapps/ROOT/index.html
6、创建 service 网络 关联nginx和tomcat
vim 02-svc-tomcat-nginx.yaml
apiVersion: v1
kind: Service
metadata:
name: svc-lb
spec:
type: NodePort
selector:
apps: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
---
apiVersion: v1
kind: Service
metadata:
name: svc-tomcat01
spec:
type: ClusterIP
selector:
apps: tomcat01
ports:
- protocol: TCP
port: 8080
---
apiVersion: v1
kind: Service
metadata:
name: svc-tomcat02
spec:
type: ClusterIP
selector:
apps: tomcat02
ports:
- protocol: TCP
port: 8080
测试验证
kubectl get -f 02-svc-tomcat-nginx.yaml
#NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
#svc-lb NodePort 10.200.64.121 <none> 80:30080/TCP 13s
#svc-tomcat01 ClusterIP 10.200.95.254 <none> 8080/TCP 13s
#svc-tomcat02 ClusterIP 10.200.209.96 <none> 8080/TCP 13s
7、 修改 nginx 配置文件
kubectl exec -it deploy-nginx-846784cc45-tnvbr -- sh
cat > /etc/nginx/conf.d/default.conf <<EOF
upstream tomcat {
server svc-tomcat01:8080;
server svc-tomcat02:8080;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
proxy_pass http://tomcat;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
EOF
nginx -t
#nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
#nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx -s reload
2025/07/15 07:29:22 [notice] 33#33: signal process started
8、 测试验证
kubectl get svc
#NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
#kubernetes ClusterIP 10.200.0.1 <none> 443/TCP 15d
#svc-lb NodePort 10.200.64.121 <none> 80:30080/TCP 10m
#svc-tomcat01 ClusterIP 10.200.95.254 <none> 8080/TCP 10m
#svc-tomcat02 ClusterIP 10.200.209.96 <none> 8080/TCP 10m
for i in `seq 10`; do curl 10.200.64.121;done
#tomcat01
#tomcat02
#tomcat01
#tomcat02
#tomcat01
#tomcat02
#tomcat01
#tomcat02
#tomcat01
#tomcat02
访问 http://10.0.0.231:30080/

大功告成!