使用Rancher-Gen动态更新配置文件

简介:

Docker和Rancher让大家能更轻易地部署和管理基于微服务的应用程序。然而,如果有些服务是依赖于其他动态服务的,那该如何管理它们的配置?你是否时常觉得,要是有方法能自动检测后端服务的变化,并实现配置文件的动态更新就好了?本文给你答案。


前言


Docker和Rancher让大家能更轻易地部署和管理基于微服务的应用程序。然而,有一个关键的挑战是,如果有些服务是依赖于其他动态服务的,那该如何管理它们的配置?


试想以下情形:您有多个运行Web应用程序的后端容器,和一些将所有的请求都代理到这些后端容器的nginx容器。现在,你必须要部署一个新版本的Web应用程序,这意味着你需要构建和部署新版本的后端容器。在这些部署工作完成之后,nginx的配置需要更改为指向新的后端容器。那么,你该怎样处理nginx呢?改变其配置,构建一个新的容器并部署它?此刻的你是不是会觉得,要是有方法能自动检测后端服务的变化,并实现nginx的动态更新就好了?


这就是Rancher-Gen要闪亮登场的时刻!


Rancher-Gen是一个Python的工具,它能监听的Rancher服务的变化,并呈现一个用户指定的Jinja2模板。这允许用户为现有的、并基于这些变化的服务生成配置文件。另外,Rancher-Gen提供了一种机制,在模板呈现之后会运行通知命令。下面的教程会介绍如何自动生成运行ghost博客平台后端服务的nginx配置文件 。


教程


下面介绍的所有配置文件都可以在Rancher-Gen库中的演示目录下找到。


第1步 – 部署Ghost服务


为简单起见,我们打算使用Docker hub中的官方ghost镜像。因此,创建一个docker-compose.yml 文件,并添加以下的ghost服务:


wKiom1h4PdiwaAsqAAAoGh7hmF4534.jpg


现在,用Rancher Compose部署ghost服务:


wKioL1h4PeiB4VNTAAAjyfXEyRU950.jpg


第2步 – 用Rancher-Gen创建nginx镜像


下面是用以搭建nginx镜像的Dockerfile:


wKiom1h4PhigM9IOAAIHO-uWiPM554.jpg


让我们来一步一步拆解Dockerfile。步骤1和2不言自明:只需安装nginx、Python和Rancher-Gen。


第3步要设置镜像启动时运行的服务。第一个服务是nginx,它用/etc/servce/nginx文件运行。该文件的内容是:


wKiom1h4PjzCvyk1AACm1XAUnP4463.jpg


注意一下在通知步骤之后,我们是怎样通过名为 /nginxconf/default.j2 和/etc/nginx/sites-available/default 的这两个路径的。前者是Jinjia2模板,后者是渲染模板的输出位置。以下是在default.j2文件的内容:


wKioL1h4Pm3i6jCpAAEAIt_3Y2M955.jpg


Dockerfile的第4步和第5步在镜像中设置了运行命令“/sbin/my_init”并暴露端口80和443。


现在是时候构建镜像了:


wKiom1h4PomxPA5vAAApjXzgc-g116.jpg


第3步 – 创建并部署nginx服务


现在我们已有了nginx镜像,就可以开始向我们在第1步中创建的docker-compose.yml文件中添加nginx服务了。


wKiom1h4PqTjzZNwAAEARssfiVk749.jpg


上述可变的RANCHER_GEN_OPTIONS环境是用于向Rancher-Gen传递附加命令行选项的 。你可以在Rancher-Gen文档中查看这些选项的说明。


现在运行rancher-compose来启动nginx服务:


wKiom1h4Pr6A7-R4AAAlOK5e4bU174.jpg


此时,ghost和nginx服务都启动并运行了:


wKioL1h4Psvw60nCAAAIyZgNAnM213.jpg


而且,将浏览器指向运行中的nginx容器中主机的IP地址,你就可以访问ghost了:


wKioL1h4PtiB4DWhAACL85rex-Q763.jpg


如果你使用shell来检查nginx容器,并打开渲染的文件 /etc/nginx/sites-enabled/default,你将会看到以下的输出:


wKioL1h4PvvDEUczAAC8xGlsWtY123.jpg


正如预期的那样,这是在运行rancher-gen命令时的基于指定模板的渲染输出。此时,如果你要升级ghost服务,并再次查看渲染文件,你会发现上游部分下的IP地址已经改变了。


结论


总结来说,Rancher-Gen是一个自动化工具,可用于生成文件,并运行通知命令。借助Jinja2的模板表现力,及其整洁的命令行界面,Rancher-Gen可用于生成大多数配置文件,并自动解决那些对大多数系统管理员和软件工程师而言繁琐和重复的工作。



本文转自 RancherLabs 51CTO博客,原文链接:http://blog.51cto.com/12462495/1891685

相关文章
|
6月前
|
Kubernetes Cloud Native 应用服务中间件
【云原生】使用k8s创建nginx服务—通过yaml文件svc类型暴露
【云原生】使用k8s创建nginx服务—通过yaml文件svc类型暴露
130 0
|
7月前
|
Kubernetes 关系型数据库 MySQL
容器 & 服务:Helm Charts配置文件分析
chart 是 Helm 的应用打包格式。chart 由一系列文件组成,这些文件描述了 K8s 部署应用时所需要的资源,比如 Service、Deployment、PersistentVolumeClaim、Secret、ConfigMap 等。 chart可繁可简,即可以只用于部署一个单独的服务,例如mysql、nginx等等,也可以用于部署整个应用,例如由HTTP服务、数据库、缓存、中间件等共同构成的复杂应用。
324 0
|
JSON Go 数据格式
Go 读取 YAML 配置文件的两种方式
本文介绍了读取 YAML 配置文件的两种方式,第一种是通过 yaml.v3 包,第二种是通过 viper 包。如果是在项目里解析配置文件,推荐使用 viper 包,它支持解析多种格式的配置文件,监听配置文件的更新,修改配置文件等。
1197 1
Go 读取 YAML 配置文件的两种方式
gitea配置全局代理用于镜像github源
gitea配置全局代理用于镜像github源
1546 0
|
Kubernetes jenkins Java
Helm部署的服务如何修改配置
helm给我们提供了易用的配置,但是默认配置可能满足不了我们需要,因此需要做些修改,本文提供了两种修改配置的方式供大家参考
456 0
Helm部署的服务如何修改配置
|
JSON Kubernetes 网络协议
Kubeadm 初始化流程简介及 dashboard v2.0.0-rc6部署 | 学习笔记
快速学习 Kubeadm 初始化流程简介及 dashboard v2.0.0-rc6部署
355 0
|
Java 测试技术 开发者
yaml 配置文件值获取|学习笔记
快速学习yaml 配置文件值获取
162 0
|
Java jenkins Linux
(三)jenkins之全局配置
(三)jenkins之全局配置
100 0
(三)jenkins之全局配置
|
NoSQL 测试技术 Redis
一日一技:优雅地加载Yaml配置文件
一日一技:优雅地加载Yaml配置文件
753 0
一日一技:优雅地加载Yaml配置文件