vlambda博客
学习文章列表

云原生部署Nacos集群和Nginx集群

nacos源码下载

git clone -b 2.0.3 https://github.com/alibaba/nacos.git

我这里下载的是2.0.3版本的

-b 后面可以跟分支也可以跟tag标签

如果从github.com(访问国外服务器)下载比较慢的话 则可以通过gitee的导入仓库

让gitee(国内服务器)从github下载

然后你再从gitee下载 这样就快了

gitee有一些优化机制 比如通过翻墙机制等可以加快从github下载的速度

也可以直接访问我的gitee

git clone -b 2.0.3 https://gitee.com/pingfanrenbiji/nacos.git

直接启动

http://localhost:8848/nacos

nacos/nacos

云原生部署Nacos集群和Nginx集群

代码编译和打包

进入到nacos/distribution目录

执行

mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U

云原生部署Nacos集群和Nginx集群
  • -Prelease-nacos的含义

P是profile 这里制定一个环境变量为release-nacos

则读取的是这个文件

云原生部署Nacos集群和Nginx集群

这个配置文件中指定了jar包生成的目录

云原生部署Nacos集群和Nginx集群

打包好之后 会在指定目录生成jar包的压缩文件

云原生部署Nacos集群和Nginx集群

打包成docker镜像

git clone -b 2.0.3 https://gitee.com/pingfanrenbiji/nacos-docker

云原生部署Nacos集群和Nginx集群

将上面生成的tar.gz压缩包放到target目录下

修改下Dockerfile文件

这里修改为不从官网下载tar.gz包 而是使用刚刚自己编译打包之后的

通过COPY的方式将该压缩包复制到容器内

进入到build目录下执行编译命令 docker build -t 2.0.3.20220216 .

云原生部署Nacos集群和Nginx集群

-t后面的2.0.3.20220216表示镜像的名称

然后给这个镜像打个标签

docker tag  2.0.3.20220216 mengfanxiao/nacos:2.0.3.20220216

将该镜像推送到远程仓库

docker push mengfanxiao/nacos:2.0.3.20220216

当然也可以搭建本地的私有仓库或者在阿里云创建自己的镜像仓库

我是通过这种方式创建的远程仓库

云原生部署Nacos集群和Nginx集群

点击就会跳转到https://hub.docker.com/repositories

云原生部署Nacos集群和Nginx集群

至此镜像也打包好了

这里补充一个git的小知识点

无论是gitlub还是gitee都有每次push的文件大小限制 最大是100MB

如果超过了100MB就需要将这个文件删除然后再提交

云原生部署Nacos集群和Nginx集群

根据提示查看大文件

git rev-list --objects --all | grep dc6b92c5b0080cdb55f54b39812d0bb56540e131

云原生部署Nacos集群和Nginx集群

从这个提交记录中删除该文件

在工作区的顶级目录中运行这个命令

git filter-branch -f --prune-empty --index-filter 'git rm -rf --cached --ignore-unmatch build/target/nacos-server-2.0.3.tar.gz' --tag-name-filter cat -- --all

云原生部署Nacos集群和Nginx集群

然后再强制(在确保不影响其他人代码的情况)推送即可

git push origin 2.0.3:2.0.3 --force

K8S部署

git clone -b 2.0.3 https://gitee.com/pingfanrenbiji/nacos-k8s

先部署mysql

kubectl create -f ./deploy/mysql/mysql-local.yaml

yaml文件

云原生部署Nacos集群和Nginx集群

这里简单介绍下标红的几处

  • mysql版本号

这里使用的mysql是5.7版本

可以提前把镜像下载好

云原生部署Nacos集群和Nginx集群
  • 数据文件映射到宿主机

    通过name对应起来

    • volumeMounts-mountPath 这个标签是容器内部的路径
    • volumes-hostPath 这个是宿主机的文件路径
  • mysql端口通过NodePort暴露出来

  • evn定义了数据库信息

    • root账号对应的密码是root
    • nacos账号对应的密码是nacos
    • 数据库名称是nacos_devtest

