云原生之容器編排實踐-ruoyi-cloud項目部署到K8S:Nacosv2.2.3

背景

前面搭建好了 Kubernetes 集群與私有鏡像倉庫,終于要進入服務編排的實踐環節了。本系列拿 ruoyi-cloud 項目進行練手,按照 MySQLNacosRedisNginxGatewayAuthSystem 的順序來部署 ruoyi-cloud 微服務應用。

部署一個服務前,需要明確它是有狀態服務還是無狀態服務,這里 MySQLNacosRedisNginx 當做有狀態服務(StatefulSet)來部署;而 GatewayAuthSystem 這些微服務作為無狀態服務(Deployment)來部署。

這一次對全部服務采用 YAML 文件的方式來進行部署,這有助于理解K8S組織管理資源的風格,后續我們可以借助開源的容器平臺,eg: KubeSphere 來進行可視化的服務部署。不過,手動編寫 YAML 文件有一個問題,那就是當面對較多的微服務時,工作量較大,基本成了體力活;有個好消息是,我們可以使用 Kubernetes 官方提供的 kompose 工具,實現對 dokcer-composeyamlK8Syaml 的轉換。

另外,為了保證后續在實際生產環境下各組件的穩定與可靠,我們限定了所有基礎鏡像的版本。

  • MySQL: 8.0
  • Nacos: 2.2.3
  • Redis: 7.2.3
  • Nginx: 1.25.3

虛機資源

共用到了三臺虛機,1臺作為 Master 節點,2臺 Worker 節點。

主機名IP說明
k8s-master172.16.201.25主節點
k8s-node1172.16.201.26工作節點
k8s-node2172.16.201.27工作節點
[root@k8s-master ~]# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k8s-master   Ready    control-plane,master   37h   v1.20.9
k8s-node1    Ready    <none>                 35h   v1.20.9
k8s-node2    Ready    <none>                 35h   v1.20.9

系統環境

[root@k8s-master ~]# uname -a
Linux k8s-master 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
[root@k8s-master ~]# cat /proc/version 
Linux version 3.10.0-1160.71.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Jun 28 15:37:28 UTC 2022
[root@k8s-master ~]# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)

部署示意

2024-03-02-K8SNacos.jpg

YAML轉換

ruoyi-cloud 項目本身提供了一個使用 docker-compose 部署的配置文件以及所有依賴服務鏡像的構建腳本,是在項目根目錄的 docker 目錄下,可參考Docker容器化部署若依微服務ruoyi-cloud項目。

先將這個 docker 目錄上傳到 Kubernetes 的主節點,然后使用 komposedokcer-composeyaml 轉換為 K8Syaml

curl -L https://github.com/kubernetes/kompose/releases/download/v1.26.0/kompose-linux-amd64 -o kompose
chmod +x kompose
mv ./kompose /usr/local/bin/kompose
[root@k8s-master docker]# cd /opt/docker
[root@k8s-master docker]# kompose convert

對于自動轉換后的 YAML ,我們做簡單的修改后即可應用部署。下面是 NacosYAML 配置文件(做了合并和微調)。

  • ruoyi-nacos-pv-pvc.yaml
apiVersion: v1
kind: PersistentVolume
metadata:name: ruoyi-nacos-data-pvlabels:pv: ruoyi-nacos-data-pv
spec:capacity: storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/nacos/datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node1---apiVersion: v1
kind: PersistentVolume
metadata:name: ruoyi-nacos-log-pvlabels:pv: ruoyi-nacos-log-pv
spec:capacity: storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /data/nacos/lognodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node1---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: ruoyi-nacos-data-pvcnamespace: ruoyi-basic
spec:accessModes:- ReadWriteOnceresources:requests:storage: 200MistorageClassName: local-storageselector:matchLabels:pv: ruoyi-nacos-data-pv---apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: ruoyi-nacos-log-pvcnamespace: ruoyi-basic
spec:accessModes:- ReadWriteOnceresources:requests:storage: 200MistorageClassName: local-storageselector:matchLabels:pv: ruoyi-nacos-log-pv---apiVersion: v1
kind: ConfigMap
metadata:name: ruoyi-nacos-configmapnamespace: ruoyi-basic
data:application.properties: |spring.datasource.platform=mysqldb.num=1db.url.0=jdbc:mysql://ruoyi-mysql.ruoyi-basic:3306/ruoyi-config?characterEncoding=utf8&connectTimeout=20000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTCdb.user=rootdb.password=you-guessnacos.naming.empty-service.auto-clean=truenacos.naming.empty-service.clean.initial-delay-ms=50000nacos.naming.empty-service.clean.period-time-ms=30000management.endpoints.web.exposure.include=*management.metrics.export.elastic.enabled=falsemanagement.metrics.export.influx.enabled=falseserver.tomcat.accesslog.enabled=trueserver.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}iserver.tomcat.basedir=/home/ruoyi/nacos/tomcat/logsnacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**nacos.core.auth.system.type=nacosnacos.core.auth.enabled=truenacos.core.auth.plugin.nacos.token.expire.seconds=18000nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789nacos.core.auth.caching.enabled=truenacos.core.auth.enable.userAgentAuthWhite=falsenacos.core.auth.server.identity.key=serverIdentitynacos.core.auth.server.identity.value=securitynacos.istio.mcp.server.enabled=false

Note:

  1. 這里使用 local-storageStorageClass ,并使用本地磁盤的方式創建使用 PV ,實際建議使用 NFS
  2. 安全起見,生產環境務必設置nacos.core.auth.enabled=true,并且修改上面的nacos.core.auth.plugin.nacos.token.secret.key值。
  • ruoyi-nacos-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:annotations:kompose.cmd: kompose convertkompose.version: 1.26.0 (40646f47)labels:io.kompose.service: ruoyi-nacosname: ruoyi-nacosnamespace: ruoyi-basic
spec:serviceName: ruoyi-nacosreplicas: 1selector:matchLabels:io.kompose.service: ruoyi-nacostemplate:metadata:annotations:kompose.cmd: kompose convertkompose.version: 1.26.0 (40646f47)labels:io.kompose.service: ruoyi-nacosspec:containers:- env:- name: MODEvalue: standaloneimage: nacos/nacos-server:v2.2.3name: ruoyi-nacosports:- containerPort: 8848- containerPort: 9848- containerPort: 9849volumeMounts:- mountPath: /home/nacos/dataname: ruoyi-nacos-data-pvc- mountPath: /home/nacos/logsname: ruoyi-nacos-log-pvc- mountPath: /home/nacos/conf/application.propertiesname: ruoyi-nacos-configsubPath: application.propertiesrestartPolicy: Alwaysvolumes:- name: ruoyi-nacos-data-pvcpersistentVolumeClaim:claimName: ruoyi-nacos-data-pvc      - name: ruoyi-nacos-log-pvcpersistentVolumeClaim:claimName: ruoyi-nacos-log-pvc- name: ruoyi-nacos-configconfigMap:name: ruoyi-nacos-configmapitems:- key: application.propertiespath: application.propertiesdefaultMode: 420
  • ruoyi-nacos-service.yaml
apiVersion: v1
kind: Service
metadata:annotations:kompose.cmd: kompose convertkompose.version: 1.26.0 (40646f47)labels:io.kompose.service: ruoyi-nacosname: ruoyi-nacosnamespace: ruoyi-basic
spec:ports:- name: "8848"port: 8848targetPort: 8848nodePort: 30848- name: "9848"port: 9848targetPort: 9848- name: "9849"port: 9849targetPort: 9849selector:io.kompose.service: ruoyi-nacostype: NodePort

部署Nacos

Note:與 MySQL 使用相同的 NameSpaceStorageClass

