Container Summit 2015 筆記

RojerChen.2015.12.15


今年的 Container Summit 2015 實在是相當的精彩,這兩天的研討會著重在 Container 技術在雲端上的應用 (Google、Azure、daocloud、Mesos、RANCHER、和信雲端)、資源運用 (微博) 、CI (貝格樂)、DevOps 、Docker 1.9.x、Docker swarm。


除了內容精彩、講師陣容豪華之外,會議場地與餐點也都準備得相當不錯!全天候咖啡與點心供應實在是太貼心了,難怪有人說辦活動只要餐點準備好,評價就至少有 80分!唯一的缺點大概就是會場的網路很爛,只好用自己的手機上網 XD

這兩天這麼多的主題中,我最喜歡微博、Docker In CI、DevOps 這三場,這幾場聽起來超有感覺的,透過 Container 技術可以讓 DevOps 更容易,省去了不少時間與資源成本,而這是採用 docker 能夠帶來的實質改善。

 以下就是相關的筆記:

※Container的過去、現在與未來

  • docker 讓 infar as a code
  • 讓開發與營運可以擁有共通的版本
  • 從單一主機執行,跨入多主機架構,不再是單機開發或測試模式

※Mesos 大建大規模 Container 平台 

  • 特點
    • resource management
      • 把資源公平分散出去
      • 將 IP 給某一個 Container ,你不需要知道這個 Container 再哪一台機器,但是你可以用這個 IP 找到該 Container
    • programming abstractions
    • security
    • monitoring , debugging , logging
  •  Mesos 提供 API 使用
  • 各種不同的 framework 都可以在Mesos這個平台上使用

