在minikube中部署MySQL、Nacos、Redis

本文涉及的产品
RDSClaw,2核4GB
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 在minikube中部署MySQL、Nacos、Redis

部署MySQL、Nacos、Redis

1. 安装mysql

在安装mysql的适合用到了若依的初始化数据,所以需要使用docker compose build ruoyi-mysql 建立镜像。

使用加载镜像:minikube image load mysql镜像

我在部署Mysql时没有用到k8s的存储,此处可以进行自行修改。下面是yaml文件内容:

 

apiVersion: apps/v1

kind: Deployment # 副本控制器RC

metadata:

 name: mysql #RC 的名称,全局唯一

 namespace: default # 默认空间

spec:

 replicas: 1 #Pod 副本的期待数量

 selector:

   matchLabels:

     app: mysql # 符合目标的Pod拥有此标签

 template: # 根据此模版创建Pod的副本

   metadata:

     labels:

       app: mysql # Pod副本拥有的标签,对应RC的Selector

   spec:

     containers: # Pod的内容的定义部分

       - name: mysql # 容器的名称

         image: ry-mysql # 容器对应的Docker Image

         imagePullPolicy: IfNotPresent

         ports:

           - containerPort: 3306 # 容器应用监听的端口号

         env:

           - name: MYSQL_ROOT_PASSWORD # 设置mysql的初始化密码

             value: "password" # 设置mysql的初始化密码

         volumeMounts:

           - name: mysql-data

             mountPath: /var/lib/mysql

     volumes:

       - name: mysql-data

         hostPath:

           path: /var/lib/mysql

---

apiVersion: v1

kind: Service # 表明是Kubernetes Service

metadata:

 name: mysql # Service 的全局唯一名称

spec:

 type: NodePort

 selector:

   app: mysql

 ports: # Service 提供服务的端口

   - port: 3306 # Service 对应的Pod拥有这里定义的标签

     targetPort: 3306

 

 

 

2. 安装Nacos

此处安装需要注意mysql的连接地址和SPRING_DATASOURCE_PLATFORM此参数一定要配置,要不然莫名其妙的使用内嵌数据库,不知道为啥在docker compose和单独部署没有问题,在minikube中部署一定要此参数,此变量折腾了我2天.....

---

apiVersion: v1

kind: ConfigMap

metadata:

 name: nacos-cm-cpf1

data:

 application.properties:  |

   # 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=mysql

   spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:mysql}

 

   db.num=${MYSQL_DATABASE_NUM:1}

   db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}

   db.user.0=${MYSQL_SERVICE_USER}

   db.password.0=${MYSQL_SERVICE_PASSWORD}

 

 

 

 

---

apiVersion: v1

kind: ConfigMap

metadata:

 name: nacos-cm-cpf

