一、概览

Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

中文官网:https://nacos.io/zh-cn

什么是 Nacos?

服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理:

Kubernetes Service

gRPC & Dubbo RPC Service

Spring Cloud RESTful Service

Nacos 的关键特性包括:

  • 服务发现和服务健康监测

    Nacos 支持基于 DNS 和基于 RPC 的服务发现。服务提供者使用 原生SDKOpenAPI、或一个独立的Agent TODO注册 Service 后,服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。

    Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。 对于复杂的云环境和网络拓扑环境中(如 VPC、边缘网络等)服务的健康检查,Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式。Nacos 还提供了统一的健康检查仪表盘,帮助您根据健康状态管理服务的可用性及流量。

  • 动态配置服务

    动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。

    动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。

    配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。

    Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。

  • 动态 DNS 服务

    动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以 DNS 协议为基础的服务发现,以帮助您消除耦合到厂商私有服务发现 API 上的风险。

    Nacos 提供了一些简单的 DNS APIs TODO 帮助您管理服务的关联域名和可用的 IP:PORT 列表.

  • 服务及其元数据管理

    Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

  • 更多的特性列表 ...

Nacos 地图

  • 特性大图:要从功能特性,非功能特性,全面介绍我们要解的问题域的特性诉求
  • 架构大图:通过清晰架构,让您快速进入 Nacos 世界
  • 业务大图:利用当前特性可以支持的业务场景,及其最佳实践
  • 生态大图:系统梳理 Nacos 和主流技术生态的关系
  • 优势大图:展示 Nacos 核心竞争力
  • 战略大图:要从战略到战术层面讲 Nacos 的宏观优势

Nacos 生态图

如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如

使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

二、快速开始

本项目包含一个可构建的Nacos Docker Image,旨在利用StatefulSets在Kubernetes上部署Nacos

环境说明

操作系统 ip 主机名 配置 备注
centos 7.6 192.168.31.150  k8s-master 2核4G Kubernetes1.16.3
centos 7.6 192.168.31.183  k8s-node01 2核8G Kubernetes1.16.3
centos 7.6 192.168.31.152 nfs-server 1核2G NFS

说明

由于node01需要运行mysql主从以及nacos,因此可用内存必须要大于4G才行。

NFS作为一台独立服务器,非K8S集群节点。

Kubernetes1.16.3安装,请参考链接:

https://www.cnblogs.com/xiao987334176/p/11899321.html

Clone 项目

登录到master节点

yum install -y git
mkdir /data/
cd /data/
git clone https://github.com/nacos-group/nacos-k8s.git

简单例子

如果你使用简单方式快速启动,请注意这是没有使用持久化卷的,可能存在数据丢失风险:

cd nacos-k8s
chmod +x quick-startup.sh
./quick-startup.sh

测试

服务注册

查看cluster-ip,等待几分钟,保证每一个pod都处于Running状态。

[root@k8s-master nacos-k8s]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
mysql-master-xptvv / Running 2m6s 10.244.85.195 k8s-node01 <none> <none>
mysql-slave-d68ls / Running 2m6s 10.244.85.196 k8s-node01 <none> <none>
nacos-0 1/1 Running 0 2m6s 10.244.85.197 k8s-node01 <none> <none>
nacos-1 1/1 Running 0 15s 10.244.85.198 k8s-node01 <none> <none>
nacos-2 1/1 Running 0 7s 10.244.85.199 k8s-node01 <none> <none>

注意:默认会启动mysql主从和3个nacos。

其中,我们要的cluster-ip,就是指nacos的ip地址。

服务发现

使用第一个nacos的ip地址

# curl -X PUT 'http://10.244.85.197:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
ok

服务发现

# curl -X GET 'http://10.244.85.197:8848/nacos/v1/ns/instances?serviceName=nacos.naming.serviceName'

发布配置

# curl -X POST "http://10.244.85.197:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
true

获取配置

# curl -X GET "http://10.244.85.197:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
helloWorld

三、高级使用

在高级使用中,Nacos在K8S拥有自动扩容缩容和数据持久特性,请注意如果需要使用这部分功能请使用PVC持久卷,Nacos的自动扩容缩容需要依赖持久卷,以及数据持久化也是一样,本例中使用的是NFS来使用PVC.

安装NFS服务器

登录到nfs-server主机,使用Yum安装nfs

yum -y install nfs-utils rpcbind
mkdir -p /data/nfs-share echo "/data/nfs-share *(rw,no_root_squash,sync)" >> /etc/exports
systemctl start nfs && systemctl enable nfs

