【NacOS2.2.0源码编译,打包成Docker镜像,在kubernets进行部署】

【NacOS2.2.0源码编译,打包成Docker镜像,在kubernets进行部署】

本文主要是针对基于RancherServer搭建的Kubernets集群中,实现将Nacos2.2.0以源码编译后打包成Docker镜像,并自动上传至私有Harbor服务器,最后部署至RancherServer的Kubernets集群中。

【Rancher官方文档】
【Rancher Server + Kubernets搭建云原生集群平台】
【Docker私有仓库Harbor服务搭建】

一、环境准备

1、软件准备

序号环境名称说明版本号
1Rancher Serverk8s运维平台v2.5.7
2HarborDocker私有仓库Harbor服务搭建v2.3.5-239680cd

2、环境规划

序号IPHostName操作系统K8s角色说明
1192.168.255.140harborAnolis OS 8.9 x86 64位Rancher服务Docker私有仓库Harbor服务
2192.168.255.141rancherAnolis OS 8.9 x86 64位Rancher服务Kubernetes 管理平台
3192.168.255.142masterAnolis OS 8.9 x86 64位控制节点Kubernetes Master
4192.168.255.143worker01Anolis OS 8.9 x86 64位工作节点Kubernetes Master高可用节点,如果不需要高可用,可不部署此服务器
5192.168.255.144worker02Anolis OS 8.9 x86 64位工作节点Kubernetes Worker

二、Nacos源码编译

1、下载nacos2.20源码
https://gitee.com/mirrors/Nacos/tags?page=2
在这里插入图片描述
2、上传至编译服务器&解压

本例中上传至Ubuntu /opt/nacos

cd /opt/nacos
unzip ./Nacos-2.2.0.zip
mv ./Nacos-2.2.0 ./nacos

4、编译

root@daima:/opt/nacos/nacos# mvn -Prelease-nacos -Dmaven.test.skip=true -Dpmd.skip=true -Drat.skip=true -Dcheckstyle.skip=true clean install -U

在这里插入图片描述

编译完成的二进制文件输出到nacos/distribution目录下了,在本文中是输出到了/opt/nacos/nacos/distribution
在这里插入图片描述

3、修改数据库配置
nacos\distribution\conf\application.properties

root@daima:/opt/nacos/nacos# cd ./distribution/conf
root@daima:/opt/nacos/resources# vim application.properties

修改后的application.properties配置

配置文件中的环境变量,在k8s部署时通过环境变量来配置这些参数:

  • NACOS_APPLICATION_PORT:nacos服务监听端口,不指定默认值为8848
  • DB_NUM:数据库数量,不指定默认值为1
  • DB_URL:数据库URL 【必填】
  • DB_USER:数据库账号 【必填】
  • DB_PASSWORD:数据库密码 【必填】
# spring
# spring
server.servlet.contextPath=${SERVER_SERVLET_CONTEXTPATH:/nacos}
server.contextPath=/nacos
server.port=${NACOS_APPLICATION_PORT:8848}
server.tomcat.accesslog.max-days=30
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
server.tomcat.accesslog.enabled=${TOMCAT_ACCESSLOG_ENABLED:false}
# default current work dir
server.tomcat.basedir=file:.
#*************** Config Module Related Configurations ***************#
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
#spring.datasource.platform=${SPRING_DATASOURCE_PLATFORM:}
spring.sql.init.platform=mysql
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
db.num=${DB_NUM:1}
db.url.0=${DB_URL}
db.user.0=${DB_USER}
db.password.0=${DB_PASSWORD}

### The auth system to use, currently only 'nacos' and 'ldap' is supported:
nacos.core.auth.system.type=${NACOS_AUTH_SYSTEM_TYPE:nacos}
### worked when nacos.core.auth.system.type=nacos
### The token expiration in seconds:
nacos.core.auth.plugin.nacos.token.expire.seconds=${NACOS_AUTH_TOKEN_EXPIRE_SECONDS:18000}
### The default token:
nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN:SecretKey012345678901234567890123456789012345678901234567890123456789}
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
nacos.core.auth.caching.enabled=${NACOS_AUTH_CACHE_ENABLE:false}
nacos.core.auth.enable.userAgentAuthWhite=${NACOS_AUTH_USER_AGENT_AUTH_WHITE_ENABLE:false}
nacos.core.auth.server.identity.key=${NACOS_AUTH_IDENTITY_KEY:serverIdentity}
nacos.core.auth.server.identity.value=${NACOS_AUTH_IDENTITY_VALUE:security}
## spring security config
### turn off security
nacos.security.ignore.urls=${NACOS_SECURITY_IGNORE_URLS:/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**}
# metrics for elastic search
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
nacos.naming.distro.taskDispatchThreadCount=10
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true

三、制作镜像

1、下载镜像

参考地址:https://blog.csdn.net/qq_36805343/article/details/129369976

下载Nacos-Docker
官方Nacos Docker 快速开始:https://nacos.io/zh-cn/docs/quick-start-docker.html

Nacos Docker Github官方说明:https://github.com/nacos-group/nacos-docker/blob/master/README_ZH.md

下载对应自己的nacos版本,博主为 nacos version 2.2.0

2.2.0版本下载地址:https://github.com/nacos-group/nacos-docker/archive/refs/tags/v2.2.0.tar.gz

2、解压

上传至服务器/opt/nacos/目录下
在这里插入图片描述

root@daima:/opt/nacos# tar -xzvf ./v2.2.0.tar.gz
root@daima:/opt/nacos# cd /opt/nacos/nacos-docker-2.2.0/build
# 将换了nacos源码编译打包(nacos/distribution/target/nacos-server-2.2.0.tar.gz)后的.tar.gz结尾的包,放到nacos-docker-2.2.0的build目录下。
root@daima:/opt/nacos/nacos-docker-2.2.0/build# cp /opt/nacos/nacos/distribution/target/nacos-server-2.2.0.tar.gz ./

3、修改Dockfile

在这里插入图片描述

root@daima:/opt/nacos/nacos-docker-2.2.0/build# vim ./Dockerfile
#FROM centos:7.9.2009
FROM registry.cn-hangzhou.aliyuncs.com/glg/sky-agent:8.8.0
MAINTAINER tyzwkj "duyanjun@tyzwkj.cn"

# set environment
ENV MODE="standalone" \
    PREFER_HOST_MODE="ip"\
    BASE_DIR="/home/nacos" \
    CLASSPATH=".:/home/nacos/conf:$CLASSPATH" \
    CLUSTER_CONF="/home/nacos/conf/cluster.conf" \
    FUNCTION_MODE="all" \
    JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk" \
    NACOS_USER="nacos" \
    JAVA="/usr/lib/jvm/java-1.8.0-openjdk/bin/java" \
    JVM_XMS="1g" \
    JVM_XMX="1g" \
    JVM_XMN="512m" \
    JVM_MS="128m" \
    JVM_MMS="320m" \
    NACOS_DEBUG="n" \
    TOMCAT_ACCESSLOG_ENABLED="false" \
    TIME_ZONE="Asia/Shanghai"


ARG NACOS_VERSION=2.2.0
ARG HOT_FIX_FLAG=""

# 定义一个环境变量,用于存储数据库URL
ARG DB_NUM=1
ENV DB_NUM=$DB_NUM

ARG DB_URL="jdbc:mysql://default-host:3306/nacos"
ENV DB_URL=$DB_URL

ARG DB_USER="root"
ENV DB_USER=$DB_USER

ARG DB_PASSWORD="123456"
ENV DB_PASSWORD=$DB_PASSWORD

WORKDIR $BASE_DIR

RUN set -x \
    && yum update -y \
    && yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel wget iputils nc vim libcurl
    
