当前位置: 首页 > news >正文

使用k8s部署java前后端服务

一、项目架构

前端、后端、数据库

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.com26 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 ~]# lspes 
6)启动nfs服务
 [root@nginx ~]# systemctl start rpcbind nfs-server
7)测试验证
 [root@k8s-master ~]# showmount -e 10.0.0.99Export list for 10.0.0.99:/root/pes *
2、前端web实现

nginx:latest,使用nfs挂载

1)编写deployment清单
 apiVersion: apps/v1kind: Deploymentmetadata:name: web-deploymentnamespace: defaultlabels:app: web-deploymentspec:selector:matchLabels:app: web-deploymentreplicas: 3strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: web-deploymentspec:containers:-       name: nginximage: docker.io/library/nginx:latestimagePullPolicy: Neverresources:requests:cpu: 100mmemory: 100Milimits:cpu: 100mmemory: 100Miports:-       containerPort: 80volumeMounts:-       name: pesdistmountPath: /usr/share/nginx/htmlvolumes:-       name: pesdistnfs:server: 10.0.0.99path: /root/pes/web/src/distrestartPolicy: Always
2)创建deployment项目
 [root@k8s-master cc]# kubectl create -f web-deployment.yaml deployment.apps/web-deployment created[root@k8s-master cc]# kubectl get podNAME                              READY   STATUS    RESTARTS       AGEcluster-test-66bb44bd88-zdfdf     1/1     Running   32 (54m ago)   13dweb-deployment-7fd7479d49-6x4nn   1/1     Running   0              8sweb-deployment-7fd7479d49-bxdp9   1/1     Running   0              8sweb-deployment-7fd7479d49-xhjwb   1/1     Running   0              8s
3)测试验证
 [root@k8s-master cc]# kubectl get pod -owideNAME                              READY   STATUS    RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATEScluster-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]# lsDockerfile  jdk  src  start.sh[root@nginx java]# docker build -t java:v1 .[root@nginx java]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED        SIZEjava         v1        5dc6610d8a6c   18 hours ago   592MB
2)镜像打包发送到两个节点
 [root@nginx ~]# docker save -o java.tar java:v1[root@nginx ~]# lsjava.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 imagesIMAGE                                                               TAG                 IMAGE ID            SIZEdocker.io/library/java                                              v1                  5dc6610d8a6cc       599MB[root@k8s-node02 ~]# ctr -n k8s.io images import java.tar --platform=linux/amd64[root@k8s-node02 ~]# crictl imagesIMAGE                                                               TAG                 IMAGE ID            SIZEdocker.io/library/java                                              v1                  5dc6610d8a6cc       599MB
4)创建资源清单
 apiVersion: apps/v1kind: Deploymentmetadata:name: java-deploymentnamespace: defaultlabels:app: java-deploymentspec:selector:matchLabels:app: java-deploymentreplicas: 3strategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:labels:app: java-deploymentspec:containers:-       name: javaimage: docker.io/library/java:v1imagePullPolicy: Neverresources:requests:cpu: 100mmemory: 100Milimits:cpu: 100mmemory: 100Miports:-       containerPort: 8080volumeMounts:-       name: pesjavamountPath: /java/srcvolumes:-       name: pesjavanfs:server: 10.0.0.99path: /root/pes/java/srcrestartPolicy: Always
5)创建deployment项目
 [root@k8s-master cc]# kubectl create -f java-deployment.yaml deployment.apps/java-deployment created[root@k8s-master cc]# kubectl get podNAME                               READY   STATUS    RESTARTS       AGEcluster-test-66bb44bd88-zdfdf      1/1     Running   33 (45m ago)   13djava-deployment-7b9f747b8d-9cpsw   1/1     Running   0              7sjava-deployment-7b9f747b8d-j6l22   1/1     Running   0              7sjava-deployment-7b9f747b8d-t4cvb   1/1     Running   0              7sweb-deployment-7fd7479d49-6x4nn    1/1     Running   0              51mweb-deployment-7fd7479d49-bxdp9    1/1     Running   0              51mweb-deployment-7fd7479d49-xhjwb    1/1     Running   0              51m
