使用k8s部署java前后端服务

news2024/9/28 21:10:39

一、项目架构

前端、后端、数据库

1)前端

静态的资源:img css html js文件

js:axios、ajax

2)后端

提供数据:根据web前端发送的请求,从数据库中获取数据

请求都是无状态的,如何保持会话

每次请求都会携带一个token字符串,能够验证用户身份

3)数据库

存储数据与表格

二、流程

1)访问nginx服务,获得页面(下载静态资源)

在旧的版本中,都是使用浏览器直接访问java或者php服务,由这些服务临时渲染一个页面文件响应给客户端。

2)在浏览器中解析并且渲染页面
3)向服务器发送登录请求或者其他的请求

请求的位置:服务器主机ip或者域名在哪里,端口是哪个,服务名称映射

请求的参数:账号,密码

请求的方法:get,post

4)java服务器收到请求之后,对请求解析

例如登录,分发dispatch到login模块

5)从数据库中查询对应的用户信息

如果用户信息的账号和密码都是正确的,就返回字符串,允许用户登录,否则也返回异常信息字符串

三、部署

k8s中使用到的技术:deployment、service、volums

1、准备nfs服务器
1)新建虚拟机
2)设置计划任务,核对时间
 [root@nginx ~]# yum -y install ntpdate
 [root@nginx ~]# ntpdate time2.aliyun.com
 26 Sep 09:45:40 ntpdate[1358]: adjust time server 203.107.6.88 offset 0.009069 sec
 [root@nginx ~]# which ntpdate
 /usr/sbin/ntpdate
 [root@nginx ~]# crontab -e
 * 5 * * * /usr/sbin/ntpdate time2.aliyun.com
3)安装nfs服务应用
 [root@nginx ~]# yum -y install rpcbind
 [root@nginx ~]# yum -y install nfs-utils
4)配置文件
 [root@nginx ~]# echo "/root/pes    *(rw,sync)" >> /etc/exports
5)准备pes资源
 [root@nginx ~]# ls
 pes 
6)启动nfs服务
 [root@nginx ~]# systemctl start rpcbind nfs-server
7)测试验证
 [root@k8s-master ~]# showmount -e 10.0.0.99
 Export list for 10.0.0.99:
 /root/pes *
2、前端web实现

nginx:latest,使用nfs挂载

1)编写deployment清单
 apiVersion: apps/v1
 kind: Deployment
 metadata:
         name: web-deployment
         namespace: default
         labels:
                 app: web-deployment
 spec:
         selector:
                 matchLabels:
                         app: web-deployment
         replicas: 3
         strategy:
                 rollingUpdate:
                         maxSurge: 25%
                         maxUnavailable: 25%
                 type: RollingUpdate
         template:
                 metadata:
                         labels:
                                 app: web-deployment
                 spec:
                         containers:
                         -       name: nginx
                                 image: docker.io/library/nginx:latest
                                 imagePullPolicy: Never
                                 resources:
                                         requests:
                                                 cpu: 100m
                                                 memory: 100Mi
                                         limits:
                                                 cpu: 100m
                                                 memory: 100Mi
                                 ports:
                                 -       containerPort: 80
                                 volumeMounts:
                                 -       name: pesdist
                                         mountPath: /usr/share/nginx/html
                         volumes:
                         -       name: pesdist
                                 nfs:
                                         server: 10.0.0.99
                                         path: /root/pes/web/src/dist
                         restartPolicy: Always
2)创建deployment项目
 [root@k8s-master cc]# kubectl create -f web-deployment.yaml 
 deployment.apps/web-deployment created
 [root@k8s-master cc]# kubectl get pod
 NAME                              READY   STATUS    RESTARTS       AGE
 cluster-test-66bb44bd88-zdfdf     1/1     Running   32 (54m ago)   13d
 web-deployment-7fd7479d49-6x4nn   1/1     Running   0              8s
 web-deployment-7fd7479d49-bxdp9   1/1     Running   0              8s
 web-deployment-7fd7479d49-xhjwb   1/1     Running   0              8s
3)测试验证
 [root@k8s-master cc]# kubectl get pod -owide
 NAME                              READY   STATUS    RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATES
 cluster-test-66bb44bd88-zdfdf     1/1     Running   32 (57m ago)   13d     172.16.85.200   k8s-node01   <none>           <none>
 web-deployment-7fd7479d49-6x4nn   1/1     Running   0              2m38s   172.16.58.251   k8s-node02   <none>           <none>
 web-deployment-7fd7479d49-bxdp9   1/1     Running   0              2m38s   172.16.85.201   k8s-node01   <none>           <none>
 web-deployment-7fd7479d49-xhjwb   1/1     Running   0              2m38s   172.16.58.252   k8s-node02   <none>           <none>
 [root@k8s-master cc]# curl 172.16.58.251
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="UTF-8">
     <link rel="icon" href="/favicon.ico">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Vite App</title>
     <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
   </head>
   <body>
     <div id="app"></div>
   </body>
 </html>
