架构学习第八周--Kubernetes博客搭建

目录

一、整体架构

二、部署MySQL主从

三、部署Redis哨兵

四、部署WordPress

五、注意事项

一、整体架构

        本项目为在一主三从的Kubernetes集群上部署WordPress博客。因为WordPress部分容器版本自行集成Apache和PHP服务,因此在Kubernetes上部署WordPress只需提供MySQL存储数据和Redis缓存Session会话即可。Kubernetes集群基础架构如下:

#k8s-master01        172.29.7.10

#k8s-node01           172.29.7.11

#k8s-node02           172.29.7.12

#k8s-node03           172.29.7.13

#nfs-server             172.29.7.20

#参考往期博客部署NFS-CSI-Driver使Kubernetes集群能调用NFS本地服务器

root@k8s-master01:~# cat /etc/hosts
127.0.0.1 localhost
172.29.7.10 k8s-master01.wlm.com k8s-master01 kubeapi.wlm.com kubeapi
172.29.7.11 k8s-node01.wlm.com k8s-node01
172.29.7.12 k8s-node02.wlm.com k8s-node02
172.29.7.13 k8s-node03.wlm.com k8s-node03
root@k8s-master01:~# kubectl get nodes
NAME           STATUS   ROLES           AGE   VERSION
k8s-master01   Ready    control-plane   17d   v1.29.10
k8s-node01     Ready    <none>          17d   v1.29.10
k8s-node02     Ready    <none>          17d   v1.29.10
k8s-node03     Ready    <none>          17d   v1.29.10

二、部署MySQL主从

        为了确保数据的高可用和容灾性部署MySQL主从为WordPress提供服务。MySQL为有状态服务应该使用Operator或Statefulset进行部署,此处涉及到主从复制配置复杂,因此简化使用Deployment进行部署。

#创建项目存放位置

root@k8s-master01:~# mkdir -pv wordpress/mysql/
root@k8s-master01:~# cd wordpress/mysql/

#创建PVC实现持久化

root@k8s-master01:~/wordpress/mysql# cat mysql-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvc-masternamespace: wordpress
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: nfs-csi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: mysql-pvc-slavenamespace: wordpress
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: nfs-csi

#创建Secret存放MySQL密码(密码为wlm123使用base64加密后如下)

root@k8s-master01:~/wordpress/mysql# kubectl create secret generic mysql-secret --from-literal='root-password'='wlm123' --from-literal='db-password'='wlm123' --dry-run=client -o yaml > mysql-secret.yaml
root@k8s-master01:~/wordpress/mysql# cat mysql-secret.yaml
apiVersion: v1
data:db-password: d2xtMTIzroot-password: d2xtMTIz
kind: Secret
metadata:namespace: wordpressname: mysql-secret

#创建ConfigMap为MySQL提供配置文件,同时实现主从复制
 

root@k8s-master01:~/wordpress/mysql# cat mysql-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-confignamespace: wordpress
data:my.cnf: |[mysqld]server-id=1log_bin=/var/lib/mysql/mysql-bin.logbind-address = 0.0.0.0character-set-server = utf8mb4default_authentication_plugin=mysql_native_password[client]default-character-set = utf8mb4
root@k8s-master01:~/wordpress/mysql# cat mysql-config-slave.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: mysql-config-slavenamespace: wordpress
data:my.cnf: |[mysqld]server-id=22log_bin=/var/lib/mysql/mysql-bin.logbind-address = 0.0.0.0character-set-server = utf8mb4default_authentication_plugin=mysql_native_passwordread-only=ONrelay_log=relay-logrelay_log_index=relay-log.index[client]default-character-set = utf8mb4

#可选操作,创建Service Account赋予MySQL服务名称空间管理员身份,确保其有权限读取Secret

