K8STARS將 Tars 服務(wù)運(yùn)行在 Kubernetes 中
k8stars是便于將tars服務(wù)運(yùn)行在Kubernetes中的方案。
特性
- 保持tars原生的開發(fā)框架能力
- 支持tars的名字服務(wù)自動(dòng)注冊和配置刪除
- 支持原有tars服務(wù)平滑遷移到k8s等容器平臺(tái)
- 無侵入性設(shè)計(jì),與運(yùn)行環(huán)境無偶合關(guān)系
實(shí)現(xiàn)方案
-
在tarsregistry增加了3個(gè)接口,用于tars名字的自動(dòng)注冊/心跳上報(bào)和節(jié)點(diǎn)下線。
-
提供一個(gè)
tarscli命令行工具,用于分配端口/生成配置/上報(bào)心跳以及節(jié)點(diǎn)下線。
部署示例
-
tarsregistry(名字服務(wù)) 參考baseserver的說明部署tars registry
-
部署服務(wù)示例
-
部署示例simpleserver
cd examples/simple && kubectl apply -f simpleserver.yaml示例說明:
- 鏡像由
examples/simple/Dockerfile文件制作,基礎(chǔ)鏡像由cmd/tarscli/Dockerfile制作 - start.sh中的
tarscli genconf用于生成tars服務(wù)啟動(dòng)配置 - _server_meta.yaml文件用于配置服務(wù)的元數(shù)據(jù),字段信息可以參考
app/genconf/config.go中的ServerConf結(jié)構(gòu)體。endpoint默認(rèn)為tcp -h ${local_ip} -p ${random_port},支持自動(dòng)填入IP和隨機(jī)端口。
- 鏡像由
-
基于Go語言的 HelloWorld 程序 TestApp.HelloGo
-
-
驗(yàn)證部署 登錄
db_tars,然后執(zhí)行select * from t_server_conf\G可以看到simpleserver的節(jié)點(diǎn)信息已自動(dòng)注冊。
tars部署目錄結(jié)構(gòu)
tarscli基于環(huán)境變量TARS_PATH(默認(rèn)/tars)來管理服務(wù),各目錄功能:
-
${TARS_PATH}/bin:啟動(dòng)腳本和二進(jìn)制文件 -
${TARS_PATH}/conf:配置文件 -
${TARS_PATH}/log:log文件 -
${TARS_PATH}/data:運(yùn)行狀態(tài)/緩存文件
關(guān)于tarscli
tarscli提供了一組命令工具,方便tars服務(wù)的容器化部署,可通過環(huán)境變量來指定參數(shù),詳細(xì)說明見tarscli help。 以下是tarscli支持的子命令
-
genconf用于生成tars服務(wù)的啟動(dòng)配置文件。支持的環(huán)境變量有:-
TARS_APPLICATION指定的應(yīng)用名,默認(rèn)從_server_meta.yaml中讀取 -
TARS_SERVER指定的服務(wù)名,默認(rèn)從_server_meta.yaml中讀取 -
TARS_BUILD_SERVER編譯時(shí)的服務(wù)名,編譯的服務(wù)名與運(yùn)行的服務(wù)名不同時(shí)會(huì)用到 -
TARS_LOCATOR可以指定registry的地址,默認(rèn)是tars-registry.default.svc.cluster.local -p 17890(service的地址) -
TARS_SET_ID可以指定服務(wù)set -
TARS_MERGE_CONF可指定配置模板文件,并將配置合并到服務(wù)的啟動(dòng)配置文件中
-
-
supervisor默認(rèn)執(zhí)行先genconf命令,再啟動(dòng)并監(jiān)控服務(wù)。支持的環(huán)境變量有:-
TARS_START_PATH服務(wù)的啟動(dòng)腳本,默認(rèn)是$TARS_PATH/bin/start.sh -
TARS_STOP_PATH服務(wù)的停止腳本,默認(rèn)是kill在$TARS_PATH路徑下的所有服務(wù)進(jìn)程 -
TARS_REPORT_INTERVAL上報(bào)心跳到registry的時(shí)間間隔 -
TARS_DISABLE_FLOW注冊到registry時(shí)是否開啟流量,非空表示關(guān)閉,默認(rèn)開啟 -
TARS_CHECK_INTERVAL檢查服務(wù)狀態(tài)的時(shí)間間隔,如果狀態(tài)有變化會(huì)實(shí)時(shí)同步到regitry -
TARS_BEFORE_CHECK_SCRIPT每次檢查前都運(yùn)行的shell命令 -
TARS_CHECK_SCRIPT_TIMEOUT每次檢查前運(yùn)行shell命令的超時(shí)時(shí)間 -
TARS_PRESTOP_WAITTIME關(guān)流量-停止服務(wù)前的等待時(shí)間,用于無損變更,默認(rèn)80秒
-
-
hzcheck 用于同步服務(wù)狀態(tài)和k8s的pod狀態(tài),需要將pod的
readiness probe設(shè)為tarsclihzcheck命令 -
prestop 用于在服務(wù)退出前刪除在registry對應(yīng)的配置
-
TARS_PRESTOP_WAITTIME關(guān)流量-停止服務(wù)前的等待時(shí)間,用于無損變更,默認(rèn)80秒
-
-
notify 用于發(fā)送管理命令,常用命令有:tars.setloglevel/tars.pprof等
