1. 程式人生 > >每天5分鐘玩轉 Docker 容器技術(59)

每天5分鐘玩轉 Docker 容器技術(59)

上一節我們部署了 etcd,本節安裝和配置 flannel。

build flannel

flannel 沒有現成的執行檔案可用,必須自己 build,最可靠的方法是在 Docker 容器中 build。不過用於做 build 的 docker 映象託管在 gcr.io,國內可能無法直接訪問,為方便大家,我把它 mirror 到了 docker hub,構建步驟如下:

  1. 下載並重命名 image。

    docker pull cloudman6/kube-cross:v1.6.2-2

    docker tag cloudman6/kube-cross:v1.6.2-2 gcr.io/google_containers/kube-cross:v1.6.2-2

  2. 下載 flannel 原始碼。

    git clone https://github.com/coreos/flannel.git

  3. 開始構建。

    cd flannel

    make dist/flanneld-amd64

  4. 將 flanneld 執行檔案拷貝到 host1 和 host2。

    scp dist/flanneld-amd64 192.168.56.104:/usr/local/bin/flanneld

    scp dist/flanneld-amd64 192.168.56.105:/usr/local/bin/flanneld

將 flannel 網路的配置資訊儲存到 etcd

先將配置資訊寫到檔案 flannel-config.json 中,內容為:

{

  "Network": "10.2.0.0/16",

  "SubnetLen": 24,

  "Backend": {

    "Type": "vxlan"

  }

}

  1. Network定義該網路的 IP 池為10.2.0.0/16

  2. SubnetLen指定每個主機分配到的 subnet 大小為 24 位,即10.2.X.0/24

  3. Backendvxlan,即主機間通過 vxlan 通訊,後面我們還會討論host-gw

將配置存入 etcd:
etcdctl --endpoints=192.168.56.101:2379 set /docker-test/network/config < flannel-config.json

/docker-test/network/config是此 etcd 資料項的 key,其 value 為 flannel-config.json 的內容。key 可以任意指定,這個 key 後面會作為 flanneld 的一個啟動引數。執行etcdctl get確保設定成功。

啟動 flannel

在 host1 和 host2 上執行如下命令:
flanneld -etcd-endpoints=http://192.168.56.101:2379 -iface=enp0s8 -etcd-prefix=/docker-test/network

-etcd-endpoints指定 etcd url。

-iface指定主機間資料傳輸使用的 interface。

-etcd-prefix指定 etcd 存放 flannel 網路配置資訊的 key。

host1 上輸出如下:

① enp0s8 被選作與外部主機通訊的 interface。

② 識別 flannel 網路池 10.2.0.0/16。

③ 分配的 subnet 為 10.2.40.0/24。

flanneld 啟動後,host1 內部網路會發生一些變化:

  1. 一個新的 interfaceflannel.1被建立,而且配置上 subnet 的第一個 IP 10.2.40.0。

  2. host1 添加了一條路由:目的地址為 flannel 網路 10.2.0.0/16 的資料包都由 flannel.1 轉發。 

host2 輸出類似,主要區別是 host2 的 subnet 為 10.2.17.0/24:

當前環境網路拓撲如圖所示:

flannel 已經就緒,下一節演示如何在 Docker 中使用 flannel 網路。

二維碼+指紋.png

相關推薦

安裝配置 flannel - 每天5分鐘 Docker 容器技術59

poi 可靠 下載 end emf 區別 vertica config ann 上一節我們部署了 etcd,本節安裝和配置 flannel。 build flannel flannel 沒有現成的執行文件可用,必須自己 build,最可靠的方法是在 Docker 容器中 b

每天5分鐘 Docker 容器技術59

上一節我們部署了 etcd,本節安裝和配置 flannel。 build flannel flannel 沒有現成的執行檔案可用,必須自己 build,最可靠的方法是在 Docker 容器中 build。不過用於做 build 的 docker 映象託管在 gcr.i

調試 Dockerfile - 每天5分鐘 Docker 容器技術15

top add font tom middle 程序 ria family 是個 包括 Dockerfile 在內的任何腳本和程序都會出錯。有錯並不可怕,但必須有辦法排查,所以本節討論如何 debug Dockerfile。 先回顧一下通過 Dockerfile 構建鏡像

Dockerfile 常用指令 - 每天5分鐘 Docker 容器技術16

依次 官方文檔 構建 bottom str -s 暴露 工作 12px 是時候系統學習 Dockerfile 了。下面列出了 Dockerfile 中最常用的指令,完整列表和說明可參看官方文檔。 FROM指定 base 鏡像。 MAINTAINER設置鏡像的作

RUN vs CMD vs ENTRYPOINT - 每天5分鐘 Docker 容器技術17

docker 教程 容器 RUN、CMD 和 ENTRYPOINT 這三個 Dockerfile 指令看上去很類似很容易混淆。本節將通過實踐詳細討論它們的區別。簡單的說RUN 執行命令並創建新的鏡像層RUN 經常用於安裝軟件包。CMD 設置容器啟動後默認執行的命令及其參數但 CMD 能夠被 doc

使用公共 Registry - 每天5分鐘 Docker 容器技術19

docker 教程 容器 保存和分發鏡像的最直接方法就是使用 Docker Hub。Docker Hub 是 Docker 公司維護的公共 Registry。用戶可以將自己的鏡像保存到 Docker Hub 免費的 repository 中。如果不希望別人訪問自己的鏡像,也可以購買私有 repos