# 創建PV、PVC、CM
[root@k8s-master nacos]# kubectl apply -f ruoyi-nacos-pv-pvc-cm.yaml# 部署Nacos
[root@k8s-master nacos]# kubectl apply -f ruoyi-nacos-statefulset.yaml# 創建Nacos服務
[root@k8s-master nacos]# kubectl apply -f ruoyi-nacos-service.yaml# 獲取配置信息
[root@k8s-master nacos]# kubectl get cm -n ruoyi-basic
NAME                   DATA   AGE
kube-root-ca.crt       1      25h
ruoyi-mysql-configmap   1      25h
ruoyi-nacos-configmap   1      14h# 查看所有Pod,Nacos就緒
[root@k8s-master nacos]# kubectl get pod -A
NAMESPACE              NAME                                         READY   STATUS    RESTARTS   AGE
default                busybox                                      1/1     Running   446        18d
docker-registry        docker-registry-9bc898786-l477q              1/1     Running   2          19d
kube-system            calico-kube-controllers-577f77cb5c-hv29w     1/1     Running   3          22d
kube-system            calico-node-4fkrs                            1/1     Running   2          22d
kube-system            calico-node-d4tqq                            1/1     Running   3          22d
kube-system            calico-node-sdmm6                            1/1     Running   6          22d
kube-system            coredns-9545f45dc-tf9wd                      1/1     Running   1          18d
kube-system            etcd-k8s-master                              1/1     Running   10         24d
kube-system            kube-apiserver-k8s-master                    1/1     Running   10         24d
kube-system            kube-controller-manager-k8s-master           1/1     Running   10         24d
kube-system            kube-proxy-4789z                             1/1     Running   2          24d
kube-system            kube-proxy-7mt7k                             1/1     Running   6          24d
kube-system            kube-proxy-lqtpz                             1/1     Running   3          24d
kube-system            kube-scheduler-k8s-master                    1/1     Running   11         24d
kubernetes-dashboard   dashboard-metrics-scraper-79c5968bdc-j9bnv   1/1     Running   3          22d
kubernetes-dashboard   kubernetes-dashboard-658485d5c7-pq7z8        1/1     Running   2          22d
ruoyi-basic             ruoyi-mysql-8c779d94c-b7r9n                   1/1     Running   1          18d
ruoyi-basic             ruoyi-nacos-0                                 1/1     Running   1          18d# 查看Nacos詳細信息
[root@k8s-master nacos]# kubectl describe pod/ruoyi-nacos-0 -n ruoyi-basic# 查看Nacos日志
[root@k8s-master nacos]# kubectl logs -f pod/ruoyi-nacos-0 -n ruoyi-basic# Nacos對外暴露了端口,用于測試
[root@k8s-master nacos]# kubectl get svc -n ruoyi-basic -o wide
NAME         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                        AGE   SELECTOR
ruoyi-mysql   NodePort   10.96.58.67     <none>        3306:30306/TCP                                 24h   io.kompose.service=ruoyi-mysql
ruoyi-nacos   NodePort   10.96.31.220    <none>        8848:30848/TCP,9848:31623/TCP,9849:30012/TCP   13h   io.kompose.service=ruoyi-nacos

驗證Nacos服務

由于暴露了服務端口 30848 ,直接通過遠程瀏覽器訪問驗證 Nacos 是否部署成功。

2024-03-02-Nacos.jpg

部署與重建

可以通過設置副本數為0實現關停 Nacos 服務。

# 刪除Nacos
[root@k8s-master nacos]# kubectl scale --replicas=0 statefulset mine-nacos -n mine-basic
statefulset.apps/mine-nacos scaled# 啟動
[root@k8s-master nacos]# kubectl scale --replicas=1 statefulset mine-nacos -n mine-basic
statefulset.apps/mine-nacos scaled

小總結

這次我們先是借助 kompose 工具,實現對 dokcer-composeyamlK8Syaml 的轉換,經過簡單的加工后即可應用部署;通過以上操作,成功將 Nacos v2.2.3 部署到了 K8S 集群,下一步我們安裝下 Redis 7.2.3

Reference

  • https://github.com/nacos-group/nacos-k8s/issues/437

If you have any questions or any bugs are found, please feel free to contact me.

Your comments and suggestions are welcome!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718880.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718880.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718880.shtml

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

相關文章

傳輸層Transport layer (ISO15118-20:2022) (7.7 part1) -- TCPUDP

7.7 Transport layer 這段描述闡明了文檔中子條款及其所有子條款的特定要求,這些要求分別適用于私有SECC(Supply Equipment Communication Controller)和公共SECC。除非在特定子條款或其內部的任何子條款中另有說明,否則不應將私有SECC和公共SECC視為可互換的。 這意味著…

