Spring Cloud入门—— (1)Spring Cloud Alibaba生态组件Nacos3.0本地部署

Spring Cloud入门------ (1)Spring Cloud Alibaba生态组件Nacos3.0本地部署

基于Nacos的服务注册与服务发现

Nacos3.0本地部署

Nacos官网地址

  1. 基于Docker Desktop配置Kubernetes集群,可以参考之前的博客

    Kubernetes入门笔记 ------(4)Windows搭建k8s测试集群

  2. 进入nacos下载页面,参考nacos官网部署文档

    https://nacos.io/docs/latest/quickstart/quick-start-kubernetes/

  3. 下载nacos

    shell 复制代码
    git clone https://github.com/nacos-group/nacos-k8s.git
    cd nacos-k8s

    下面会有很多创建文件拉取等基于linux的命令动作,可以使用git bash或者cmder,或者自己查找window下cmd或powershell的命令

  4. 使用nacos的快速启动模式

    使用此方式快速启动,请注意这是没有使用持久化卷的,可能存在数据丢失风险

    编辑/deploy/nacos/nacos-quick-start.yaml文件,添加如下3个环境变量:

    • NACOS_AUTH_TOKEN: Nacos 用于生成JWT Token的密钥,使用长度大于32字符的字符串,再经过Base64编码。可以直接通过代码生成,也可以利用在线工具生成UUID后再Base64编码

      https://1024tools.com/uuid

      https://tool.chinaz.com/tools/base64.aspx

    • NACOS_AUTH_IDENTITY_KEY: Nacos Server端之间 Inner API的身份标识的Key,必填。

    • NACOS_AUTH_IDENTITY_VALUE: Nacos Server端之间 Inner API的身份标识的Value,必填。

    需要添加在nacos-headless服务下nacos容器的env下:

    yaml 复制代码
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nacos-headless
      ....
    
                - name: NACOS_SERVERS
                  value: "nacos-0.nacos-headless.default.svc.cluster.local:8848 nacos-1.nacos-headless.default.svc.cluster.local:8848 nacos-2.nacos-headless.default.svc.cluster.local:8848"
                - name: NACOS_AUTH_TOKEN
                  value: ${your_nacos_auth_secret_token}
                - name: NACOS_AUTH_IDENTITY_KEY
                  value: ${your_nacos_server_identity_key}
                - name: NACOS_AUTH_IDENTITY_VALUE
                  value: ${your_nacos_server_identity_value}
      selector:
        matchLabels:
          app: nacos
  5. 创建nacos的命名空间

    为了方便管理资源建议不要再default命名空间启动nacos,新建一个nacos的命名空间

    shell 复制代码
    kubectl create namespace nacos

    查看是否创建成功

    shell 复制代码
    kubectl get namespaces
  6. 进入nacos-k8s目录下,查看nacos依赖mysql的初始化脚本

    shell 复制代码
    cd nacos-k8s
    vim deploy/mysql/mysql-init.sh
    shell 复制代码
    #!/bin/bash
    set -e
    
    # 加载 NACOS_VERSION
    source .env
    CLEAN_VERSION=${NACOS_VERSION#v}
    # deal -slim
    CLEAN_VERSION=${CLEAN_VERSION%-*}
    
    SCHEMA_URL="https://raw.githubusercontent.com/alibaba/nacos/${CLEAN_VERSION}/distribution/conf/mysql-schema.sql"
    
    TARGET_DIR="/data/mysql-init"
    VERSIONED_FILE="${TARGET_DIR}/${CLEAN_VERSION}-mysql-schema.sql"
    FINAL_FILE="${TARGET_DIR}/mysql-schema.sql"
    
    # 创建目录
    mkdir -p "${TARGET_DIR}"
    
    # 下载 schema 文件
    echo "⬇️  Downloading MySQL schema for Nacos ${CLEAN_VERSION}..."
    curl -sSL "$SCHEMA_URL" -o "${VERSIONED_FILE}"
    
    # 校验下载
    if [ ! -s "${VERSIONED_FILE}" ]; then
      echo "❌ Failed to download schema file from $SCHEMA_URL"
      exit 1
    fi
    
    # 拷贝为标准文件名供 MySQL 初始化使用
    cp "${VERSIONED_FILE}" "${FINAL_FILE}"
    
    # 删除原始版本号文件
    rm -f "${VERSIONED_FILE}"
    
    echo "✅ Downloaded and prepared: ${FINAL_FILE}"

    其中NACOS_VERSION可以在.env文件中看到,如这里是v3.1.1版本,需要去掉首字母v

    这里脚本主要是下载mysql-schema.sql文件,我们在当前目录下新建data/mysql-init文件夹

    shell 复制代码
    mkdir -p data/mysql-init
    curl -sSl "https://raw.githubusercontent.com/alibaba/nacos/3.1.1/distribution/conf/mysql-schema.sql" -o "data/mysql-init/mysql-schema.sql"
  7. 修改./deploy/mysql/mysql-local.yaml的初始化挂载路径:

    这里顺便能看到nacos的数据库用户与密码分别都是nacos,数据库为nacos_devtest

    yaml 复制代码
    apiVersion: v1
    kind: ReplicationController
    metadata:
      name: mysql
      labels:
        name: mysql
    spec:
      replicas: 1
      selector:
        name: mysql
      template:
        metadata:
          labels:
            name: mysql
        spec:
          containers:
          - name: mysql
            image: registry.openanolis.cn/openanolis/mysql:8.0.30-8.6
            ports:
            - containerPort: 3306
            args:
              - "--character-set-server=utf8mb4"
              - "--collation-server=utf8mb4_unicode_ci"
            volumeMounts:
            - name: mysql-data
              mountPath: /var/lib/mysql
            - name: mysql-init
              mountPath: /docker-entrypoint-initdb.d
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "root"
            - name: MYSQL_DATABASE
              value: "nacos_devtest"
            - name: MYSQL_USER
              value: "nacos"
            - name: MYSQL_PASSWORD
              value: "nacos"
          volumes:
          - name: mysql-data
            hostPath:
              path: /var/lib/mysql
          - name: mysql-init
            hostPath:
              path: E:/developer/xxx/nacos-k8s/data/mysql-init # linux下的路径,修改为windows的绝对路径
  8. nacos的命名空间下启动mysql

    shell 复制代码
    kubectl create -f ./deploy/mysql/mysql-local.yaml  -n nacos
  9. 启动mysql后进入mysql的容器

    shell; 复制代码
    kubectl get pods -n nacos
    shell 复制代码
    kubect.exe exec -it -n nacos mysql-rbmdg -- bash  # 将mysql-rbmdg替换成对应的容器名
    mysql -u nacos -p 
    # 输入密码:nacos
    use nacos_devtest;
    show tables;

如果能看到nacos对应的数据库表示数据库初始化完成,如果没有看到可以手动初始化

shell 复制代码
# 将sql文件传至对应容器的目录下
kubectl exec -n nacosmysql-rbmdg -- mkdir -p /data/mysql-init/
kubectl cp data/mysql-init/mysql-schema.sql nacos/mysql-rbmdg:/data/mysql-init/
# copy完成后进入数据库
mysql -u nacos -p 
# 输入密码:nacos
use nacos_devtest;
show tables;
source /data/mysql-init/mysql-schema.sql
  1. nacos的命名空间下启动nacos
shell 复制代码
kubectl create -f ./deploy/nacos/nacos-quick-start.yaml -n nacos

查看nacos的pod是否成功启动

shell 复制代码
kubectl get pods -n nacos

发现有一个pod处于pending状态

复制代码
kubectl.exe describe pods  -n nacos nacos-2
shell 复制代码
 Warning  FailedScheduling  97s (x4 over 16m)  default-scheduler  0/3 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 2 node(s) didn't match pod anti-affinity rules. preemption: 0/3 nodes are available: 1 Preemption is not helpful for scheduling, 2 No preemption victims found for incoming pod.

意思是本身有反亲和要求,我们有3个节点但是一个节点有污点标签node-role.kubernetes.io/control-plane导致无法部署,查看node

shell 复制代码
kubectl.exe get nodes

其中一个节点是控制面,我们可以扩容一个节点

扩容完成后再次查看ok

相关推荐
while(1){yan}21 小时前
Spring事务
java·数据库·spring boot·后端·java-ee·mybatis
*.✧屠苏隐遥(ノ◕ヮ◕)ノ*.✧1 天前
《苍穹外卖》- day01 开发环境搭建
spring boot·后端·spring·maven·intellij-idea·mybatis
_OP_CHEN1 天前
【Linux系统编程】(二十)揭秘 Linux 文件描述符:从底层原理到实战应用,一篇吃透 fd 本质!
linux·后端·操作系统·c/c++·重定向·文件描述符·linux文件
老神在在0011 天前
Token身份验证完整流程
java·前端·后端·学习·java-ee
浅水壁虎1 天前
任务调度——XXLJOB2(调度中心)
java·spring boot·spring
源码获取_wx:Fegn08951 天前
计算机毕业设计|基于springboot + vue景区管理系统(源码+数据库+文档)
java·vue.js·spring boot·后端·课程设计
星辰徐哥1 天前
Rust函数与流程控制——构建逻辑清晰的系统级程序
开发语言·后端·rust
源代码•宸1 天前
Leetcode—404. 左叶子之和【简单】
经验分享·后端·算法·leetcode·职场和发展·golang·dfs
你这个代码我看不懂1 天前
Spring Boot拦截Http请求设置请求头
spring boot·后端·http