同福

Rancher(k8s)的项目Project/命名空间Namespace的设计和工作负载Workload的部署

介绍

介绍

上一课福哥带着大家费了九牛二虎之力终于把基于rancher/rancher的k8s环境的给搭建起来了!下一步就是要根据我们的需求设计项目和命名空间了!那么什么是项目,什么又是命名空间呢?

按照k8s的设计理念,命名空间就是把我们的各种服务进行一个分类,例如:数据库类,web服务类,统计类,监控类等等。然后下面就是把这些分类再次进行一个分组,例如:系统功能,用户功能,生产功能,灰度功能等等。

按照k8s的设计理念,我们之前部署的各种服务在k8s里面叫做工作负载,在k8s里面各种服务是部署在具体的命名空间下面的。

那么今天福哥就带着大家学习一下如何使用rancher配置我们的项目和命名空间,以及如何使用rancher部署我们的工作负载!

环境

镜像版本
rancher/rancher:v2.5.17-rc4
操作系统CentOS 7 x86_64 2009
服务器TFCentOS7x64、TFCentOS7x64Node1
IP192.168.168.68、192.168.168.69
端口9443

安装

关闭NetworkManager

在CentOS7操作系统里有个NetworkManager服务,它会在系统的/etc/resolv.conf里面添加search选项,而这个search选项会被k8s继承起来,最终会导致k8s上面部署的服务无法正常工作。

解决办法有两个,或者在网卡配置里使用DOMAIN参数设置可用的DNS服务器地址,或者把NetworkManager服务直接关掉,福哥选择的是直接把它关掉。

cat /etc/resolv.conf
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl restart network
cat /etc/resolv.conf

home/topic/2023/0902/22/f14722933abd156c39dbf7ac94f9cc1f.png

无论是设置DOMAIN参数,还是关闭NetworkManager服务,最后都是需要重新启动TFCentOS7x64Node1服务器才能使更改生效的。

reboot

vm.max_map_count

为了Elasticsearch服务,我们还要在TFCentOS7x64Node1服务器上加大vm.max_map_count的值。

echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

home/topic/2023/0902/22/8a6157b924fdbb0cb5e82d9ca4c53da7.png

设置数据卷,先在TFCentOS7x64Node1上面创建MySQL的数据目录。

mkdir -p /tongfu.net/data/docker/data/tfmysql/
chown 999.999 /tongfu.net/data/docker/data/tfmysql/

home/topic/2023/0902/22/c15c006b6f5393e4dd7bbd34d4604bb6.png

设置数据卷,先在TFCentOS7x64Node1上面创建Elasticsearch的数据目录。

mkdir -p /tongfu.net/data/docker/data/tfelasticsearch
chown 1000.1000 /tongfu.net/data/docker/data/tfelasticsearch

home/topic/2023/0902/23/ef374f1bfe65648cd718e541f1250a8c.png

设置数据卷,先在TFCentOS7x64Node1上面创建Redis的数据目录。

mkdir -p /tongfu.net/data/docker/data/tfredis
chown 999.999 /tongfu.net/data/docker/data/tfredis

home/topic/2023/0902/23/6d6d83684096d32e5d724f2ac7fe35dc.png

设置数据卷,先在TFCentOS7x64Node1上面创建PHP的程序目录,然后使用scp命令把TFCentOS7x64上的那些PHP程序文件复制过来。

mkdir -p /tongfu.net/data/docker/data/tfphp/html/
cd /tongfu.net/data/docker/data/tfphp/html/
scp root@192.168.168.68:/tongfu.net/data/docker/data/tfphp/html/* .

home/topic/2023/0902/23/3a8f245538045552a94951661df472f3.png

后来福哥想起来了,现在tfphp和tfmysql在不同的命名空间下面,直接访问当然是行不通的了!需要加上tfmysql所在的命名空间database才行!

在TFCentOS7x64Node1的tfphp数据目录下面修改tfmysql.php,将tfmysql改成tfmysql.database。

<?php

header("Content-Type: text/html; charset=utf-8");

try{
    // 连接数据库
    $pdo = new \PDO("mysql:host=tfmysql.database;dbname=tfmysql", "root", "abcdef", [\PDO::MYSQL_ATTR_INIT_COMMAND => "set names utf8mb4"]);
    $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();
}

再次访问tfmysql.php试试!唉?这回提示找不到数据库tfmysql了!

home/topic/2023/0902/23/b6f371cec2d3e6a64276f62100461ecf.png

哦,对了!k8s环境里面的MySQL还没有数据呢!只能手动往里面放一些数据了!

create database tfmysql default charset utf8mb4;
use tfmysql;
CREATE TABLE user (
    userId INT NOT NULL AUTO_INCREMENT,
    userName VARCHAR(45) NOT NULL,
    userPwd CHAR(32) NOT NULL,
    createDT DATETIME,
    updateDT DATETIME,
    lastLoginDT DATETIME,
    PRIMARY KEY (userId),
    KEY u_userName (userName)
);
INSERT INTO user (userName, userPwd, createDT) VALUES ('k8s.tongfu.net', md5('abcdef'), now());
INSERT INTO user (userName, userPwd, createDT) VALUES ('tfmysql.k8s.tongfu.net', md5('abcdef'), now());

home/topic/2023/0902/23/1c85149230ef1384152b71cd9219aa0e.png

测试tfredis联通

现在我们来调试联通Redis数据库!这次有经验了,先改配置,再添数据!

在TFCentOS7x64Node1的tfphp数据目录下面修改tfredis.php,将tfredis改成tfredis.cache。

<?php

$redis = new \Redis();
$redis->connect("tfredis.cache", 6379);
$redis->auth("tongfu.net");

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));

现在往k8s环境的Redis里放一些数据吧!

set userNick "福哥k8s"
hmset user nick "福哥k8s" gender male age 35
hset user descript "现在我们开始玩k8s了!"
sadd userTags "福哥k8s" tongfu tongfu.net "项目" "命名空间"
sadd userTags2 tongfu k8s.tongfu.net
zadd hotSubDomains 1 tongfu.net 1 k8s.tongfu.net 1 project.k8s.tongfu.net 1 namespace.k8s.tongfu.net 1 rancher.tongfu.net
zincrby hotSubDomains 1 tongfu.net
save

home/topic/2023/0902/23/434869553b9ed47d9dc6f41756e9baf9.png

总结

今天福哥带着大家学习了k8s的项目Project/命名空间Namespace的设计技巧,还学会了在k8s里面部署工作负载Workload。然后我们还把前面学习的tfmysql、tfredis、tfelasticsearch和tfphp都在我们的k8s环境里面又都部署了一遍,体验了一把图形化部署运维环境的感觉!

后面福哥会陆续地把k8s的一些基础使用技巧一点点地教给大家,敬请期待吧~