Rancher(k8s)项目Project/命名空间Namespace和工作负载Workload

1. 介绍

1.1 介绍

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

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

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

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

1.2 环境

镜像版本

rancher/rancher:v2.5.17-rc4

操作系统

CentOS 7 x86_64 2009

服务器

TFCentOS7x64、TFCentOS7x64Node1

IP

192.168.168.68、192.168.168.69

端口

9443

2. 安装

2.1 关闭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

2.2 vm.max_map_count

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

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

3. 使用

3.1 设计项目和命名空间

福哥打算设计一个简单的集群结构。

项目就建立两个,一个Data(数据)、一个App(应用)。

Data项目下面建立两个命名空间,一个database(数据库)、一个cache(缓存);App项目下面建立一个命名空间web(Web程序)。

3.2 创建项目

点击“项目/命名空间”菜单进入项目/命名空间管理界面。

点击“添加项目”按钮创建项目。

项目名称“Data”。

点击“创建”按钮完成项目的创建。可以看到项目Data创建出来了,现在还是一个空项目。

再把另一个项目App也创建出来。

3.3 创建命名空间

点击项目App右边的“添加命名空间”按钮创建命名空间。

名称“web”。

点击“创建”按钮完成命名空间的创建。可以看到在项目App下面有了web命名空间了。

再把剩下的命名空间也都创建出来。

3.4 部署工作负载

现在我们来把前面使用docker-compose部署的服务都在k8s里面再部署一套!

根据前面设计的命名空间,服务tfphp部署到web里面,服务tfmysql、tfelasticsearch部署到database里面,服务tfredis部署到cache里面。

从顶部菜单里展开找到“Data”菜单,点击“Data”菜单进入Data项目管理界面。

3.5 部署tfmysql服务

默认就是在“工作负载”选项卡下面,点击“部署服务”按钮开始部署服务。

名称“tfmysql”,工作负载类型“StatefulSet”,Docker镜像“registry.tongfu.net:5000/tfmysql:5.7-1.0.0”,命名空间“database”。

设置端口映射,容器端口3306,绑定集群IP,主机端口与容器端口相同。

设置环境变量“MYSQL_ROOT_PASSWORD=abcdef”。

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

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

展开“数据卷”,点击“添加卷”选择“映射主机目录”。

卷名“data”,主机路径“/tongfu.net/data/docker/data/tfmysql”,容器路径“/var/lib/mysql”。

点击最下面的“启动”按钮启动tfmysql服务。

这个时候服务还无法启动起来,因为用到的镜像还没有推送到私有镜像仓库里面。

推送镜像到私有镜像仓库,在TFCentOS7x64上面把需要的镜像推送到私有镜像仓库里面。

docker push registry.tongfu.net:5000/tfmysql:5.7-1.0.0

等了一会儿,启动起来了!

点击右边的“三个点”选择“执行命令行”进入tfmysql的容器里面。

通过mysql终端测试一下,没有问题!

3.6 部署tfelasticsearch服务

现在把tfelasticsearch服务也启动起来。

名称“tfelasticsearch”,工作负载类型“StatefulSet”,Docker镜像“registry.tongfu.net:5000/tfelasticsearch:6-1.0.0”,命名空间“database”。

设置端口映射,容器端口9200,绑定集群IP,主机端口与容器端口相同。

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

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

卷名“data”,主机路径“/tongfu.net/data/docker/data/tfelasticsearch”,容器路径“/usr/share/elasticsearch/data”。

推送镜像到私有镜像仓库,在TFCentOS7x64上面把需要的镜像推送到私有镜像仓库里面。

docker push registry.tongfu.net:5000/tfelasticsearch:6-1.0.0

启动服务,成功了!

进入容器里面用curl测试一下,没有问题!

3.7 部署tfredis服务

现在把tfredis服务也启动起来。

名称“tfredis”,工作负载类型“StatefulSet”,Docker镜像“registry.tongfu.net:5000/tfredis:6.0-1.0.0”,命名空间“cache”。

设置端口映射,容器端口6379,绑定集群IP,主机端口与容器端口相同。

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

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

卷名“data”,主机路径“/tongfu.net/data/docker/data/tfredis”,容器路径“/var/lib/redis”。

推送镜像到私有镜像仓库,在TFCentOS7x64上面把需要的镜像推送到私有镜像仓库里面。

docker push registry.tongfu.net:5000/tfredis:6.0-1.0.0

启动服务,成功了!

进入容器里面用redis-cli终端测试一下,没有问题!

3.8 部署tfphp服务

因为tfphp需要部署在web下面,所以先切换到App项目下面。

现在我们来启动tfphp服务。

名称“tfphp”,工作负载类型“Deployment”,Docker镜像“registry.tongfu.net:5000/tfphp:7.4-nginx-1.0.0”,命名空间“web”。

设置端口映射,容器端口80,使用NodePort,主机端口随机。

设置数据卷,先在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/* .

卷名“data”,主机路径“/tongfu.net/data/docker/data/tfphp/html”,容器路径“/var/www/html”。

推送镜像到私有镜像仓库,在TFCentOS7x64上面把需要的镜像推送到私有镜像仓库里面。

docker push registry.tongfu.net:5000/tfphp:7.4-nginx-1.0.0

启动服务,成功了!k8s给我们随机了一个31209端口!

3.8.1 测试tfmysql联通

打开浏览器访问http://192.168.168.69:31209/tfmysql.php,唉?报错啦!

后来福哥想起来了,现在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 "";
    echo "Database";
    foreach ($dbs as $db){
        echo "". $db['Database']. "";
    }
    echo "";

    // 数据表
    echo "";
    echo "Table";
    foreach ($tables as $table){
        echo "". $table['Tables_in_tfmysql']. "";
    }
    echo "";

    // 数据
    echo "";
    echo "";
    foreach ($data[0] as $field => $value){
        echo "". $field. "";
    }
    echo "";
    foreach ($data as $row){
        echo "";
        foreach ($row as $field => $value){
            echo "". $value. "";
        }
        echo "";
    }
    echo "";
}
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());

再次访问tfmysql.php看看?好了!

3.8.2 测试tfredis联通

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

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

<?php

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

echo "String
"; print_r($redis->get("userNick")); echo "

Hash
"; print_r($redis->hgetall("user")); echo "

Set inter
"; print_r($redis->sinter("userTags", "userTags2")); echo "

Set diff
"; print_r($redis->sdiff("userTags", "userTags2")); echo "

Set union
"; print_r($redis->sunion("userTags", "userTags2")); echo "

ZSet
"; 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

打开浏览器访问http://192.168.168.69:31209/tfredis.php,一次通过啦!

4. 总结

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

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


https://m.tongfu.net/home/35/blog/514005.html

展开阅读全文

页面更新:2024-03-03

标签:负载   项目   工作   空间   端口   容器   路径   仓库   主机   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top