同福

Rancher(k8s)的配置映射Config的使用方法

介绍

介绍

在上一节课里面福哥带着大家学会了使用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
IP192.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

home/topic/2023/0911/21/2ec119fe9aca39fe1eb2fad40413c5a1.png

出于安全考虑配置映射建立的配置文件config.php是只读的。

总结

今天福哥带着大家学习了Rancher(k8s)的配置映射Config的使用方法,通过项目配置可以实现将项目程序和项目配置分开来管理,而k8s的配置映射可以把配置信息在部署的时候进行覆盖。不仅可以实现对项目配置进行集中管理,还对项目配置参数有一定的保密作用。

使用k8s的配置映射管理项目的配置信息,更加方便,更加安全!!!