架構學習第八周--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.pswp.cn/news/897539.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/897539.shtml
英文地址,請注明出處:http://en.pswp.cn/news/897539.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Application.OnTime如何引用帶參數的過程

Application.OnTime方法本身并不直接支持傳遞參數給被調用的過程。不過&#xff0c;有幾種方法可以間接實現這個需求。 方法1&#xff1a;使用單引號表達式 使用單引號表達式來傳遞參數時&#xff0c;不能在表達式中使用變量&#xff0c;需要把參數值直接寫到表達中&am…

網絡安全之tcpdump工具

引言 wireshark是一款非常不錯的抓包軟件&#xff0c;在圖形化界面占絕對統治地位&#xff1b;盡管其在字符界面下有些許選項可供使用&#xff0c;但終究不太方便&#xff0c;下面我再介紹一款NB的終端抓包工具 tcpdump 1、混雜模式 linux的網卡有混雜模式一說&#xff0c;當開…

VC++ 獲取目的IP的路由

GetBestRoute 函數獲取到目的IP的最佳匹配路由。 第一個參數為&#xff1a;destination&#xff08;目的IP&#xff09; 第二個參數為&#xff1a;source&#xff08;源IP&#xff09; 通常不需要指定第二個source&#xff0c;這個一般用來匹配具體某一個網卡接口路由的&…

JavaScript 模塊 vs C# 類:封裝邏輯的兩種哲學

引言 在現代軟件開發中&#xff0c;模塊化和面向對象設計是代碼組織的核心課題。本文通過對比 JavaScript 模塊&#xff08;ES6 Module&#xff09;與 C# 類&#xff08;Class&#xff09;的實現方式&#xff0c;探討兩種語言在封裝邏輯時的不同哲學&#xff0c;并給出實際應用…

大模型在甲狀腺癌診療全流程預測及方案制定中的應用研究

目錄 一、引言 1.1 研究背景與意義 1.2 研究目的與創新點 1.3 國內外研究現狀 二、大模型預測甲狀腺癌的理論基礎 2.1 甲狀腺癌相關醫學知識 2.2 大模型技術原理與特點 2.3 大模型在醫療領域的應用潛力 三、術前預測方案 3.1 預測模型構建 3.1.1 數據收集與預處理 …

electron+vue+webview內嵌網頁并注入js

vue內嵌網頁可以使用iframe實現內嵌網頁&#xff0c;但是只能通過postMessage間接通信&#xff0c;在electron環境下&#xff0c;vue可以直接使用webview來內嵌網頁&#xff0c;支持 executeJavaScript、postMessage、send 等豐富的通信機制。 使用 webview的優勢 性能更佳&…

leetcode日記(95)將有序數組轉換為二叉搜索樹

很簡單&#xff0c;感覺自己越來越適應數據結構題目了…… /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : va…

【threejs實戰教程一】初識Three.js,場景Scene、相機Camera、渲染器Renderer

Three.js是一個基于WebGL的JavaScript 3D圖形庫&#xff0c;用于在瀏覽器中創建和顯示3D內容 Three.js中最基礎的三個關鍵要素就是場景Scene、相機Camera、渲染器Renderer 通俗一點理解&#xff0c;場景就是我們生活中一個具體的場景&#xff0c;比如自然環境中的一棟建筑&…

【leetcode hot 100 138】隨機鏈表的復制

解決一&#xff1a;回溯 哈希表 本題要求我們對一個特殊的鏈表進行深拷貝。如果是普通鏈表&#xff0c;我們可以直接按照遍歷的順序創建鏈表節點。而本題中因為隨機指針的存在&#xff0c;當我們拷貝節點時&#xff0c;「當前節點的隨機指針指向的節點」可能還沒創建&#xf…

木馬查殺之AST初識篇

一、AST 定義 抽象語法樹&#xff08;Abstract Syntax Tree&#xff0c;AST&#xff09;是源代碼的一種抽象表示形式。它以樹狀結構描述源代碼的語法構成&#xff0c;樹上的每個節點都對應源代碼中的一個語法結構或元素&#xff0c;像變量聲明、函數調用、表達式等。通過這種結…

vscode接入DeepSeek 免費送2000 萬 Tokens 解決DeepSeek無法充值問題

1. 在vscode中安裝插件 Cline 2.打開硅基流動官網 3. 注冊并登陸&#xff0c;邀請碼 WpcqcXMs 4.登錄后新建秘鑰 5. 在vscode中配置cline (1) API Provider 選擇 OpenAI Compatible &#xff1b; (2) Base URL設置為 https://api.siliconflow.cn](https://api.siliconfl…

如何在保持安全/合規的同時更快地構建應用程序:DevOps 指南

隨著敏捷思維方式的興起&#xff0c;開發和 DevOps 團隊都面臨著持續的壓力&#xff0c;他們需要以迭代方式縮短發布周期并加快部署速度&#xff0c;以滿足不斷增長的客戶期望。隨著這種對速度的追求越來越強烈&#xff0c;維護安全性和合規性標準的復雜性也隨之增加。 當今 D…

Java中常見的PO、VO、DAO、BO、DO、DTO、POJO、Query類解釋(通俗易懂)

文章目錄 先點擊收藏和點贊,切勿白嫖,感謝一丶PO(persistant object)持久對象二丶VO(value object)值對象三丶DAO(Data Access Objects) 數據訪問對象接口四丶BO/DO(Business Object) 業務對象層五丶DTO(Data Transfer Object) 數據傳輸對象六丶POJO(Plain Old Java Objects) 簡…

Websocket的基本使用

1. WebSocket WebSocket 是一種在單個TCP連接上進行全雙工通信的協議&#xff0c;它在現代 Web 開發和網絡應用中發揮著重要作用。在 WebSocket 出現之前&#xff0c;實現服務器與客戶端實時通信主要采用輪詢Polling和長輪詢Long - Polling等技術。輪詢是客戶端定時向服務器發…

MySQL安裝及基礎操作

以下是基于MySQL 8.4.3版本&#xff08;在Win11上&#xff09;的安裝&#xff1a; 1.mysql的獲取 官網&#xff1a;www.mysql.com 也可以從Oracle官方進入&#xff1a;https://www.oracle.com/ 下載地址&#xff1a;https://downloads.mysql.com/archives/community/ 兩者…

基于6自由度搬運機器人完成單關節伺服控制實現的詳細步驟及示例代碼

以下是基于6自由度搬運機器人完成單關節伺服控制實現的詳細步驟及示例代碼&#xff1a; 1. 系統概述 單關節伺服控制是指對機器人的單個關節進行精確的位置、速度或力矩控制。在6自由度搬運機器人中&#xff0c;每個關節通常由伺服電機驅動&#xff0c;通過反饋傳感器&#x…

虛擬機新掛載磁盤后磁盤無法使用ssh問題 Permission denied (publickey).

在給vmware虛擬機掛載磁盤后再新磁盤目錄里面使用ssh拉取代碼一直報錯: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. manifests: 虛擬機可以添加硬盤,…

每天五分鐘深度學習框架PyTorch:ResNet算法模型完成CAFIR十分類

本文重點 ResNet模型已經搭建完成了&#xff0c;本文我們使用ResNet來跑一下CAFIR10的數據集&#xff0c;看一下分類效果如何&#xff1f; 代碼 本文總結 在之前的課程中我們對殘差塊以及ResNet模型進行了詳細的介紹&#xff0c;并且我們對模型訓練這些基礎的數據集進行了詳…

Python網絡爬蟲與數據采集實戰——網絡爬蟲的基本流程

網絡爬蟲&#xff08;Web Scraper&#xff09;是用于自動化地從互聯網上抓取信息的程序。它廣泛應用于搜索引擎、數據采集、市場分析等領域。本文將詳細探討網絡爬蟲的基本流程&#xff0c;包括URL提取、HTTP請求與響應、數據解析與存儲&#xff0c;以及一個實際的爬蟲示例。文…

1.3 雙指針專題:快樂數(medium)

1.題目鏈接 202. 快樂數 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/happy-number/submissions/609206400/ 2.題目描述 編寫?個算法來判斷?個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于?個正整數&#xff0c;每?次將該數替換…