root@k8s-master01:~/wordpress/mysql# cat mysql-sc.yaml
apiVersion: v1
kind: ServiceAccount
metadata:creationTimestamp: nullname: mysql-scnamespace: wordpress
root@k8s-master01:~/wordpress/mysql# cat rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:namespace: wordpressname: secret-reader
rules:
- apiGroups: ["*"]resources: ["*"]verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:namespace: wordpressname: read-secrets
subjects:
- kind: ServiceAccountname: mysql-scnamespace: wordpress
roleRef:kind: Rolename: secret-readerapiGroup: rbac.authorization.k8s.io

#部署MySQL应用

root@k8s-master01:~/wordpress/mysql# cat mysql-deploy.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-masternamespace: wordpress
spec:replicas: 1selector:matchLabels:app: mysqlrole: mastertemplate:metadata:labels:app: mysqlrole: masterspec:serviceAccountName: mysql-sccontainers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: root-password- name: MYSQL_DATABASEvalue: "wp"- name: MYSQL_USERvalue: "wpuser"- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: db-passwordports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysql- name: mysql-configmountPath: /etc/mysql/conf.dvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-pvc-master- name: mysql-configconfigMap:name: mysql-config
---
apiVersion: v1
kind: Service
metadata:name: mysql-masternamespace: wordpress
spec:ports:- port: 3306targetPort: 3306selector:app: mysqlrole: master
root@k8s-master01:~/wordpress/mysql# cat mysql-deploy-slave.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:name: mysql-slavenamespace: wordpress
spec:replicas: 1selector:matchLabels:app: mysqlrole: slavetemplate:metadata:labels:app: mysqlrole: slavespec:serviceAccountName: mysql-sccontainers:- name: mysqlimage: mysql:5.7env:- name: MYSQL_ROOT_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: root-password- name: MYSQL_DATABASEvalue: "wp"- name: MYSQL_USERvalue: "wpuser"- name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysql-secretkey: db-passwordports:- containerPort: 3306volumeMounts:- name: mysql-datamountPath: /var/lib/mysql- name: mysql-config-slavemountPath: /etc/mysql/conf.dvolumes:- name: mysql-datapersistentVolumeClaim:claimName: mysql-pvc-slave- name: mysql-config-slaveconfigMap:name: mysql-config-slave
---
apiVersion: v1
kind: Service
metadata:name: mysql-slavenamespace: wordpress
spec:ports:- port: 3306targetPort: 3306selector:app: mysqlrole: slave

#进入MySQL创建复制账户并进行主从配置,确保IO线程和SQL线程正常运行

root@k8s-master01:~/wordpress/mysql# kubectl apply -f .
root@k8s-master01:~/wordpress/mysql# kubectl exec -it mysql-master-7ff66bfb86-bvlfg -n wordpress -- mysql -uroot -pwlm123
mysql> create user 'replica'@'%' identified by 'wlm123';
mysql> grant replication slave on *.* to 'replica'@'%';
mysql> flush privileges;
mysql> show master status\G;
*************************** 1. row ***************************File: mysql-bin.000003Position: 1538Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
root@k8s-master01:~/wordpress/mysql# kubectl exec -it mysql-slave-58cf89f5dd-nh4sz -n wordpress -- mysql -uroot -pwlm123
mysql> CHANGE MASTER TO-> MASTER_HOST='mysql-master',-> MASTER_USER='replica',-> MASTER_PASSWORD='wlm123',-> MASTER_LOG_FILE='mysql-bin.000003',-> MASTER_LOG_POS=1538;
mysql> START SLAVE;
mysql> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: mysql-masterMaster_User: replicaMaster_Port: 3306Master_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000003Read_Master_Log_Pos: 1538Relay_Log_File: relay-log.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000003Slave_IO_Running: YesSlave_SQL_Running: Yes

三、部署Redis哨兵

        为了确保Redis故障自动转移,使用Satefulset配置Redis一主两从三哨兵。

#创建项目目录

root@k8s-master01:~# mkdir  wordpress/redis/
root@k8s-master01:~# cd wordpress/redis/

#创建PVC实现持久化

root@k8s-master01:~/wordpress/redis# cat redis-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: redis-pvcnamespace: wordpress
spec:accessModes:- ReadWriteManyresources:requests:storage: 10GistorageClassName: nfs-csi

