【Nacos】 Kubemetes 快速开始
【Nacos】 Kubemetes 快速开始
Metadata
title: 【Nacos】 Kubemetes 快速开始
date: 2023-01-03 21:21
tags:
- 行动阶段/完成
- 主题场景/组件
- 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
- 细化主题/Module/Nacos/快速开始
categories:
- Nacos
keywords:
- Nacos
description: 【Nacos】 Kubemetes 快速开始
【Nacos】 Kubemetes 快速开始
本项目包含一个可构建的 Nacos Docker Image,旨在利用 StatefulSets 在 Kubernetes 上部署 Nacos。
本项目包含一个可构建的 Nacos Docker Image,旨在利用 StatefulSets 在 Kubernetes 上部署 Nacos
- Clone 项目
git clone https://github.com/nacos-group/nacos-k8s.git
- 简单例子
如果你使用简单方式快速启动, 请注意这是没有使用持久化卷的, 可能存在数据丢失风险:
cd nacos-k8s
chmod +x quick-startup.sh
./quick-startup.sh
测试
- 服务注册
curl -X POST 'http://cluster-ip:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
- 服务发现
curl -X GET 'http://cluster-ip:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
- 发布配置
curl -X POST "http://cluster-ip:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
- 获取配置
curl -X GET "http://cluster-ip:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
在高级使用中, Nacos 在 K8S 拥有自动扩容缩容和数据持久特性, 请注意如果需要使用这部分功能请使用 PVC 持久卷, Nacos 的自动扩容缩容需要依赖持久卷, 以及数据持久化也是一样, 本例中使用的是 NFS 来使用 PVC.
部署 NFS
- 创建角色
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
部署数据库
- 部署主库
cd nacos-k8s
kubectl create -f deploy/mysql/mysql-master-nfs.yaml
- 部署从库
cd nacos-k8s
kubectl create -f deploy/mysql/mysql-slave-nfs.yaml
- 验证数据库是否正常工作
# master
kubectl get pod
NAME READY STATUS RESTARTS AGE
mysql-master-gf2vd 1/1 Running 0 111m
# slave
kubectl get pod
mysql-slave-kf9cb 1/1 Running 0 110m
部署 Nacos
- 修改 deploy/nacos/nacos-pvc-nfs.yaml
data:
mysql.master.db.name: "主库名称"
mysql.master.port: "主库端口"
mysql.slave.port: "从库端口"
mysql.master.user: "主库用户名"
mysql.master.password: "主库密码"
- 创建 Nacos
kubectl create -f nacos-k8s/deploy/nacos/nacos-pvc-nfs.yaml
- 验证 Nacos 节点启动成功
kubectl get pod -l app=nacos
NAME 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
扩容测试
- 在扩容前,使用
kubectl exec
获取在 pod 中的 Nacos 集群配置文件信息
for i in 0 1; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
StatefulSet 控制器根据其序数索引为每个 Pod 提供唯一的主机名。 主机名采用 - 的形式。 因为 nacos StatefulSet 的副本字段设置为 2,所以当前集群文件中只有两个 Nacos 节点地址
- 使用 kubectl scale 对 Nacos 动态扩容
kubectl scale sts nacos --replicas=3
- 在扩容后,使用
kubectl exec
获取在 pod 中的 Nacos 集群配置文件信息
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i cat conf/cluster.conf; done
- 使用
kubectl exec
执行 Nacos API 在每台节点上获取当前 Leader 是否一致
for i in 0 1 2; do echo nacos-$i; kubectl exec nacos-$i curl -X GET "http://localhost:8848/nacos/v1/ns/raft/state"; done
到这里你可以发现新节点已经正常加入 Nacos 集群当中
- 机器配置
内网 IP | 主机名 | 配置 |
---|---|---|
172.17.79.3 | k8s-master | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
172.17.79.4 | node01 | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
172.17.79.5 | node02 | CentOS Linux release 7.4.1708 (Core) Single-core processor Mem 4G Cloud disk 40G |
Kubernetes 版本:1.12.2 (如果你和我一样只使用了三台机器,那么记得开启 master 节点的部署功能)
NFS 版本:4.1 在 k8s-master 进行安装 Server 端,并且指定共享目录,本项目指定的 /data/nfs-share
Git
必须要使用持久卷,否则会出现数据丢失的情况
目录 | 描述 |
---|---|
plugin | 帮助 Nacos 集群进行动态扩容的插件 Docker 镜像源码 |
deploy | K8s 部署文件 |
- nacos-pvc-nfs.yaml or nacos-quick-start.yaml
名称 | 必要 | 描述 |
---|---|---|
mysql.master.db.name | Y | 主库名称 |
mysql.master.port | N | 主库端口 |
mysql.slave.port | N | 从库端口 |
mysql.master.user | Y | 主库用户名 |
mysql.master.password | Y | 主库密码 |
NACOS_REPLICAS | N | 确定执行 Nacos 启动节点数量, 如果不适用动态扩容插件, 就必须配置这个属性,否则使用扩容插件后不会生效 |
NACOS_SERVER_PORT | N | Nacos 端口 |
PREFER_HOST_MODE | Y | 启动 Nacos 集群按域名解析 |
- nfs deployment.yaml
名称 | 必要 | 描述 |
---|---|---|
NFS_SERVER | Y | NFS 服务端地址 |
NFS_PATH | Y | NFS 共享目录 |
server | Y | NFS 服务端地址 |
path | Y | NFS 共享目录 |
- mysql
名称 | 必要 | 描述 |
---|---|---|
MYSQL_ROOT_PASSWORD | N | ROOT 密码 |
MYSQL_DATABASE | Y | 数据库名称 |
MYSQL_USER | Y | 数据库用户名 |
MYSQL_PASSWORD | Y | 数据库密码 |
MYSQL_REPLICATION_USER | Y | 数据库复制用户 |
MYSQL_REPLICATION_PASSWORD | Y | 数据库复制用户密码 |
Nfs:server | N | NFS 服务端地址,如果使用本地部署不需要配置 |
Nfs:path | N | NFS 共享目录,如果使用本地部署不需要配置 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 蝶梦庄生!
评论