問題解決 | RuntimeError: CUDA error: invalid device ordinalCUDA kernel errors

錯誤&#xff1a; RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING1. Compile with TO…

windows環境下Grafana+loki+promtail入門級部署日志系統,收集Springboot(Slf4j+logback)項目日志

&#x1f339;作者主頁&#xff1a;青花鎖 &#x1f339;簡介&#xff1a;Java領域優質創作者&#x1f3c6;、Java微服務架構公號作者&#x1f604; &#x1f339;簡歷模板、學習資料、面試題庫、技術互助 &#x1f339;文末獲取聯系方式 &#x1f4dd; 往期熱門專欄回顧 專欄…

動態規劃DP之背包問題4---分組背包問題

目錄 DP分析&#xff1a; 例題&#xff1a; 01背包&#xff1a; 一種物品只有一件 動態規劃DP之背包問題1---01背包問題-CSDN博客 完全背包&#xff1a;一種物品有無限件 動態規劃DP之背包問題2---完全背包問題-CSDN博客 多重背包&#xff1a;一種物品有有限…

【三維重建】【SLAM】SplaTAM:基于3D高斯的密集RGB-D SLAM(CVPR 2024)

題目&#xff1a;SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM 地址&#xff1a;spla-tam.github.io 機構&#xff1a;CMU&#xff08;卡內基梅隆大學&#xff09;、MIT&#xff08;美國麻省理工&#xff09; 總結&#xff1a;SplaTAM&#xff0c;一個新…

十個勤天生菜原價4.9元被炒到300元,2024新商機!新興創業項目!

近日&#xff0c;一則關于生菜價格暴漲的新聞引起了廣泛關注。原價4.9元的生菜&#xff0c;在短短時間內被炒至300元&#xff0c;令人咋舌。在這背后&#xff0c;除了市場供需失衡、炒作等因素外&#xff0c;我們不禁思考&#xff1a;這樣的現象背后是否隱藏著更大的商機&#…

怎么更改淘寶開店時間

更改淘寶開店時間的注意事項與建議 在淘寶上開店&#xff0c;對于許多賣家來說&#xff0c;選擇合適的開店時間是非常重要的。本文將為您介紹如何更改淘寶開店時間&#xff0c;以及在更改過程中需要注意的事項和建議。 一、如何更改淘寶開店時間 在淘寶上更改開店時間相對簡…

LaTeX插入圖片占位符

關于插入圖片更多說明&#xff08;多圖并排、子標題設置等&#xff09;可參考鏈接 LaTeX插入圖片 插入圖片占位符 參考鏈接&#xff1a;https://blog.csdn.net/yq_forever/article/details/129431799 在論文草稿階段有的時候想先插入圖片占位符擬定大綱或寫作思路&#xff0…

張宇30講學習筆記

初等數學 x \sqrt{x} x ?是算數平方根&#xff0c;一定≥0&#xff1b; x 2 \sqrt{x^2} x2 ?|x| x2|x2||x|2 x3≠|x3||x|3 不等式 a>0&#xff0c;b>0&#xff0c;則ab≥2 a b \sqrt{ab} ab ? 對數 ln a b \frac{a}{b} ba?lna-lnb 高等數學 單調性 線性代數

Linux CentOS使用Docker部署Apache Superset并實現遠程分析數據

文章目錄 前言1. 使用Docker部署Apache Superset1.1 第一步安裝docker 、docker compose1.2 克隆superset代碼到本地并使用docker compose啟動 2. 安裝cpolar內網穿透&#xff0c;實現公網訪問3. 設置固定連接公網地址 前言 Superset是一款由中國知名科技公司開源的“現代化的…

WordPress排除調用某個分類下的文章

wordpress在調用分類下文章時&#xff0c;有時需要排除調用某個分類的文章&#xff0c;下面的這段代碼&#xff0c;就可以輕松實現不調用特定ID的分類內容。 <?phpquery_posts("showposts10&cat-1"); //cat-1為排除ID為1的分類下文章while(have_posts()) : …