data:

 application.properties:  |

   # 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=mysql

   spring.sql.init.platform=${SPRING_DATASOURCE_PLATFORM:}

   nacos.cmdb.dumpTaskInterval=3600

   nacos.cmdb.eventTaskInterval=10

   nacos.cmdb.labelTaskInterval=300

   nacos.cmdb.loadDataAtStart=false

   db.num=${MYSQL_DATABASE_NUM:1}

   db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false}

   db.user.0=${MYSQL_SERVICE_USER}

   db.password.0=${MYSQL_SERVICE_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

 

 

 

---

apiVersion: v1

kind: Service

metadata:

 name: nacos-headless-cpf

 labels:

   app: nacos-headless-cpf

spec:

 type: NodePort

#  clusterIP: None

 ports:

   - port: 8848

     name: server

     targetPort: 8848

#      nodePort: 30000

   - port: 9848

     name: client-rpc

     targetPort: 9848

   - port: 9849

     name: raft-rpc

     targetPort: 9849

   ## 兼容1.4.x版本的选举端口

   - port: 7848

     name: old-raft-rpc

     targetPort: 7848

 selector:

   app: nacos-cpf

---

apiVersion: v1

kind: ConfigMap

metadata:

 name: nacos-cm

data:

 mysql.host: "mysql"

 mysql.db.name: "ry-config"

 mysql.port: "3306"

 mysql.user: "root"

 mysql.password: "password"

 

 

---

apiVersion: apps/v1

kind: StatefulSet

metadata:

 name: nacos-cpf

spec:

 serviceName: nacos-headless

 replicas: 1

 template:

   metadata:

     labels:

       app: nacos-cpf

     annotations:

       pod.alpha.kubernetes.io/initialized: "true"

   spec:

     volumes:

       - name: application-conf

         configMap:

           name: nacos-cm-cpf

     containers:

       - name: k8snacos-cpf

         imagePullPolicy: IfNotPresent

         image: nacos/nacos-server:latest

         resources:

           requests:

             memory: "1Gi"

             cpu: "500m"

         ports:

           - containerPort: 8848

             name: client

           - containerPort: 9848

             name: client-rpc

           - containerPort: 9849

             name: raft-rpc

           - containerPort: 7848

             name: old-raft-rpc

         env:

           - name: MODE

             value: "standalone"

           - name: SPRING_DATASOURCE_PLATFORM #此参数必须配置,要不然出现莫名其妙的问题而不能启动

             value: "mysql"

#            - name: NACOS_REPLICAS

#              value: "1"

           - name: MYSQL_SERVICE_HOST

             valueFrom:

               configMapKeyRef:

                 name: nacos-cm

                 key: mysql.host

           - name: MYSQL_SERVICE_DB_NAME

             valueFrom:

               configMapKeyRef:

                 name: nacos-cm

                 key: mysql.db.name

           - name: MYSQL_SERVICE_PORT

             valueFrom:

               configMapKeyRef:

                 name: nacos-cm

                 key: mysql.port

           - name: MYSQL_SERVICE_USER

             valueFrom:

               configMapKeyRef:

                 name: nacos-cm

                 key: mysql.user

           - name: MYSQL_SERVICE_PASSWORD

             valueFrom:

               configMapKeyRef:

                 name: nacos-cm

                 key: mysql.password

           - name: NACOS_SERVER_PORT

             value: "8848"

           - name: NACOS_APPLICATION_PORT

             value: "8848"

           - name: PREFER_HOST_MODE

             value: "hostname"

#            - 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"

         volumeMounts:

           - name: application-conf

             mountPath: /home/nacos/conf/application.properties

             readOnly: true

             subPath: application.properties

#            - name: application-conf

#              mountPath: /home/nacos/conf/nacos-logback.xml

#              readOnly: true

#              subPath: nacos-logback.xml

 

 

 selector:

   matchLabels:

     app: nacos-cpf

 

 

3. 安装Redis

安装redis没有遇到啥坑,直接安装就可以。

apiVersion: apps/v1

kind: Deployment

metadata:

 name: redis

 labels:

   app: redis

spec:

 strategy:

   type: Recreate

 selector:

   matchLabels:

     app: redis

 template:

   metadata:

     labels:

       app: redis

   spec:

     containers:

     - name: redis

       image: redis

       imagePullPolicy: IfNotPresent

#        command: ["redis-server","/etc/redis/redis.conf"]

       ports:

       - containerPort: 6379

 

---

kind: Service

apiVersion: v1

metadata:

 name: redis

spec:

 type: ClusterIP

 selector:

   app: redis

 ports:

 - port: 6379


代码地址:https://gitee.com/cpf84/myminikube 欢迎star

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
缓存 NoSQL 关系型数据库
MySQL 与 Redis 如何保证双写一致性?
我是小假 期待与你的下一次相遇 ~
703 7
|
9月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
11月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
6月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2089 8
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
752 6
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
缓存 NoSQL 关系型数据库
Redis和Mysql如何保证数据⼀致?
1. 先更新Mysql,再更新Redis,如果更新Redis失败,可能仍然不⼀致 2. 先删除Redis缓存数据,再更新Mysql,再次查询的时候在将数据添加到缓存中 这种⽅案能解决1 ⽅案的问题,但是在⾼并发下性能较低,⽽且仍然会出现数据不⼀致的问题,⽐如线程1删除了 Redis缓存数据,正在更新Mysql,此时另外⼀个查询再查询,那么就会把Mysql中⽼数据⼜查到 Redis中 1. 使用MQ异步同步, 保证数据的最终一致性 我们项目中会根据业务情况 , 使用不同的方案来解决Redis和Mysql的一致性问题 : 1. 对于一些一致性要求不高的场景 , 不做处理例如 : 用户行为数据 ,
|
消息中间件 缓存 NoSQL
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
缓存与数据库的一致性方案,Redis与Mysql一致性方案,大厂P8的终极方案(图解+秒懂+史上最全)
|
缓存 NoSQL 关系型数据库
Redis与MySQL的数据一致性
在高并发环境下,保持 Redis 和 MySQL 的数据一致性是一个复杂但重要的问题。通过采用读写穿透、写穿透、分布式锁、双写一致性保障和延时双删策略,可以有效地减少数据不一致的风险,确保系统的稳定性和可靠性。通过合理的缓存策略和数据同步机制,可以显著提升系统的性能和用户体验。
730 22
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
470 7