注意:路径是/data/nfs-share,和deploy/nfs/deployment.yaml 中的路径是对应的。

* 表示允许任意ip访问,由于Pod ip是会变动的,因此改为*

安装NFS客户端

登录到k8s-node01,执行

[root@k8s-node01 ~]# yum install nfs-utils -y

注意:由于node节点需要挂载NFS,因此必须要安装客户端才能挂载。

部署 NFS

创建角色

登录到k8s-master节点执行

[root@k8s-master nacos-k8s]# kubectl create -f deploy/nfs/rbac.yaml

创建 ServiceAccount 和部署 NFS-Client Provisioner

先修改deploy/nfs/deployment.yaml,红色部分是修改的,完整代码如下:

apiVersion: v1
kind: ServiceAccount
metadata:
name: nfs-client-provisioner
---
kind: Deployment
apiVersion: apps/v1
metadata:
name: nfs-client-provisioner
spec:
replicas:
selector:
matchLabels:
app: nfs-client-provisioner
strategy:
type: Recreate
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccount: nfs-client-provisioner
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/open-ali/nfs-client-provisioner:latest
volumeMounts:
- name: nfs-client-root
mountPath: /persistentvolumes
env:
- name: PROVISIONER_NAME
value: fuseim.pri/ifs
- name: NFS_SERVER
value: 192.168.31.152
- name: NFS_PATH
value: /data/nfs-share
volumes:
- name: nfs-client-root
nfs:
server: 192.168.31.152
path: /data/nfs-share

说明:

1. 由于是Kubernetes1.16.3版本,因此extensions/v1beta1是不支持的,必须要改成apps/v1

2. 使用apps/v1后,必须要指定selector字段,因此增加了selector相关代码。

3. 由于默认的quay.io/external_storage/nfs-client-provisioner:latest无法下载,需要改成阿里云镜像才行。

4. 指定NFS服务器的ip地址。

打label标签,这里指定k8s-node01节点

[root@k8s-master nacos-k8s]# kubectl label node k8s-node01 app=nfs-client-provisioner

执行yaml文件

[root@k8s-master nacos-k8s]# kubectl create -f deploy/nfs/deployment.yaml

创建 NFS StorageClass

[root@k8s-master nacos-k8s]# kubectl create -f deploy/nfs/class.yaml

验证NFS部署成功

[root@k8s-master nacos-k8s]# kubectl get pod -l app=nfs-client-provisioner
NAME READY STATUS RESTARTS AGE
nfs-client-provisioner-76d8f94ddc-h7dj6 / Running 61s

部署数据库

由于在 quick-startup.sh 脚本中,已经部署了mysql主从,这里就不需要重复执行了。

部署Nacos

由于在 quick-startup.sh 脚本中,已经部署了 nacos,这里就不需要重复执行了。

默认创建了3个副本。

四、访问Nacos

这里以nodeport方式,发布 Nacos service

修改yaml文件

[root@k8s-master nacos-k8s]# vi ./deploy/nacos/nacos-quick-start.yaml

增加红色部分

---
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
labels:
app: nacos-headless
spec:
type: NodePort
ports:
- port:
name: server
targetPort:
protocol: TCP
nodePort: 30848
selector:
app: nacos
---

重新发布

[root@k8s-master nacos-k8s]# kubectl apply -f ./deploy/nacos/nacos-quick-start.yaml

查看svc

[root@k8s-master nacos-k8s]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.1.0.1 <none> /TCP 28d
mysql-master ClusterIP 10.1.100.185 <none> /TCP 60m
mysql-slave ClusterIP 10.1.39.252 <none> /TCP 60m
nacos-headless NodePort 10.1.118.226 <none> 8848:30848/TCP 60m

访问页面

使用 http://master ip:30848/nacos,比如:

http://192.168.31.150:30848/nacos

登录信息:

默认账号:nacos
默认密码:nacos

登录之后,效果如下:

本文参考链接:

https://nacos.io/zh-cn/docs/use-nacos-with-kubernetes.html

https://www.jianshu.com/p/21d916643560
https://www.cnblogs.com/mutong1228/p/11124590.html
http://d0o0bz.cn/2018/10/k8s-nfs-client-provisioner/