3、后端java实现

自定义容器,使用nfs挂载

1)在pes目录中找到java的Dockerfile文件,创建镜像
 [root@nginx ~]# cd pes/java/
 [root@nginx java]# ls
 Dockerfile  jdk  src  start.sh
 [root@nginx java]# docker build -t java:v1 .
 [root@nginx java]# docker images
 REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
 java         v1        5dc6610d8a6c   18 hours ago   592MB
2)镜像打包发送到两个节点
 [root@nginx ~]# docker save -o java.tar java:v1
 [root@nginx ~]# ls
 java.tar
 [root@nginx ~]# scp java.tar 10.0.0.77:/root
 [root@nginx ~]# scp java.tar 10.0.0.88:/root
3)在节点中加载镜像包
 [root@k8s-node01 ~]# ctr -n k8s.io images import java.tar --platform=linux/amd64
 [root@k8s-node01 ~]# crictl images
 IMAGE                                                               TAG                 IMAGE ID            SIZE
 docker.io/library/java                                              v1                  5dc6610d8a6cc       599MB
 [root@k8s-node02 ~]# ctr -n k8s.io images import java.tar --platform=linux/amd64
 [root@k8s-node02 ~]# crictl images
 IMAGE                                                               TAG                 IMAGE ID            SIZE
 docker.io/library/java                                              v1                  5dc6610d8a6cc       599MB
4)创建资源清单
 apiVersion: apps/v1
 kind: Deployment
 metadata:
         name: java-deployment
         namespace: default
         labels:
                 app: java-deployment
 spec:
         selector:
                 matchLabels:
                         app: java-deployment
         replicas: 3
         strategy:
                 rollingUpdate:
                         maxSurge: 25%
                         maxUnavailable: 25%
                 type: RollingUpdate
         template:
                 metadata:
                         labels:
                                 app: java-deployment
                 spec:
                         containers:
                         -       name: java
                                 image: docker.io/library/java:v1
                                 imagePullPolicy: Never
                                 resources:
                                         requests:
                                                 cpu: 100m
                                                 memory: 100Mi
                                         limits:
                                                 cpu: 100m
                                                 memory: 100Mi
                                 ports:
                                 -       containerPort: 8080
                                 volumeMounts:
                                 -       name: pesjava
                                         mountPath: /java/src
                         volumes:
                         -       name: pesjava
                                 nfs:
                                         server: 10.0.0.99
                                         path: /root/pes/java/src
                         restartPolicy: Always
5)创建deployment项目
 [root@k8s-master cc]# kubectl create -f java-deployment.yaml 
 deployment.apps/java-deployment created
 [root@k8s-master cc]# kubectl get pod
 NAME                               READY   STATUS    RESTARTS       AGE
 cluster-test-66bb44bd88-zdfdf      1/1     Running   33 (45m ago)   13d
 java-deployment-7b9f747b8d-9cpsw   1/1     Running   0              7s
 java-deployment-7b9f747b8d-j6l22   1/1     Running   0              7s
 java-deployment-7b9f747b8d-t4cvb   1/1     Running   0              7s
 web-deployment-7fd7479d49-6x4nn    1/1     Running   0              51m
 web-deployment-7fd7479d49-bxdp9    1/1     Running   0              51m
 web-deployment-7fd7479d49-xhjwb    1/1     Running   0              51m
6)测试验证(出现问题)

“OOMKilled” 是一种在容器化环境或某些操作系统中常见的状态,表示 “Out Of Memory Killed”,即由于内存不足而被终止。

不断重启

 [root@k8s-master cc]# kubectl get po -o wide -w
 NAME                               READY   STATUS             RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATES
 cluster-test-66bb44bd88-zdfdf      1/1     Running            33 (52m ago)   13d     172.16.85.200   k8s-node01   <none>           <none>
 java-deployment-7b9f747b8d-9cpsw   0/1     OOMKilled          3 (2m1s ago)   6m32s   172.16.85.198   k8s-node01   <none>           <none>
 java-deployment-7b9f747b8d-j6l22   0/1     OOMKilled          3 (118s ago)   6m32s   172.16.58.253   k8s-node02   <none>           <none>

