12306网站做的好垃圾/seo网络优化是什么意思
一、项目架构
前端、后端、数据库
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#53Name: 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)前端 静态的资源:img css html js文件 js:axios、ajax 2)后端 提供数据:根据web前端发送的请求,从数据库中获取数据 请求都是无状态的,如何保持会话 …...

使用docker创建zabbix服务器
首先保证服务器已正常安装docker,然后执行下面这几个容器创建命令: #创建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 中,函数参数 { a, b, c } {} 的含义是在函数定义时提供一个默认的对象参数。这个对象包含了三个可选的属性 a, b, 和 c。如果没有传递参数或者传递的参数是一个非对象类型的值,那么函数内部将使用一个空对象 {} 作为参数。 示例 const …...

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

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

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

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

07-阿里云镜像仓库
07-阿里云镜像仓库 注册阿里云 先注册一个阿里云账号: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: tracker用来管理所有的storage,只是管理服务器,负责负载均衡。 storage是存储服务器,每一个storage服务器都是一个单独的个…...

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

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

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

开源图像降噪算法与项目介绍【持续更新】
Intel Open Image Denoise 介绍:Intel Open Image Denoise(OIDN)是一个开源库,它提供了一系列高性能、高质量的去噪滤镜,专门用于光线追踪渲染的图像。这个库是Intel Rendering Toolkit的一部分,并且是在宽…...

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

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

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

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

JAVA JDK华为云镜像下载,速度很快
直达下载地址 https://repo.huaweicloud.com/java/jdk/ https://repo.huaweicloud.com/java/jdk/欢迎各位收藏享用!!!...

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

Stable Diffusion零基础学习
Stable Diffusion学习笔记TOP14 _插件篇之ControlNet功能篇 ControlNet目前支持的10多种预处理器,根据数据检测种类可分为两种类型: 1、功能型:拥有着不同的能力 2、构图型:控制着SD扩散图形的构图规则 部分未编写预处理器的功…...

C#基于SkiaSharp实现印章管理(9)
将印章设计模块设计的印章保存为图片并集中存放在指定文件夹内。新建印章应用项目,主要实现对图片及PDF文件加盖印章功能。本文实现给图片加盖印章功能。 给图片加盖印章的逻辑比较简单,就是将印章图片绘制到图片指定位置,使用SKControl控…...

研究生如何利用ChatGPT帮助开展日常科研工作?
小白可做!全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 作为当代研究生,科研工作三部曲----读文献、开组会、数据分析。无论哪一个,都令研究生们倍感头疼,简直就是梦魇。每当看到导师发来的消息&a…...

汽车零部件开发流程关键阶段
目录 1、定点阶段 1.1、定点前的准备工作 1.2、定点决策过程 1.3、定点后的工作交接 2、A样阶段:设计验证与基本功能实现 2.1、样件制作:从设计图纸到实物转化 2.2、功能测试:初步验证与性能评估 2.3、评估与优化:A样阶段…...

Magnific推V2图像生成服务 可直出4K图像
人工智能 - Ai工具集 - 集合全球ai人工智能软件的工具箱网站 近日,AI图像处理领域再迎重大突破,Magnific推出的V2图像生成服务引领行业潮流。此次升级,不仅使Magnific从高端软件跻身为顶级AI图像生成器,更彰显了其在技术创新及用…...

E9OA解决文档附件没有关联文档正文问题
业务背景: OA通知流程已经提交后在审批中发现漏上传了文档附件。临时放开审批结点文档附件编辑,请审批结点领导将附件上传后再审批。最终在流程中查看可以看到正文和附件,但是在通知文档正文中没有关联文档附件,导致大多数人员在通…...

EasyExcel日常使用总结
文章目录 概要引入依赖常用操作方法折叠或隐藏列折叠或隐藏行单元格样式单行表头设置多行表头设置多个sheet写入自动列宽 概要 EasyExcel日常使用总结。 引入依赖 引入依赖 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</a…...

人只活一次,活出一道光吧
人只活一次, 你怎么舍得让自己的短暂的一生是丑陋的, 你怎么舍得让自己短暂的一生, 只是在往下坠落, 即便是坠落, 也应该具有落日般的华丽吧, 你会漫漫的活成一束光, 谁若接近你, 就是接近光, 【人人都想向上,人人都想老而不衰,但现实是当你想活成一道光…...

sqli-labs:1~16(sql注入点稳定判断语句、全回显半回显报错回显无回显利用思路、sql注入tips)
怎么验证sql注入的存在呢? 首先,双引号单引号注入,看看有没有报错,或者与正常参数的区别,有报错说明大概率可以注入成功,但是,很可能单引号和双引号测试可能没有报错回显,或者与正常…...

springboot农产品销售信息微信小程序—计算机毕业设计源码35557
摘 要 在信息飞速发展的今天,网络已成为人们重要的信息交流平台。每天都有大量的农产品需要通过网络发布,为此,本人开发了一个基于springboot农产品销售信息微信小程序。 对于本农产品销售信息系统的设计来说,它主要是采用后台采…...