#创建ConfigMap为Redis提供配置文件

root@k8s-master01:~/wordpress/redis# cat redis-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: redis-confignamespace: wordpress
data:redis.conf: |bind 0.0.0.0masterauth 123456requirepass 123456port 6379protected-mode noslave-read-only yes
root@k8s-master01:~/wordpress/redis# cat redis-sen-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: redis-sentinel-confignamespace: wordpress
data:sentinel.conf: |port 26379sentinel monitor mymaster redis-0.redis-svc.wordpress.svc.cluster.local 6379 2sentinel down-after-milliseconds mymaster 5000sentinel failover-timeout mymaster 10000sentinel auth-pass mymaster 123456sentinel resolve-hostnames yes

#部署HeadLess Service使Redis各Pod可通过名称相互解析IP地址

root@k8s-master01:~/wordpress/redis# cat redis-svc.yaml
---
apiVersion: v1
kind: Service
metadata:name: redis-svcnamespace: wordpress
spec:clusterIP: Noneports:- port: 6379targetPort: 6379selector:app: redis
---
apiVersion: v1
kind: Service
metadata:name: redis-sentinelnamespace: wordpress
spec:clusterIP: Noneports:- port: 26379targetPort: 26379selector:app: redis-sentinel

#部署redis应用

root@k8s-master01:~/wordpress/redis# cat redis.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redisnamespace: wordpress
spec:serviceName: redis-svcreplicas: 3selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redis:6.2-alpineports:- containerPort: 6379volumeMounts:- name: redis-datamountPath: /data- name: redis-configmountPath: /usr/local/etc/rediscommand:- sh- -c- |cp /usr/local/etc/redis/redis.conf /data/redis.conf && \redis-server /data/redis.confvolumes:- name: redis-configconfigMap:name: redis-config- name: redis-datapersistentVolumeClaim:claimName: redis-pvc
root@k8s-master01:~/wordpress/redis# cat redis-sen.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-sentinelnamespace: wordpress
spec:serviceName: redis-sentinelreplicas: 3selector:matchLabels:app: redis-sentineltemplate:metadata:labels:app: redis-sentinelspec:containers:- name: redis-sentinelimage: redis:6.2-alpineports:- containerPort: 26379volumeMounts:- name: redis-sentinel-configmountPath: /usr/local/etc/redisreadOnly: true- name: redis-sen-datamountPath: /datacommand:- sh- -c- |cp /usr/local/etc/redis/sentinel.conf /data/sentinel.conf && \redis-sentinel /data/sentinel.confvolumes:- name: redis-sentinel-configconfigMap:name: redis-sentinel-config- name: redis-sen-datapersistentVolumeClaim:claimName: redis-pvc

#手动配置Redis的主从复制,进入哨兵Pod确保哨兵状态正常

root@k8s-master01:~/wordpress/redis# kubectl apply -f redis-pvc.yaml
root@k8s-master01:~/wordpress/redis# kubectl apply -f redis-config.yaml
root@k8s-master01:~/wordpress/redis# kubectl apply -f redis-sen-config.yaml
root@k8s-master01:~/wordpress/redis# kubectl apply -f redis-svc.yaml
root@k8s-master01:~/wordpress/redis# kubectl apply -f redis.yaml
root@k8s-master01:~/wordpress/redis# kubectl exec -it redis-1 -n wordpress -- sh
/data # redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> replicaof redis-0.redis-svc.wordpress.svc.cluster.local 6379
OK
127.0.0.1:6379> exit
/data # exit
root@k8s-master01:~/wordpress/redis# kubectl exec -it redis-2 -n wordpress -- sh
/data # redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> replicaof redis-0.redis-svc.wordpress.svc.cluster.local 6379
OK
root@k8s-master01:~/wordpress/redis# kubectl exec -it redis-0 -n wordpress -- sh
/data # redis-cli -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=10.244.3.38,port=6379,state=online,offset=70,lag=1
slave1:ip=10.244.2.38,port=6379,state=online,offset=70,lag=1
master_failover_state:no-failover
master_replid:09a96f14ebbcf02e358bd675d853dc5797743af5
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:70
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:70
root@k8s-master01:~/wordpress/redis# kubectl exec -it redis-sentinel-0 -n wordpress  -- sh
/data # redis-cli  -p 26379
127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=10.244.1.61:6379,slaves=2,sentinels=3