修改资源清单(解决问题)

                                         limits:
                                                 cpu: 100m
                                                 memory: 300Mi

重新创建deployment

 [root@k8s-master cc]# kubectl delete -f java-deployment.yaml 
 [root@k8s-master cc]# kubectl create -f java-deployment.yaml 
 [root@k8s-master cc]# kubectl get po -o wide 
 NAME                               READY   STATUS    RESTARTS       AGE    IP              NODE         NOMINATED NODE   READINESS GATES
 cluster-test-66bb44bd88-zdfdf      1/1     Running   33 (58m ago)   13d    172.16.85.200   k8s-node01   <none>           <none>
 java-deployment-6d9c668fc5-6ftrk   1/1     Running   0              109s   172.16.85.202   k8s-node01   <none>           <none>
 java-deployment-6d9c668fc5-crk2p   1/1     Running   0              109s   172.16.58.254   k8s-node02   <none>           <none>

重新测试

 [root@k8s-master cc]# curl 172.16.85.202:8080
 {"code":20002,"msg":"账号不存在或密码错误"}[root@k8s-master cc]# 
4、后端数据库实现

mysql:5.7.44,使用nfs挂载

1)检查是否存在mysql:5.7.44镜像
 [root@k8s-node01 ~]# crictl images | grep mysql
 docker.io/library/mysql                                             5.7.44              5107333e08a87       520MB
 [root@k8s-node02 ~]# crictl images | grep mysql
 docker.io/library/mysql                                             5.7.44              5107333e08a87       520MB
2)创建资源清单
 apiVersion: apps/v1
 kind: Deployment
 metadata:
         name: mysql-deployment
         labels:
                 app: mysql-deployment
 spec:
         replicas: 1
         selector:
                 matchLabels:
                         app: mysql-deployment
         template:
                 metadata:
                         labels:
                                 app: mysql-deployment
                 spec:
                         containers:
                         -       name: mysql
                                 image: docker.io/library/mysql:5.7.44
                                 imagePullPolicy: Never
                                 resources:
                                         requests:
                                                 cpu: 100m
                                                 memory: 100Mi
                                         limits:
                                                 cpu: 100m
                                                 memory: 200Mi
                                 ports:
                                 -       name: mysqlport
                                         containerPort: 3306
                                 volumeMounts:
                                      - name: localtime
                                        mountPath: /var/lib/mysql
                         volumes:
                         -       name: localtime
                                 nfs:
                                         server: 10.0.0.99
                                         path: /root/pes/mysql/data
                         restartPolicy: Always
 # 如果创建时不使用volumes挂载,则需要将数据导入数据库中
 [root@k8s-master cc]# mysql -h172.16.85.222 -uzhangmin -pzhangmin < ~/project_exam_system.sql
3)创建deployment项目(出现问题)
 [root@k8s-master cc]# kubectl create -f mysql-deployment.yaml 
 [root@k8s-master cc]# kubectl get pod
 NAME                                READY   STATUS      RESTARTS       AGE
 mysql-deployment-569c465d84-lrp2j   0/1     OOMKilled   2 (18s ago)    30s

修改资源清单(内存不够,扩大使用内存)

                                 resources:
                                         requests:
                                                 cpu: 100m
                                                 memory: 100Mi
                                         limits:
                                                 cpu: 100m
                                                 memory: 1000Mi

重新创建deployment项目(出现问题)

“Permission denied”(权限被拒绝)

 [root@k8s-master cc]# kubectl delete -f mysql-deployment.yaml 
 [root@k8s-master cc]# kubectl create -f mysql-deployment.yaml 
 [root@k8s-master cc]# kubectl get pod -o wide
 NAME                                READY   STATUS             RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATES
 mysql-deployment-6d67955c9d-lcvrn   0/1     Error     3 (75s ago)    3m14s   172.16.85.219   k8s-node01   <none>           <none>
 [root@k8s-master cc]# kubectl logs mysql-deployment-6d67955c9d-lcvrn 
 2024-09-26 11:15:07+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.44-1.el7 started.
 find: '/var/lib/mysql/': Permission denied
 find: '/var/lib/mysql': Permission denied

修改nfs的文件共享权限

 [root@nginx assets]# vim /etc/exports
 /root/pes/      *(rw,sync,no_root_squash)
 [root@nginx ~]# systemctl restart rpcbind.service
 [root@nginx ~]# systemctl restart nfs-server

