首页 > 其他分享 >Nacos K8s

Nacos K8s

时间:2024-10-22 19:44:50浏览次数:6  
标签:k8s ksp Nacos 192.168 nacos mysql K8s

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 是构建以服务为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。更多的功能特性介绍请查看 Nacos 概览

在本文中,我将为您提供一份全面的实战指南,详细地指导您如何在 Kubernetes 集群中部署以集群模式运行的 Nacos 服务。

实战服务器配置(架构1:1复刻小规模生产环境,配置略有不同)

主机名IPCPU内存系统盘数据盘用途
ksp-registry 192.168.9.90 4 8 40 200 Harbor 镜像仓库
ksp-control-1 192.168.9.91 4 8 40 100 KubeSphere/k8s-control-plane
ksp-control-2 192.168.9.92 4 8 40 100 KubeSphere/k8s-control-plane
ksp-control-3 192.168.9.93 4 8 40 100 KubeSphere/k8s-control-plane
ksp-worker-1 192.168.9.94 8 16 40 100 k8s-worker/CI
ksp-worker-2 192.168.9.95 8 16 40 100 k8s-worker
ksp-worker-3 192.168.9.96 8 16 40 100 k8s-worker
ksp-storage-1 192.168.9.97 4 8 40 400+ ElasticSearch/Longhorn/Ceph/NFS
ksp-storage-2 192.168.9.98 4 8 40 300+ ElasticSearch/Longhorn/Ceph
ksp-storage-3 192.168.9.99 4 8 40 300+ ElasticSearch/Longhorn/Ceph
ksp-gpu-worker-1 192.168.9.101 4 16 40 100 k8s-worker(GPU NVIDIA Tesla M40 24G)
ksp-gpu-worker-2 192.168.9.102 4 16 40 100 k8s-worker(GPU NVIDIA Tesla P100 16G)
ksp-gateway-1 192.168.9.103 2 4 40   自建应用服务代理网关/VIP:192.168.9.100
ksp-gateway-2 192.168.9.104 2 4 40   自建应用服务代理网关/VIP:192.168.9.100
ksp-mid 192.168.9.105 4 8 40 100 部署在 k8s 集群之外的服务节点(Gitlab 等)
合计 15 68 152 600 2100+  

实战环境涉及软件版本信息

  • 操作系统:openEuler 22.03 LTS SP3 x86_64
  • KubeSphere:v3.4.1
  • Kubernetes:v1.28.8
  • KubeKey:  v3.1.1
  • MySQL:v5.7.44
  • Nacos: v2.4.2.1

1. 部署方案规划

1.1 部署架构图

1.2 准备 Nacos 部署资源

  • 创建部署资源根目录
mkdir /srv/nacos
cd /srv/nacos
  • 获取官方资源配置清单
# wget 方式(推荐)
wget https://codeload.github.com/nacos-group/nacos-k8s/zip/refs/heads/master -O nacos-k8s-master.zip

# git 方式
git clone https://github.com/nacos-group/nacos-k8s.git
  • 获取初始化数据库文件
wget https://raw.githubusercontent.com/alibaba/nacos/refs/heads/master/distribution/conf/mysql-schema.sql

1.3 准备 MySQL

Nacos 需要使用 MySQL,本文使用更加贴近生产的 MySQL 主从复制方案部署 MySQL,具体可以参考 一文搞定,在 Kubernetes 集群上部署主从复制 MySQL 

提示: 也可以使用官方提供的资源清单 deploy/mysql/mysql-nfs.yaml ,部署单机版的 MySQL 服务。

Step 1:导入 MySQL 初始化数据

  1. 进入 MySQL 主节点容器内部。
$ kubectl exec -it mysql-source-0 -- mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44-log 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>
  1. 创建数据库及 Nacos 用户。
-- 创建数据库
mysql> CREATE DATABASE IF NOT EXISTS `nacos` DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

-- 创建用户
mysql> CREATE USER 'nacos'@'%' IDENTIFIED BY 'ChangeMe';

-- 赋予权限
mysql> GRANT ALL PRIVILEGES ON `nacos`.* TO 'nacos'@'%';

-- 刷新权限
mysql> FLUSH PRIVILEGES;
  1. 导入数据(无需登录容器内部)。
# 进入数据库初始化 sql 文件目录
$ cd /srv/nacos/

# 导入数据
kubectl exec -i mysql-source-0 -- mysql -S /var/lib/mysql/mysql.sock -u nacos -pChangeMe nacos < mysql-schema.sql

Step 2:查看导入的数据

  1. 登陆 MySQL 主节点容器内部。