#此处为从github下载nacos-server二进制包,我们自己编译好了,需要注释掉此处
#RUN wget  https://github.com/alibaba/nacos/releases/download/${NACOS_VERSION}${HOT_FIX_FLAG}/nacos-server-${NACOS_VERSION}.tar.gz -P /home
# 从本地复制到镜像中
COPY nacos-server-${NACOS_VERSION}.tar.gz /home
RUN tar -xzvf /home/nacos-server-${NACOS_VERSION}.tar.gz -C /home \
    && rm -rf /home/nacos-server-${NACOS_VERSION}.tar.gz /home/nacos/bin/* /home/nacos/conf/*.properties /home/nacos/conf/*.example /home/nacos/conf/nacos-mysql.sql
RUN yum autoremove -y wget \
    && ln -snf /usr/share/zoneinfo/$TIME_ZONE /etc/localtime && echo $TIME_ZONE > /etc/timezone \
    && yum clean all

ADD bin/docker-startup.sh bin/docker-startup.sh
ADD conf/application.properties conf/application.properties


# set startup log dir
RUN mkdir -p logs \
        && cd logs \
        && touch start.out \
        && ln -sf /dev/stdout start.out \
        && ln -sf /dev/stderr start.out
RUN chmod +x bin/docker-startup.sh

# 替换配置中的环境变量
RUN sed -i "s|\${DB_URL}|${DB_URL}|g" /home/nacos/conf/application.properties

EXPOSE 8848
EXPOSE 9848
EXPOSE 9849
ENTRYPOINT ["bin/docker-startup.sh"]

4、打包镜像

root@daima:/opt/nacos/nacos-docker-2.2.0/build# docker build -t jvs-nacos:2.2.0 .

四、上传Harbor私服

Harbor地址: http://192.168.255.140

1、上传Harbor

重点:在Kubernets集群所有节点上都要执行,否则会拉取失败
上传前需先修改docker.service中的配置,

  • 1、需配置私有Harbor服务器的地址
    –insecure-registry 192.168.255.140
  • 2、启动本地docker的远程服务端口
    -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
[root@daima ~]# vim /lib/systemd/system/docker.service

# 修改ExecStart参数,在参数中添加如下配置
#ExecStart=/usr/bin/dockerd  --insecure-registry 192.168.255.140 -H fd:// --containerd=/run/containerd/containerd.sock  -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
 
# 重新加载系统服务配置并启动Docker服务
[root@daima ~]# systemctl daemon-reload
[root@daima ~]# systemctl start docker

2、启动验证

root@daima:/opt/nacos/nacos-docker-2.2.0/build# docker run --name jvs-nacos -p 8848:8848 -p 9848:9848 -p 9849:9849  -d jvs-nacos:2.2.0

访问http://ip:8848/nacos,用户名密码都是nacos,登录成功即验证

3、推送镜像

root@daima:/opt/nacos/nacos-docker-2.2.0/build# docker login 192.168.255.140
root@daima:/opt/nacos/nacos-docker-2.2.0/build# docker tag jvs-nacos:2.2.0 192.168.255.140/ybt/jvs-nacos:2.2.0
root@daima:/opt/nacos/nacos-docker-2.2.0/build# docker push 192.168.255.140/ybt/jvs-nacos:2.2.0

在这里插入图片描述
在这里插入图片描述

五、部署至Kubernets

1、登录Rancher Server管理画面

在这里插入图片描述

2、部署nacos服务

重点:环境变量配置

环境变量来配置参数:

  • DB_URL:数据库URL 【必填】
  • DB_USER:数据库账号 【必填】
  • DB_PASSWORD:数据库密码 【必填】

在这里插入图片描述

3、验证nacos服务

1)、jvs-nac启动成功后,点击服务列中的端口
在这里插入图片描述
在这里插入图片描述

2)、在浏览器地址(http://192.168.255.143:30000/)添加nacos,完整的路径为http://192.168.255.143:30000/nacos
在这里插入图片描述
结束,以上就是通过RancherServer部署NacOS2.2.0的全部内容。

更多推荐