再次创建deployment项目

 [root@k8s-master cc]# kubectl delete -f mysql-deployment.yaml 
 [root@k8s-master cc]# kubectl create -f mysql-deployment.yaml 
 [root@k8s-master cc]# kubectl get pod -o wide
 NAME                                READY   STATUS    RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATES
 cluster-test-66bb44bd88-zdfdf       1/1     Running   41 (39m ago)   14d     172.16.85.200   k8s-node01   <none>           <none>
 java-deployment-6d9c668fc5-6ftrk    1/1     Running   1 (84m ago)    7h42m   172.16.85.202   k8s-node01   <none>           <none>
 java-deployment-6d9c668fc5-crk2p    1/1     Running   0              7h42m   172.16.58.254   k8s-node02   <none>           <none>
 java-deployment-6d9c668fc5-hqxjw    1/1     Running   0              7h42m   172.16.58.255   k8s-node02   <none>           <none>
 mysql-deployment-6d67955c9d-c4kbr   1/1     Running   0              23s     172.16.85.222   k8s-node01   <none>           <none>
 web-deployment-7fd7479d49-6x4nn     1/1     Running   0              8h      172.16.58.251   k8s-node02   <none>           <none>
 web-deployment-7fd7479d49-bxdp9     1/1     Running   0              8h      172.16.85.201   k8s-node01   <none>           <none>
 web-deployment-7fd7479d49-xhjwb     1/1     Running   0              8h      172.16.58.252   k8s-node02   <none>           <none>
4)测试验证
 [root@k8s-master cc]# mysql -h172.16.85.224 -p'zhangmin' -uzhangmin
 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 Your MySQL connection id is 4
 Server version: 5.7.44 MySQL Community Server (GPL)
 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 MySQL [(none)]> show databases;
 +---------------------+
 | Database            |
 +---------------------+
 | information_schema  |
 | mysql               |
 | performance_schema  |
 | project_exam_system |
 | sys                 |
 +---------------------+
 5 rows in set (0.08 sec)
5、web-service准备
1)创建资源清单
 apiVersion: v1
 kind: Service
 metadata:
         name: webservice
 spec:
         selector:
                 app: web-deployment
         ports:
         -       name: webport
                 port: 80
                 targetPort: 80
                 nodePort: 32000
                 protocol: TCP
         type: NodePort
2)创建service项目
 [root@k8s-master cc]# kubectl create -f web-service.yaml 
 service/webservice created
 [root@k8s-master cc]# kubectl get svc
 NAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
 kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        15d
 webservice   NodePort    10.96.126.91   <none>        80:32000/TCP   19s
3)测试验证

找不到域名(设置域名)

此时,不能登录的原因是10.0.0.66的8080端口没有开发,也没有映射到java的pod上(也就是未连接后端)

 [root@k8s-master cc]# netstat -lntup | grep 8080
6、java-service准备
1)创建资源清单
 apiVersion: v1
 kind: Service
 metadata:
         name: javaservice
 spec:
         selector:
                 app: java-deployment
         type: NodePort
         sessionAffinity: None
         sessionAffinityConfig:
                 clientIP:
                         timeoutSeconds: 10800
         ports:
         -       name: javaport
                 protocol: TCP
                 port: 8080
                 targetPort: 8080
                 nodePort: 32100
2)创建service项目
 [root@k8s-master cc]# kubectl create -f java-service.yaml 
 [root@k8s-master cc]# kubectl get svc
 NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
 javaservice   NodePort    10.96.83.133   <none>        8080:32100/TCP   12m
 kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          15d
 webservice    NodePort    10.96.126.91   <none>        80:32000/TCP     13h
3)测试验证

进行前后端连接

7、web与java连接
1)修改web连接java的配置文件

修改nfs服务器pes/web/assets中关于端口请求的文件,将8080端口修改为32100端口

 [root@nginx assets]# pwd
 /root/pes/web/src/dist/assets
 [root@nginx assets]# for fn in $(ls *.js) ; do echo $fn ; done
 AdminView-yX0Ltz_1.js
 CategoryView-Ca4t3JNT.js
 ......
 [root@nginx assets]# for fn in $(ls *.js) ; do echo $fn ; cat $fn | grep 8080 ; done
 index-8SnX15u9.js
 http://bu.yuanyu.zhangmin:8080
 # 将8080改为32100
 [root@nginx assets]# vim index-8SnX15u9.js
 "http://bu.yuanyu.zhangmin:32100",
2)测试验证

测试 web服务发送登录请求会发送的32100端口上,就直接可以访问java服务了