6)测试验证(出现问题)

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

不断重启

 [root@k8s-master cc]# kubectl get po -o wide -wNAME                               READY   STATUS             RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATEScluster-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: 100mmemory: 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 GATEScluster-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 mysqldocker.io/library/mysql                                             5.7.44              5107333e08a87       520MB[root@k8s-node02 ~]# crictl images | grep mysqldocker.io/library/mysql                                             5.7.44              5107333e08a87       520MB
2)创建资源清单
 apiVersion: apps/v1kind: Deploymentmetadata:name: mysql-deploymentlabels:app: mysql-deploymentspec:replicas: 1selector:matchLabels:app: mysql-deploymenttemplate:metadata:labels:app: mysql-deploymentspec:containers:-       name: mysqlimage: docker.io/library/mysql:5.7.44imagePullPolicy: Neverresources:requests:cpu: 100mmemory: 100Milimits:cpu: 100mmemory: 200Miports:-       name: mysqlportcontainerPort: 3306volumeMounts:- name: localtimemountPath: /var/lib/mysqlvolumes:-       name: localtimenfs:server: 10.0.0.99path: /root/pes/mysql/datarestartPolicy: 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 podNAME                                READY   STATUS      RESTARTS       AGEmysql-deployment-569c465d84-lrp2j   0/1     OOMKilled   2 (18s ago)    30s

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

                                 resources:requests:cpu: 100mmemory: 100Milimits:cpu: 100mmemory: 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 wideNAME                                READY   STATUS             RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATESmysql-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 deniedfind: '/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 wideNAME                                READY   STATUS    RESTARTS       AGE     IP              NODE         NOMINATED NODE   READINESS GATEScluster-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' -uzhangminWelcome to the MariaDB monitor.  Commands end with ; or \g.Your MySQL connection id is 4Server 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: v1kind: Servicemetadata:name: webservicespec:selector:app: web-deploymentports:-       name: webportport: 80targetPort: 80nodePort: 32000protocol: TCPtype: NodePort
2)创建service项目
 [root@k8s-master cc]# kubectl create -f web-service.yaml service/webservice created[root@k8s-master cc]# kubectl get svcNAME         TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGEkubernetes   ClusterIP   10.96.0.1      <none>        443/TCP        15dwebservice   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: v1kind: Servicemetadata:name: javaservicespec:selector:app: java-deploymenttype: NodePortsessionAffinity: NonesessionAffinityConfig:clientIP:timeoutSeconds: 10800ports:-       name: javaportprotocol: TCPport: 8080targetPort: 8080nodePort: 32100
2)创建service项目
 [root@k8s-master cc]# kubectl create -f java-service.yaml [root@k8s-master cc]# kubectl get svcNAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEjavaservice   NodePort    10.96.83.133   <none>        8080:32100/TCP   12mkubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          15dwebservice    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 ; doneAdminView-yX0Ltz_1.jsCategoryView-Ca4t3JNT.js......[root@nginx assets]# for fn in $(ls *.js) ; do echo $fn ; cat $fn | grep 8080 ; doneindex-8SnX15u9.jshttp://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 hostat 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: pesmysqlat 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: v1kind: Servicemetadata:name: pesmysqlspec:selector:app: mysql-deploymenttype: ClusterIPsessionAffinity: NonesessionAffinityConfig:clientIP:timeoutSeconds: 10800ports:-       name: mysqlportprotocol: TCPport: 3306targetPort: 3306
3)创建service项目
 [root@k8s-master cc]# kubectl create -f mysql-service.yaml [root@k8s-master cc]# kubectl get svcNAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEjavaservice   NodePort    10.96.83.133   <none>        8080:32100/TCP   99mkubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          15dpesmysql      ClusterIP   10.96.62.94    <none>        3306/TCP         20mwebservice    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 pesmysqlServer:     10.96.0.10Address:    10.96.0.10#53​Name:   pesmysql.default.svc.cluster.localAddress: 10.96.62.94

