Kolla中服務啟動實現分析

2021-08-20 02:40:23 字數 2674 閱讀 5784

以下是對kolla中乙個完整服務的分析,以horizon為例。

其中有:

"command":

"/usr/sbin/} -dforeground",

其中apache_cmd是根據當前平台為redhat系還是ubuntu系,分別設定為'httpd'/'apache2'

其中有name為「copying horizon json configuration file」的task:

- name: copying horizon json configuration file

template:

src:

"horizon.json.j2"

dest:

"}/horizon/config.json"

以上task將1中定義的horizon.json.j2拷貝渲染為horizon/config.json

其中的load_config函式具體內容:

with open(

'/run_command',

'w+')

as f:

f.write(config[

'command'])

讀取horizon/config.json中的command配置,並寫入到/run_command檔案。

dockerfile的模板檔案中有:

copy start.sh /usr/

local/bin/kolla_start

cmd [

"kolla_start"]

build映象時會將start.sh拷貝至/usr/local/bin/kolla_start, 後者會在容器啟動時被執行。

cmd=$(cat /run_

command)

#...

exec$$

執行/run_command中所有命令,而從3得知,/run_command從config.json的command配置得來,而config.json由horizon.json.j2得來。

容器啟動時執行start.sh中定義的命令,其中包含horizon.json.j2command字段定義的命令。

至此,整個服務的配置及執行流程走通。

除了start.sh以外,很多容器還會自動執行extend_start。它主要用其來做服務啟動前的準備工作,如資料庫同步。

下面仍以horizon為例進行實際分析。

主要執行一些準備工作,如dbsync。社群horizon未使用資料庫,因此無此步驟。

###horizon/dockerfile.j2

copy extend_start.sh /usr/

local/bin/kolla_extend_start

run chmod 755 /usr/

local/bin/kolla_extend_start

映象中會拷貝extend_start.sh/usr/local/bin/kolla_extend_start,並新增可執行許可權。

所有服務的dockerfile最終都繼承自base,其dockerfile中包含如下內容:

copy 

set_configs.py /usr/

local/bin/kolla_

set_configs

copy start.sh /usr/

local/bin/kolla_start

copy sudoers /etc/sudoers

run touch /usr/

local/bin/kolla_extend_start \

&& chmod 755 /usr/

local/bin/kolla_start /usr/

local/bin/kolla_extend_start /usr/

local/bin/kolla_

set_configs \

&& chmod 440 /etc/sudoers \

&& groupadd kolla

確保/usr/local/bin/kolla_extend_start檔案存在並新增可執行許可權。

if [[ ! 

"$" ]];

then

# run additional commands if present

source kolla_extend_start

fi檢測未配置kolla_skip_extend_start變數的情況下,使用source執行/usr/local/bin/kolla_extend_start

至此,整個extend_start的執行流程打通。

新增自定義服務時,預設情況下,只需要編寫:

CDH中服務的配置及啟動

這裡 服務 沿用cdh中的概念,指的是 hdfs yarn spark hive 等大資料軟體。以hive為例,hive service metastore starting hive metastore server hive service hiveserver starting hive th...

CentOS中服務程式隨系統啟動

如何讓linux系統一啟動就啟動服務程式?在 etc rc.d init.d 目錄下放置程式啟動指令碼。如 etc rc.d init.d 下的httpd,這是個指令碼程式。相當於執行 其實 service 會在 etc rc.d init.d 中找對應的指令碼程式,並執行。etc rc.d ini...

VS2005中服務的啟動,安裝與解除安裝

關於windows服務的安裝啟動與解除安裝。需要使用.net自帶的installutil.exe來進行安裝。installutil.exe的位置在c windows microsoft.net framework v2.0.50727目錄下如下圖示 安裝某服務的批處理 如下 c windows mi...