編譯適用于RK3588的Redroid鏡像

編譯適用于RK3588的Redroid鏡像 不想編譯的話可以用筆者的鏡像&#xff1a; GitHub鏈接 引言 Redroid是什么&#xff0c;不想多說&#xff0c;一個詞總結: 云手機 準備工作 AOSP代碼一堆&#xff0c;編譯起來要命&#xff0c;所以租個高配服務器&#xff0c;筆者用的是Vul…

自動化構建平臺(一)Linux下搭建私有代碼倉庫Gitblit的安裝和使用詳解

文章目錄 前言一、Gitblit的安裝和使用1、本地安裝2、docker下安裝3、Gitblit使用簡介4、Gitblit倉庫權限控制5、Gitblit郵件配置 總結 前言 代碼版本管理&#xff0c;git模式應該是目前最流行的代碼管理軟件。目前支持git的管理軟件有很多。 Gitblit是一個小型的代碼倉庫管理…

《GitHub新手入門指南:從零開始掌握基本用法》

在現代軟件開發和技術社區中,GitHub已經成為了一個不可或缺的平臺。它不僅是一個代碼托管平臺,更是一個技術交流、學習分享的社交平臺。但對于初學者來說,GitHub可能會有些令人望而卻步。本文將詳細介紹GitHub的基本用法,幫助新手快速入門并融入這個充滿活力的技術社區。 …

Qt/C++音視頻開發67-保存裸流加入sps/pps信息/支持264/265裸流/轉碼保存/拉流推流

一、前言 音視頻組件除了支持保存MP4文件外&#xff0c;同時還支持保存裸流即264/265文件&#xff0c;以及解碼后最原始的yuv文件。在實際使用過程中&#xff0c;會發現部分視頻文件保存的裸流文件&#xff0c;并不能直接用播放器播放&#xff0c;查閱資料得知原來是缺少sps/p…

OpenDocCN 20240303 更新

GeekDoc Python 譯文集 PythonBasics 中文系列教程PythonGuru 中文系列教程PythonLand 中文系列教程PythonSpot 中文系列教程 GeekDoc Java 譯文集 Effective Java 中文第三版JavaBeginnersTutorial 中文系列教程JavaTutorialNetwork 中文系列教程Java 8 簡明教程Thinking i…

【寸鐵的刷題筆記】樹、回溯、圖論、bfs、dfs(四)

【寸鐵的刷題筆記】樹、回溯、圖論、bfs、dfs(四) 大家好 我是寸鐵&#x1f44a; 金三銀四&#xff0c;圖論基礎、回溯結合bfs、dfs是必考的知識點? 快跟著寸鐵刷起來&#xff01;面試順利上岸&#x1f44b; 喜歡的小伙伴可以點點關注 &#x1f49d; &#x1f31e;詳見如下專欄…

GitHub登不上:修改hosts文件來解決(GitHub520,window)

參考鏈接&#xff1a;GitHub520: 本項目無需安裝任何程序&#xff0c;通過修改本地 hosts 文件&#xff0c;試圖解決&#xff1a; GitHub 訪問速度慢的問題 GitHub 項目中的圖片顯示不出的問題 花 5 分鐘時間&#xff0c;讓你"愛"上 GitHub。 (gitee.com) GitHub網站…

【Redis】Redis 實現分布式Session

Cookie 保存在客戶端瀏覽器中&#xff0c;而 Session 保存在服務器上。客戶端瀏覽器訪問服務器的時候&#xff0c;服務器把客戶端信息以某種形式記錄在服務器上&#xff0c;這就是 Session。客戶端瀏覽器再次訪問時只需要從該 Session 中查找該客戶的狀態就可以了。 在實際工作…

mybatis plus 根據要求構建sql wrapper

文章目錄 要求: 構建sql wrapper錯誤寫法解決方案 要求: 構建sql wrapper 根據要求構建sql wrapper&#xff1a;dto.getProjectId() null&#xff0c;則 where project_id is nulldto.getProjectId() ! null&#xff0c;則 where project_id 58b1fad6-adaa-4834-8337-8d43834…