※Docker in CI:Cacoo與Backlog導入Docker的經驗分享

  • 日本人用台語自我介紹,超強!
  • 公司業務介紹
    • Backlog (http://backlogtool.com/tw)
    • Cacoo
    • Typetalk
  • 利用 Docker 的特性來做 CI
  • 測試遇到的瓶頸
    • 分支問題
      • 太多開發人員、太多分支
      • 需要經過單元測試後才可以 review
    • 測試環境
      • 不同開發環境,需要不同的測試環境與工具
    • 速度
      • 整合測試前必須先完成單元測試後才可以進行,需要等很久
  • 使用 Docker 的優點
    • 容易設定 slave
      • 啟動快速,只要啟動 docker 後就可以執行測試了
    • 簡化環境設定
      • 只需要 dockerfile 就可以達到需求
    • 加速
      • 自己有架設 docker register
    • 資源利用
      • 測試完畢後就可以將 container 移除,節省資源
      • 權限問題
        • in some case , test should be run by non-root user
        • owner of host directory inside container is indefinite
        • writing build result to host directory by non-root user can fail
          • change ownership to non-root user during build time
        • copy build result from container
          • no permission issue 
          • complicate
    • Docker in CI
      • good place to start docker
        • ci becomes common practice
        • installing docker in ci doesn’t change many things
        • we could have best practice in this area
    • 日本在production 應用案例

※新浪微博大規模基於Docker的混合雲應用實踐

  • 業務背景
    • 業務量變化非常大、瞬間的峰值很高,需要大量的設備以確保服務在尖峰期間能夠正常
    • 業務突發狀況
      • 突發事件、三節(元旦、春晚、耶誕節)、紅包飛
      • 日常推撥
    • 資源浪費
      • 每個業務單位有各自的設備,以確保尖峰期間服務能夠正常
      • 每個業務都有設備閒置,造成資源浪費
    • 設備
      • 申請週期過長
      • 機房空間有限
  • 目標
    • 個業務除了有各自的保留空間外,有部分的空間如10%設備會共通用,
    • 讓共用的空間做靈活的彈性轉移
  • 大陸業界處理方式:12306 (類似台鐵訂票網站)
    • 目前有兩個資料儲存中心,但是仍舊有問題
    • 額外申請阿里雲,用來應付尖峰流量
  • 雲端
    • 使用阿里雲
    • 持續部屬不會用在雲端,單純用來扛尖峰值
    • 拉專線,兩個機房各 1G 專線,三節尖峰狀態拉 10G 專線
    • 拉專線才可以降低延遲時間,使用公有雲方式處理速度太慢
  • Docker Registry
    • 有自己的 Docker Registry 用來做版本管理
    • Docker 有升級過,額外用 Nginx 做處理,得知目前服務請求要用 V1 or V2 Registry
  • 具有內部私有機房,並透過專線與阿里雲溝通
    • docker
    • swarm
    • mesos (離線數據分析用)
    • dispatch (自行開發任務系統)
    • 後端服務為JAVA
    • 前端服務 PHP
  • 有一個共用的資源池,當其他系統有需要資源再做調配
  • 大規模集群操作自動化
    • 設備申請
      • 內:共享池
      • 外:阿里雲
    • 初始化
      • 標準化
      • 配置管理
      • 安裝、升級自動化、操作 API 化
      • RPM+Puppet MasterLess
      • 業界可能透過 CoreOS、RancherOS、Atomic、DCOS 來做初始化,但是對微博來說,這樣成本過高,所以自己做初始化。
    • 服務上線
      • 容器動態調度
      • 服務彈性擴充
        • 各項業務有10%的設備提供做為共享使用
        • 資源不足時進行申請,使用後歸還
    • 具有報警平台、業務監控
    • 部屬模式
      • 優先調度內網共享
    • 擴充容,單次操作時間 < 5min

※群暉科技運用Docker研發新世代產品之路

  • NAS 提供 Docker 服務遇到的困難
    • 網路
      • NAT Port Mapping
      • 使用 open vswitch 方式處理網路問題
    • 儲存空間
      • 讓 DMS 上共用同一份 docker image
      • stateless data:like image or library
      • stateful data:user data、documents、images
      • 利用 DSM 升級,自動調整 config 檔案
      • 用 BTRFS subvolume 的 quote 機制,限制 docker dsm 用量
      • 支援 snapshot 、backup
    • 安全性
      • cgroup
      • capability
      • apparmor
      • namespace
      • read-only sysfs
        • sysfs 設定為唯讀
        • procfs 部分路徑唯讀
  • 內部使用案例
    • demo site:讓每一個使用者資料隔離,不會讀到前一個使用者看到的資料
    • QC
      • 模擬多 client 情境效能測試
      • 保存/還原測試問題環境

※兩大平臺完整結合: 談Windows Container & Azure Container service



  • windows 世界的 container 技術
    • docker vm extension
    • hyper-v containers
    • visual studio tooling
    • continuous integration with visual studio online
    • docker trust repository
  • 可以用 power shell 或是用 docker command
  • MS自己的 container
    • Server Core
    • Nano Server
      • 最佳化 for container 的 os
    • 原生支援 docker command
  • 使用 Apache Mesos Scale
  • Apache Mesos on Windows Server

※擁抱或對抗?談Docker對傳統DevOps工具鏈的衝擊

  • Slide 
  • DevOps
    • How to recreate your system  (如何在另外一個地方重新建立、從無到有)
    • How to safely change your system (如何改變你的系統)
    • When something has gone wrong (當系統發生狀況,如何快速地知道與解決)
      • detection
      • recovery
      • diagnosis
  • 除了 DB 之外,其他服務很難裸機,通常都用 VM 來處理,但是使用VM一開始就會消耗硬體10%資源
  • Container OS
    • 是否OS要不要這麼肥?
      • 作業系統瘦身
      • CoreOS
      • Windows Nano Server
      • Snappy Ubuntu Core
      • VMWare Photon
      • Red Hat Atomic
    • container per vm
      • 每一個 container 的用途是用來跑單一VM
    • unikernel
      • MirageOS、Boxfuse
      • boxfuse 把東西 convert 成 image 並丟到AWS上run
    • docker 
      • immutable image
      • versioned image
      • devlprod parity
      • 以後電腦的功用是開好SSH、系統參數設定完後,剩下就交給Docker
  • pets and cattle
    • 差別
      • 有名字
      • 是否可以拋棄
    • 傳統 AP (寵物開發)
      • 很難移植、必須好好照顧
    • 牲畜開發法
      • 由電腦幫你決定要丟到哪一台電腦上執行
      • 可以容易複製與轉移
      • 參考12 factors
      • docker swarm、Mesos....
    • kubernetes
      • rolling upgrade
      • canary deployment

※如何在Kubernetes上持續部署微服務型應用

  • simple microservice
    • program language : go 
    • backend (json)
    • frontend (html)
  • kubernetes
    • manage a cluster of lunux containers as a single system
    • opensource
    • 5 basic things
      • cluster
        • one master and at least one node
        • kubernetes as a managed service
      • pod (感覺就像docker一樣)
        • co-located docker containers 
        • containers share volumes and localhost
        • pod.yaml (很像 docker compose,給 master 使用)
      • Service
        • abstraction to communicate with pods
        • have frontend & backend services
      • namespace
        • have own resources
    • Continuous Depolyment
      • commit often
      • deploy every commit
      • validate and rollback deploys
      • minimize human interaction
      • code -> test -> commit -> push -> build -> test
  • continuous deployment
    • Jenkins workflow plugin
    • docker image 要設定別名,這樣之後才可以管理

 ※深入理解Dockerfile、Docker映像檔以及Docker容器

  • docloud  公司業務介紹 (http://www.daocloud.io)
    • daoship
      • 持續交付流水線
    • daohub
      • 可追朔的交付件倉庫
      • 突破城牆! Docker hub 鏡像
    • daocloud
      • 快雲端網的容器集群管理
  • Agenda
    • Docker introduction
      • 容器技術:有效分配與管理物理資源,實現資源隔離
        • 對容器來說,關注的點有沒有 linux kernel 
        • 資源隔離 ( 除了CPU、RAM、kernel 也是一種資源,
      • 鏡像技術
        • 打破代碼即應用的觀念,從系統環境開始,自底至上打包應用
        • let infar as a code
        • windows 對 ap 層實現容器技術
        • dependency、configuration
      • docker 化實踐
        • dockerfile -> docker image (can ship anywhere) -> docker container
        • dockerfile 定義一切
    • Dockerfile
      • cache
        • 先看作這一步動作的時候 Image 有沒有變,沒有變再看看
    • docker image
      • 一個 image 由多個層來組合
      • 一些資料不應該存入,如 hosts、hostname、resolv.conf
    • docker container
      • 不存在傳統的 init 進程
      • 缺少基本的服務進程
      • 與內和進程通信能力薄弱
      • docker 比較適合高層次的AP,如果是跟系統硬體設備比較相關,要管理和監控比較不足
      • cache
      • docker 服務的最終交付
      • 受到資源的隔離與控制
      • 收到權限的控制
        • linux container & linux kernel 都是 root 
        • container 內部與 container 外度的 root 有巨大的差異
      • 支撐用戶應用的運行
      • docker engine 對於 docker container 有比較好的管理

※和信雲端 Container 實戰經驗

  • container cluster
  • scale 
  • full tolerance
  • container 角度,增加 container instance 
  • benefits of collaboration
    • cloud native computing
    • more than just the container
    • hybrid cloud

※深入瞭解 Docker Container Networks

  • 網路處理機制
    • bridge (很久以前一開始 RUN 的版本)
    • none (啥鬼都沒有)
    • host ( container和主機網路組態相同)
    • container
    • used-defined network
  • 以前只有在同一台底下的container 可以互相溝通,現在不同台主機的container 可以互相溝通
  • docker network commands
    • docker network create/connect/ls/rm/disconnect/inspect
  • 不同 bride 的 container 不能相通
    • inspect 可以看到每個 container 底下網路的狀況
  •  overlay network  (讓不同台主機的 container 可以彼此互連)
    • prepare a key value store
    • add cluster options to each docker engine 
      • docker engine run 起來要加參數
        • --cluster-store=consul://ip:8500
        • --cluster-advertiser=eth1:2376
    • create on overlay network on one of the host
      • host 上要 create overlay network 所有有加入這個 consul 的 device 就可以看到
      • 可以一台主機在Azure,另外一台在digital ocean ,兩台再串起來
      • eth0 用來做 overlay network
  • weave network plugin
    • 有好用的介面讓你看狀況

※用Docker Swarm打造多主機叢集環境

  • Slide
  • 讓一個 container 讓多個 container 存取
  • docker machine 啟動 swarm master 再啟動 swarm node
  • Port Allow
    • 特種不同的雲端平台需要開的 PORT 不同
    • docker engine port (TCP 2375)
    • VXLAN:UDP4789
  • 注意Kernel版本
  • 透過 key-store 讓swarm master node 知道彼此位置

※Q&A

  • docker 版本更新很快,該如何跟上步調?
    • 參考雲端服務者使用的版本
    • 雲端服務提供的版本一定不是最新版,但是該版本會和雲端服務整合的最好才會提供該版本服務
    • 知道每個版本的功能,升級上去並做測試,不要用 x.x.0 的版本
    • 微博經驗
      • 大量的測試、壓測之後才上線
      • 目前也只有用過 1.3.x , 1.6.2 這兩個版本
  • 記憶體問題 JVM 
    • 如果要考量scale與穩定性,自己要做好記憶體管理,了解 memory limit、heap size
    • JCCONF 有人講過相關的主題,可以參考 連結
    • eBay 經驗
      • 主機裝 VM,每個 VM 底下再裝 Docker or Container
      • performance 對 eBay 不是考量
      • 人的 development cost 比較高
      • 結論:有錢真好
  • 擁抱 docker 有甚麼 business model
    • 是一個趨勢
    • 以前的程式只能在舊的OS執行,OS升級後程式還要繼續支援,這樣能夠降低 dependency
    • 彈性調度資源、硬體資源的管理、自動化的安裝
    • 自我思考
      • 思考開發、維護對現有工作可以帶來的改變
      • 調整開發思維 (寵物與畜生牲畜)
  • 發明一個新的 container 技術不是太困難,但是要做得像 docker 一樣好,擁有好的 ecosystem 、並且把使用者從 docker 轉移到其他的 container 技術才是困難的。 

    Blogger Comment

0 意見: