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 [email protected]:/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 "<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());
再次通路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 "<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
打開浏覽器通路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