四、部署WordPress

        WordPress为无状态应用使用Deployment即可完成部署,可根据业务情况进行控制副本数量。

#创建项目目录

root@k8s-master01:~# mkdir  wordpress/deploy/
root@k8s-master01:~# cd wordpress/deploy/

#创建PVC实现持久化并部署应用

root@k8s-master01:~/wordpress/deploy# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: wordpress-pvcnamespace: wordpress
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: nfs-csi
root@k8s-master01:~/wordpress/deploy# cat wordpress.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: wordpressnamespace: wordpress
spec:replicas: 2selector:matchLabels:app: wordpresstemplate:metadata:labels:app: wordpressspec:containers:- name: wordpressimage: wordpress:6.7-php8.1-apacheenv:- name: WORDPRESS_DB_HOSTvalue: "mysql-master:3306"- name: WORDPRESS_DB_USERvalue: "wpuser"- name: WORDPRESS_DB_PASSWORDvalue: "wlm123"- name: WORDPRESS_DB_NAMEvalue: "wp"- name: WORDPRESS_REDIS_HOSTvalue: "redis-svc:6379"ports:- containerPort: 80volumeMounts:- name: wordpress-storagemountPath: /var/www/htmlvolumes:- name: wordpress-storagepersistentVolumeClaim:claimName: wordpress-pvc
---
apiVersion: v1
kind: Service
metadata:name: wordpressnamespace: wordpress
spec:type: LoadBalancerselector:app: wordpressports:- protocol: TCPport: 80targetPort: 80
root@k8s-master01:~/wordpress/deploy# kubectl get svc -n wordpress
NAME             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
mysql-master     ClusterIP      10.104.10.121   <none>        3306/TCP       16d
mysql-slave      ClusterIP      10.104.11.245   <none>        3306/TCP       16d
redis-sentinel   ClusterIP      None            <none>        26379/TCP      3d1h
redis-svc        ClusterIP      None            <none>        6379/TCP       3d1h
wordpress        LoadBalancer   10.101.6.62     172.29.7.52   80:31292/TCP   15d

#通过LoadBalance暴露的External-IP访问Web页面进行配置

#为WordPress配置Ingress服务,方便外部流量管理

root@k8s-master01:~/wordpress/deploy# kubectl create ingress wordpress --rule="wordpress.wlm.com/*"=wordpress:80 --class=nginx  -n wordpress --dry-run=client -o yaml > ingress-wordpress.yaml
root@k8s-master01:~/wordpress/deploy# cat ingress-wordpress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:creationTimestamp: nullname: wordpressnamespace: wordpress
spec:ingressClassName: nginxrules:- host: wordpress.wlm.comhttp:paths:- backend:service:name: wordpressport:number: 80path: /pathType: Prefix
status:loadBalancer: {}
root@k8s-master01:~/wordpress/deploy#  kubectl get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller             LoadBalancer   10.107.247.232   172.29.7.51   80:31631/TCP,443:32678/TCP   16d
ingress-nginx-controller-admission   ClusterIP      10.106.45.66     <none>        443/TCP                      16d

#通过客户端修改本地hosts文件使域名指向Ingress的IP进行博客访问

五、注意事项

        MySQL主从需要确保各容器内配置的server-id唯一,若扩容MySQL从服务需要手动修改配置确保server-id唯一性。

        MySQL配置文件需要修改默认认证插件至mysql_native_password避免密码验证失败。

        Redis使用6.2版本时需要再Sentinel配置文件内加参数sentinel resolve-hostnames yes,否则无法解析pod名称,即使添加无头服务也不能解析,使用kubectl log pod会有相关提示,在reids-0内使用nslookup命令可验证无头服务已正常生效。

        Redis哨兵模式需要修改配置文件,Configmap使用只读挂载时,需要用命令把配置文件复制到持久化的data目录,使用sentinel命令指定data目录下的配置文件

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【品铂科技】在高精度定位行业内的口碑怎么样?

