Docker、 Weave、 樹莓派(Raspberry Pi) 和 一些網絡云計算

jopen 10年前發布 | 116K 次閱讀 Docker

【編者的話】Docker 、樹莓派、云計算,分別對應著現在最火的三個領域,他們結合起來會有怎么樣的火花了?未來是否會成為新的趨勢?作者首先講了面臨的網絡問題,并給出了解決方案。緊接著通過代碼的形式介紹了自己的最佳實踐。


如何使用簡單的方法使云計算連接到任何設備

在過去幾個月我已經嘗試了 WeaveDocker,最近我想看看我是否可以將我家里使用的樹莓派與我工作中操作的 云平臺結合起來。理想的情況下,樹莓派不一定非得放到家里,而是可以放在任何一個可通過互聯網連接的地方。

網絡問題

網絡依然是目前面臨的最大難題。我們習慣于傳統網絡方法,以至于人們很難找到可以解決相應問題的方案。操作系統和網絡 都是為應用程序提供服務。現代 UN*X Sun Solaris (zones)首先實現了進程隔離,緊接著FreeBSD (jails)和 稍后的 OpenVZ / Linux-vserver為 Docker 的出現鋪平了道路,隨著內核中 namespace/cgroups 的開發 ,現在這已經是一個相對成熟的技術。在 Weave 加入后,整個世界都將被顛覆。

我想通過云上的私人 dropbox-like 服務器(應用程序 B)來連接我家里的 NAS 存儲解決方案(應用程序 A),以保證所有文件可用以及從云中的另一個服務器提供一些額外的內容的能力(應用程序 C)。

安裝

為了證明這一點,我開始在我的 Pi 上部署 Weave 并連接上我在 Interoute 虛擬數據中心設置的 Docker/Weave。 Interoute 有一個完整的網絡 / IaaS 平臺,非常適合這些云區域之間私人互聯自動化類型的場景,并且是免費的。

設置大概看起來像下圖:
 Docker、 Weave、 樹莓派(Raspberry Pi) 和 一些網絡云計算

通常你需要設置一些 IPSEC 或 SSL V*N 隧道來連接環境,但是涉及的煩人配置步驟只是為了得到一個私人互聯。幸運的是云區域已經在 3 層對互聯加密了。真正的問題開始于當你需要把流量路由到遠程主機或者是有多個網關直接連通公共和內部網絡的時候(像在服務器 2)。甚至對我來說,我已經專業于主機和網絡的業務 20 年之久,這意味著我必須在它上面思考和工作以確保正確設置路由。太浪費時間并讓我非常的失望。

一個使用 Docker 和 Weave 的解決方案

使用Docker 可以創建微服務或者是在容器中運行成熟的 Linux 發行版,這里有非常多的管理選項處理它們,但這次我不會討論它。

Weave 是一個為跨主機的容器提供虛擬網絡的工具。在這里,我們主要使用了其兩個主要特性:
  • 為多主機上的容器規劃同一子網的功能(虛擬 2 層有效廣播域)
  • 為 Docker 容器提供連接到 Weave 網絡的自動路徑發現

在設置完 Weave 后,解決方案看起來像這樣:
 Docker、 Weave、 樹莓派(Raspberry Pi) 和 一些網絡云計算

在從服務器 1 到服務器 3 的路徑發現上發生了一些神奇的事情:只要服務器之間有一條路徑,Weave 就會自動轉發數據包。Weave 將從鄰居學習 MAC 地址,從這個方式的數據包學習下一跳(next-hop),詳情請看 這里

這么一設置我就可以帶著我的 PI 到任何地方,只要我的網絡(有狀態的 outboud)可以開放 tcp/udp 的 6783 端口,它將一直連接到云設施。

組成

棘手的部分是在樹莓派上運行 Docker 和 Weave,因為它需要最新的內核和用戶空間以保證可以正常工作。經過在 odroid-u3 的 Ubuntu、Arch Linux 和 樹莓派的 Raspbian 上做過幾次試驗后,我解決了:
  • 樹莓派模型 B
  • Raspbian Wheezy 更新到 Jessie 和 3.16 內核(我找不到一個合適的用于 Pi 的 Jessie 鏡像)
  • 當更新的時候,保證最小的 8GB SD 卡不會耗盡空間,你需要及時發現發現這個問題。
  • 一批云虛擬機運行著 Debian Jessie(或者是任何你能運行 Docker+Weave 的系統)

