将nginx tomcat mysql 的数据上传到 nfs 服务器中
1: 安装 NFS 服务器
在 NFS 服务器上,您需要安装 NFS 服务。以下是在基于 Debian/Ubuntu 和 CentOS/RHEL 系统上的安装命令:
Debian/Ubuntu
sudo apt update
sudo apt install nfs-kernel-server
CentOS/RHEL
sudo yum install nfs-utils
2: 创建共享目录
选择一个目录来存放 Nginx 和 Tomcat 的项目文件。例如,您可以创建一个名为 /srv/nfs 的目录:
sudo mkdir -p /srv/nfs/nginx
sudo mkdir -p /srv/nfs/tomcat
sudo mkdir -p /srv/nfs/mysql
3: 设置目录权限
设置目录的权限,以便 Nginx 和 Tomcat 可以访问这些文件:
sudo chown -R nobody:nogroup /srv/nfs/nginx
sudo chown -R nobody:nogroup /srv/nfs/tomcat
sudo chown -R nobody:nogroup /srv/nfs/mysql
sudo chmod 777 /srv/nfs/nginx
sudo chmod 777 /srv/nfs/tomcat
sudo chmod 777 /srv/nfs/mysql
4: 配置 NFS 导出
编辑 NFS 配置文件 /etc/exports,添加以下行以导出目录:
/srv/nfs/nginx *(rw,sync,no_subtree_check)
##/srv/nfs/nginx *(rw,sync,no_subtree_check,no_root_squash)
/srv/nfs/tomcat *(rw,sync,no_subtree_check)
*表示允许所有主机访问,您可以根据需要限制特定的 IP 地址或子网。rw表示读写权限。sync表示同步写入。no_subtree_check表示不检查子目录。
5: 启动 NFS 服务
启动 NFS 服务并使其在系统启动时自动启动:
sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server
6: 配置防火墙
如果您使用防火墙,请确保允许 NFS 相关的端口。以下是使用 ufw 和 firewalld 的示例:
UFW
sudo ufw allow from <client-ip> to any port nfs
Firewalld
sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --reload
7: 在客户端挂载 NFS 共享
在需要访问 NFS 共享的客户端上,您需要安装 NFS 客户端:
Debian/Ubuntu
sudo apt install nfs-common
CentOS/RHEL
sudo yum install nfs-utils
然后,创建一个挂载点并挂载 NFS 共享:
sudo mkdir -p /mnt/nginx
sudo mkdir -p /mnt/tomcat
sudo mount <nfs-server-ip>:/srv/nfs/nginx /mnt/nginx
sudo mount <nfs-server-ip>:/srv/nfs/tomcat /mnt/tomcat
8: 自动挂载
如果您希望在每次启动时自动挂载 NFS 共享,可以在 /etc/fstab 文件中添加以下行:
<nfs-server-ip>:/srv/nfs/nginx /mnt/nginx nfs defaults 0 0
<nfs-server-ip>:/srv/nfs/tomcat /mnt/tomcat nfs defaults 0 0
k8snode节点导入mysql nginx tomcat镜像
dockerfile 制作镜像或者用官方镜像 ,然后用configMap配置环境
tomcat <none> 221f95c46bbd 2 days ago linux/amd64 503.3 MiB 227.7 MiB
harbor.hiuiu.com/database/mysql 5.6.44 f07940ac5b75 2 days ago linux/amd64 260.1 MiB 249.3 MiB
harbor.hiuiu.com/nginx/nginx
写yaml文件
## tomcat-dep部署一个 Tomcat 容器,运行 Web 应用程序
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-dep
labels:
app: tomcat-dep
namespace: project1
spec:
replicas: 3
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: tomcat:latest
ports:
- containerPort: 8080
volumeMounts:
- name: nfs-volume
mountPath: "/usr/local/tomcat/webapps"
volumes:
- name: nfs-volume
nfs:
path: /srv/nfs/tomcat/
server: 192.168.10.10
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 50%
maxUnavailable: 50%
## tomcat-svc 定义一个 ClusterIP 类型的服务,以便在集群内访问 Tomcat
apiVersion: v1
kind: Service
metadata:
name: tomcat-svc
spec:
type: ClusterIP
ports:
- port: 8080
targetPort: 8080
selector:
app: tomcat
## nginx-dep 通过 Nginx 作为反向代理,处理对 Tomcat 的请求并提供静态内容
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-cm
namespace: project1
data:
default: |
upstream tomcat_webserver {
server tomcat-service.project1:8080;
}
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /flight {
root /usr/share/nginx/html;
index index.html index.htm;
}
location /demo-test {
proxy_pass http://tomcat_webserver;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: project1
name: nginx-deployment
labels:
app: nginx-dep
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: harbor.hiuiu.com/nginx/nginx:1.21.5
ports:
- containerPort: 80
volumeMounts:
- name: nfs-volume
mountPath: "/usr/share/nginx/html"
- name: nginx-config
mountPath: /etc/nginx/conf.d/
volumes:
- name: nfs-volume
nfs:
path: /srv/nfs/nginx/
server: 192.168.10.10
readOnly: false
- name: nginx-config
configMap:
name: nginx-cm
items:
- key: default
path: web.conf
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 50%
maxUnavailable: 50%
## nginx-svc 允许外部访问 Nginx 服务
apiVersion: v1
kind: Service
metadata:
namespace: project1
name: my-nodeport
spec:
type: NodePort
selector:
app: nginx
ports:
- port: 80
targetPort: 80
nodePort: 30002
##mysql
apiVersion: apps/v1
kind: StatefulSet
metadata:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: harbor.hiuiu.com/database/mysql:5.6.44
env:
- name: MYSQL_ROOT_PASSWORD
value: "123456"
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-volume
mountPath: /var/lib/mysql
volumes:
- name: mysql-volume
nfs:
server: 192.168.10.10
path: /srv/nfs/mysql
readOnly: false