1. ‌技术实力与行业认可‌ 公司自主研发的ABELL无线实时定位系统在复杂环境中&#xff08;如工业、司法监狱等&#xff09;展现出厘米级&#xff08;5-10厘米&#xff09;高精度定位能力&#xff0c;客户反馈系统稳定性强、抗干扰能力突出&#xff0c;成为行业技术标杆‌。参…

长度最小的子数组-滑动窗口解法

本来觉得自己双指针学的还可以了&#xff0c;于是今天直接刷了一道滑动窗口题&#xff0c;没想到还是被坑绊倒了两次。这次我想记录在博客里&#xff0c;不仅可以防止我以后重蹈覆辙&#xff0c;兴许也还可以帮助到其他人。 题目来自力扣&#xff1a;209. 长度最小的子数组 - …

深入理解Linux网络随笔(七):容器网络虚拟化--Veth设备对

深入理解Linux网络随笔&#xff08;七&#xff09;&#xff1a;容器网络虚拟化 微服务架构中服务被拆分成多个独立的容器&#xff0c;docker网络虚拟化的核心技术为&#xff1a;Veth设备对、Network Namespace、Bridg。 Veth设备对 veth设备是一种 成对 出现的虚拟网络接口&…

深入理解 Maven BOM 及其继承特性

深入理解 Maven BOM 及其继承特性 一、什么是 Maven BOM&#xff1f; Maven BOM&#xff08;Bill Of Materials&#xff0c;物料清单&#xff09;是一种特殊的 Maven 项目&#xff0c;用于集中管理依赖项的版本信息。BOM 项目本身并不包含实际的代码或资源&#xff0c;而仅仅…

C语言(25)

一.数据在内存中的存储 1.整数在内存中的存储 整数在内存中以二进制的形式储存&#xff0c;分别为原码&#xff0c;补码&#xff0c;反码 有符号的整数&#xff0c;在上述三种形式都有符号位和数值位两个部分&#xff0c;符号位为0是正数&#xff0c;1是负数&#xff0c;最高…

一篇博客搞定时间复杂度

时间复杂度 1、什么是时间复杂度&#xff1f;2、推导大O的规则3、时间复杂度的计算3.1 基础题 13.2 基础题 23.3基础题 33.4进阶题 13.5进阶题 23.6 偏难题 13.7偏难题 2&#xff08;递归&#xff09; 前言&#xff1a; 算法在编写成可执行程序后&#xff0c;运行时要耗费时间和…

探索 Trossen AI:从 Aloha到智能机器人平台的进化之路

在人工智能与机器人技术快速发展的当下&#xff0c;科研硬件的性能与成本成为影响行业创新的重要因素。Trossen Robotic为在机器人领域二十余年的知名企业&#xff0c;近日推出的 Trossen AI 系列产品&#xff0c;为科研机构与开发者提供了高性能、高性价比的解决方案。 Trosse…

【Power Platform系列】如何在画布应用中调用工作流上传附件

在Power Apps画布应用中上传附件&#xff0c;比如到SharePoint文档库最典型的方式非常简单&#xff0c;插入一个编辑窗体&#xff0c;将窗体和背后的文档库绑定起来即可以快速实现。不过窗体内部的显示格式很难控制&#xff0c;如果要实现更为灵活的控制&#xff0c;就需要采用…

工作记录 2017-01-12

序号 工作 相关人员 1 协助BPO进行Billing的工作。 处理Amazing Charts的数据查询。 修改BillingJobPoster&#xff0c;处理CCDA 的自动导入&#xff0c;预计还需一天才能完成。 修改录入Code的界面&#xff08;code 移动到指定位置&#xff09;&#xff0c;预计明天更新。…

在centOS Linux系统搭建自动化构建工具Jenkins

