介绍
介绍
上一课福哥带着大家费了九牛二虎之力终于把基于rancher/rancher的k8s环境的给搭建起来了!下一步就是要根据我们的需求设计项目和命名空间了!那么什么是项目,什么又是命名空间呢?
按照k8s的设计理念,命名空间就是把我们的各种服务进行一个分类,例如:数据库类,web服务类,统计类,监控类等等。然后下面就是把这些分类再次进行一个分组,例如:系统功能,用户功能,生产功能,灰度功能等等。
按照k8s的设计理念,我们之前部署的各种服务在k8s里面叫做工作负载,在k8s里面各种服务是部署在具体的命名空间下面的。
那么今天福哥就带着大家学习一下如何使用rancher配置我们的项目和命名空间,以及如何使用rancher部署我们的工作负载!
环境
镜像版本 | rancher/rancher:v2.5.17-rc4 |
操作系统 | CentOS 7 x86_64 2009 |
服务器 | TFCentOS7x64、TFCentOS7x64Node1 |
IP | 192.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
无论是设置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
设置数据卷,先在TFCentOS7x64Node1上面创建MySQL的数据目录。
mkdir -p /tongfu.net/data/docker/data/tfmysql/ chown 999.999 /tongfu.net/data/docker/data/tfmysql/
设置数据卷,先在TFCentOS7x64Node1上面创建Elasticsearch的数据目录。
mkdir -p /tongfu.net/data/docker/data/tfelasticsearch chown 1000.1000 /tongfu.net/data/docker/data/tfelasticsearch
设置数据卷,先在TFCentOS7x64Node1上面创建Redis的数据目录。
mkdir -p /tongfu.net/data/docker/data/tfredis chown 999.999 /tongfu.net/data/docker/data/tfredis
设置数据卷,先在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/* .
后来福哥想起来了,现在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了!
哦,对了!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());
测试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
总结
今天福哥带着大家学习了k8s的项目Project/命名空间Namespace的设计技巧,还学会了在k8s里面部署工作负载Workload。然后我们还把前面学习的tfmysql、tfredis、tfelasticsearch和tfphp都在我们的k8s环境里面又都部署了一遍,体验了一把图形化部署运维环境的感觉!
后面福哥会陆续地把k8s的一些基础使用技巧一点点地教给大家,敬请期待吧~