Kubernetes Nacos的更多相关文章

  1. Kratos漫游指南 1 - 概览

    您好,地球人,欢迎来到Kratos漫游指南. 对于刚开始研究Kratos框架的开发者来说,目前的文档有些零散,这与我们的模块化设计有一些关系,不过Don't panic,从这篇文章开始,我将试图打破这 ...

  2. Kubernetes 部署 Nacos 1.4 集群

    文章转载自:http://www.mydlq.club/article/104/ 系统环境: Nacos 版本:1.4.1 Mysql 版本:8.0.19 Kubernetes 版本:1.20.1 一 ...

  3. Spring Cloud Alibaba Nacos 入门

    概览 阿里巴巴在2018年7月份发布Nacos, Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.并表示在6-8个月完成到生产可用的0.8版本,目前版本是0.9版本. Na ...

  4. SpringBoot使用Nacos配置中心

    本文介绍SpringBoot如何使用阿里巴巴Nacos做配置中心. 1.Nacos简介 Nacos是阿里巴巴集团开源的一个易于使用的平台,专为动态服务发现,配置和服务管理而设计.它可以帮助您轻松构建云 ...

  5. 阿里启动新项目:Nacos,比 Eureka 更强!

    什么是 Nacos? Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提 ...

  6. Nacos发布0.5.0版本,轻松玩转动态 DNS 服务

    阿里巴巴微服务开源项目Nacos于近期发布v0.5.0版本,该版本主要包括了DNS-basedService Discovery,对Java 11的支持,持续优化Nacos产品用户体验,更深度的与Sp ...

  7. Nacos系列:欢迎来到Nacos的世界!

    什么是Nacos? Nacos 是构建以"服务"为中心的现代应用架构 (例如微服务范式.云原生范式) 的服务基础设施. Nacos可以做什么? 1.动态配置服务:支持以中心化.外部 ...

  8. SpringBoot开发案例Nacos配置管理中心

    前言 在开发过程中,通常我们会配置一些参数来实现某些功能,比如是否开启某项服务,告警邮件配置等等.一般会通过硬编码.配置文件或者数据库的形式实现. 那么问题来了,如何更加优雅的实现?欢迎来到 Naco ...

  9. Nacos(一):Nacos介绍

    前言 6月份阿里开源的Nacos出了1.0.1版本,从去年7月份第一个release版本到现在一直在默默关注 官方的版本规划为:Nacos从0.8.0开始支持生产可用,1.0版本可大规模生产可用,2. ...

随机推荐

  1. deepin把vscode设为默认文本应用

    一开始我想自己写一个desktop文件放在/usr/share/applications下面,结果在右键菜单里面找不到vscode. [Desktop Entry] Categories=Develo ...

  2. word转txt

    import org.apache.poi.hwpf.extractor.WordExtractor; import java.io.IOException; import java.io.Input ...

  3. CTF必备技能丨Linux Pwn入门教程——stack canary与绕过的思路

    Linux Pwn入门教程系列分享如约而至,本套课程是作者依据i春秋Pwn入门课程中的技术分类,并结合近几年赛事中出现的题目和文章整理出一份相对完整的Linux Pwn教程. 教程仅针对i386/am ...

  4. 倒计时3天!i春秋四周年盛典狂欢,钜惠不停

    六月注定是不平凡的 感恩父亲节 父爱如山亦如海 难忘毕业季 青春无悔不散场 嗨购618 优惠福利送不停 更值得期待的是 在这个不平凡的六月 迎来了i春秋四周年庆典 当周年庆遇到618 会擦出怎样的火花 ...

  5. Google Analytics 学习笔记二 —— GA部署

    一.直接部署 直接复制GA跟踪代码 放到所有页面 跟踪代码放到 "head"前面 二.GTM部署方法一 三.GTM部署方法二 Tacking ID 四.测试.参数配置与调优

  6. Vue实战狗尾草博客管理系统第一章

    Vue实战狗尾草博客后台管理系统第一章 这里准备采用的技术栈为:vue全家桶+element-ui 这里因为是后台管理系统,没有做SSR的必要.所以这里就采用前后端分离来昨晚这个项目~ 项目搭建 vu ...

  7. python中property简单使用与实现

    property简单使用 class P: """ property简单使用 """ def __init__(self,name): se ...

  8. jmeter压测学习7-登录参数化(CSV 数据文件设置)

    前言 我们在压测登录接口的时候,如果只用一个账号去设置并发压测,这样的结果很显然是不合理的,一个用户并发无法模拟真实的情况. 如果要压测登录接口,肯定得准备几百,甚至上千的账号去登录,测试的结果才具有 ...

  9. 201871010106-丁宣元 《面向对象程序设计(java)》第四周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第四周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-da ...

  10. Python内容

    1.Python介绍.计算机硬件.网络.变量.数据类型:列表+元组+字典+布尔值+字符串+数字+集合.格式化输出.if判断.for循环.while循环. 2.三元运算.字符编码.文件处理:r/rb(读 ...