前言 在工作中发现公司使用Jenkins实现自动化部署项目方案&#xff0c;于是闲着自己也捣鼓一下&#xff0c;网上查阅相关部署资料&#xff0c;顺便记录操作步骤&#xff0c;所以有了下面这篇的文章。 部署完之后&#xff0c;安装前端项目所需环境&#xff0c;比如node环境&am…

开箱即用的whisper-service服务

安装须知 Whisper官方网址 https://github.com/openai/whisper Whisper 镜像站 https://docker.aityp.com/r/docker.io/onerahmet 本次提供的环境镜像为&#xff1a;docker.io/onerahmet/openai-whisper-asr-webservice:v1.6.0-gpu 运行环境要求 服务器架构 服务器架构要…

SpringCloud带你走进微服务的世界

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个…

【xv6操作系统】页表与写时拷贝解析及相关实验设计

【xv6操作系统】页表与写时拷贝解析及相关实验设计 页表页表概念xv6页表xv6 TLB实验1&#xff1a;加速系统调用实验2&#xff1a;打印三级页表实验3&#xff1a;检测已访问的页表 写时拷贝写时拷贝实验实现 页表 页表概念 deepseek说&#xff1a; 页表&#xff08;Page Table…

如何处理PHP中的编码问题

如何处理PHP中的编码问题 在PHP开发过程中&#xff0c;编码问题是一个常见且棘手的问题。无论是处理用户输入、数据库交互&#xff0c;还是与外部API通信&#xff0c;编码问题都可能导致数据乱码、解析错误甚至安全漏洞。本文将深入探讨PHP中的编码问题&#xff0c;并提供一些…

人工智能之数学基础:线性变换的象空间和零空间

本文重点 前面的课程中,我们学习了线性变换,由此而引申出线性变换的象空间和零空间,这两个空间在机器学习领域会被经常用到,本文对此进行学习。 直观理解 总的来说象空间就是经过线性变换得到的空间,零空间就是经过线性变换是零的元素构成的空间。 从几何角度来看,象空…

方案精读:IBM方法论-IT规划方法论

该文档聚焦 IT 规划方法论&#xff0c;适合企业高层管理者、IT 部门负责人、业务部门主管以及参与企业信息化建设的相关人员阅读。 &#xff08;本解读资料已包含在绑定资源内&#xff09; 主要内容围绕 IT 规划展开&#xff1a;首先明确 IT 规划需基于企业核心战略&#xff0…

日志监控工具openobserve使用案例

引言 分享一个日志监控工具&#xff0c;openobserve&#xff08;简称 o2&#xff09;&#xff0c;它是一个云原生可观察性平台&#xff0c;专为日志、指标、跟踪、分析 而构建&#xff0c;旨在以 PB 级规模运行。与 Elasticsearch 不同&#xff0c;OpenObserve 不需要了解和调整…

基于威胁的安全测试值得关注,RASP将大放异彩

2‍021年7月21日&#xff0c;由中国信息通信研究院&#xff08;CAICT&#xff09;指导、悬镜安全主办、腾讯安全协办的中国首届DevSecOps敏捷安全大会&#xff08;DSO 2021&#xff09;在北京圆满举办。大会以“安全从供应链开始”为主题&#xff0c;寓意安全基础决定“上层建筑…

Flutter项目升级Xcode 16.2之后编译问题

最近好久没升级Xcode了&#xff0c;升级了一下最新的16.2之后。发现Flutter项目在iOS设备上运行不起来了。报错&#xff1a; 查了许多网友也遇到了&#xff0c;其中一个解决方案&#xff1a;https://stackoverflow.com/questions/79118572/xcode-16-and-ios-18-project-not-com…

torch_geometric 安装

环境监测&#xff1a; import torch print(torch.__version__) # 查看pytorch安装的版本号 print(torch.cuda.is_available()) # 查看cuda是否可用。True为可用&#xff0c;即是gpu版本pytorch print(torch.cuda.get_device_name(0)) # 返回GPU型号 …