5)查看数据库数据
 MySQL [sys]> use project_exam_systemMySQL [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]# lsjava-deployment.yaml  java-service.yaml  mysql-deployment.yaml  mysql-service.yaml  web-deployment.yaml  web-service.yaml[root@k8s-master cc]# kubectl get svcNAME          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGEjavaservice   NodePort    10.96.44.204   <none>        8080:32100/TCP   5h24mkubernetes    ClusterIP   10.96.0.1      <none>        443/TCP          15dpesmysql      ClusterIP   10.96.129.65   <none>        3306/TCP         16mwebservice    NodePort    10.96.144.91   <none>        80:32000/TCP     5h25m[root@k8s-master cc]# kubectl get podNAME                                READY   STATUS    RESTARTS      AGEcluster-test-66bb44bd88-w7hws       1/1     Running   4 (13m ago)   4h18mjava-deployment-b7857bbf-2zldq      1/1     Running   0             47mjava-deployment-b7857bbf-zj564      1/1     Running   0             47mmysql-deployment-755cb9cbb6-m6qwn   1/1     Running   0             27mweb-deployment-7b85c4bc87-454jn     1/1     Running   0             55mweb-deployment-7b85c4bc87-qbc2m     1/1     Running   0             55m

四、优化1(pv部分)

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

资源清单

 apiVersion: v1kind: PersistentVolumemetadata:name: pv-nfsspec:capacity:storage: 7GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: nfs-slownfs:path: /root/pes/web/src/distserver: 10.0.0.99

创建

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

资源清单

 apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pvc-nfsspec:storageClassName: nfs-slowaccessModes:- ReadWriteOnceresources:requests:storage: 4Gi

创建

 [root@k8s-master cc]# kubectl create -f pvc-nfs.yaml persistentvolumeclaim/pvc-nfs created[root@k8s-master cc]# kubectl get pvcNAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGEpvc-nfs   Bound    pv-nfs   7Gi        RWO            nfs-slow       9s
3)修改deployment资源清单
                         volumes:-       name: pesdistpersistentVolumeClaim: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: v1kind: PersistentVolumemetadata:name: java-pv-nfsspec:capacity:storage: 7GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: nfs-slownfs:path: /root/pes/java/srcserver: 10.0.0.99

创建

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

资源清单

 apiVersion: v1kind: PersistentVolumeClaimmetadata:name: java-pvc-nfsspec:storageClassName: nfs-slowaccessModes:- ReadWriteOnceresources:requests:storage: 4Gi

创建

 [root@k8s-master cc]# kubectl create -f java-pvc-nfs.yaml
3)修改deployment资源清单
                         volumes:-       name: pesjavapersistentVolumeClaim: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: v1kind: PersistentVolumemetadata:name: mysql-pv-nfsspec:capacity:storage: 7GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: nfs-slownfs:path: /root/pes/mysql/dataserver: 10.0.0.99

创建

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

资源清单

 apiVersion: v1kind: PersistentVolumeClaimmetadata:name: mysql-pvc-nfsspec:storageClassName: nfs-slowaccessModes:- ReadWriteOnceresources:requests:storage: 4Gi

创建

 [root@k8s-master cc]# kubectl create -f mysql-pvc-nfs.yaml
3)修改deployment资源清单
                         volumes:-       name: localtimepersistentVolumeClaim: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 -pzhangminWelcome to the MariaDB monitor.  Commands end with ; or \g.Your MySQL connection id is 2Server 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 pvNAME           CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGEjava-pv-nfs    7Gi        RWO            Recycle          Bound    default/java-pvc-nfs    nfs-slow                60mmysql-pv-nfs   7Gi        RWO            Recycle          Bound    default/mysql-pvc-nfs   nfs-slow                40mpv-nfs         7Gi        RWO            Recycle          Bound    default/pvc-nfs         nfs-slow                74m[root@k8s-master cc]# kubectl get pvcNAME            STATUS   VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS   AGEjava-pvc-nfs    Bound    java-pv-nfs    7Gi        RWO            nfs-slow       60mmysql-pvc-nfs   Bound    mysql-pv-nfs   7Gi        RWO            nfs-slow       40mpvc-nfs         Bound    pv-nfs         7Gi        RWO            nfs-slow       74m

