docker已老, 函數(shù)式運維即未來-02: elk-6.2.4自動化部署篇

自動化運維已經是必不可少的一環(huán)练湿,經歷過生產上各種版本問題,簡單是痛心疾首涌庭,忍不住拿此開刀芥被,希望借此幫助提升國人的技術實力。
編寫此文獻給今天30歲的自己坐榆。

自動化運維包含兩部分:自動化構建跟自動化部署拴魄。

常用的工具是大家耳熟能詳?shù)豭enkins跟docker,但是不好用,不簡單匹中,不牛逼蚀狰!
此篇講解實例 函數(shù)式自動化部署elk方案,將在下期講解函數(shù)式自動化構建spring boot方案职员。

自動化部署這里介紹的工具是nixops:?https://nixos.org/nixops/manual/
這里的核心不是介紹工具,所以我們從底層講解跛溉,后期會專門介紹nixops之大殺器焊切。

自動化部署需要載體,所以產生了不同的隔離級別芳室。
nixops支持三種隔離級別:

1. 環(huán)境隔離(nix-env)

2. 進程隔離(nix-container)

3. 資源隔離(nixos virtualbox)

大家常見的docker就是進程隔離专肪, 虛擬機就是資源隔離。

有了函數(shù)式運維堪侯,我們所需要的隔離90%以上只需要nix-env環(huán)境隔離就可以解決嚎尤,甚至nix-container的進程隔離也是完全不需要虛擬化的,簡單強大伍宦。

nix-container將在后續(xù)nixops使用篇介紹.

不得不說芽死,docker老矣。大家要問次洼,如日中天的docker有哪些不好关贵??

第一: 部署友好度。
你覺得用root裝軟件是個很安全的操作嗎卖毁?
但是nix-env不一樣揖曾,只需建個目錄便于所有用戶共享即可

第二: 資源利用率
我就簡單的部署個jar包,就得啟動虛擬化技術亥啦,損耗實在太大了點炭剪,性能也是極大的浪費。
但是nix-env不一樣翔脱,通過環(huán)境隔離奴拦,與系統(tǒng)無縫集成

?第三: 資源透明度
如果在一臺機器上安裝相同的多個節(jié)點服務,這里就涉及復雜的端口映射届吁,甚至locahost跟主機都是調試一大障礙粱坤。
但是nix-env不一樣,直接原生應用開干瓷产,簡單強大站玄,不需要那么復雜

第四: 版本管理
docker的強項不就是版本管理么?NO濒旦!如果1.0代碼改動一小點株旷,它還是1.0,還是1.0。晾剖。锉矢。
但是nix-env不一樣,它對所有內容進行sha計算齿尽,輕松智能多版本沽损,函數(shù)式就是不可變,1.0也能多版本

第五:依賴管理
如果一個系統(tǒng)庫不提供二進制版本循头,那么需要自己構建绵估。
如果在docker中構建,需要額外的一整套構建環(huán)境
如果不在docker中構建卡骂,系統(tǒng)的庫依賴哪些是docker需要的呢?
有了函數(shù)式運維nix国裳,所有的軟件都是包含了依賴關系,并且構建與部署分離全跨。

第六: 學習門檻
學習docker需要學習專有的語法缝左,雖然不是很難。調試也極其困難浓若。
nix-env僅僅只是一個命令行工具渺杉,輕輕松松解決問題。

忍不住 來一句挪钓,世界本不應該如此復雜少办。。诵原。?

現(xiàn)實中的自動化部署常用的問題有哪些?

第一:? 需要配置大量主從服務端英妓,嚴重侵入系統(tǒng)。已知的有puppet, cloudera manager绍赛。

第二: 不支持離線功能蔓纠。已知的有ansible/salt需要安裝大量的python包才可以使用,離線之傷痛吗蚌!?

第三: 要學習特有的各種模塊及技術腿倚。由于不是函數(shù)式,要處理復雜度蚯妇,確實不能怪它們敷燎。


什么是函數(shù)式運維?

?在函數(shù)式運維的體系里面箩言,軟件包即值硬贯,配置即狀態(tài)。軟件包是不可變的陨收,稍弱改動軟件包之后產生了一個新的軟件包饭豹。