設置樹莓派

  • 下載 Raspbian Wheezy 并寫入你的 SD 卡
  • 啟動后,Pi 改變了在 /etc/apt/sources.list 中所有從 Wheezy 到 Jessie 的引用并且運行:

    sudo apt-get update

    sudo apt-get -y upgrade

    sudo apt-get -y dist-upgrade


    休息會,這將會花費很長時間。確保偶爾的按 y,然后繼續 sleeping(按 NO 來改變 dphys-swapfile,因為它將創建 1gb swapfile & raspbian 使用一個大部分未使用的 100MB swapfile 代替 )。


確保在 Pi 上安裝了 3.16 內核,libpcap-dev, Mercurial, Docker (我們需要 Docker 來構建 Weave) 和 Go:


sudo apt-get install linux-image-rpi

sudo apt-get install libpcap-dev

sudo apt-get install mercurial

sudo apt-get install golang-go

sudo apt-get install docker.io



Jessie 使用 systemd,確保 Docker 正在運行:


sudo systemctl start docker



現在改變 /boot/config.txt 來包含(在我的示例中是 vmlinuz-3.16.0.4-rpi):


kernel=/boot/vmlinuz-<version>-rpi


下載 Weave 源碼(根據 Weave 文檔)并構建它:


$ cd ~ $ mkdir go
$ export GOPATH=~/go
$ export PATH=$PATH:$GOPATH/bin
$ cd $GOPATH
$ WEAVE=github.com/zettio/weave
$ git clone https://$WEAVE
$ cd src/$WEAVE
$ make


使用 Docker 和 Weave 配置 3 臺服務器

在云服務器安裝 Docker:

sudo -i

apt-get install docker.io



安裝 Weave 腳本:

wget -O /usr/local/bin/weave https://raw.githubusercontent. ... weave

chmod a+x /usr/local/bin/weave



一旦所有的主機都運行了 Docker,在第一臺主機上這樣做:

weave launch -password



任何額外的主機通過運行相同的命令加上一個已經配置的主機 IP 地址都可以被添加,像這樣:

weave launch -password



僅僅要求防火墻配置允許 TCP 和 UDP 連接到 Weave 主機的 6783 端口。

現在在樹莓派上運行:

weave run 10.0.1.1/24 -t -i --name ApplicationA resin/rpi-raspbian:jessie /bin/bash



并且在云主機上運行:

weave run 10.0.1.2/24 -t -i --name ApplicationB ubuntu /bin/bash

weave run 10.0.1.3/24 -t -i --name ApplicationC ubuntu /bin/bash



連接(attach )和測試:

docker attach



當你已經連接到 vm,你可以 ping 在 10.0.1.0/24 網絡的其他主機。甚至在 server 3 的容器被連接到在 server 1 的容器,盡管他們直接沒有直接連接:所有流量都是自動通過 server 2 路由的!
 Docker、 Weave、 樹莓派(Raspberry Pi) 和 一些網絡云計算

在 Docker 中安裝實際的應用程序(在我的案例中主要是 owncloud 和 samba),我把這個作為練習留給讀者,玩的愉快點!

鏈接


故障排查

我一路上遇到的問題是使用舊的內核和其他的發行版(不影響最終的配置):
  • 由于缺少 libpcap,Arch Linux 不能編譯 Weave,雖然 headers 存在。沒有耐心找出依賴項
  • 在 /usr/local/bin/weave 腳本中有一行為 bridge 設置 MTU,在老的內核/驅動上是不支持的,你需要獲取:

    RTNETLINK:該操作不支持
    我修改了該腳本來在 bridge 開始創建的時候設置 MTU,因為我的設置支持,但是后來遇到了其他問題。
  • 大 部分發行版的內核作為鏡像分發給 raspberry/arm 是不夠新的以至于不適合運行 Docker 或者是缺少 cgroups 內核配置。我為 Raspbian 解決了這個問題,linux-image-rpi(目前是 linux-image-3.16.0.4-rpi)包。

想法/風險

  • 使用 Weave ,你是潛在的橋接到安全域,這可能會影響你的安全策略
  • 我沒有詳細看關于 Weave 使用 -password 選項實現安全的細節。沒有以一個整體對該設置的安全作評論。我將深入研究,并根據需要更新。
  • disclaimer:在 ARM 上,Docker 不是官方支持的,有潛在的問題!


這是一個實驗設置(目前為止)。


原文地址: https://medium.com/%40ALGrende ... 4376d
來自:http://dockerone.com/article/56

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!