五、优化2(ingress部分)

1、创建web的ingress

资源清单

 apiVersion: networking.k8s.io/v1kind: Ingressmetadata:name: web-ingressnamespace: defaultspec:ingressClassName: nginxrules:- host: wp-web.comhttp:paths:- path: /pathType: ImplementationSpecificbackend:service:name: web-serviceport:number: 80

创建

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

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

相关文章:

使用k8s部署java前后端服务

一、项目架构 前端、后端、数据库 1&#xff09;前端 静态的资源&#xff1a;img css html js文件 js&#xff1a;axios、ajax 2&#xff09;后端 提供数据&#xff1a;根据web前端发送的请求&#xff0c;从数据库中获取数据 请求都是无状态的&#xff0c;如何保持会话 …...

使用docker创建zabbix服务器

首先保证服务器已正常安装docker&#xff0c;然后执行下面这几个容器创建命令&#xff1a; #创建MySQL容器 docker run --name mysql-server -t --restartunless-stopped -e MYSQL_DATABASE"zabbix" -e MYSQL_USER"zabbix" -e MYSQL_PASSWORD"zabbix_…...

nodejs 016: javascript语法——解构赋值({ a, b, c } = {})=>{console.log(“Hello“);}

在 JavaScript 中&#xff0c;函数参数 { a, b, c } {} 的含义是在函数定义时提供一个默认的对象参数。这个对象包含了三个可选的属性 a, b, 和 c。如果没有传递参数或者传递的参数是一个非对象类型的值&#xff0c;那么函数内部将使用一个空对象 {} 作为参数。 示例 const …...

【人人都能看懂的大模型原理】(一)

前言 当前大模型的学习资源呈现爆发趋势&#xff0c;各种角色的人都用自己的视角参与到大模型的讨论。但是我发现这些学习资源都有几个特点&#xff1a;只摆事实而不讲道理&#xff1b;只讲应用可能而不提实现代价&#xff1b;只讲可能性而缺乏实操经验分享&#xff1b;洞察材…...

JMeter源码解析之JMeter命令行新增命令

JMeter源码解析之JMeter命令行新增命令 需求描述 需要新增一条命令&#xff0c;能够在JMeter命令行中能够展示输入对应的JMeter命令&#xff0c;能够展示对应的命令信息 查看命令效果如下&#xff1a; apache-jmeter-5.1\bin>jmeter --? Copyright © 1999-2024 The …...

YOLOv8 Windows c++推理

#添加一个**yolov8\_。onx **和/或**yolov5\_。Onnx **模型(s)到ultralytics文件夹。 #编辑**main.cpp**来改变**projectBasePath**来匹配你的用户。#请注意&#xff0c;默认情况下&#xff0c;CMake文件将尝试导入CUDA库以与opencv dnn (cuDNN) GPU推理一起使用。 #如果你的Op…...

一文读懂Python中的Popen函数

目录 1. 基本知识2. Demo 1. 基本知识 在Python中&#xff0c;Popen 是 subprocess 模块中的一个函数&#xff0c;它用于创建一个子进程并与其进行通信 subprocess.Popen()&#xff1a;Popen 类用于创建和管理子进程 与 os.system() 或 os.popen() 相比&#xff0c;Popen 提供…...

07-阿里云镜像仓库

07-阿里云镜像仓库 注册阿里云 先注册一个阿里云账号&#xff1a;https://www.aliyun.com/ 进入容器镜像服务控制台 工作台》容器》容器服务》容器镜像服务 实例列表》个人实例 仓库管理》镜像仓库》命名空间》创建命名空间 仓库管理》镜像仓库》镜像仓库》创建镜像仓库 使…...

net core mvc 数据绑定 《2》