前端访问的时候,发现500错误

 # 检查java日志,发现连接不到数据库
 [root@k8s-master cc]# kubectl logs  java-deployment-6d9c668fc5-j9dmm 
 Caused by: java.net.NoRouteToHostException: No route to host
     at java.base/sun.nio.ch.Net.pollConnect(Native Method)
8、java与数据库连接
1)修改java连接数据库的配置文件
 [root@nginx assets]# vim ~/pes/java/src/application.properties 
 spring.datasource.url=jdbc:mysql://pesmysql:3306/project_exam_system
 # 浏览器访问后查看java日志
 [root@k8s-master cc]# kubectl logs java-deployment-6d9c668fc5-28lvt 
 Caused by: java.net.UnknownHostException: pesmysql
     at java.base/java.net.InetAddress$CachedAddresses.get(InetAddress.java:801)
     at java.base/java.net.InetAddress.getAllByName0(InetAddress.java:1532)
     at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1384)
     at java.base/java.net.InetAddress.getAllByName(InetAddress.java:1305)
     at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:130)
     at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:62)
     ... 16 common frames omitted
2)mysql-service资源清单
 apiVersion: v1
 kind: Service
 metadata:
         name: pesmysql
 spec:
         selector:
                 app: mysql-deployment
         type: ClusterIP
         sessionAffinity: None
         sessionAffinityConfig:
                 clientIP:
                         timeoutSeconds: 10800
         ports:
         -       name: mysqlport
                 protocol: TCP
                 port: 3306
                 targetPort: 3306
3)创建service项目
 [root@k8s-master cc]# kubectl create -f mysql-service.yaml 
 [root@k8s-master cc]# kubectl get svc
 NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
 javaservice   NodePort    10.96.83.133   <none>        8080:32100/TCP   99m
 kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          15d
 pesmysql      ClusterIP   10.96.62.94    <none>        3306/TCP         20m
 webservice    NodePort    10.96.126.91   <none>        80:32000/TCP     14h
4)测试验证
 [root@k8s-master cc]# kubectl exec -it cluster-test-66bb44bd88-zdfdf -- bash
 (02:16 cluster-test-66bb44bd88-zdfdf:/) nslookup pesmysql
 Server:     10.96.0.10
 Address:    10.96.0.10#53
 ​
 Name:   pesmysql.default.svc.cluster.local
 Address: 10.96.62.94

5)查看数据库数据
 MySQL [sys]> use project_exam_system
 MySQL [project_exam_system]> show tables;
 | user                          |
 +-------------------------------+
 MySQL [project_exam_system]> select * from user;
 +-----+--------------+----------+--------+---------------------+----------+---------------------+--------+-------+
 | id  | userName     | password | status | createTime          | createOr | editTime            | editOr | isDel |
 +-----+--------------+----------+--------+---------------------+----------+---------------------+--------+-------+
 |   1 | 21001189     | 111111   |      0 | 2024-08-21 09:45:05 | NULL     | 2024-08-22 14:04:44 | NULL   |     0 |
 |   2 | 21001190     | 111111   |      0 | 2024-08-21 09:45:05 | NULL     | 2024-08-21 01:45:05 | NULL   |     0 |
9、最终测试

 [root@k8s-master cc]# ls
 java-deployment.yaml  java-service.yaml  mysql-deployment.yaml  mysql-service.yaml  web-deployment.yaml  web-service.yaml
 [root@k8s-master cc]# kubectl get svc
 NAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
 javaservice   NodePort    10.96.44.204   <none>        8080:32100/TCP   5h24m
 kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          15d
 pesmysql      ClusterIP   10.96.129.65   <none>        3306/TCP         16m
 webservice    NodePort    10.96.144.91   <none>        80:32000/TCP     5h25m
 [root@k8s-master cc]# kubectl get pod
 NAME                                READY   STATUS    RESTARTS      AGE
 cluster-test-66bb44bd88-w7hws       1/1     Running   4 (13m ago)   4h18m
 java-deployment-b7857bbf-2zldq      1/1     Running   0             47m
 java-deployment-b7857bbf-zj564      1/1     Running   0             47m
 mysql-deployment-755cb9cbb6-m6qwn   1/1     Running   0             27m
 web-deployment-7b85c4bc87-454jn     1/1     Running   0             55m
 web-deployment-7b85c4bc87-qbc2m     1/1     Running   0             55m

四、优化1(pv部分)

1、web部分
1)web的pv创建

