圖片來源: 

RojerChen

本文作者為RojerChen,原文網址為http://rojerchen.blogspot.tw/2015/12/container-summit-2015.html 

今年的 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的經驗分享

  • 利用 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 技術才是困難的。


    Advertisement

    更多 iThome相關內容