$ kubectl exec -it mysql-source-0 -- mysql -u nacos -p
Enter password:
  1. 查看数据库。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| nacos              |
+--------------------+
2 rows in set (0.01 sec)
  1. 查看表。
# 切换数据库
mysql> use nacos;
Database changed

# 查看表
mysql> show tables;
+----------------------+
| Tables_in_nacos      |
+----------------------+
| config_info          |
| config_info_aggr     |
| config_info_beta     |
| config_info_tag      |
| config_tags_relation |
| group_capacity       |
| his_config_info      |
| permissions          |
| roles                |
| tenant_capacity      |
| tenant_info          |
| users                |
+----------------------+
12 rows in set (0.00 sec)

从结果中可以看到执行 mysql-schema.sql 后,自动创建了 Nacos 服务的相关表和数据。

1.4 准备持久化存储

本实战环境使用 NFS 作为 K8s 集群的持久化存储,如果是新集群可以参考《探索 Kubernetes 持久化存储之 NFS 终极实战指南》 部署 NFS 存储。

提示: 也可以使用官方提供的 deploy/nfs/ 目录下的资源清单,部署单机版的 NFS 服务。

2. 集群模式 Nacos 部署

2.1 修改配置文件

  1. 解压部署代码。
$ cd /srv/nacos
$ unzip nacos-k8s-master.zip
$ cd nacos-k8s-master/deploy/nacos
  1. 编辑 nacos-pvc-nfs.yaml,修改数据库配置。
data:
  mysql.host: "mysql-source-headless.default.svc.cluster.local"		# 数据库地址,本文使用 MySQL 服务在 k8s 集群内的 DNS 域名
  mysql.db.name: "nacos"
  mysql.port: "3306"
  mysql.user: "nacos"
  mysql.password: "ChangeMe"
  1. 修改 StoreClass 名称(可选,自建 NFS 存储时使用)。

默认的配置文件使用的 StoreClass 名称为 managed-nfs-storage,使用下面的命令修改为实际的值。

$ sed -i 's/managed-nfs-storage/nfs-sc/g' nacos-pvc-nfs.yaml
  1. 删除 serviceAccountName(可选,自建 NFS 存储时使用)。
sed -i '/serviceAccountName/d' nacos-pvc-nfs.yaml
  1. 修改镜像地址(可选,镜像下载受限或是离线部署时可用)。
sed -i 's#nacos/nacos-peer-finder-plugin:1.1#registry.opsxlab.cn:8443/nacos/nacos-peer-finder-plugin:1.1#g' nacos-pvc-nfs.yaml
sed -i 's#nacos/nacos-server:latest#registry.opsxlab.cn:8443/nacos/nacos-server:v2.4.2.1#g' nacos-pvc-nfs.yaml
  1. 开启鉴权配置(建议)。

Nacos 默认配置没有开启鉴权,生产环境建议开启。在 containers.env 部分增加下面的内容:

- name: NACOS_AUTH_ENABLE
  value: "true"
- name: NACOS_AUTH_TOKEN
  value: "SecretKeyYzJlMTMxOTU5ZTljZTkxZGQ2MDcwZGIxMzU1YTFkMjg="
- name: NACOS_AUTH_IDENTITY_KEY
  value: "serverIdentity"
- name: NACOS_AUTH_IDENTITY_VALUE
  value: "ChangeMe"

注意: 自定义 NACOS_AUTH_TOKEN 密钥时,推荐将配置项设置为Base64 编码的字符串,且原始密钥长度不得低于32字符

可以执行下面的命令生成TOKEN 密钥:

echo -n $(openssl rand -hex 16) | base64 -w0

2.2 部署 Nacos 集群

  1. 执行下面的命令,创建 Nacos。
$ kubectl create -f nacos-pvc-nfs.yaml

正确执行后,输出结果如下 :

$ kubectl create -f nacos-pvc-nfs.yaml
service/nacos-headless created
configmap/nacos-cm created
statefulset.apps/nacos created
  1. 验证 Nacos 节点状态。
$ kubectl get pod -l app=nacos -o wide
NAME      READY   STATUS    RESTARTS   AGE   IP              NODE           NOMINATED NODE   READINESS GATES
nacos-0   1/1     Running   0          25s   10.233.96.233   ksp-worker-3   <none>           <none>
nacos-1   1/1     Running   0          25s   10.233.94.125   ksp-worker-1   <none>           <none>
nacos-2   1/1     Running   0          25s   10.233.68.221   ksp-worker-2   <none>           <none>

2.3 配置 K8s 集群外部访问