Docker 鏡像小結 - 每天5分鐘 Docker 容器技術21

列表 例如 normal one sys tro docker comm color 本節我們對 Docker 鏡像做個小結。 這一部分我們首先討論了鏡像的分層結構,然後學習了如何構建鏡像,最後實踐使用 Docker Hub 和本地 registry。 下面是鏡像的常用操作

如何運行容器?- 每天5分鐘 Docker 容器技術22

docker 教程 容器 上一章我們學習了如何構建 Docker 鏡像,並通過鏡像運行容器。本章將深入討論容器:學習容器的各種操作,容器各種狀態之間如何轉換,以及實現容器的底層技術。運行容器docker run 是啟動容器的方法。在討論 Dockerfile 時我們已經學習到,可用三種方式指定容器

兩種進入容器的方法 - 每天5分鐘 Docker 容器技術23

工作 技術 啟動進程 gin attach ant while col -c 我們經常需要進到容器裏去做一些工作,比如查看日誌、調試、啟動其他進程等。有兩種方法進入容器:attach 和 exec。 docker attach 通過 docker attach 可以 a

運行容器的最佳實踐 - 每天5分鐘 Docker 容器技術24

oat add vertical poi can size 執行命令 後臺 運行 按用途容器大致可分為兩類:服務類容器和工具類的容器。 1. 服務類容器以 daemon 的形式運行,對外提供服務。比如 web server,數據庫等。通過 -d 以後臺方式啟動這類容器是非常

容器常用操作 - 每天5分鐘 Docker 容器技術25

技術 order position 自動 code lec 資源 add 服務 前面討論了如何運行容器,本節學習容器的其他常用操作。 stop/start/restart 容器 通過 docker stop 可以停止運行的容器。 容器在 docker host 中實際上是

限制容器對內存的使用 - 每天5分鐘 Docker 容器技術27

upload 機制 性能 http tle war pac 啟動 物理內存 一個 docker host 上會運行若幹容器,每個容器都需要 CPU、內存和 IO 資源。對於 KVM,VMware 等虛擬化技術,用戶可以控制分配多少 CPU、內存資源給每個虛擬機。對於容器,D

限制容器對CPU的使用 - 每天5分鐘 Docker 容器技術28

docker 教程 容器 上節學習了如何限制容器對內存的使用,本節我們來看CPU。默認設置下,所有容器可以平等地使用 host CPU 資源並且沒有限制。Docker 可以通過 -c 或 --cpu-shares 設置容器使用 CPU 的權重。如果不指定,默認值為 1024。與內存限額不同,通過

限制容器的 Block IO - 每天5分鐘 Docker 容器技術29

docker 教程 容器 前面學習了如何限制容器對內存和CPU的使用,本節我們來看 Block IO。Block IO 是另一種可以限制容器使用的資源。Block IO 指的是磁盤的讀寫,docker 可通過設置權重、限制 bps 和 iops 的方式控制容器讀寫磁盤的帶寬,下面分別討論。註:目前

實現容器的底層技術 - 每天5分鐘 Docker 容器技術30

docker 教程 容器 為了更好地理解容器的特性,本節我們將討論容器的底層實現技術。cgroup 和 namespace 是最重要的兩種技術。cgroup 實現資源限額, namespace 實現資源隔離。cgroupcgroup 全稱 Control Group。Linux 操作系統通過 cg

none 和 host 網絡的適用場景 - 每天5分鐘 Docker 容器技術31

docker 教程 容器 本章開始討論 Docker 網絡。我們會首先學習 Docker 提供的幾種原生網絡,以及如何創建自定義網絡。然後探討容器之間如何通信,以及容器與外界如何交互。Docker 網絡從覆蓋範圍可分為單個 host 上的容器網絡和跨多個 host 的網絡,本章重點討論前一種。對於

容器必須懂 bridge 網絡 - 每天5分鐘 Docker 容器技術32

docker 教程 容器 上一節我們討論了 none 和 host 類型的容器網絡,本節學習應用最廣泛也是默認的 bridge 網絡。Docker 安裝時會創建一個 命名為 docker0 的 linux bridge。如果不指定--network,創建的容器默認都會掛到 docker0 上。當前

理解容器之間的連通性 - 每天5分鐘 Docker 容器技術34

docker 教程 容器 通過前面小節的實踐,當前 docker host 的網絡拓撲結構如下圖所示,今天我們將討論這幾個容器之間的連通性。兩個 busybox 容器都掛在 my_net2 上,應該能夠互通,我們驗證一下:可見同一網絡中的容器、網關之間都是可以通信的。my_net2 與默認 bri

容器間通信的三種方式 - 每天5分鐘 Docker 容器技術35

docker 容器 教程 容器之間可通過 IP,Docker DNS Server 或 joined 容器三種方式通信。IP 通信從上一節的例子可以得出這樣一個結論:兩個容器要能通信,必須要有屬於同一個網絡的網卡。滿足這個條件後,容器就可以通過 IP 交互了。具體做法是在容器創建時通過 --net

容器如何訪問外部世界?- 每天5分鐘 Docker 容器技術36

docker 教程 容器 前面我們已經解決了容器間通信的問題,接下來討論容器如何與外部世界通信。這裏涉及兩個方向:容器訪問外部世界外部世界訪問容器容器訪問外部世界在我們當前的實驗環境下,docker host 是可以訪問外網的。我們看一下容器是否也能訪問外網呢?可見,容器默認就能訪問外網。請註意: