Kubernetes 部署 Nacos 1.4 集群
文章转载自:http://www.mydlq.club/article/104/
系统环境:
- Nacos 版本:1.4.1
- Mysql 版本:8.0.19
- Kubernetes 版本:1.20.1
一、什么是 Nacos
Nacos 是阿里开源的服务注册中心与配置中心组件,能够帮助开发人员快速实现动态服务发现、服务配置、服务元数据及流量管理。同时能够与 SpringCloud、Kubernetes、Dubbo 等开源生态无缝集成。
Nacos 支持如下核心特性:
- 服务发现: 支持 DNS 与 RPC 服务发现,也提供原生 SDK 、OpenAPI 等多种服务注册方式和 DNS、HTTP 与 API 等多种服务发现方式。
- 服务健康监测: Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
- 动态配置服务: Nacos 提供配置统一管理功能,能够帮助我们将配置以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
- 动态 DNS 服务: Nacos 支持动态 DNS 服务权重路由,能够让我们很容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务。
- 服务及其元数据管理: Nacos 支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
二、提前部署 Mysql
Nacos 需要提前部署 Mysql,目前支持 5.7 及 8.0 版本。
三、导入 SQL 相关数据
等数据库创建完成后,还需要导入 SQL 文件来创建它的表结构和一些基础数据。操作如下,我们进入 Mysql 客户端,执行 source 命令导入 SQL 文件。
$ mysql -uroot -p123456
mysql> source /data/nacos.sql
SQL 地址:https://files.cnblogs.com/files/sanduzxcvbnm/nacos-deploy.zip
也可以通过 Navicat 等可视化工具进行快捷导入。
四、部署 Nacos
这里我们部署 Nacos 集群模式,整体如下示意图,会在 Kubernetes 中创建一个 Service,该 Service 关联 Nacos 中的多个 Pod,一个 Pod 就是 Nacos 节点,Pod 之间通过该 Service 进行交互。最后我们会配置一个 NodePort 方式对外访问。当然,你如果你的 Kubernetes 集群已经部署了 Ingress Controller 则可以创建 Ingress 规则对外提供访问。
1、创建 RBAC 资源
nacos-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: nacos-admin
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nacos-admin-clusterrole
rules:
- apiGroups: [""]
resources: ["persistentvolumes"]
verbs: ["get", "list", "watch", "create", "delete"]
- apiGroups: [""]
resources: ["persistentvolumeclaims"]
verbs: ["get", "list", "watch", "update"]
- apiGroups: [""]
resources: ["endpoints"]
verbs: ["get", "list", "watch", "create", "update", "patch"]
- apiGroups: ["storage.k8s.io"]
resources: ["storageclasses"]
verbs: ["get", "list", "watch"]
- apiGroups: [""]
resources: ["events"]
verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nacos-admin-binding
subjects:
- kind: ServiceAccount
name: nacos-admin
namespace: mydlqcloud
roleRef:
kind: ClusterRole
name: nacos-admin-clusterrole
apiGroup: rbac.authorization.k8s.io
执行部署 Nacos RBAC 资源
-n:指定部署的 Namespace
$ kubectl apply -f nacos-rbac.yaml -n mydlqcloud
2、创建数据库配置 ConfigMap 资源
nacos-config.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: nacos-config
data:
SERVICE_NAME: "nacos-headless"
DOMAIN_NAME: "cluster.local"
NACOS_REPLICAS: "3"
PREFER_HOST_MODE: "hostname"
NACOS_SERVER_PORT: "8848"
NACOS_APPLICATION_PORT: "8848"
JVM_XMX: "2g"
JVM_XMS: "2g"
JVM_XMN: "1g"
MYSQL_SERVICE_HOST: "mysql"
MYSQL_SERVICE_DB_NAME: "nacos_config_cluster"
MYSQL_SERVICE_PORT: "3306"
MYSQL_SERVICE_USER: "root"
MYSQL_SERVICE_PASSWORD: "123456"
参数说明:
- MYSQL_SERVICE_HOST:数据库地址(这里使用上面部署的 Mysql,由于部署在 K8S 里面,所以使用 Mysql Service 提供的 K8S 内部地址)
- MYSQL_SERVICE_PORT: 数据库端口。
- MYSQL_SERVICE_DB_NAME: 指定使用的库名称。
- MYSQL_SERVICE_USER: 数据库用户名。
- MYSQL_SERVICE_PASSWORD: 数据库密码。
- NACOS_APPLICATION_PORT:指定 Nacos 端口号。
- PREFER_HOST_MODE:配置 Nacos 集群节点间服务发现使用的模式,支持 hostname、ip 两种模式。
- JVM_XMS: 设置 JVM 最大堆内存大小。
- JVM_XMX: 设置 JVM 最初是堆内存大小。
- JVM_XMN: 设置 JVM 堆内新生代的内存大小。
- SERVICE_NAME:指定 Nacos 部署在 K8S 中的 Service 名称。
- DOMAIN_NAME:指定 k8s domain 配置,一般默认即可。
执行部署 Nacos 数据库 ConfigMap 资源
-n:指定部署的 Namespace
$ kubectl apply -f nacos-config.yaml -n mydlqcloud
3、创建 Nacos 应用
nacos-deploy.yaml
apiVersion: v1
kind: Service
metadata:
name: nacos-headless
labels:
app: nacos
spec:
ports:
- name: server
port: 8848
targetPort: 8848
- name: rpc
port: 7848
targetPort: 7848
clusterIP: None
selector:
app: nacos
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nacos
spec:
serviceName: nacos-headless
replicas: 3
template:
metadata:
labels:
app: nacos
spec:
terminationGracePeriodSeconds: 10 #配置优雅停机时间
serviceAccountName: nacos-admin #分配服务账户给应用,方便应用能够获取一定的权限
initContainers: #初始化镜像执行初始化操作
- name: peer-finder-plugin-install
image: nacos/nacos-peer-finder-plugin:1.0
volumeMounts:
- mountPath: "/home/nacos/plugins/peer-finder"
name: plugindir
affinity: #配置Pod反亲和性,放置Pod都起在同一节点上(如果都在一个节点,节点宕机将会使全部实例不可用)
podAntiAffinity:
# requiredDuringSchedulingIgnoredDuringExecution: #硬策略,pod一定不能启在同一个节点上
# - topologyKey: "kubernetes.io/hostname"
# labelSelector:
# matchExpressions:
# - key: "app"
# operator: In
# values:
# - nacos
preferredDuringSchedulingIgnoredDuringExecution: #软策略,尽可能pod不启在同一个节点上
- weight: 100
podAffinityTerm:
topologyKey: "kubernetes.io/hostname"
labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nacos
containers:
- name: nacos
image: nacos/nacos-server:1.4.1
resources:
limits:
cpu: 2
memory: "2Gi"
requests:
cpu: 100m
memory: "1Gi"
ports:
- name: client-port
containerPort: 8848
- name: rpc
containerPort: 7848
envFrom:
- configMapRef:
name: nacos-config
env:
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
volumeMounts:
- name: plugindir
mountPath: /home/nacos/plugins/peer-finder
- name: datadir
mountPath: /home/nacos/data
- name: logdir
mountPath: /home/nacos/logs
volumeClaimTemplates:
- metadata:
name: plugindir
spec:
storageClassName: nfs-storage #指定storageclass名称,这里需要根据你的K8S集群进行修改
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 5Gi
- metadata:
name: datadir
spec:
storageClassName: nfs-storage #指定storageclass名称,这里需要根据你的K8S集群进行修改
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 5Gi
- metadata:
name: logdir
spec:
storageClassName: nfs-storage #指定storageclass名称,这里需要根据你的K8S集群进行修改
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: 5Gi
selector:
matchLabels:
app: nacos
上面配置中使用的是 StatefulSet 资源创建的 Nacos,所以需要存储驱动支持 StorageClass 来动态创建 PVC,这里使用的 NFS,并且使用 nfs-client-provisioner 插件来动态创建 PVC。
执行部署 Nacos 应用
-n:指定部署的 Namespace
$ kubectl apply -f nacos-deploy.yaml -n mydlqcloud
4、暴露 Nacos 对外访问
这里我们再创建一个 Service 资源,设置其类型为 NodePort 方式,提供 NodePort 端口为 30848,方便后续我们对 Nacos Dashboard 进行访问。
kind: Service
apiVersion: v1
metadata:
name: nacos
labels:
app: nacos
spec:
ports:
- name: server
port: 8848
targetPort: 8848
nodePort: 30848
selector:
app: nacos
type: NodePort
这里使用 NodePort 方式暴露服务。当然,如果你的 Kubernetes 集群部署了 Ingress Controller,也可以配置 Ingress 路由规则,来让外部访问你的服务。
五、访问 Nacos 进行测试
本人这里的 Kubernetes 地址 IP 为 192.168.2.11,而上面配置的 Nacos Service 中指定 NodePort 端口为 30848,又由于 Nacos 默认会带上前缀 /nacos,所以我们可以输入地址 http://192.168.2.11:30848/nacos 访问 Nacos 页面。
输入用户名/密码: nacos/nacos ,登录 Nacos 后会看到如下页面:
六、Nacos 变量参数及其说明
Nacos 提供了很多可以配置的参数,以环境变量的方式让我们进行配置,部分参数如下所示:
Kubernetes 部署 Nacos 1.4 集群的更多相关文章
- Kubernetes 部署 Nebula 图数据库集群
Kubernetes 是什么 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效,Kubernetes 提供了应 ...
- kubernetes部署Percona XtraDB Cluster集群
PXC介绍 全称percona-xtradb-cluster,提供了MySQL高可用的一种实现方法.PXC集群以节点组成(推荐至少3节点,便于故障恢复),每个节点都是基于常规的 MySQL Serve ...
- Kubernetes部署SpringCloud(一) Eureka 集群,解决unavailable-replicas,available-replicas条件
环境 k8s master: 1个 k8s node: 3个 三个eureka 指定node启动,并且使用network=host 完整pom.xml <?xml version="1 ...
- 【Nacos】本地集群部署
关于Nacos已经展开了四篇入门文章: 初探Nacos(一)-- 单机模式启动 初探Nacos(二)-- SpringCloud使用Nacos的服务注册与发现 初探Nacos(三)-- SpringB ...
- 最新二进制安装部署kubernetes1.15.6集群---超详细教程
00.组件版本和配置策略 00-01.组件版本 Kubernetes 1.15.6 Docker docker-ce-18.06.1.ce-3.el7 Etcd v3.3.13 Flanneld v0 ...
- Docker 也是本地开发的一神器:部署单机版 Pulsar 和集群架构 Redis
原文链接:Docker 也是本地开发的一神器:部署单机版 Pulsar 和集群架构 Redis 一.前言: 现在互联网的技术架构中,不断出现各种各样的中间件,例如 MQ.Redis.Zookeeper ...
- 在Kubernetes上安装Percona XtraDB集群
官方文档地址:https://www.percona.com/doc/kubernetes-operator-for-pxc/kubernetes.html 一.简介 Percona XtraDB C ...
- 基于 Rainbond 部署 DolphinScheduler 高可用集群
本文描述通过 Rainbond 云原生应用管理平台 一键部署高可用的 DolphinScheduler 集群,这种方式适合给不太了解 Kubernetes.容器化等复杂技术的用户使用,降低了在 Kub ...
- CentOS 7部署Kafka和Kafka集群
CentOS 7部署Kafka和Kafka集群 注意事项 需要启动多个shell脚本交互客户端进行验证,运行中的客户端不要停止. 准备工作: 安装java并设置java环境变量,在`/etc/prof ...
随机推荐
- ajax传递参数与controller接收参数映射关系
将ajax的参数传递至后台controller时,data 中的参数名要与controller中的形参保持一致. 前端ajax代码: 1 $.ajax({ 2 url:"/doLogin&q ...
- Java之取余操作 "%"
取模运算与取余运算两个概念有重叠的部分但又不完全一致.主要的区别在于对负整数进行除法运算时操作不同. 对于整形数a,b来说,取模运算或者求余运算的方法都是: 1.求 整数商 c = a / b: 2. ...
- Python迷宫生成器
作为一项古老的智力游戏,千百年来迷宫都散发着迷人的魅力.但是,手工设计迷宫费时又耗(脑)力,于是,我们有必要制作一个程序:迷宫生成器-- 好吧,我编不下去了.但是,从上面的文字中,我们可以看出,我们此 ...
- java的方法(类似与C语言函数)
package www.nihao; import java.util.Scanner; public class demo02 { public static void main(String[] ...
- sudoer文件配置错误修复
以错误配置权限为例,如果是sudoer文件内容配置错误,替换步骤(4)中相关命令即可 (1)建立两个ssh连接,分别记为A.B (2)A:echo $$获取ID (3)B:pkttyagent --p ...
- 漏洞扫描工具nessus、rapid7 insightvm、openvas安装&简单使用
Rapid7-insightvm 申请试用 申请地址 邮件地址不能用常用邮件,要使用自己域名的邮件,可以使用这个临时邮箱 手机号随便输入,10位以上 提交后会跳转下载页面 安装 安装:./Rapid7 ...
- Docker详解(上)
Docker 学习 Docker概述 Docker安装 Docker命令 镜像命令 容器命令 操作命令 ... Docker镜像 容器数据卷 DockerFile Docker网络原理 IDEA整合D ...
- react 吸顶实现
今天获取到一个需求,其实就是吸顶的需求,页面下滑,某一块dom隐藏时发生吸顶现象.这种特效其实老生常谈了,但是在这次做的时候,突发奇想,能否将其做成一个 hook ,从而实现出传递ref即可使得 do ...
- Splash (渲染JS服务)介绍安装
一. splash介绍 1.Splash 是一个带有 HTTP API 的 javascript 渲染服务.它是一个带有 HTTP API 的轻量级浏览器,使用 Twisted 和 QT5 在 Pyt ...
- JAVA定时任务原理入门
本文适用语言:java 序章:定时任务实现方式 当下,java编码过程中,实现定时任务的方式主要以以下两种为主 spring框架的@Scheduled quzrtz框架 网络上关于这两种框架的实践和配 ...