iT邦幫忙

2

學習docker與kubernetes需要會寫程式嗎

各位好,
我目前會的都是一些IT infra相關的技術,如作業系統、網路、虛擬化(如VMware、HyperV)與儲存相關技術。
因為最近docker蠻紅的,自己看了一些文章,安裝很簡單,但是似乎後面都會開始牽涉到程式碼與coding相關知識,就有點眼花撩亂,觀念理解上有點困難。
因為我不會寫程式,所以想請問學docker與kubernetes,是否建議一定要有程式基礎?
不然還是乖乖搞原本的領域就好呢?

謝謝
Docker通常就是為程式建環境方便佈署,你不會寫程式怎麼會需要用到docker呢?你不了解程式需求環境的話你該怎麼去編dockerfile?kubernetes則是方便管理container的工具
Docker是環環相扣,不是只要pull image起一個SQL或node就完事了,了解一點程式基礎才能發現它的更美好之處
14
raytracy
iT邦大神 1 級 ‧ 2018-09-04 20:08:44
最佳解答

掌管 Infra 卻不會寫程式 (或沒有開發軟體的經驗),
是件蠻神奇的事情....就算你過去沒碰到, 將來一定碰得到:

  1. 你要如何開發適合自己環境的特製網管工具?
  2. 你要如何快速整合不同網管工具間的資料傳遞?
  3. 要如何監控對你 Infra 造成干擾的特定事件?
  4. 如何判斷障礙根因是來自 AP 或是你的 Infra?
  5. 如何自製自動化的小工具, 取代經常性的指令?
  6. 如何辨識系統過載是來自 AP 不良或硬體不足?
  7. ....

還有很多很多管理 Infra 的工作, 都需要你有能力自製一些小程式; 當然, 你可以用小孩拚積木的方式, 慢慢累積出自己的方塊模型; 但如果你經歷過軟體開發專案的話, 可以讓你更了解各軟體之間銜接的技巧, 或是更了解開發者的心態, 對於 Infra 維運的掌握度會更高...

我很少看到一個資深又游刃有餘的 Infra admin 是不會寫程式的; 除非是像我這樣...(不想讓人知道我會寫程式)....

這幾天的網管工作, 我隨便舉例看看:

開發部門說他們開發中的某 API server 連不上, 請我查修. 我查了是 DNS 解析問題, 把障礙排除掉. 但他們說那個 API 很重要, 萬一以後上線時掛了, 會影響 50 幾萬會員無法使用, 問我該怎麼預防?....

我主動提出: 幫他們建一個監測告警機制. 請他們給我 API 的呼叫方式和正確回應結果, 接下來呢?...

我是不是要會自己寫一段 API call 的程式, 才能把結果導入我的網管系統裡面去監看並紀錄? 你沒辦法叫他們寫, 因為他們不懂你的網管系統, 而且開發部門都很忙, 沒空幫你寫...

某主機被黑客入侵, 從 upload 目錄植入一個 php webshell 導致整個資料庫內容被拿走. 開發團隊緊急檢查所有程式碼試圖找出漏洞, 但人力有限, 無法馬上得到結果.

於是他們請我在尚未查出漏洞前, 先立即建立一個監視機制, 只要看到所有 upload 區有 php 程式被塞進來, 就馬上發出告警....(該主機大概有 50 幾個類似的 upload 區要監視)

這個其實不難, 用小工具組一組就可以完成, 但你還是要會寫程式, 否則萬一 upload 區的位置有變動, 你就要每天追著跑 (開發不會那麼好心, 每天跟你說他們改了甚麼); 然後偵測到了, 還得跟現有的告警機制整合在一起 (總不能每一個新的小工具都寫一套自己的告警吧?), 這些工作, 不會寫程式的 admin 要怎麼面對?

開發部某人說他的 Mac 連到主機的時候會一直斷線, 抱怨我的主機不穩定. 我查主機這邊的紀錄並沒有障礙, 而且全辦公室只有他會這樣, 其他人不會.

我懷疑是他的 Wifi 網路有問題, 但是沒有證據...

為了要證明我的假設, 在他的 Mac 上植入一段程式, 持續 ping gateway 取得 latency. 另外, Mac 內也植入一個 Wifi 信號監視程式, 每隔 5 秒就紀錄下 Wifi 信號的狀況. 然後將兩個資料相互比對, 確認是他的 gateway 有問題? 還是 Wifi 傳輸有問題?.....這個狀況, 沒有現成的工具可以讓你安裝, 只能靠自己寫程式來解決...(我至少要證明: 問題不是出在我所管的主機上)