启动好之后 查看pod、servcie的情况

kubectl get pod|grep mysql kubectl get svc|grep mysql

云原生部署Nacos集群和Nginx集群

连接数据库

通过navaicat连接数据库

云原生部署Nacos集群和Nginx集群

可以查看到nacos_devtest数据库

云原生部署Nacos集群和Nginx集群

部署nacos

kubectl create -f ./deploy/nacos/nacos-quick-start.yaml

这个文件也简单介绍几点

  • 容器镜像换成刚才生成的新镜像
云原生部署Nacos集群和Nginx集群
  • 单个pod中有一个容器 单个pod所占用的cpu和内存设置
云原生部署Nacos集群和Nginx集群

1000m表示一个cpu 500m表示0.5个cpu

这里设置了512M 如果配置3个副本 则需要512*3大小的内存空间

  • 副本数量配置
云原生部署Nacos集群和Nginx集群
  • nacos服务列表配置
云原生部署Nacos集群和Nginx集群

命名规则:

pod名称.service名称.命名空间.svc.cluster.local:端口号

  • service暴露NodePort端口
云原生部署Nacos集群和Nginx集群
  • 在configmap中配置数据库的信息
云原生部署Nacos集群和Nginx集群
  • ingress域名配置
云原生部署Nacos集群和Nginx集群

查看执行结果

云原生部署Nacos集群和Nginx集群

访问页面

http://nacos-web.nacos-demo.test.com:30008/nacos

云原生部署Nacos集群和Nginx集群

可以看到集群中有3个节点

云原生部署Nacos集群和Nginx集群

启动成功之后 就会在界面上显示出来这个服务

云原生部署Nacos集群和Nginx集群

K8S部署nginx并启动2个web服务(比如一个是pc端应用web,一个是移动端应用h5)

git clone https://gitee.com/pingfanrenbiji/k8s-nginx.git

云原生部署Nacos集群和Nginx集群
  • nginx目录是映射到宿主机上的文件(配置文件、日志文件)

h5.conf

云原生部署Nacos集群和Nginx集群

a、定义了h5应用nginx的访问日志文件路径和错误日志文件路径

b、location / 定义了访问路径 访问根目录即访问容器中/etc/nginx/html目录下的index.html文件

比如h5访问的后端接口是

http://127.0.0.1:30001/xibaoxiao-api/bwy/user/getbyid

首先30001是nginx的端口

nginx发现请求路径中包含/xibaoxiao-api/则命中了localtion /xibaoxiao-api/规则

然后转发给真实的后端服务

http://172.16.0.114:8092/bwy/user/getbyid

d、这里没有指定listen端口 则继承nginx.conf中定义的默认端口80

web.conf

云原生部署Nacos集群和Nginx集群

a、这里指定了一个端口

因为web和h5是两个独立的应用 希望用2个不同的端口来访问

b、制定了web的访问日志和错误日志文件路径

c、如果访问9000端口的跟路径/ 即是访问/etc/nginx/web中的index.html文件

  • nginx-dep.yaml是部署pod的脚本
云原生部署Nacos集群和Nginx集群

a、将宿主机上的2个应用(web和h5)的静态资源分别映射到/etc/nginx/web和/etc/nginx/html

b、将宿主机上的配置文件映射到容器中的指定路径

c、将容器中的日志文件映射到宿主机上

d、3个副本

  • nginx-svc.yaml是部署service的脚本
云原生部署Nacos集群和Nginx集群

配置80端口和9000端口对应的集群外部访问端口

  • deploy目录是待部署的前端静态资源

查看nginx启动情况

云原生部署Nacos集群和Nginx集群

访问页面

访问h5 http://localhost:30081/

访问web http://localhost:30082/

查看节点上k8s资源的使用情况(比如查看nacos集群)

kubectl get node

kubectl describe node docker-desktop

每个pod分别申请了512M的内存使用了8%的内存 0.5个CPU使用了12%