1. 準備
Git
K8S
kubectl
helm
咱也沒想到 K8S 部署系列能搞這么多次,我一個開發天天干運維的活,前端后端運維測試工程師實至名歸。
2. 方案選擇
https://github.com/nacos-group/nacos-k8s
我替你們看了一下,有好幾種方式能部署,但我們選擇其中一種。
主要是其他的部署方式我也不想驗證啊,我只選了最簡單的 nacos-operator
。跟著我部署,包跑起來的。
3. 利用 nacos-operator 搭建 Nacos 集群
先看看文檔:https://github.com/nacos-group/nacos-k8s/blob/master/operator/README-CN.md
3.1 先把倉庫拉到本地
git clone git@github.com:nacos-group/nacos-k8s.git
3.2 安裝nacos-operator
cd nacos-k8s/operatorhelm install nacos-operator ./chart/nacos-operator --namespace infrastructure
安裝完成之后提示:
NAME: nacos-operatorLAST DEPLOYED: Fri Jun 28 09:10:41 2024NAMESPACE: infrastructureSTATUS: deployedREVISION: 1
3.3 修改配置文件并生效
# 配置文件示例目錄
cd config/samples# 這個表示集群并使用MySQL進行持久化
vim nacos_cluster_mysql.yaml
nacos_cluster_mysql.yaml:
apiVersion: nacos.io/v1alpha1
kind: Nacos
metadata:name: nacos-devnamespace: infrastructure
spec:type: clusterimage: nacos/nacos-server:v2.2.3replicas: 1env:# 開啟鑒權- name: NACOS_AUTH_ENABLEvalue: "true"- name: NACOS_AUTH_TOKENvalue: "XXXXXXXXXX"- name: NACOS_AUTH_IDENTITY_KEYvalue: "XXXXXX"- name: NACOS_AUTH_IDENTITY_VALUEvalue: "XXXXXX"resources:requests:cpu: 100mmemory: 512Milimits:cpu: 500mmemory: 1GimysqlInitImage: "registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql-client:10.2.15-r0"database:type: mysqlmysqlHost: <HOST>mysqlDb: <DB>mysqlUser: <USER>mysqlPort: <PORT>mysqlPassword: <PASSWROD>config: |management.endpoints.web.exposure.include=*
開啟鑒權:Nacos 提供了一個管理后臺,部署成功后通過 host:port/nacos
訪問。如果我們將這個路徑暴露到公網,那么任何人都能訪問。可怕的是, Nacos API 接口的 path 也是 /nacos
。
那么一旦開啟,配置中心API 將直接對外,配置中心里面的東西是什么就不用多說了。
也有同學說我保證它只能在內網訪問就行了吧?這當然可以,Nacos
也是這樣說的。
但我還是建議打開這個開關,因為一旦有人非常不小心暴露了出去,那你就得提桶。我們應該做的是把鑒權打開,然后把管理員權限給老板,如果他沒改默認密碼,我們還要提醒他修改默認。懂我意思了吧?
mysqlInitImage:這是 initContainer
的鏡像,initContainer 是 k8s中的概念,表示服務啟動之前先做一些操作。在這個場景中是連接上MySQL,然后創建庫表這些操作。我實測沒有生效,會報錯 No Datasource set
,所以需要我們自己先初始化好庫表以及插入必要的記錄。
執行這個MySQL初始化腳本
No Datasource set
有很多的原因,有可能是我剛剛的這種情況,也有可能MySQL用戶沒有權限等等。遇到問題可以在 issue 看看其他大佬的騷操作。
Issues · nacos-group/nacos-k8s (github.com)
3.4 驗證集群是否可用
根據剛剛的配置文件,我們可以訪問這個路徑來查看Nacos的管理后臺,當然,這是通過內網訪問的。http://nacos-dev-headless.infrastructure:8848/nacos,訪問能看見管理后臺就大功告成了。可以使用默認的賬戶密碼登錄:nacos/nacos
3.5 在Springboot程序中集成Nacos
先在管理后臺創建好命名空間和dataId 配置文件等
了解Springboot 的配置讀取機制,想裝x的(bushi)看這個:21.?Externalized Configuration (spring.io)英語看不懂就看這個:Felo搜索 - 你的免費AI智能搜索引擎,不是把中文的內容給你了你都能挑出毛病?好吧!
太長不看就讓我給你嚼一下,然后喂給你:
工作目錄下的 config
目錄中的配置文件先加載,配置文件 bootstrap 比 application 先加載。所以我們只要把配置文件掛載到工作目錄下的config
中就行了。
老規矩,先整理好配置 bootstrap.properties
:
spring.application.name=<app-name>
server.port=8080
spring.profiles.active=<profile>spring.cloud.nacos.config.server-addr=nacos-dev-0.nacos-dev-headless.infrastructure.svc.cluster.local:8848
spring.cloud.nacos.config.enabled=true
spring.cloud.nacos.config.refresh-enabled=true
spring.cloud.nacos.config.file-extension=properties
spring.cloud.nacos.username=<username>
spring.cloud.nacos.password=<password>
spring.cloud.nacos.config.namespace=74a2a3bc-cded-4090-b326-993dba2871e6
spring.cloud.nacos.config.group=DEFAULT_GROUPspring.cloud.nacos.config.shared-configs[0].data-id=redis-dev.properties
spring.cloud.nacos.config.shared-configs[1].data-id=kafka-dev.properties
spring.cloud.nacos.config.shared-configs[2].data-id=xxl-job-dev.properties
spring.cloud.nacos.config.shared-configs[3].data-id=druid-dev.properties
然后,在 k8s 配置文件中掛載配置文件:ConfigMaps | Kubernetes 或者這個 k8s deployment掛載配置文件-Felo搜索
最后當然是在應用中引入 Nacos
的依賴,因為我只使用配置中心,我只引入了
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.2.10-RC1</version>
</dependency>
啟動服務,查看監聽查詢
elegant!
Ref
集群模式部署 | Nacos 官網
nacos-operator方式部署
Nacos API 接口
屬性配置列表
MySQL初始化腳本