mvc core 模型绑定 控制绑定名称 》》》Bind 属性可以用来指定 模型应该 绑定的前缀 public class MyController : Controller {[HttpPost]public ActionResult Create([Bind(Prefix "MyModel")] Ilist<MyModel> model){// 模型绑定将尝试从请求的表单数据中…...

文件服务器FastDFS 消息队列中间件RabbitMQ

新标签页 (chinaunix.net) FastDFS - Browse Files at SourceForge.net 一、FastDFS Tracker和Storage&#xff1a; tracker用来管理所有的storage&#xff0c;只是管理服务器&#xff0c;负责负载均衡。 storage是存储服务器&#xff0c;每一个storage服务器都是一个单独的个…...

工作纪实58-Idea打jar包

有时候需要配合算法使用spark定时DP&#xff0c;调用java相关的jar包做数据处理 idea打jar包有以下三种场景 SpringBoot的Maven项目【Maven打包即可】非SpringBoot的Maven项目【添加maven打包参数&#xff0c;使用Maven打包】 借助maven的配置进行打包&#xff0c;新增以下配置…...

ELK-03-skywalking监控linux系统

文章目录 前言一、下载node_exporter二、启动node_exporter三、下载OpenTelemetry Collector四、启动OpenTelemetry Collector4.1 将配置文件下载到同级目录4.2 启动 五、查看总结 前言 skywalking安装完成后&#xff0c;开始我们的第一个监控-监控linux系统。 参考官方文档&a…...

HEITRONICS TC13红外辐射高温计CT13 INFRARED RADIATION PYROMETER CT13

HEITRONICS TC13红外辐射高温计CT13 INFRARED RADIATION PYROMETER CT13...

开源图像降噪算法与项目介绍【持续更新】

Intel Open Image Denoise 介绍&#xff1a;Intel Open Image Denoise&#xff08;OIDN&#xff09;是一个开源库&#xff0c;它提供了一系列高性能、高质量的去噪滤镜&#xff0c;专门用于光线追踪渲染的图像。这个库是Intel Rendering Toolkit的一部分&#xff0c;并且是在宽…...

RealSense、ZED 和奥比中光Astra几款主流相机介绍及应用

以下是英特尔 RealSense、Stereolabs ZED 和奥比中光Astra几款相机的详细对比&#xff0c;包括参数、性能以及二次开发等支持&#xff0c;附带代码示例。 详细信息对比和二次开发示例 1. 英特尔 RealSense (例如 D435/D455) 深度技术&#xff1a;立体视觉 红外投影分辨率&a…...

启动 Ntopng 服务前需先启动 redis 服务及 Ntopng 常用参数介绍

启动Ntopng服务之前需要先启动redis服务&#xff0c;因为Ntopng服务依赖于redis服务的键值存储。 服务重启 服务启动 Ntopng常用参数&#xff1a; -d 将 Ntopng 进程放入后台执行。默认情况下&#xff0c;Ntop 在前台运行。 -u 指定启动Ntopng执行的用户&#xff0c;默认为…...

vector的模拟实现以及oj题(2)

前言 上篇博客介绍了大部分vector的接口&#xff0c;其中包括begin()、end()、const begin()、 const end()、size、capacity、reserve、empty、push_back、pop_back、insert、operator[]&#xff0c;这篇博客将介绍剩下的部分接口&#xff0c;以及一些oj题解法和思路。 vect…...

数据技术进化史:从数据仓库到数据中台再到数据飞轮的旅程

随着大数据时代的到来&#xff0c;数据已经成为企业的核心资产之一。在过去几十年间&#xff0c;数据技术也随之不断演进&#xff0c;从早期的数据仓库到近年来热门的数据中台&#xff0c;再到正在快速发展的数据飞轮概念&#xff0c;每一步都是技术革新的体现。 一、数据仓库&…...

JAVA JDK华为云镜像下载,速度很快

直达下载地址 https://repo.huaweicloud.com/java/jdk/ https://repo.huaweicloud.com/java/jdk/欢迎各位收藏享用&#xff01;&#xff01;&#xff01;...

【RKNN系列】官方函数:querystring

querystring 函数 功能 查询获取当前芯片平台RGA硬件版本与功能支持信息&#xff0c;以字符串的形式返回。 语法 std::string querystring(int query_type);参数 query_type: 要查询的 RGA 信息类型&#xff08;整数&#xff09; 描述 这个函数用于获取特定类型的 RGA 信…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...