资源清单

 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: pv-nfs
 spec:
   capacity:
     storage: 7Gi
   volumeMode: Filesystem
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Recycle
   storageClassName: nfs-slow
   nfs:
     path: /root/pes/web/src/dist
     server: 10.0.0.99

创建

 [root@k8s-master cc]# kubectl create -f pv-nfs.yaml 
 persistentvolume/pv-nfs created
 [root@k8s-master cc]# kubectl get pv
 NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
 pv-nfs   7Gi        RWO            Recycle          Available           nfs-slow                84s
2)web的pvc创建

资源清单

 apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
         name: pvc-nfs
 spec:
         storageClassName: nfs-slow
         accessModes:
         - ReadWriteOnce
         resources:
                 requests:
                         storage: 4Gi

创建

 [root@k8s-master cc]# kubectl create -f pvc-nfs.yaml 
 persistentvolumeclaim/pvc-nfs created
 [root@k8s-master cc]# kubectl get pvc
 NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
 pvc-nfs   Bound    pv-nfs   7Gi        RWO            nfs-slow       9s
3)修改deployment资源清单
                         volumes:
                         -       name: pesdist
                                 persistentVolumeClaim:
                                         claimName: pvc-nfs

重新创建

 [root@k8s-master cc]# kubectl delete -f web-deployment.yaml 
 [root@k8s-master cc]# kubectl create -f web-deployment.yaml 
4)测试
 [root@k8s-master cc]# curl 172.16.85.236
 <!DOCTYPE html>
 <html lang="en">
   <head>
     <meta charset="UTF-8">
     <link rel="icon" href="/favicon.ico">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Vite App</title>
     <script type="module" crossorigin src="/assets/index-C4kAShR5.js"></script>
     <link rel="stylesheet" crossorigin href="/assets/index-CSz7ARPP.css">
   </head>
   <body>
     <div id="app"></div>
   </body>
 </html>
2、java部分
1)java的pv创建

资源清单

 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: java-pv-nfs
 spec:
   capacity:
     storage: 7Gi
   volumeMode: Filesystem
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Recycle
   storageClassName: nfs-slow
   nfs:
     path: /root/pes/java/src
     server: 10.0.0.99

创建

 [root@k8s-master cc]# kubectl create -f java-pv-nfs.yaml 
2)java的pvc创建

资源清单

 apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
         name: java-pvc-nfs
 spec:
         storageClassName: nfs-slow
         accessModes:
         - ReadWriteOnce
         resources:
                 requests:
                         storage: 4Gi

创建

 [root@k8s-master cc]# kubectl create -f java-pvc-nfs.yaml
3)修改deployment资源清单
                         volumes:
                         -       name: pesjava
                                 persistentVolumeClaim:
                                         claimName: java-pvc-nfs

重新创建

 [root@k8s-master cc]# kubectl delete -f java-deployment.yaml 
 [root@k8s-master cc]# kubectl create -f java-deployment.yaml 
4)测试
 [root@k8s-master cc]# curl 172.16.85.243:8080
 {"code":20002,"msg":"账号不存在或密码错误"}[root@k8s-master cc]# 
3、mysql部分
1)mysql的pv创建

资源清单

 apiVersion: v1
 kind: PersistentVolume
 metadata:
   name: mysql-pv-nfs
 spec:
   capacity:
     storage: 7Gi
   volumeMode: Filesystem
   accessModes:
     - ReadWriteOnce
   persistentVolumeReclaimPolicy: Recycle
   storageClassName: nfs-slow
   nfs:
     path: /root/pes/mysql/data
     server: 10.0.0.99

创建

 [root@k8s-master cc]# kubectl create -f mysql-pv-nfs.yaml
2)mysql的pvc创建

资源清单

 apiVersion: v1
 kind: PersistentVolumeClaim
 metadata:
         name: mysql-pvc-nfs
 spec:
         storageClassName: nfs-slow
         accessModes:
         - ReadWriteOnce
         resources:
                 requests:
                         storage: 4Gi

创建

 [root@k8s-master cc]# kubectl create -f mysql-pvc-nfs.yaml
3)修改deployment资源清单
                         volumes:
                         -       name: localtime
                                 persistentVolumeClaim:
                                         claimName: mysql-pvc-nfs

重新创建

 [root@k8s-master cc]# kubectl delete -f mysql-deployment.yaml 
 [root@k8s-master cc]# kubectl create -f mysql-deployment.yaml 
4)测试
 [root@k8s-master cc]# mysql -h172.16.85.242 -uzhangmin -pzhangmin
 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 Your MySQL connection id is 2
 Server version: 5.7.44 MySQL Community Server (GPL)
 ​
 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 ​
 Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 ​
 MySQL [(none)]> 
4、最终测试

 [root@k8s-master cc]# kubectl get pv
 NAME           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
 java-pv-nfs    7Gi        RWO            Recycle          Bound    default/java-pvc-nfs    nfs-slow                60m
 mysql-pv-nfs   7Gi        RWO            Recycle          Bound    default/mysql-pvc-nfs   nfs-slow                40m
 pv-nfs         7Gi        RWO            Recycle          Bound    default/pvc-nfs         nfs-slow                74m
 [root@k8s-master cc]# kubectl get pvc
 NAME            STATUS   VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS   AGE
 java-pvc-nfs    Bound    java-pv-nfs    7Gi        RWO            nfs-slow       60m
 mysql-pvc-nfs   Bound    mysql-pv-nfs   7Gi        RWO            nfs-slow       40m
 pvc-nfs         Bound    pv-nfs         7Gi        RWO            nfs-slow       74m

五、优化2(ingress部分)

1、创建web的ingress

资源清单

 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
         name: web-ingress
         namespace: default
 spec:
         ingressClassName: nginx
         rules:
         - host: wp-web.com
           http:
                 paths:
                 - path: /
                   pathType: ImplementationSpecific
                   backend:
                         service:
                                 name: web-service
                                 port:
                                         number: 80

创建

 [root@k8s-master cc]# kubectl create -f web-ingress.yaml 
2、最终测试

 [root@k8s-master cc]# kubectl get ingress
 NAME          CLASS   HOSTS        ADDRESS   PORTS   AGE
 web-ingress   nginx   wp-web.com             80      20m

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2174767.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

依赖注入之set注入

set注入 set注入&#xff0c;基于set王法实现的&#xff0c;底层通过反射机制调用属性对应的set方法&#xff0c;然后给属性赋值&#xff0c;这种方法要求属性必须对外提供set方法 1. 想让Spring调用对应的set方法&#xff0c;需要配置property标签 2. name属性怎么指定值:s…

【含文档】基于Springboot+微信小程序 的高中信息技术课程在线测试系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 当游客…

解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署

作者简介&#xff1a;我是团团儿&#xff0c;是一名专注于云计算领域的专业创作者&#xff0c;感谢大家的关注 座右铭&#xff1a; 云端筑梦&#xff0c;数据为翼&#xff0c;探索无限可能&#xff0c;引领云计算新纪元 个人主页&#xff1a;团儿.-CSDN博客 目录 前言&#…

CentOS系统yum出现Could not retrieve mirrorlist问题

问题 yum search wget当使用yum命令来搜索或安装软件时&#xff0c;如果出现Could not retrieve mirrorlist&#xff0c;即无法检索镜像列表。出现的问题截图如下&#xff1a; 解决方法&#xff1a; 跳转到root用户 su - rootcd到/etc/yum.repos.d/目录下 cd /etc/yum.rep…

异步框架 fastapi -- 简单介绍

文章目录 fastapi 介绍restful接口设计简单应用Swagger风格的接口文档 fastapi 介绍 fastapi官方文档 fastapi 是现代化、高性能、基于python标准类型注释的异步web框架&#xff1b;基于python构建web APIs&#xff0c;性能可比go语言&#xff1b;高效编码&#xff0c;更少的…

大数据的挑战是小文件

小文件可能会给存储平台及其支持的应用程序带来大问题。在 Google 上搜索 “small files performance” 会产生 2M 的结果。这篇博文将更深入地研究小文件问题&#xff0c;深入研究其根源并总结解决方案。 问题陈述 出于本讨论的目的&#xff0c;小文件通常被视为小于 64 KB …

攻防世界---->happyctf

做题笔记。 下载 查壳。 32ida打开。 先运行一下&#xff1a; C写的。 追踪 good job 具体跟踪分析&#xff1a; 说白了&#xff0c;就是一个用于判断 flag key的。 往上走&#xff1a; 跟进。 打开 od吧。 锁定地址 追踪看看。&#xff08;此题&#xff0c;ida不能动态 od可以…

Hugging Face从命令行到桌面:Chat-macOS让AI互动更简单,关键还免费!

你是否曾经觉得,命令行操作虽然强大,但总是有些难以上手?或者,你是否希望和AI互动可以像日常使用macOS应用一样直观?那你一定要试试Chat-macOS,它让你从命令行走向桌面,体验更轻松的AI互动方式。 1. 什么是Chat-macOS? Chat-macOS是一个桌面应用程序,它能够将Hug…