?那么函數(shù)式運維有啥好處呢鸵赖?

由于軟件包無狀態(tài),配置即狀態(tài) 拄衰,所以很輕松建立了配置驅動編程的體系它褪。對于配置,加上嚴格的版本控制翘悉,自然就有了代碼即文檔的效果茫打。由于軟件包即值,配置多版本管理妖混,從一個環(huán)境傳遞到另一個環(huán)境是那么自然 老赤。對于軟件的多版本,即是不同的值那么簡單源葫。由于函數(shù)式的不可變,中間過程相同輸入產生的輸入只用處理一次砖瞧,后續(xù)可復用息堂。如果服務器直接提供二進制構建,即不需要源碼構建進行軟件包安裝块促,否則重新編譯一次后續(xù)復用荣堰,大大提高構建效率。

開始今天的正題: 一鍵搞定elk函數(shù)式部署

1.?部署方案簡單設計(抽象大于實現(xiàn))?

2.?部署方案運行過程(好東西就是玩)

3. 部署方案代碼分析(github源碼精彩講解)

部署方案簡單設計 :

我經常說抽象大于實現(xiàn)竭翠。很多人不明白振坚。大家都笑話我說不寫代碼,光靠腦袋想么斋扰?
抽象大于實現(xiàn)的意義大于渡八,使程序具有美感,非常自然传货,讓人一眼就能明白屎鳍。
這里就以抽象大于實現(xiàn)的思想來思考問題。

為了達到離線部署功能问裕,我們將部署分解成三部分:打包逮壁,部署,啟動粮宛。
打完包之后窥淆,可以離線拷貝到其它機器上進行一鍵部署后啟動。

所有我們的代碼分為elk.package.sh, elk.deploy.sh, elk.start.sh

1. elk.package.sh: 打包是自動化的巍杈,從構建服務器自動同步打包??

nix-channel --add https://nixos.org/channels/nixpkgs-unstable
nix-channel --update

2. elk.deploy.sh: 部署是可以離線的忧饭,并且完全零配置?

3. elk.start.sh啟動是可以遠程調試及傳參的,并且支持同一機器多節(jié)點服務?

一下子就輕松搞定了筷畦。那么需要多少行代碼呢眷昆?不到200行。
?

部署方案運行過程 :

項目源碼: https://github.com/clojurians-org/my-env

部署腳本: run.sh.d/elk-example/{createvm.sh, package.sh, deploy.sh, start.sh}

第0步: 環(huán)境準備
第1步:? 安裝三臺虛擬機(可選)-createvm.sh
第2步: 打包elk依賴-package.sh
第3步: 部署elk組件-deploy.sh
第4步: 啟動elk服務-start.sh

第0步: 環(huán)境準備??

;; 沒有安裝nix的請自行安裝:?https://nixos.wiki/wiki/Nix_Installation_Guide

a. 安裝git

b. 同步代碼

第1步:? 安裝三臺虛擬機? (可選,如已有機器集群可跳過)

創(chuàng)建三臺虛擬機

[larluo@larluo-nixos:~/my-env]$ cat run.sh.d/elk-example/createvm.sh
set -e
my=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" > /dev/null && pwd -P) && cd $my/../..

echo -e "\n==== bash nix.sh create-vm nixos-elk-001" && bash nix.sh create-vm nixos-elk-001
echo -e "\n==== bash nix.sh create-vm nixos-elk-002" && bash nix.sh create-vm nixos-elk-002
echo -e "\n==== bash nix.sh create-vm nixos-elk-003" && bash nix.sh create-vm nixos-elk-003



第2步: 打包elk?

添加函數(shù)式自動化構建channel:

同步下載軟件包(配置文件同名時亚斋,以elasticsearch優(yōu)先級最高作媚,后續(xù)優(yōu)化)


[larluo@larluo-nixos:~/my-env]$ cat run.sh.d/elk-example/package.sh
set -e
my=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" > /dev/null && pwd -P) && cd $my/../..

