Loading... # 0x01 这一篇文章 [Rancher2 & K8S部署踩坑记录](https://gvoidy.cn/index.php/archives/70/) 详细介绍了 Rancher 的部署方法,但没有写如何使用....本篇文章就以部署 Redis 、Mysql、Nginx 这三个常用的服务为例,介绍一下在 Rancher 图形界面下部署服务的方法。 # 通用步骤 > Rancher 中网络隔离是跟 K8S 一样使用 `命名空间 NameSpace`进行隔离,但是在此基础上使用了 `项目`这一概念进行逻辑上的划分,我们可以在`项目`里定义 测试环境、正式环境等等方便我们管理的逻辑划分,然后再在其中用`NameSpace`进行网络上的划分 > > 注:即使使用`项目`进行划分,各个`项目`之间的`NameSpace`依然不能重名 1. 进入 Rancher 中的 `项目`,点击部署服务  2. 填写具体服务名,镜像地址,命名空间名  # 部署 Redis 1. 进入 [dockerhub](https://hub.docker.com/_/redis) 找到 Redis 的镜像地址,可以看到直接为 `redis`  2. 进入 Rancher 进行服务部署 因为 Redis 是一个内存型的 NoSQL 数据库,并且我们仅做测试使用,所以我们只给他配一个我们能从集群外部访问的端口,无需其他配置,即可开箱使用。  > 注:因为我们此处 Redis 的主要目的是给集群外部的服务使用,所以网络模式使用了 `NodePort`,随机分配一个主机上的固定端口,而这个端口是有限个的,范围为 `30000-32767`。所以,如果非必须,请不要随便使用`NodePort`模式。如果服务仅限于集群内部服务访问可直接使用 `集群IP`模式。其他服务可直接使用服务名称访问。如:同`NameSpace`下的服务A需要访问我们这里部署的 Redis 可直接使用该服务的名称 `redis-test`直接访问当前容器,即 `redis-test:6379`即可连接 redis。 > > 如果需要访问其他命名空间下的服务,可通过 `名称.命名空间`的形式访问,即`redis-test.common-middleware:6379`,但是这不是一个很好地习惯,命名空间目的就是为了划分服务隔离,这样使用就打破了他们之间的隔离 3. 点击页面最下方的启动后,自动跳转至项目首页,如果部署没有问题,该服务的状态会变为绿色。  4. 部署成功后,我们可以发下已经给我们分配一个主机端口 `30942`,本地测试一下连接,发现已经成功了,我们的部署也告一段落  # 部署 MySQL > MySQL 部署与 Redis 有一点不同是,需要为 MySQL 配置一个数据存储路径(K8S 里称存储卷),并且需要配置连接的密码。 > > 注:K8S 存储卷需在 K8S 中配置好默认的存储类, 本文使用的底层存储为 NFS 详细配置请见 [Rancher2 & K8S部署踩坑记录](https://gvoidy.cn/index.php/archives/70/) `配置NFS存储类` 一节 1. 如 `部署 Redis`一节中一致,现在 DockerHub 上找到镜像名,并配好 `NodePort`映射主机端口  2. 根据 MySQL DockerHub 说明页面,我们得知 MySQL root 账户的密码配置为 `MYSQL_ROOT_PASSWORD`  所以我们在环境变量中添加,这一步类似于启动 docker 容器的 `-e`命令  3. 接下来我们需要配置 MySQL 的存储卷,也就是类似部署 docker 容器的 `-v`挂载指令。因为我们不可能接受服务重启后所有数据全部丢失的问题。  4. 选择`添加新的 PVC`,即为当前 MySQL 服务添加一个新的文件夹存储其数据。  配置该服务允许使用的最大容量,Linux 主机上会划出这么一部分区域共其使用  找到 DockerHub 页面上 MySQL 存储的文件地址  并将其填写进挂载目录  5. 最后点击启动即可完成服务部署 6. 本地连接测试  # 部署 Nginx > 部署 Nginx 流程跟部署 Redis 差不多,但是为啥要单独拉出来再写一次呢?这里部署的 Nginx 是类比部署一个前端静态页面,而部署前端静态页面我们更希望使用一个`域名`而不是一个`IP:端口号`的形式访问该服务,所以这里引入一个 k8s 中的新概念,负载均衡规则 1. 跟上面一样,我们先部署一个 Nginx 绑定 80 端口到`集群内部IP`  2. 然后点击首页的`负载均衡`页签  3. 点击添加规则  4. 命好名后点击 `+服务`  5. 选择我们需要配置“域名”的服务,并去掉 `选择工作负载`的选项栏,保存确认部署服务  6. 然后我们就可以在主页获得我们配置的域名,默认为 `负载均衡名称.命名空间名.服务器ip.nip.io`  7. 访问该域名 `http://nginx.common-middleware.192.168.100.26.nip.io/`,我们就会看到 Nginx 的欢迎页面  # 其他 ## 修改服务的时区 直接在 `部署/升级`的时候,添加环境变量 ``TZ=Asia/Shanghai``即可,与 docker 的环境变量一致  ## 命令行操作 与 docker 类似,K8S 也支持类似 docker 的 `exec`命令,在 rancher 界面下,只需要点击进入具体项目,单击右侧三个点的设置按钮,点击`执行命令行`按钮即可  当前窗口即为该服务的 bash 终端窗口  ## 为服务添加副本,实现负载均衡 > K8S 服务的结构为 Deployment —— Pods ,外部访问先访问 Deployment ,Deployment 会将我们的“请求”分发到他下级的 Pods 里,负载均衡策略只有简单轮训和随机分配两种,如需更为复杂的负载均衡策略可以使用 istio > > 当前方案比较适用于 API服务 的负载均衡 通过 Racher 实现非常简单,只需要在具体服务页面点击 `+` 号即可添加副本。  > 注:例子中的为 Redis 添加副本不是一个很好的操作,因为 Redis 的数据保存在其内存中,而这两个副本其实是完全独立的两个“容器”,所以之间的数据不互通。如需负载均衡 Redis 可以部署集群模式的 Redis 或者主从同步。 ## 部署定时服务/一次性服务 在部署界面点击右上角`更多选项`   其中 `CronJob`时间配置与 `CronTab`一致,一次性服务即为镜像内通过 `CMD` 或者`EXEC`等命令启动的程序结束后即时删除的服务 最后修改:2021 年 05 月 08 日 08 : 17 PM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信