我们pod的数据挂载文件可以使用 pv-pvc的方式
1. 创建pv池
2. 在pv池中创建pv,并且设置pv的模式
3. 编写pod 写对应的pvc 申请书 就可以了
这就是我们k8s中的pv和pvc
基于pv池创建pv的时候会有容量限制
呢么关于配置呢,我们以前会有这种场景 比如说在docker中我们会把配置文件-v的形式挂载出来,比如说nginx的conf文件,这样我修改了nginx的配置文件,我就nginx就可以拿到最新的数据
在k8s中怎么把配置文件挂载出来,挂载目录我们可以使用pv=pvc的方式,但是我们现在要挂载配置文件 我们可以使用configMap的方式
k8s 中专门有一个东西 configmap ,比如说redis吧
我编写一个redis.conf文件,基于redis.conf 创建配置集 configMap 存储在k8s中的etcd
k8s中所有数据都保存在etcd中
这样就可以看到这个configmap的配置了,创建pod 的时候挂载这个configmap就可以了
我们启动redis的时候会挂载2个 一个configMap挂载他的配置文件 一个 pv-pvc的方式
会挂载他的数据文件
我以后启动redis mysql mq 这些 我启动任何的中间件 我把他的配置文件,我在k8s 的配置集合,我以后在pod中引用配置集合
我们使用k8s 的配置集还有一个优点就是 如果我k8s 在外面把配置文件改了
他在内部依然生效
secret是k8s中用来保存敏感信息的 比如说 密码 令牌 密钥.和configmap差不多,只不过configmap用来保存配置文件 等等这些明文信息
secret的典型场景,我们现在要启动一个pod,pod启动要下载镜像,我们以前下载从docker hub 下的, 如果从私有镜像下载
当我想要部署的时候,我从私有镜像仓库拉取镜像,我就的要有个账号和密码,这些账号和密码如果写在pod中就会不安全
也容易泄露
k8s 可以使用secret的方式 把docker登录的信息保存起来,我以后下载镜像的时候直接用就可以了
当然 我们可以看到这个是密文的
如果是confifMap data:value 此时是明文的的 ,secret类似于configmap的使用方法差不多
如果想要使用secret的话,我们只需要引用一下就可以了
我可以使用这个密钥来下载镜像
我pod 只需要下载镜像的时候引用这个secret就可以了,因为这个密钥信息 之前已经创建好了
然后再create -f pod.yaml 就可以下载到了
这是我们secret的核心实战场景
kusphere kubeshere是k8s的可视化界面
kusphere 的安装步骤
安装docker
安装k8s
kubesphere前置环境
安装kubesphere
kubesphere是个多租户用户的系统,使用命名空间来做区分
如何在kubesphere平台中部署一些应用 比如说我们先部署一个中间件
我们在云上想要部署应用 我的这个应用将会以什么样的方式部署
其实Kubesphere就是k8s的可视化页面 包括创建deploy pod 以及service这些
我们可以先部署mysql ,这是我们以docker的形式部署的mysql
中间件的配置文件可以以配置集configMap的形式做出来
先创建mysql-conf,mysql的配置文件mysql-conf 挂载出去,key为my.conf 例如
我在部署之前先把Mysql的配置文件提取成configmap,准备一个pvc 我mysql的券挂载 数据的挂载
his-mysql(尚依通的mysql)
选中一个mysql镜像 创建几份, 资源限额,账号密码(环境变量)挂载pvc 和configmap
类似于nacos一样可以随时修改,当配置修改了之后 我pod就会进行同步
使用kubesphere部署redis
一样我们启动的时候 可以看看redis在docker中怎么做的部署
数据目录放在/data
配置文件映射在/etc/redis
如果我们用docker启动的话
-v date 外部进行挂在数据目录
-v 挂载配置conf
redis的部署 就已经结束了
es也一样 启动 会有-e的环境变量和-v的数据挂载
我们之前手动部署mysql es redis
对于常见的中间件 kubesphere可以达到一键部署,基于应用商店部署rabbitmq
类似于dockerhub一样我们可以在镜像仓库中找到对应的镜像 达到一键部署的功能
RUO-YICLoud 部署实战
我们部署ruoyi-cloud,前端访问网关 网关的所有配置,包括网关发现其他的服务,都是基于nacos做的服务发现
和配置中心
前端发送请求到gateway,gateway先经过令牌校验是否正常
如果令牌校验正常的话 就会将流量放行,各个微服务之间就会基于feign发起调用
如果微服务操作我们db的话,自然就会有db系统,如果操作Oss的话 自然就会有oss系统(文件存储)
包括微服务的监控,这就是整个ruoyi-cloud的架构
接下来我们部署的时候就会涉及到网关,缓存,数据库,配置中心nacos,以及我们的服务监控
我们可以先手动部署一遍,手动部署会有很多问题以及麻烦的
接下来我们使用devops 自动化流水线部署
每一个带端口的都是将来我们要启动的服务
先启动nacos 因为很多配置在nacos的配置中心中配置
先保证我们的每一个微服务都能正常启动,并且保证我们的项目在本地是可以使用的
先用kubesphere启动一个redis和mysql 然后各个微服务去连接
本地跑起来,只需要吧ruoyi要用的数据库文件导入进去,准备好db和redis
因为mysql和redis我们用Kubesphere部署的 ,最大的效果 就是云上的如果崩了 数据还是在的 因为我已经吧data文件挂载出来了
nacos作为配置和注册中心,我们可以在naocs的官网看到nacos怎么上云,3个pod的nacos
整个nacos集群对外暴露一个service,我就可以做一个service,让这个service选中3个pod
service 统一暴露自己域名或者ip,
集群中 其他服务比如说pod 想要访问nacos 就可以基于(service)域名来访问
上云之后基于nacos 部署了3个pod ,k8s的最大的优点就是拥有
pod的故障转移能力 一旦发生故障转移pod 的ip就变化了
所以我们这里写每个pod 有一个固定的域名
nacos的配置文件进行挂载
3个nacos的固定访问地址
nacos
我们启动 部署 redis mysql nacos(3个副本) 接下来我们部署我们的微服务层
我们一个项目分为服务治理层,数据层,ruoyi的微服务层
当我们把服务治理层,数据层都部署好了,我们就可以部署我们的微服务,我们的微服务采取的是从下到上的方式部署。
微服务层的部署
基于dockerFile 构建镜像 编写dockerFile文件
默认找文件 找到prod上 应用已启动 也可以加载prod的启动配置,项目一启动就会在 prod的名称空间下找配置
我们在nacos中配置一个prod的配置
基于dockerFile 尝试给每一个应用打包成镜像,微服务打包用的镜像文件.我们微服务想上云
1.利用maven 打成可执行的jar
2.上传给服务器
3.根据jar 利用dockerFile打成镜像
4.我们K8s 想部署
给k8s 进行部署
我们一个应用想要上云的过程
我们接下来做的事情就是 根据dockerFile文件 基于jar生成docker镜像
将每一个微服务构建成docker镜像
镜像有了,现在我们要做的一个事情就是镜像不能只呆在master节点
因为我们k8s集群,部署pod应用的时候要能找到镜像,比如说在node1上部署这个pod
所以这个镜像要推送到镜像仓库 (我们使用阿里云镜像仓库或者docker hub)
推送镜像给阿里云