nginx tomcat MySQL 迁移至k8s

89 阅读4分钟

将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 相关的端口。以下是使用 ufwfirewalld 的示例:

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

36cc39ac0fe297523c174b111ff3eb8.png