Windows安全日志7关键事件ID分析

背景 Windows日志里的事件分析有助于在系统出现异常时分析出异常原因&#xff0c;利于针对问题做出系统的修复和预防。今天阿祥就整理出Windows常见的事件&#xff0c;分析这些事件的具体原因&#xff0c;希望对系统运维工程师们有一定的帮助&#xff01; 具体事件ID 1、事件ID…

MySQL—触发器详解

基本介绍 触发器是与表有关的数据库对象&#xff0c;在 INSERT、UPDATE、DELETE 操作之前或之后触发并执行触发器中定义的 SQL 语句。 触发器的这种特性可以协助应用在数据库端确保数据的完整性、日志记录、数据校验等操作。 使用别名 NEW 和 OLD 来引用触发器中发生变化的记…

JSR 303学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…

fiddler抓包12_篡改请求(请求前断点)

课程大纲 原理 正常“客户端-服务器”通信&#xff0c;即发送请求&#xff0c;接收返回。 Fiddler抓包是「客户端-浏览器」进行交互时&#xff0c;请求和响应都会从Fiddler通过&#xff0c;Fiddler可以捕获并展示。 请求前断点&#xff08;BreakPoint Before Request&#xff0…

[论文阅读] ChartInstruct: Instruction Tuning for Chart Comprehension and Reasoning

原文链接&#xff1a;http://arxiv.org/abs/2403.09028 源码链接&#xff1a;https://github.com/vis-nlp/ChartInstruct 启发&#xff1a;本文构建的instruction-tuning数据集以及使用该数据集对模型进行微调的过程都值得学习。 Abstract 研究对象&#xff1a;图表 研究…

yakit使用教程(一,下载并进行基础配置)

一&#xff0c;yakit简介 YAKIT&#xff08;Yet Another Knife for IT Security&#xff09;是一款网络安全单兵工具&#xff0c;专为个人渗透测试员和安全研究人员设计。它整合了一系列实用的安全工具&#xff0c;例如密码破解工具、网络扫描器、漏洞利用工具等&#xff0c;帮…

空间复杂度动态顺序表

目录 1>>闲话 2>>空间复杂度 3>>顺序表&#xff01;&#xff01;&#xff08;有点难度&#xff09; 3.1>>静态顺序表 3.2>>动态顺序表 3.2.1>>初始化动态顺序表 3.2.2>>实现尾插 4>>结语 1>>闲话 感谢大家对小…

【YOLO目标检测反光衣数据集】共2388张、已标注txt格式、有训练好的yolov5的模型

目录 说明图片示例 说明 数据集格式&#xff1a;YOLO格式 图片数量&#xff1a;2388 标注数量(txt文件个数)&#xff1a;2388 标注类别数&#xff1a;2 标注类别名称&#xff1a;reflective_clothes、other_clothes 数据集下载&#xff1a;反光衣数据集 图片示例 数据…

HJ50-四则运算:栈的运用、中缀表达式转后缀表达式并计算结果

文章目录 题目一、分析1.1表达式预处理1.2中缀表达式转后缀1.3 后缀表达式计算结果 二、答案 题目 一、分析 通过利用栈将中缀表达式转换为后缀表达式&#xff0c;在根据后缀表达式计算运算结果。由于包含负数操作数的情况&#xff0c;并且操作数位数不固定为1&#xff0c;因此…

【算法篇】二叉树类(3)(笔记)

目录 一、Leetcode 题目 1. 二叉树的最近公共祖先 2. 二叉搜索树的最近公共祖先 &#xff08;1&#xff09;递归法 &#xff08;2&#xff09;迭代法 3. 二叉搜索树中的插入操作 &#xff08;1&#xff09;递归法 &#xff08;2&#xff09;迭代法 4. 删除二叉搜索树中…

时间序列LSTM实现

这个代码参考了时间序列预测模型实战案例(三)(LSTM)(Python)(深度学习)时间序列预测(包括运行代码以及代码讲解)_lstm预测模型-CSDN博客 结合我之前所学的lstm-seq2seq里所学习到的知识对其进行预测 import time import numpy as np import pandas as pd import torch import…

革命题材网络电影《突进夹金山》将于10月上线

“长征万里险&#xff0c;最忆夹金山”。这座雪山不仅见证了红军战士们的英勇与牺牲&#xff0c;也成为了中国革命历史上的一座重要里程碑。 革命题材网络电影《突进夹金山》&#xff0c;作为四川省2024年度重点影视剧项目以及纪念红军长征90周年献礼的红色作品&#xff0c;由谢…