Flannel with Docker

Flannel with Docker

Flannel 是用於組建容器間網絡的工具,用於解決跨主機的docker containers之間的連通性問題。最近在嘗試手動部署kubernetes集羣,這是這個系列的第一篇。linux

準備工做

首先安裝vagrant, 用來建立虛擬節點。咱們須要兩臺虛擬機. git

Vagrantfile 以下:github

Vagrant.configure(2) do |config|
  config.vm.box = "centos/7"
  config.vm.network "private_network", type: "dhcp"
  vb.memory = "1024"
end

建立一個 centos 目錄,把 Vagrantfile 放置其中,運行:golang

vagrant up
vagrant ssh

進入後,能夠先更新一下 yum源,yum makecache, yum update 一下。ip addr 看下本機的ip。docker

另外一臺虛擬機的過程相似。centos

兩臺ip分別爲: 172.28.128.3, 172.28.128.4api

關於Flannel原理:
圖片描述bash

安裝 Docker

docker官網有詳細的步驟,大體以下:網絡

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

$ sudo yum install docker-engine

$ sudo systemctl enable docker.service

$ sudo systemctl start docker

確認安裝完成: sudo docker version, 而後關閉 dockerd, sudo systemctl stop docker.servicessh

安裝 golang 編譯環境

編譯 flannel 會須要,若是你的vagrant 使用了host的共享目錄,那麼這個步驟只須要在其中一臺虛擬機執行就行,第二臺虛擬機直接拷貝文件就能夠了。 若是你的host機有golang的編譯環境,直接在host編譯便可,記得使用 GOOS=linux GOARCH=amd64 做爲編譯時候的環境變量。

若是你選擇在虛擬機中編譯,那麼內存最好設置爲 2G.

wget -c https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gz
tar xf go1.7.3.linux-amd64.tar.gz

把解壓出來的 go 目錄放到合適的位置,並把 go/bin 加入 PATH 環境變量, 並設置 GOPATH 環境變量。

安裝 Flannel

$ sudo yum install linux-libc-dev gcc
$ git clone https://github.com/coreos/flannel
$ cd flannel
$ make dist/flanneld

編譯完成後的文件在 dist 目錄中, 能夠拷貝到 /usr/local/bin/ 下

安裝 etcd

$ curl -L  https://github.com/coreos/etcd/releases/download/v3.0.15/etcd-v3.0.15-linux-amd64.tar.gz

$ tar xf etcd-v3.0.15-linux-amd64.tar.gz

把 etcd, etcdctl 拷貝到 /usr/local/bin 下

運行

IP: 172.28.128.3

首先運行etcd: $ etcd --listen-client-urls 'http://0.0.0.0:2379,http://0.0.0.0:4001' --advertise-client-urls 'http://172.28.128.3:2379,http://172.28.128.3:4001' >/dev/null 2>&1

設置flannel子網範圍:

etcdctl rm /coreos.com/network/ --recursive
etcdctl mk /coreos.com/network/config '{"Network":"11.0.0.0/16"}'

IP: 172.28.128.3, 172.28.128.4 兩臺機器

ifconfig 查看一下,ip爲172.28.128.3 的 interface 的名稱,個人狀況爲 eth1. 運行 flannel. subnet.env 是根據 etcd中的配置自動生成的環境變量,須要導出一下.

sudo flanneld -etcd-endpoints='http://172.28.128.3:2379,http://172.28.128.3:4001' -iface=eth1 &
source /run/flannel/subnet.env

修改docker0 網絡的ip, 並開啓 dockerd

sudo ifconfig docker0 ${FLANNEL_SUBNET}
sudo dockerd --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU} &

測試連通性

在兩臺機器上分別 sudo docker run -it bash

進入bash後,ip addr 查看各自ip,互相 ping 一下對方的ip,應該是能夠ping通的。

相關文章
相關標籤/搜索