我们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吧
![云原生实战课大纲<2>_第1张图片](http://img.e-com-net.com/image/info8/7738c92b34334dfe9954e8b9bcafb0d1.jpg)
我编写一个redis.conf文件,基于redis.conf 创建配置集 configMap 存储在k8s中的etcd
k8s中所有数据都保存在etcd中
![云原生实战课大纲<2>_第2张图片](http://img.e-com-net.com/image/info8/bc3f87cd036943a2bb2e21fd55a0165d.jpg)
![云原生实战课大纲<2>_第3张图片](http://img.e-com-net.com/image/info8/5e0c2ab1c3f84b8bb7965a8feabde382.jpg)
这样就可以看到这个configmap的配置了,创建pod 的时候挂载这个configmap就可以了
![云原生实战课大纲<2>_第4张图片](http://img.e-com-net.com/image/info8/d18414ff395d49158680b55d832f8e7c.jpg)
我们启动redis的时候会挂载2个 一个configMap挂载他的配置文件 一个 pv-pvc的方式
会挂载他的数据文件
![云原生实战课大纲<2>_第5张图片](http://img.e-com-net.com/image/info8/9c31cc8ad48a4a26abde707d85121d8b.jpg)
我以后启动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的话,我们只需要引用一下就可以了
![云原生实战课大纲<2>_第6张图片](http://img.e-com-net.com/image/info8/309026526c57493ba7c4943ead196c44.jpg)
![云原生实战课大纲<2>_第7张图片](http://img.e-com-net.com/image/info8/6817c675477d4a5a9bca13cc0a901388.jpg)
![云原生实战课大纲<2>_第8张图片](http://img.e-com-net.com/image/info8/cdb4d98f316e4bba8f962a6729eab86e.jpg)
我可以使用这个密钥来下载镜像
![云原生实战课大纲<2>_第9张图片](http://img.e-com-net.com/image/info8/5ecdedf8548945a69f00cf15033ddf3a.jpg)
我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的形式做出来
![云原生实战课大纲<2>_第10张图片](http://img.e-com-net.com/image/info8/41a2cd0e4f354779b67c3efb945e2f19.jpg)
![云原生实战课大纲<2>_第11张图片](http://img.e-com-net.com/image/info8/e296bf731664433d99070884327d155f.jpg)
先创建mysql-conf,mysql的配置文件mysql-conf 挂载出去,key为my.conf 例如
![云原生实战课大纲<2>_第12张图片](http://img.e-com-net.com/image/info8/c0ac75250a3c4debba06629448c3f1ae.jpg)
我在部署之前先把Mysql的配置文件提取成configmap,准备一个pvc 我mysql的券挂载 数据的挂载
his-mysql(尚依通的mysql)
![云原生实战课大纲<2>_第13张图片](http://img.e-com-net.com/image/info8/a70be368a11448f78a26c8c7fd53b1d2.jpg)
选中一个mysql镜像 创建几份, 资源限额,账号密码(环境变量)挂载pvc 和configmap
类似于nacos一样可以随时修改,当配置修改了之后 我pod就会进行同步
使用kubesphere部署redis
![云原生实战课大纲<2>_第14张图片](http://img.e-com-net.com/image/info8/355d186cb66148c5b1abd1b6fcf5f90c.jpg)
一样我们启动的时候 可以看看redis在docker中怎么做的部署
数据目录放在/data
配置文件映射在/etc/redis
如果我们用docker启动的话
-v date 外部进行挂在数据目录
-v 挂载配置conf
![云原生实战课大纲<2>_第15张图片](http://img.e-com-net.com/image/info8/0f6c4877e51c4a77b4c4856d4fce5212.jpg)
redis的部署 就已经结束了
es也一样 启动 会有-e的环境变量和-v的数据挂载
![云原生实战课大纲<2>_第16张图片](http://img.e-com-net.com/image/info8/7024f173d144428586c699f364a921c4.jpg)
我们之前手动部署mysql es redis
对于常见的中间件 kubesphere可以达到一键部署,基于应用商店部署rabbitmq
类似于dockerhub一样我们可以在镜像仓库中找到对应的镜像 达到一键部署的功能
![云原生实战课大纲<2>_第17张图片](http://img.e-com-net.com/image/info8/ff124a0183fb4bb687c8ea1c8ae16bc9.jpg)
RUO-YICLoud 部署实战
![云原生实战课大纲<2>_第18张图片](http://img.e-com-net.com/image/info8/526eafc1993449508ca4ac75c1d90f65.jpg)
我们部署ruoyi-cloud,前端访问网关 网关的所有配置,包括网关发现其他的服务,都是基于nacos做的服务发现
和配置中心
![云原生实战课大纲<2>_第19张图片](http://img.e-com-net.com/image/info8/dc0aa3fa3ea84f99b0b9b7171ebb119a.jpg)
前端发送请求到gateway,gateway先经过令牌校验是否正常
如果令牌校验正常的话 就会将流量放行,各个微服务之间就会基于feign发起调用
如果微服务操作我们db的话,自然就会有db系统,如果操作Oss的话 自然就会有oss系统(文件存储)
包括微服务的监控,这就是整个ruoyi-cloud的架构
接下来我们部署的时候就会涉及到网关,缓存,数据库,配置中心nacos,以及我们的服务监控
我们可以先手动部署一遍,手动部署会有很多问题以及麻烦的
接下来我们使用devops 自动化流水线部署
![云原生实战课大纲<2>_第20张图片](http://img.e-com-net.com/image/info8/22393016efa54c4cb7a43ff137390a10.jpg)
每一个带端口的都是将来我们要启动的服务
先启动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)域名来访问
![云原生实战课大纲<2>_第21张图片](http://img.e-com-net.com/image/info8/7553a5ab1b0e4e6196f85f169a130453.jpg)
上云之后基于nacos 部署了3个pod ,k8s的最大的优点就是拥有
pod的故障转移能力 一旦发生故障转移pod 的ip就变化了
所以我们这里写每个pod 有一个固定的域名
nacos的配置文件进行挂载
![云原生实战课大纲<2>_第22张图片](http://img.e-com-net.com/image/info8/49c83e2c18364974841d3ab2756f3dcf.jpg)
3个nacos的固定访问地址
nacos
![云原生实战课大纲<2>_第23张图片](http://img.e-com-net.com/image/info8/3ffe7c80af93430e9d26e7f9c5e99e33.jpg)
我们启动 部署 redis mysql nacos(3个副本) 接下来我们部署我们的微服务层
我们一个项目分为服务治理层,数据层,ruoyi的微服务层
当我们把服务治理层,数据层都部署好了,我们就可以部署我们的微服务,我们的微服务采取的是从下到上的方式部署。
![云原生实战课大纲<2>_第24张图片](http://img.e-com-net.com/image/info8/727bcaf6626446fabf30d68758635f94.jpg)
微服务层的部署
基于dockerFile 构建镜像 编写dockerFile文件
![云原生实战课大纲<2>_第25张图片](http://img.e-com-net.com/image/info8/e3254ee1ee3740b4a4e2362270f121f6.jpg)
![云原生实战课大纲<2>_第26张图片](http://img.e-com-net.com/image/info8/6fd43972e3bd42d6a30183acc943deb0.jpg)
默认找文件 找到prod上 应用已启动 也可以加载prod的启动配置,项目一启动就会在 prod的名称空间下找配置
我们在nacos中配置一个prod的配置
![云原生实战课大纲<2>_第27张图片](http://img.e-com-net.com/image/info8/2fbc0b6569de4e88b6613677820a952a.jpg)
![云原生实战课大纲<2>_第28张图片](http://img.e-com-net.com/image/info8/4b531aeb522c4fb9aa9668fd64ba2469.jpg)
![云原生实战课大纲<2>_第29张图片](http://img.e-com-net.com/image/info8/d492dab1f07b40328fc9ba7cd8a38eef.jpg)
基于dockerFile 尝试给每一个应用打包成镜像,微服务打包用的镜像文件.我们微服务想上云
1.利用maven 打成可执行的jar
2.上传给服务器
3.根据jar 利用dockerFile打成镜像
4.我们K8s 想部署
给k8s 进行部署
![云原生实战课大纲<2>_第30张图片](http://img.e-com-net.com/image/info8/9ae7613d032e4be7ab545ee21ec7ef4b.jpg)
我们一个应用想要上云的过程
我们接下来做的事情就是 根据dockerFile文件 基于jar生成docker镜像
![云原生实战课大纲<2>_第31张图片](http://img.e-com-net.com/image/info8/38c64c0943f041418ee155a88200b904.jpg)
将每一个微服务构建成docker镜像
![云原生实战课大纲<2>_第32张图片](http://img.e-com-net.com/image/info8/9eb98992573c47dda41b06ff85cd1ebb.jpg)
镜像有了,现在我们要做的一个事情就是镜像不能只呆在master节点
因为我们k8s集群,部署pod应用的时候要能找到镜像,比如说在node1上部署这个pod
所以这个镜像要推送到镜像仓库 (我们使用阿里云镜像仓库或者docker hub)
推送镜像给阿里云