2016-09-25

Container Summit 2016 - 邁向下個 IT 架構的 Container

Container Summit 可說是聚集各界容器 (container) 專家,討論 container 次世代 IT 架構的研討會,會中有不少的話題圍繞在近來火紅的 Docker 技術上。想當初凍仁會開始接觸 Docker 也是聽到不少前輩在談論它的好,光是可以對 Linux 系統環境進行版本控制省下各種安裝 Linux 發行版本時間這兩點就足夠吸引凍仁投資技能點數!

以下為凍仁這次參與的議題,大致可分為容器叢集 (container cluster) 1 大亂鬥資訊安全 (Security)容器監控 (Monitoring)企業導入經驗分享等主題。

▲ Container Summit 2016 官網看板圖。(圖片來源:iThome)

Day1:
  1. Kubernetes API 與客製化控制 (The Kubernetes API & Custom Controllers)
  2. 容器技術對分佈式系統的最佳實踐:配置管理、服務發現、數據存儲、監控和跟蹤
  3. DC/OS, A New Operating System for your Data Center
  4. 洞悉 Docker 安全史
  5. Agile Development with Container and Kubernetes
  6. Docker 從入門到入迷
  7. 如何利用 Docker 強化網站安全
Day2:
  1. Docker 集群編排方案
  2. 大規模公有雲環境下的容器微服務實
  3. 基於 Container 的大規模私有雲實踐
  4. Docker 在騰訊遊戲的實踐 (Docker in Tencent Games)
  5. Kubernetes 導入 Prometheus
  6. Docker 導入:障礙與對策

容器叢集 (container cluster)

  1. 為了迎接 container 技術帶來的衝擊,目前台灣業界較多導入 Kubernetes,並成為 Production 環境一部份,更可以與 Google Cloud 無縫整合。
  2. swarm 在 v1.12 後推出了 swarmkit 2 整體功能完整了不少,也更友善些。
  3. DC/OS 在國外已有知名的企業在使用,有漂亮的圖形化介面和豐富的 marketplace。
  4. Rancher 有著簡單易上手的介面、流程和 marketplace。

至於要怎麼抉擇?專家建議我們可以先了解各家 container cluster 的觀念和想解決的問題,之後再依自己的屬性選擇最適合的解決方案 (solution)。

Rancher 因敝公司已有在使用在此就不多談,倒是會想找時間玩玩看 Kubernetes 和 swarm。而 DC/OS 似乎較偏愛 CentOS?這對較偏愛 Debian 和 Ubuntu 的凍仁較不友善,暫且不太會關注它。

容器監控 (Monitoring)

容器監控可說是凍仁目前最關注的議題,雖曾使用過 NagiosZabbix,卻一直對 Prometheus 不得其門而入,但還是得到了不少寶貴的心得分享,期許自己能早日掌握這項新技術。
  1. Prometheus 目前已有非常多的 Exporter 可使用 (除官方提供外還有不少第三方的可使用),如 MySQL 就有 400 多個 metrics。
  2. Prometheus 可以對 Nginx, MySQL 的服務進行監控。
  3. 可以藉由在 metrics 裡加上 Label 來群組化 metrics。
  4. 使用 Prometheus 時,一開始會不知道應該對什麼進行監控,這時會先把 Exporter 都先載進來,之後再慢慢觀察有什麼需要監控;與使用 Zabbix 時一開始就知道要監控什麼的觀念相反。
  5. 若已有 Zabbix server,可將收到 error,後送到 Pushgateway 丟給 Prometheus 處理。

Zabbix Prometheus
模板 Template Exporter
資料蒐集 Items Metrics
警報 Trigger + Action Alert Manager

▲ 不負責的 Zabbix 與 Prometheus 名詞對照表。

資訊安全 (Security)

