如何基于Kubernetes運行Nacos高可用集群
Nacos(Namings and Configuration Management)是阿里巴巴開源的一個易于構(gòu)建云原生應用的動態(tài)服務發(fā)現(xiàn)、配置管理和服務管理平臺。
以下是Nacos的一些主要功能和特點:
- 服務發(fā)現(xiàn)和服務健康檢查:Nacos 支持基于 DNS 和 RPC 的服務發(fā)現(xiàn)。這意味著,您的微服務應用可以在 Nacos 中注冊自己,并發(fā)現(xiàn)其他服務。同時,Nacos 可以對注冊的服務進行健康檢查,以確保服務可用。
- 動態(tài)配置服務:在微服務架構(gòu)中,配置信息可能會頻繁變動,Nacos 提供了一個中心化的、外部化的動態(tài)配置服務,您可以在 Nacos 中動態(tài)地管理和修改配置信息,所有使用該配置的服務都會實時得到通知并應用新配置,而無需重啟。
- 動態(tài) DNS 服務:Nacos 提供了一種基于 DNS 協(xié)議的服務發(fā)現(xiàn)方式,可以更好地支持跨集群、跨地區(qū)的服務發(fā)現(xiàn)需求。
- 服務和元數(shù)據(jù)管理:Nacos 提供了統(tǒng)一的服務管理和元數(shù)據(jù)管理功能,您可以在 Nacos 中管理所有服務的信息和狀態(tài),以及服務的元數(shù)據(jù)信息。
- 支持持久化:Nacos 支持 MySQL 數(shù)據(jù)庫持久化,可以保證注冊服務和配置信息的安全性。
- 易于集成和擴展:Nacos 提供了豐富的 API 和插件,可以方便地與其他系統(tǒng)集成,也可以根據(jù)需要進行擴展。
- 支持多種環(huán)境:Nacos 可以運行在單機環(huán)境、集群環(huán)境,也可以運行在云環(huán)境如 Kubernetes 和 Docker 等??偟膩碚f,Nacos 是一個強大的服務注冊和配置管理平臺,它可以幫助開發(fā)人員更好地構(gòu)建和管理微服務應用。
更多內(nèi)容 ?https://nacos.io/zh-cn/docs/architecture.html
創(chuàng)建Nacos數(shù)據(jù)庫
數(shù)據(jù)庫安裝部署就不在這里寫了:
# 下載初始化SQL文件
$ wget https://raw.githubusercontent.com/alibaba/nacos/master/distribution/conf/mysql-schema.sql
# 進去容器
$ docker exec -it mysql bash
# 進入數(shù)據(jù)庫
$ mysql -u root -pAdmin@1234
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
# 創(chuàng)建數(shù)據(jù)庫
mysql> create database nacos;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| nacos |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
# 初始化數(shù)據(jù)庫
mysql> use nacos;
mysql> source mysql-schema.sql;
安裝Nacos高可用集群
本案例以MySQL作為持久化存儲部署:
# 新建一個命名空間
$ kubectl create ns dev
# 拉取安裝配置
$ git clone https://github.com/nacos-group/nacos-k8s.git
$ cd nacos-k8s/deploy/nacos
修改配置:
# 修改數(shù)據(jù)庫信息
$ nacos-no-pvc-ingress.yaml
...
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-cm
data:
mysql.host: "10.0.53.73"
mysql.db.name: "nacos"
mysql.port: "3306"
mysql.user: "root"
mysql.password: "Admin@1234"
- name: NACOS_AUTH_ENABLE
value: "true"
- name: nacos.core.auth.server.identity.key
value: "subM8MzvolJ+MWYVhgkOBC7EvkwOrYczDYOsAB/6KhA="
- name: nacos.core.auth.server.identity.value
value: "7YlBYjd2HU+9DJpPRV4zcvvEkBqO8SxNpfJRDNqPH30="
- name: nacos.core.auth.plugin.nacos.token.secret.key
value: "SecretKey012345678901234567890123456789012345678901234567890123456789"
- name: NACOS_SERVERS
value: "nacos-0.nacos-headless.dev.svc.cluster.local:8848 nacos-1.nacos-headless.dev.svc.cluster.local:8848 nacos-2.nacos-headless.dev.svc.cluster.local:8848"
...
注意:NACOS_SERVERS配置指定的命名空間一定要與Nacos部署的命名空間一致
執(zhí)行創(chuàng)建:
$ kubectl apply -f nacos-pvc-nfs.yaml -n dev
service/nacos-headless created
configmap/nacos-cm created
statefulset.apps/nacos created
查看Pod狀態(tài):
$ kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nacos-0 1/1 Running 0 4m35s
nacos-1 1/1 Running 0 4m19s
nacos-2 1/1 Running 0 4m4s
訪問驗證
本次通過最簡單的forward端口轉(zhuǎn)發(fā)進行暴露進行訪問(也可以通過Ingress進行暴露訪問):
$ kubectl port-forward -n dev nacos-0 8848:8848 --address 0.0.0.0
http://轉(zhuǎn)發(fā)機器IP:8848 默認帳號/密碼:nacos/nacos:
查看集群狀態(tài):
到此為止,Nacos集群就完成部署了!
SpringCloud微服務容器化部署:https://www.processon.com/view/link/656850b84b191f7e7e04d4f5