Kubernetes Nacos集群

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 前言 最近几天完成了 Nacos 在Kubernetes 部署,顺便写篇文章记录下部署过程,项目地址Nacos-K8s,有兴趣的可以去了解下,后续会提交到Nacos-Group 里面。 Kubernetes Nacos 本项目包含一个可构建的Nacos Docker Image,旨在利用State.

前言

最近几天完成了 Nacos 在Kubernetes 部署,顺便写篇文章记录下部署 过程,项目地址Nacos-K8s,有兴趣的可以去了解下,后续会提交到Nacos-Group 里面。

Kubernetes Nacos

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

已知限制

  • 暂时不支持动态增量扩容
  • 必须使用持久卷,本项目实现NFS持久卷的例子,如果使用emptyDirs可能会导致数据丢失

Docker 镜像

build目录中包含了已经打好包的Nacos(基于develop分支,已提PR,目前的release版本都不支持k8s集群)项目包,以及镜像制作文件,镜像基础环境Ubuntu 16.04、Open JDK 1.8(JDK 8u111).目前镜像已经提交到Docker Hub

项目目录

目录 描述
build 构建Nacos镜像的项目包以及Dockerfile
deploy k8s部署yaml文件
Initdb Nacos 集群数据库初始化SQL脚本

使用指南

前提要求

  • 本项目的使用,是基于你已经对Kubernetes有一定的认知,所以对如何搭建K8S集群,请自行google或者百度
  • NFS安装方面也不是本文的重点,请自行google或者百度

环境准备

  • 机器配置(作者演示使用阿里云ECS)
机器内网IP 主机名 机器配置
172.17.79.3 k8s-master CentOS Linux release 7.4.1708 (Core) 单核 内存4G 普通云盘40G
172.17.79.4 node01 CentOS Linux release 7.4.1708 (Core) 单核 内存4G 普通云盘40G
172.17.79.5 node02 CentOS Linux release 7.4.1708 (Core) 单核 内存4G 普通云盘40G
  • Kubernetes 版本:1.12.2 (如果你和我一样只使用了三台机器,那么记得开启master节点的部署功能)
  • NFS 版本:4.1 在k8s-master进行安装Server端,并且指定共享目录,本项目指定的/data/nfs-share
  • Git

搭建步骤

Clone项目

在每台机器上都Clone本工程,演示工程就是导入根目录,所以部署路径都是root/nacos-k8s

git clone https://github.com/paderlol/nacos-k8s.git

部署数据库

数据库是以指定节点的方式部署,主库部署在node01节点,从库部署在node02节点.

  • 部署主库
#进入clone下来的工程根目录
cd nacos-k8s 
# 在k8s上创建mysql主库
kubectl create -f deploy/mysql/mysql.yml
  • 部署备库
#进入clone下来的工程根目录
cd nacos-k8s 
# 在k8s上创建mysql备库
kubectl create -f deploy/mysql/mysql-bak.yml

注意:如果工程不是导入机器的根目录,那么同样需要修改mysql.yaml和mysql-bak.yaml中挂载路径,因为数据库PVC使用的是本地卷,请注意更改配置中的path路径如下所示

apiVersion: v1 kind: PersistentVolume metadata: name: mysql-pv-volume labels: type: local spec: storageClassName: manual capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/root/nacos-k8s/mysql" --- ....其他配置 --- apiVersion: v1 kind: PersistentVolume metadata: name: mysql-init-pv-volume labels: type: local spec: storageClassName: initdb capacity: storage: 20Gi accessModes: - ReadWriteOnce hostPath: path: "/root/nacos-k8s/initdb"
  • 部署后查看数据库是否已经正常运行
#查看主库是否正常运行
kubectl get pod -l app=mysql
NAME READY STATUS RESTARTS AGE
mysql-bak-5c5b5bd479-922zv 1/1 Running 0 2d23h
#查看备库是否正常运行
kubectl get pod -l app=mysql-bak

部署NFS

  • 创建角色 K8S在1.6以后默认开启了RBAC
kubectl create -f deploy/nfs/rbac.yaml

提示:如果你的K8S命名空间不是默认"default",那么在创建RBAC之前先执行以下脚本

# Set the subject of the RBAC objects to the current namespace where the provisioner is being deployed $ NS=$(kubectl config get-contexts|grep -e "^\*" |awk '{print $5}') $ NAMESPACE=${NS:-default} $ sed -i'' "s/namespace:.*/namespace: $NAMESPACE/g" ./deploy/nfs/rbac.yaml 
  • 创建ServiceAccount 以及部署NFS-Client Provisioner
kubectl create -f deploy/nfs/deployment.yaml
  • 创建NFS StorageClass
kubectl create -f deploy/nfs/class.yaml
  • 查看NFS是否运行正常
kubectl get pod -l app=nfs-client-provisioner

部署Nacos

  • 获取主库从库在K8S的地址
# 查看主库和从库的cluster ip
kubectl get svc

mysql NodePort 10.105.42.247 <none> 3306:31833/TCP 2d23h
mysql-bak NodePort 10.105.35.138 <none> 3306:31522/TCP 2d23h
  • 修改配置文件depoly/nacos/nacos-pvc-nfs.yaml,找到如下配置,填入上一步查到的主库和从库地址
 db.host.zero: "主库地址"
 db.name.zero: "nacos_devtest"
 db.port.zero: "3306"
 db.host.one: "备库地址"
 db.name.one: "nacos_devtest"
 db.port.one: "3306"
 db.user: "nacos"
 db.password: "nacos"
  • 创建并运行Nacos集群
kubectl create -f nacos-k8s/deploy/nacos/nacos-pvc-nfs.yaml
  • 查看是否运行正常
kubectl get pod -l app=nacos


AME READY STATUS RESTARTS AGE
nacos-0 1/1 Running 0 19h
nacos-1 1/1 Running 0 19h
nacos-2 1/1 Running 0 19h

测试

服务注册

curl -X PUT 'http://集群地址:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'

服务发现

curl -X GET 'http://集群地址:8848/nacos/v1/ns/instances?serviceName=nacos.naming.serviceName'

配置推送

curl -X POST "http://集群地址:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"

配置获取

curl -X GET "http://集群地址:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
本文转自SegmentFault- Kubernetes Nacos集群
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
26天前
|
存储 运维 监控
NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
【2月更文挑战第33天】NACOS 配置中心和注册中心是分两个集群部署还是放在一个集群中
71 2
|
15天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
4天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
37 17
|
10天前
|
存储 应用服务中间件 Nacos
Nacos集群搭建
官方给出的Nacos集群图: 其中包含3个nacos节点,然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。
32 3
|
17天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
18天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
101 0
|
24天前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
211 0
|
25天前
|
Kubernetes Java Nacos
nacos常见问题之k8s上部署需要自动扩缩容如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
28 0
|
25天前
|
Kubernetes Nacos 微服务
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
22 1
nacos常见问题之v2.2.3 k8s 微服务注册nacos强制删除 pod不消失如何解决
|
27天前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
24 0

推荐镜像

更多