echo -e "\n==== bash nix.sh export nix.gettext-0.19.8.1" && bash nix.sh export nix.gettext-0.19.8.1
echo -e "\n==== bash nix.sh export nix.elasticsearch-6.2.4" && bash nix.sh export nix.elasticsearch-6.2.4
nix-env --set-flag priority 0 elasticsearch-6.2.4
echo -e "\n==== bash nix.sh export nix.logstash-6.2.4" && bash nix.sh export nix.logstash-6.2.4
echo -e "\n==== bash nix.sh export nix.kibana-6.2.4" && bash nix.sh export nix.kibana-6.2.4


第3步: 部署elk?

部署至遠程服務器:


[larluo@larluo-nixos:~/my-env]$ cat run.sh.d/elk-example/deploy.sh
my=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" > /dev/null && pwd -P) && cd $my/../..

# create user op:op
echo -e "\n==== bash nix.sh create-user 192.168.56.101" && bash nix.sh create-user 192.168.56.101
echo -e "\n==== bash nix.sh create-user 192.168.56.102" && bash nix.sh create-user 192.168.56.102
echo -e "\n==== bash nix.sh create-user 192.168.56.103" && bash nix.sh create-user 192.168.56.103

# install nix
echo -e "\n==== bash nix.sh install 192.168.56.101 tgz.nix-2.0.4" && bash nix.sh install 192.168.56.101 tgz.nix-2.0.4
echo -e "\n==== bash nix.sh install 192.168.56.102 tgz.nix-2.0.4" && bash nix.sh install 192.168.56.102 tgz.nix-2.0.4
echo -e "\n==== bash nix.sh install 192.168.56.103 tgz.nix-2.0.4" && bash nix.sh install 192.168.56.103 tgz.nix-2.0.4

# install gettext for envsubst
echo -e "\n==== bash nix.sh install 192.168.56.101 nix.gettext-0.19.8.1" && bash nix.sh install 192.168.56.101 nix.gettext-0.19.8.1
echo -e "\n==== bash nix.sh install 192.168.56.102 nix.gettext-0.19.8.1" && bash nix.sh install 192.168.56.102 nix.gettext-0.19.8.1
echo -e "\n==== bash nix.sh install 192.168.56.103 nix.gettext-0.19.8.1" && bash nix.sh install 192.168.56.103 nix.gettext-0.19.8.1

# install elasticsearch
echo -e "\n==== bash nix.sh import 192.168.56.101 nix.elasticsearch-6.2.4" && bash nix.sh import 192.168.56.101 nix.elasticsearch-6.2.4
echo -e "\n==== bash nix.sh import 192.168.56.102 nix.elasticsearch-6.2.4" && bash nix.sh import 192.168.56.102 nix.elasticsearch-6.2.4
echo -e "\n==== bash nix.sh import 192.168.56.103 nix.elasticsearch-6.2.4" && bash nix.sh import 192.168.56.103 nix.elasticsearch-6.2.4

# install logstash
echo -e "\n==== bash nix.sh install 192.168.56.101 nix.logstash-6.2.4" && bash nix.sh install 192.168.56.101 nix.logstash-6.2.4
echo -e "\n==== bash nix.sh install 192.168.56.102 nix.logstash-6.2.4" && bash nix.sh install 192.168.56.102 nix.logstash-6.2.4
echo -e "\n==== bash nix.sh install 192.168.56.103 nix.logstash-6.2.4" && bash nix.sh install 192.168.56.103 nix.logstash-6.2.4

# instal kibana
echo -e "\n==== bash nix.sh import 192.168.56.101 nix.kibana-6.2.4" && bash nix.sh import 192.168.56.101 nix.kibana-6.2.4
echo -e "\n==== bash nix.sh import 192.168.56.102 nix.kibana-6.2.4" && bash nix.sh import 192.168.56.102 nix.kibana-6.2.4
echo -e "\n==== bash nix.sh import 192.168.56.103 nix.kibana-6.2.4" && bash nix.sh import 192.168.56.103 nix.kibana-6.2.4



選擇一臺機器進行檢查

第4步: 啟動elk

[larluo@larluo-nixos:~/my-env]$ cat run.sh.d/elk-example/start.sh
set -e
my=$(cd -P -- "$(dirname -- "${BASH_SOURCE-$0}")" > /dev/null && pwd -P) && cd $my/../..

# start elasticsearch-6.2.4
export ES_ALL="192.168.56.101:9200,192.168.56.102:9200,192.168.56.103:9200"
echo -e "\n==== bash nix.sh start 192.168.56.101:9200 elasticsearch-6.2.4 --all ${ES_ALL} --cluster.id monitor"
??????????????? bash nix.sh start 192.168.56.101:9200 elasticsearch-6.2.4 --all ${ES_ALL} --cluster.id monitor
echo -e "\n==== bash nix.sh start 192.168.56.102:9200 elasticsearch-6.2.4 --all ${ES_ALL} --cluster.id monitor"
??????????????? bash nix.sh start 192.168.56.102:9200 elasticsearch-6.2.4 --all ${ES_ALL} --cluster.id monitor
echo -e "\n==== bash nix.sh start 192.168.56.103:9200 elasticsearch-6.2.4 --all ${ES_ALL} --cluster.id monitor"
??????????????? bash nix.sh start 192.168.56.103:9200 elasticsearch-6.2.4 --all ${ES_ALL} --cluster.id monitor

# start kibana-6.2.4
echo -e "\n==== bash nix.sh start 192.168.56.101:5601 kibana-6.2.4 --elasticsearchs ${ES_ALL}" && bash nix.sh start 192.168.56.101:5601 kibana-6.2.4 --elasticsearchs ${ES_ALL}
echo -e "\n==== bash nix.sh start 192.168.56.102:5601 kibana-6.2.4 --elasticsearchs ${ES_ALL}" && bash nix.sh start 192.168.56.102:5601 kibana-6.2.4 --elasticsearchs ${ES_ALL}
echo -e "\n==== bash nix.sh start 192.168.56.103:5601 kibana-6.2.4 --elasticsearchs ${ES_ALL}" && bash nix.sh start 192.168.56.103:5601 kibana-6.2.4 --elasticsearchs ${ES_ALL}


第5步: 檢查elk

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市帅刊,隨后出現(xiàn)的幾起案子纸泡,更是在濱河造成了極大的恐慌,老刑警劉巖赖瞒,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件女揭,死亡現(xiàn)場離奇詭異,居然都是意外死亡栏饮,警方通過查閱死者的電腦和手機吧兔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來袍嬉,“玉大人境蔼,你說我怎么就攤上這事∷磐ǎ” “怎么了箍土?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罐监。 經常有香客問我吴藻,道長,這世上最難降的妖魔是什么弓柱? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任沟堡,我火速辦了婚禮,結果婚禮上矢空,老公的妹妹穿的比我還像新娘弦叶。我一直安慰自己,他們只是感情好妇多,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布伤哺。 她就那樣靜靜地躺著,像睡著了一般者祖。 火紅的嫁衣襯著肌膚如雪立莉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天七问,我揣著相機與錄音蜓耻,去河邊找鬼。 笑死械巡,一個胖子當著我的面吹牛刹淌,可吹牛的內容都是我干的饶氏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼有勾,長吁一口氣:“原來是場噩夢啊……” “哼疹启!你這毒婦竟也來了?” 一聲冷哼從身側響起蔼卡,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喊崖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后雇逞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荤懂,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年塘砸,在試婚紗的時候發(fā)現(xiàn)自己被綠了节仿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡掉蔬,死狀恐怖廊宪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情眉踱,我是刑警寧澤挤忙,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布霜威,位于F島的核電站谈喳,受9級特大地震影響,放射性物質發(fā)生泄漏戈泼。R本人自食惡果不足惜婿禽,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望大猛。 院中可真熱鬧扭倾,春花似錦、人聲如沸挽绩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唉堪。三九已至模聋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唠亚,已是汗流浹背链方。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留灶搜,地道東北人祟蚀。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓工窍,卻偏偏與公主長得像,于是被迫代替她去往敵國和親前酿。 傳聞我的和親對象是個殘疾皇子患雏,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容