云原生部署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/distribution目录
执行
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
-
-Prelease-nacos的含义
P是profile 这里制定一个环境变量为release-nacos
则读取的是这个文件
这个配置文件中指定了jar包生成的目录
打包好之后 会在指定目录生成jar包的压缩文件
打包成docker镜像
git clone -b 2.0.3 https://gitee.com/pingfanrenbiji/nacos-docker
将上面生成的tar.gz压缩包放到target目录下
修改下Dockerfile文件
这里修改为不从官网下载tar.gz包 而是使用刚刚自己编译打包之后的
通过COPY的方式将该压缩包复制到容器内
进入到build目录下执行编译命令 docker build -t 2.0.3.20220216 .
-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
当然也可以搭建本地的私有仓库或者在阿里云创建自己的镜像仓库
我是通过这种方式创建的远程仓库
点击就会跳转到https://hub.docker.com/repositories
至此镜像也打包好了
这里补充一个git的小知识点
无论是gitlub还是gitee都有每次push的文件大小限制 最大是100MB
如果超过了100MB就需要将这个文件删除然后再提交
根据提示查看大文件
git rev-list --objects --all | grep dc6b92c5b0080cdb55f54b39812d0bb56540e131
从这个提交记录中删除该文件
在工作区的顶级目录中运行这个命令
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
然后再强制(在确保不影响其他人代码的情况)推送即可
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文件
这里简单介绍下标红的几处
-
mysql版本号
这里使用的mysql是5.7版本
可以提前把镜像下载好
-
数据文件映射到宿主机
通过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
连接数据库
通过navaicat连接数据库
可以查看到nacos_devtest数据库
部署nacos
kubectl create -f ./deploy/nacos/nacos-quick-start.yaml
这个文件也简单介绍几点
-
容器镜像换成刚才生成的新镜像
-
单个pod中有一个容器 单个pod所占用的cpu和内存设置
1000m表示一个cpu 500m表示0.5个cpu
这里设置了512M 如果配置3个副本 则需要512*3大小的内存空间
-
副本数量配置
-
nacos服务列表配置
命名规则:
pod名称.service名称.命名空间.svc.cluster.local:端口号
-
service暴露NodePort端口
-
在configmap中配置数据库的信息
-
ingress域名配置
查看执行结果
访问页面
http://nacos-web.nacos-demo.test.com:30008/nacos
可以看到集群中有3个节点
启动成功之后 就会在界面上显示出来这个服务
K8S部署nginx并启动2个web服务(比如一个是pc端应用web,一个是移动端应用h5)
git clone https://gitee.com/pingfanrenbiji/k8s-nginx.git
-
nginx目录是映射到宿主机上的文件(配置文件、日志文件)
h5.conf
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
a、这里指定了一个端口
因为web和h5是两个独立的应用 希望用2个不同的端口来访问
b、制定了web的访问日志和错误日志文件路径
c、如果访问9000端口的跟路径/ 即是访问/etc/nginx/web中的index.html文件
-
nginx-dep.yaml是部署pod的脚本
a、将宿主机上的2个应用(web和h5)的静态资源分别映射到/etc/nginx/web和/etc/nginx/html
b、将宿主机上的配置文件映射到容器中的指定路径
c、将容器中的日志文件映射到宿主机上
d、3个副本
-
nginx-svc.yaml是部署service的脚本
配置80端口和9000端口对应的集群外部访问端口
-
deploy目录是待部署的前端静态资源
查看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%