我们采用 NodePort 方式在 Kubernetes 集群中对外发布 Nacos 服务,以便管理员能够访问图形化控制台,同时也为集群外的应用提供服务,指定的端口为 31848

使用 vi 编辑器,新建 NodePort 服务资源清单文件 nacos-external.yaml,并输入以下内容:

kind: Service
apiVersion: v1
metadata:
  name: nacos-external
  labels:
    app: nacos-external
spec:
  ports:
    - protocol: TCP
      port: 8848
      targetPort: 8848
      nodePort: 31848
  selector:
    app: nacos
  type: NodePort

2.4 设置管理员密码

自 2.4.0 版本开始,Nacos构建时不再提供管理员用户nacos的默认密码,需要在首次开启鉴权后,通过 API 或 Nacos 控制台进行管理员用户nacos的密码初始化。

本文选择 Nacos 控制台的方式初始化密码,当 Nacos 集群开启鉴权后,访问 Nacos 控制台时,会校验管理员用户nacos的密码是否已经初始化,若发现未初始化密码时,则会跳转至初始化密码的页面进行初始化。

在该页面密码文本框内输入自定义密码,然后点击提交即可。

注意: 若密码文本框内未输入自定义密码或输入空白密码,Nacos 将会生成随机密码,请保存好生成的随机密码。

初始化成功后会弹窗提示初始化成功,并明文展示指定的密码或随机生成的密码,请保存好此密码。

点击「确定」后,会跳转到登录页面,并弹出权限认证失败的提示框。

点击「确定」后,输入 nacos 用户名和对应的密码。

登录成功后,进入「配置管理」页面。

3. 验证测试 Nacos 服务是否正确配置

使用 curl 命令,在 K8s 集群外的机器上调用 Nacos API 接口,通过 Nacos 对外服务对应的 NodePort 端口,验证测试 Nacos 服务是否正常。

3.1 获取 Token

首先,使用用户名和密码登陆 nacos,若用户名和密码正确,会返回 Token 信息。

curl -X POST 'http://192.168.9.91:31848/nacos/v1/auth/login' -d 'username=nacos&password=ChangeMe'

正确执行后,返回的结果如下:

{"accessToken":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI","tokenTtl":18000,"globalAdmin":true,"username":"nacos"}

3.2 服务注册

curl -X POST 'http://192.168.9.91:31848/nacos/v1/ns/instance?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&serviceName=nacos.naming.serviceName&ip=192.168.9.81&port=8080'

3.3 服务发现

curl -X GET 'http://192.168.9.91:31848/nacos/v1/ns/instance/list?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&serviceName=nacos.naming.serviceName'

正确执行后,返回的结果如下:

{"name":"DEFAULT_GROUP@@nacos.naming.serviceName","groupName":"DEFAULT_GROUP","clusters":"","cacheMillis":10000,"hosts":[],"lastRefTime":1727692102280,"checksum":"","allIPs":false,"reachProtectionThreshold":false,"valid":true}[

3.4 发布配置

curl -X POST "http://192.168.9.91:31848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&dataId=nacos.cfg.dataId&group=test&content=helloWorld"

3.5 获取配置

curl -X GET "http://192.168.9.91:31848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTcyNzcwOTk0Mn0.Ki2kgZyh_dj_Zfb9HKPCkKr1cgWfi3szQS4hlZPIwkI&dataId=nacos.cfg.dataId&group=test"

正确执行后,返回的结果如下:

helloWorld

3.6 Nacos 控制台查看

  • 配置管理列表

  • 配置详情

至此,我们完成了在 KubeSphere 管理的 Kubernetes 集群上手动部署 Nacos 集群的全过程,后续的配置管理请根据实际应用的需求进行配置。

免责声明:

  • 笔者水平有限,尽管经过多次验证和检查,尽力确保内容的准确性,但仍可能存在疏漏之处。敬请业界专家大佬不吝指教。
  • 本文所述内容仅通过实战环境验证测试,读者可学习、借鉴,但严禁直接用于生产环境由此引发的任何问题,作者概不负责!

本文内容首发:运维有术。

关于 KubeSphere

KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的开源容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。

KubeSphere 已被 Aqara 智能家居、本来生活、东方通信、微宏科技、东软、华云、新浪、三一重工、华夏银行、四川航空、国药集团、微众银行、紫金保险、去哪儿网、中通、中国人民银行、中国银行、中国人保寿险、中国太平保险、中国移动、中国联通、中国电信、天翼云、中移金科、Radore、ZaloPay 等海内外数万家企业采用。KubeSphere 提供了开发者友好的向导式操作界面和丰富的企业级功能,包括 Kubernetes 多云与多集群管理、DevOps (CI/CD)、应用生命周期管理、边缘计算、微服务治理 (Service Mesh)、多租户管理、可观测性、存储与网络管理、GPU support 等功能,帮助企业快速构建一个强大和功能丰富的容器云平台。

✨ GitHub:https://github.com/kubesphere

标签:k8s,ksp,Nacos,192.168,nacos,mysql,K8s
From: https://www.cnblogs.com/yaoyangding/p/18493600

相关文章

  • cert-manger vault K8S 证书管理
    使用cert-manager和hashicorpvault来管理集群的内部自签名SSL前半部分会介绍一些原理性的内容,后半部分是环境中的实际应用。正常的自签名证书流程如下: 使用cert-manager签名的证书流程cert-manager资源类型:ClusterIssuer:definedCAsthatareabletosignedc......
  • Centos7二进制部署k8s
    前言:确保自己的配置正确,设计到很多文件相关配置导致不正确的就复制配置给ai编辑顺序在运行,报错有可能顺序出了问题,或者通过查看日志来观察哪里报错)一、部署etcd集群三台机器,所有机器相互做解析centos7.4关闭防⽕墙和selinux#sudosystemctlstopfirewalld#sudosete......
  • 关于spring.cloud.nacos.config.import配置不生效问题
    从SpringCloudAlibaba2.2.0.RELEASE版本开始,spring.cloud.nacos.config.import被废弃,取而代之的是spring.cloud.nacos.config.extension-configs。spring:application:name:gateway-servicecloud:nacos:discovery:server-addr:127.0.0.......
  • k8s 中的 Gateway API 的背景和简介【k8s 系列之四】
    〇、GatewayAPI的背景第一阶段:Service初始的Kubernetes内部服务向外暴露,使用的是自身的LoadBlancer和NodePort类型的Service。在集群规模逐渐扩大的时候,这种Service管理的方式满足不了我们的需求。比如NodePort需要大量的端口难以维护,多了一层NAT,请求量大会对......
  • 在K8S中,有一家拼车公司希望通过同时扩展其平台来增加服务器数量,公司如何有效地实现这
    在Kubernetes(K8S)中,对于一家拼车公司希望通过同时扩展其平台来增加服务器数量以实现有效的资源分配,可以按照以下步骤进行:1.准备阶段评估需求:拼车公司需要明确其业务增长预期、用户访问量、峰值负载等关键指标,以确定所需的服务器数量和资源配置。规划架构:设计一个可扩展......
  • 在K8S中,有一种情况,公司希望向具有各种环境的客户提供所有必需的分发,他们如何以动态的
    在Kubernetes(K8S)中,公司若希望向具有各种环境的客户提供所有必需的分发,并以动态的方式实现这一关键目标,可以遵循以下步骤和策略:1.多环境部署策略创建不同的命名空间在Kubernetes中,命名空间是一种将集群内部资源(如Pod、Service等)分组的方式。公司可以为每个客户或环境创建一个......
  • 在K8S中,公司该如何处理服务器及其安装?
    在Kubernetes(K8S)环境中,公司处理服务器及其安装的过程需要细致规划和执行。以下是一个详细的步骤指南,帮助公司有效地处理服务器及其安装:1.服务器准备硬件选择与配置根据业务需求选择合适的服务器硬件,包括CPU、内存、存储等。确保服务器满足Kubernetes的最低硬件要求,例如64位......
  • 在K8S中,什么是 Google 容器引擎?
    在Kubernetes(K8S)生态中,Google容器引擎(GoogleKubernetesEngine,简称GKE)是一个重要的组成部分。以下是对Google容器引擎的详细介绍:1.定义与背景Google容器引擎是GoogleCloud提供的一种托管式的容器化应用程序部署和管理解决方案。它基于Kubernetes,这是一个开源的容器编排平台,......
  • k8s 部署 node exporter
    创建namespacenode-exporter-namespace.yamlapiVersion:v1kind:Namespacemetadata:name:ns-monitor拉取镜像quay.io/prometheus/node-exporter:v0.18.1nodeexporter的DaemonSetnode-exporter-daemonSet.yamlapiVersion:apps/v1kind:DaemonSetmetadata:na......
  • k8s 部署 tomcat
    创建namespacetomcat-namespace.yamlapiVersion:v1kind:Namespacemetadata:name:ns-tomcat创建Deploymenttomcat-deployment.yamlapiVersion:apps/v1kind:Deploymentmetadata:name:tomcat-deploymentnamespace:ns-tomcatspec:replicas:1selector:matchLa......