開發團隊說: 某台主機用 Composer 安裝 Laravel 5.1 的時候, 裝到一半會跳出 error 巴拉巴拉巴拉#@!%&@#$*..但是他們裝 5.5 就沒有問題.....

於是請我檢查: 是否主機的基本 OS 安裝有甚麼閃失, 導致這個問題?

如果我不會操作 Composer 的話, 我要怎麼查這個問題? 如果我不懂 Laravel 的安裝過程的話, 要怎麼在我的測試環境中, 重建這個問題? 而這兩個元件, 都是寫程式的過程中會使用的工具, 如果我沒有寫過用過這類程式工具的經驗, 要怎麼驗證是我建的 Infra 有問題? 還是開發的人沒有正確使用他? (最後查出是 Composer 安裝過程中, 在 Script 某一條應該叫用 PHP 7.1 的指令, 他卻跑去呼叫 PHP 5.4 版造成的, 如果你沒有在主機內切換 PHP 版本經驗的話, 這邊就根本搞不清楚發生甚麼事情)

開發部門幫某金控做了行銷網站, 某天發出行銷活動消息之後, 突然湧入大量用戶, 導致網站承受不了掛掉了. 事後行銷團隊質疑: 主機維運不良, 導致系統沒有正常運作.

我進去看了那個行銷網址之後, 發現....

那個網址用 PHP 帶 Framwork 寫的, 看完程式我馬上知道問題點在哪; 但要說服開發團隊理解這件事情並不容易. 於是我自己做了一個的相同頁面, 但是只單純用 HTML 完成, 然後用壓力測試軟體去打他, 證明我寫的頁面, 可以承受每分鐘 12 萬次以上的連線, 遠超過掛掉當天的流量. (當天每分鐘只有 1 萬多次而已)

接下來, 再用同樣的壓測參數, 去打他們當初的 PHP 網址, 結果他們的程式只能承受每分鐘 8 千次連線, 這下問題就丟回去給他們自己解決了...(如果我不會寫程式, 如何能馬上就看懂他們的問題所在, 並且證明自己的維運是沒問題的?...)

某一天營運團隊說, 網站突然掛了不能用. 我查主機都正常沒問題, 請開發團隊看, 他們說某天 Tomcat Server 的 SSL 憑證更新之後, 系統的 API 介面就連不上, 導致網站出不來.....

這回, 如果我不懂 Tomcat Server 基本運作原理的話, 要怎麼幫他們查修? 我要怎麼知道是 config 出錯? 還是他們的 AP 程式有誤? 丟回去給開發團隊自己查嗎? 恐怕不行, 因為架設 Tomcat 是 Infra 部門的工作, 開發部門只管使用, 不管架設的, (而且他們會吐你: 程式在他們自己電腦都可以跑, 上了我的主機就不能跑, 一定是主機有問題) 你至少得把責任點釐清楚才能放手....

這時候, 如果你不懂程式的話, 是否所有線索都只能被開發部門牽著鼻子走, 沒有辦法辨識出他們描述的真實性? (通常做錯事的人都不會主動承認自己錯了, 你得要有慧眼能夠看得出來)

某個週六, 開發團隊說, DB 主機抓狂了, 8 顆 CPU 全滿; 我緊急先幫他們往上加 CPU, 一路加到 16 顆....20 顆之後, 才稍微緩解問題. 開發強調, 他們都沒有改程式, 質問我: 主機發生甚麼問題?

我巡查主機內, 也沒有人改任何系統層級設定, 或變更硬體規格, 不可能有這麼大差異; 於是懷疑有人做了甚麼事情沒告訴我....

此案最後查出, 是開發有人將某個 DB 的欄位, 從 char 改成 varchar, 但是程式裡面都沒有改這個型別;....他的這個動作, 引發所有用到這個欄位的 sql query, 通通要先執行一次 type conversion (型別轉換) 之後, 才能進行正常的運算. 而型別轉換是吃大量 CPU 的工作. 如果我沒有操作過 DB 的經驗, 我要如何從上百個 Table 中, 挖出有人動過這個手腳? 又如何能知道或證明: 動了這個欄位, 就是造成 CPU 狂飆的元兇? (其實他們當下說的也沒錯: 真的沒改程式;....只是動了 DB 欄位而已...但這個問題卻是他們改 DB 沒有一起改程式造成的)

我的監控看到 DB 的 RAM 經常超載, 於是通知開發團隊這個狀況. 開發自己判定說: RAM 太少不夠用, 要往上加才能解決. 但是加 RAM 需要預算, 老闆這關不同意. 然後整個問題就被丟回來我這裡: 能不能不要加 RAM, 就解決掉 DB 超載問題?

(這時候除了心裡一聲 X, 你還能怎麼辦?)
所以我還得學會所有 DB 調校的參數, 而且要知道該監控那些參數才能得到過載的根源, 然後靠著調整參數, 把 RAM 的消耗量控制在不超額的狀態下, 同時又能維持 DB 的效能...

這看起來似乎跟程式無關啦, 不過, 你若從未有過自己寫程式去存取 DB 的經驗, 又怎知哪些參數會跟哪些現象有關連?

在我管理的組織內, Infra 是最後一級的解答, 當前面每個部門都卡關無法解決的時候, 此時 Infra 必須跳出來出手解掉.

管 Infra 的人沒有資格說甚麼: XYZ技術我不懂; 在其他部門的眼中, 你就是讓辦公室運轉的水電工, 水電工甚麼都得懂, 必要時還得跳進糞坑去挖塞住的毛髮....

當然, 也不是說一定要會寫程式才能解得掉上面這些瑣事, 但是若你寫過程式, 解這些瑣事的速度會快上好幾十倍...

看更多先前的回應...收起先前的回應...

只是這麼做很有機會背到很多黑鍋,人心難測....

raytracy iT邦大神 1 級 ‧ 2018-09-05 00:27:44 檢舉

樓上說的沒錯, 所以如果要像我這樣管的話:

  1. 你的心臟要夠強, 經得起所有部門的砲火
  2. 你的技術要夠深, 足以堵住所有基層的嘴
  3. 你的人脈要夠廣, 足以讓高層站在你這邊
  4. 你的邏輯要清楚, 讓所有主管都無法反駁

證據很重要, 管 Infra 首重「IT 能見度」, 把看不見的東西變成看得見, 白紙黑字擺在眼前, 大家不必瞎猜, 就少了很多爭議的地方....

還有一個很重要的:
知錯要認錯, 當大家看到你能夠當面認錯時, 對你的信任感會大增, 以後只要是你據理力爭的事情, 大家通常都會有高度的信賴. 對於死不認錯的人, 雖然可以閃過當下, 但事後人家終究會知道, 然後就漸漸地不把你的話當作話來聽...

charles502 iT邦研究生 5 級 ‧ 2018-09-05 11:36:55 檢舉

我曾經看過Ray大說自己會寫一點Python來處理網管的問題,今天看到這篇回覆不禁好奇,也都是用Python來克服的嗎?

跑得快 iT邦新手 5 級 ‧ 2018-09-05 14:48:02 檢舉

Ray大神精闢又各種實例講解,小弟醍醐灌頂受教

hsiang11 iT邦研究生 4 級 ‧ 2018-09-05 16:30:22 檢舉

看來程式還是infra高薪的秘密
不然都只是在底層而已

raytracy iT邦大神 1 級 ‧ 2018-09-06 09:44:50 檢舉

回 charles502, 我沒有限定用甚麼寫, 一般狀況下 bash script/Powershell 最多, 相容性也最好, 因為你無法預期要處理的目標裡面, 是否會安裝你要用的程式語言, 以及指定的程式庫和版本? 只能選擇各系統一定會安裝的最小套件來用...

若有無法解決或須要叫用大量程式庫的, 再考慮用其他的語言來做...

(例如: 萬一有人要我生個: 人臉辨識登入之類的...)

1
海綿寶寶
iT邦超人 1 級 ‧ 2018-09-04 16:56:24

作業系統、網路、虛擬化(如VMware、HyperV)與儲存相關技術

如果你會以上技術而不會寫程式
那麼學 docker/K8s 也不需要會寫程式

2
小魚
iT邦高手 1 級 ‧ 2018-09-04 19:55:38

印象中有隻貓一直抓不到老鼠,
老鼠跑進洞裡面,
結果聽到外面的狗叫聲想說貓被嚇跑了,
出來就被貓抓住了,
然後這隻貓就說了:
"這年頭不多學幾種技能真的是活不下去了...."

weiclin iT邦高手 4 級 ‧ 2018-09-05 08:53:47 檢舉

這年頭魚也要學狗叫聲, 才可以把貓嚇跑

我要發表回答

立即登入回答