Docker 安全嗎?Docker 官方的回應是 Security by default。在預設環境下他人是有機會從 container 裡黑到 host 的,很多問題牽扯到 Linux, cGroup, Namespace, Capability 等較底層的實作,雖然 Docker 不是為了 security 而生,但還是可以透過些手法來增強安全性。
  1. 限制 container 的 CPU, memory, ... 等使用資源。
  2. TLS 加密很重要,否則世界會被 cracker 搶走!
  3. 啟用 SELinux 和 AppArmor 強化權限限制。
  4. 不要在 Docker container 裡使用 root 執行 service。
  5. 檔案最小權限設置,不該被寫入的、被執行的權限就該拔。
  6. 移除不必要的檔案或程式,例如 make, gcc ...。
  7. 量身打造 docker image。

在 Capabilities 的 demo 中,講者 孫宏亮更透出可以在 container 裡控制 docker-engine (Docker Server) 的手法!
# 在 container 裡控制 docker-engine (nonwithout TLS),之後就可以控制全世界!
[ root@docker-container ~ ]
$ docker -H tcp://$IP:2375 run -it --pid host --ipc host --privileged -v /:/new_data ubuntu:14.04 bash 

講者 徐千洋 (Tim) 則透過遠端命令執行 (Remote Code Execute) 的手法讓人了解可以藉由把 Docker 把服務打包成更安全的環境,以簡化營運成本。

企業導入經驗分享

把 Docker container 跑起來了,然後呢?

這是剛入門 Docker 時大家都會遇到的問題。凍仁一開始用它來 debug Vim Taiwan 社群伙伴的 vimrc,之後幫前公司架了私有的 Docker Registry,也成功的在 Linux server 上跑了 PHP 7.0 給新專案使用 (同台機器上的舊專案還在 PHP 5.4 的環境)。

自己用的很開心,但想全面導入卻困難重重。在高雄時身邊沒幾位朋友可以討論,雖有少數同事有興趣,但也因時程壓力下遲遲無法推動。在聽完 William Yeh 前輩的 Docker 導入:障礙與對策的演講後,凍仁簡單列了幾個問題:
  1. 原有架構把 session、PDF 等資料存放在 server 本機上,不利 scale。
  2. 未導入自動化測試,無法保證更改架構後照成的影響。
  3. 尚未掌握在 Production 環境跑 Docker 技術,例如:Kubernetes (K8s), DC/OS (Mesos), Rancher, swarm。
  4. 尚未掌握對 Docker container 進行監控的技術,例如:Prometheus, cAdvisor。
  5. 業務量還不到需 scale 和使用負載平衡 (Load Balance) 的地步。
要想好好發揮 Docker 原有的威力,勢必得架構做出大幅度的修正,但這些都不是單靠一位工程師就辦得到的,所以當時只有在整合 Jenkins CI 的開發、測試的環境底下使用 Docker。

▲ 感謝強者同事 Sammy Lin,讓小弟能以講者助理的身份出席 Container Summit 2016。

Docker 這個技術雖然很新,但很多架構面的問題其實是一開始設計時就該考慮的,為了迎接下個 IT 世代,Cloud native 的架構是必不可需的!Docker 是個很棒的技術,但適不適合導入自家企業?要導到哪個階段?就看自己的本事了。

短短的兩天著實聽了不少的經驗分享,小弟在此感謝各位先進講者和 iThome 主辦單位的辛勞,我們 Container Summit 2017 見了!

1 容器叢集 (container cluster) 裡又包含了容器指揮調度 (scheduling) 和容器編排 (orchestration) 等功能。
2 swarmkit 也可用 docker-engine swarm mode 的字眼。


2016-09-25


感謝 Sammy LinFacebook 上的指正,已修正容器叢集 (container cluster) 、容器指揮調度 (scheduling) 和容器編排 (orchestration) 等專有名詞。

相關連結:
會後心得分享連結 | Container Summit 2016 | hackfoldr
艦長,你有事嗎?: iThome Container Summit 2016 Day 1 簡易筆記心得
艦長,你有事嗎?: iThome Container Summit 2016 Day 2 簡易筆記心得
iThome Container Summit 2016 心得 – Miles' Blog – A Web Developer Note

資料來源:
Container Summit 航向容器新世界
Container Summit 2016 相關訊息 | Container Summit 2016 | hackfoldr