介绍
介绍
在上一节课里面福哥带着大家学会了使用k8s的持久存储卷Volumes(PV/PVC)的使用方法,今天我们要讲讲k8s的配置映射Config的使用方法!
福哥的tfphp服务里面使用PHP程序去操作MySQL数据库,这个MySQL数据库的服务器地址、用户名、密码都是直接写到PHP程序里面的,这样做是不规范的。规范的做法是将这些信息都写到一个配置文件里面,然后PHP程序再从配置文件里面去获取MySQL数据库的信息。
配置文件可以是任何格式的文件,早期的程序通常使用ini格式的文件、xml格式的文件,现在主流的程序更加喜欢用yaml格式的文件,PHP程序也可以直接使用PHP代码定义一个数组用来做配置文件。
环境
镜像版本 | rancher/rancher:v2.5.17-rc4 |
操作系统 | CentOS 7 x86_64 2009 |
服务器 | TFCentOS7x64、TFCentOS7x64Node1 |
IP | 192.168.168.68、192.168.168.69 |
端口 | 9443 |
使用
设计配置
tfphp服务会用到MySQL数据库和Redis数据库,后面还会用到Elasticsearch搜索引擎,所以我们要设计一个配置文件,把MySQL、Redis和Elasticsearch的相关参数都写到里面去才行。
因为tfphp是基于PHP语言的,所以福哥会使用PHP代码建立tfphp服务的配置文件。
config.php
福哥定义了一个数组,在数组里面设置了mysql、redis和elasticsearch的配置信息。
这个config.php配置文件大家先不用管它,后面福哥会以两种不同的方式部署它!
<?php $CONFIG = []; $CONFIG['mysql']['host'] = "tfmysql.database"; $CONFIG['mysql']['port'] = 3306; $CONFIG['mysql']['username'] = "root"; $CONFIG['mysql']['password'] = "abcdef"; $CONFIG['mysql']['db'] = "tfmysql"; $CONFIG['mysql']['charset'] = "utf8mb4"; $CONFIG['redis']['host'] = "tfredis.cache"; $CONFIG['redis']['port'] = 6379; $CONFIG['redis']['password'] = "tongfu.net"; $CONFIG['elasticsearch']['host'] = "tfelasticsearch.database"; $CONFIG['elasticsearch']['port'] = 9200; $CONFIG['elasticsearch']['index'] = "tfes";
tfmysql.php
在TFCentOS7x64Node1的tfmysql.php最前面引入配置文件config.php,并且改造初始化PDO对象的代码,将直接写到代码里的MySQL参数改成变量。
<?php header("Content-Type: text/html; charset=utf-8"); require("../config/config.php"); try{ // 连接数据库 $pdo = new \PDO("mysql:host=". $CONFIG['mysql']['host']. ";port=". $CONFIG['mysql']['port']. ";dbname=". $CONFIG['mysql']['db']. ";charset=". $CONFIG['mysql']['charset'], $CONFIG['mysql']['username'], $CONFIG['mysql']['password']); $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); // 获取数据库列表 $rs = $pdo->prepare("show databases"); $rs->execute(); $dbs = $rs->fetchAll(\PDO::FETCH_ASSOC); // 获取数据表列表 $rs = $pdo->prepare("show tables"); $rs->execute(); $tables = $rs->fetchAll(\PDO::FETCH_ASSOC); // 获取数据表数据 $rs = $pdo->prepare("select * from user"); $rs->execute(); $data = $rs->fetchAll(\PDO::FETCH_ASSOC); // 数据库 echo "<table border=\"1\"><tbody>"; echo "<tr><th>Database</th></tr>"; foreach ($dbs as $db){ echo "<tr><td>". $db['Database']. "</td>"; } echo "</tbody></table>"; // 数据表 echo "<table border=\"1\"><tbody>"; echo "<tr><th>Table</th></tr>"; foreach ($tables as $table){ echo "<tr><td>". $table['Tables_in_tfmysql']. "</td>"; } echo "</tbody></table>"; // 数据 echo "<table border=\"1\"><tbody>"; echo "<tr>"; foreach ($data[0] as $field => $value){ echo "<th>". $field. "</th>"; } echo "</tr>"; foreach ($data as $row){ echo "<tr>"; foreach ($row as $field => $value){ echo "<td>". $value. "</td>"; } echo "</tr>"; } echo "</tbody></table>"; } catch (\PDOException $e){ echo $e->getMessage(); }
tfredis.php
在TFCentOS7x64Node1的tfredis.php最前面引入配置文件config.php,并且改造初始化Redis对象的代码,将直接写到代码里的Redis参数改成变量。
<?php header("Content-Type: text/html; charset=utf-8"); require("../config/config.php"); $redis = new \Redis(); $redis->connect($CONFIG['redis']['host'], $CONFIG['redis']['port']); $redis->auth($CONFIG['redis']['password']); echo "<b>String</b><br>"; print_r($redis->get("userNick")); echo "<br><br><b>Hash</b><br>"; print_r($redis->hgetall("user")); echo "<br><br><b>Set inter</b><br>"; print_r($redis->sinter("userTags", "userTags2")); echo "<br><br><b>Set diff</b><br>"; print_r($redis->sdiff("userTags", "userTags2")); echo "<br><br><b>Set union</b><br>"; print_r($redis->sunion("userTags", "userTags2")); echo "<br><br><b>ZSet</b><br>"; print_r($redis->zrevrange("hotSubDomains", 0, -1));
映射主机目录方式
创建config.php
在TFCentOS7x64Node1服务器上建立/tongfu.net/data/docker/data/tfphp/config/目录,在下面建立config.php文件作为配置文件。
mkdir /tongfu.net/data/docker/data/tfphp/config/ vi /tongfu.net/data/docker/data/tfphp/config/config.php
然后把前面设计的config.php的代码粘贴进去,保存起来!
挂载config.php
现在我们需要把TFCentOS7x64Node1上面新建立的config目录挂载到tfphp服务上面,这样tfphp服务里的PHP程序才能找得到我们刚刚建立的config.php配置文件。
在tfphp服务里添加一个映射主机目录卷,名称“config”,工作路径“/tongfu.net/data/docker/data/tfphp/config”,容器路径“/var/www/config”。
测试
完成tfphp服务的升级之后,就可以用浏览器测试MySQL和Redis的联通情况了!
MySQL没有问题!
Redis也是OK的!
配置映射Config方式
创建Config
虽然映射主机目录的方式也可以实现项目配置文件,不过这里面存在一个问题。config.php配置文件我们是放到了TFCentOS7x64Node1服务器上面的,如果tfphp服务部署在其他服务器节点(比如:TFCentOS7x64Node2)的话,这个config.php配置文件就找不到了,而且到处复制这个config.php方案也不便于维护。为了解决这个问题,就要使用我们今天要讲到的技巧配置映射Config功能了~
点击“资源菜单”里面的“配置映射”子菜单进入配置映射管理界面。
点击“添加配置映射”按钮创建配置映射。
名称“tfphp-config”,键“config.php”,把前面设计的config.php的代码粘贴到值输入框里面去。
划到最下面点击“保存”按钮完成配置的创建。
挂载Config
先要把tfphp服务的数据卷里的config卷配置删除掉。
然后再添加一个“配置映射卷”。
卷名“config”,默认模式“444”,可选“否”,配置映射名选择刚刚添加的“tfphp-config”,项目“所有键”,容器路径“/var/www/config”。
测试
完成升级之后,我们再来测试一下MySQL和Redis的联通情况!
MySQL没问题!
Redis也没问题!
进入tfphp容器里面,看看配置文件路径。
ls -lha /var/www/config/
可以看到配置文件config.php的路径是配置映射动态建立的。
> /var/www/config/config.php
出于安全考虑配置映射建立的配置文件config.php是只读的。
总结
今天福哥带着大家学习了Rancher(k8s)的配置映射Config的使用方法,通过项目配置可以实现将项目程序和项目配置分开来管理,而k8s的配置映射可以把配置信息在部署的时候进行覆盖。不仅可以实现对项目配置进行集中管理,还对项目配置参数有一定的保密作用。
使用k8s的配置映射管理项目的配置信息,更加方便,更加安全!!!