Docker+etcd+flanneld+kubernets 構建容器編排系統(1)


  Docker: Docker Engine, 一個client-server 結構的應用, 包含Docker daemon,一個 用來和daemon 交互的REST API, 一個命令行應用CLI。 Docker Engine 在命令行中接收並解析、執行docker  命令; 

  etcd:    是 CoreOS 團隊發起的一個管理配置信息和服務發現(service discovery)的項目; 

     可以參考: http://www.dockerinfo.net/etcd%E9%A1%B9%E7%9B%AE%E4%BB%8B%E7%BB%8D

  flannel: Flannel是CoreOS團隊針對Kubernetes設計的一個網絡規划服務,簡單來說,它的功能是讓集群中的不同節點主機創建的Docker容器都具有全集群唯一的虛擬IP地址。

     可以參考: http://dockone.io/article/618

  kubernets: Kubernetes是一個基於Docker容器的開源編制系統,它能在跨多個主機上管理Docker應用,並提供應用程序部署 維護和擴展的基本機制; 

       可以參考: https://www.kubernetes.org.cn/k8s

當它們結合在透明地為用戶提供原生態系統,如“需要5個 Nginx服務器和1個 MySQL服務器運行". Kubernetes具有自我修復機制,如重新啟動 重新啟動定時計划 復制容器以確保恢復狀態,用戶只需要定義狀態,那么 Kubernetes就會確保狀態總是在集群中。

  Docker定義了運行代碼時的容器,有命令用來啟動 停止 重啟 鏈接容器,Kubernetes使用Docker打包以及實例化應用程序。

  一個典型的應用程序必須跨多個主機。 例如,您的web層(Apache )可能運行在一個容器。 同樣地,應用程序層將會運行在另外一組不同的容器中。 web層需要將請求委托給應用程序層。 當然,在某些情況下,你可能將web服務器和應用服務器打包在一起放在相同的容器。 但是數據庫層通常運行在一個單獨層中。 這些容器之間需要相互交互。 使用上面的任何解決方案都需要編制腳本啟動容器,以及監控容器,因防止出現問題。 而Kubernetes在應用程序狀態被定義后將為用戶實現所有這些工作。

  給大家推薦一個大神博客: http://www.cnblogs.com/kevingrace/p/5575666.html 以下內容kubernets 參考自這篇文章;

ectd 部署:

可以部署單節點,同時也支持集群,下面我們采用集群方式,(單機部署自己可以玩一下);

1. 下載安裝包(服務器采用的是亞馬遜服務器,需要翻牆)

  官方下載地址: https://github.com/coreos/etcd/releases/

  wget  https://github.com/coreos/etcd/releases/download/v3.2.18/etcd-v3.2.18-linux-amd64.tar.gz

2. 解壓文件,並將可執行文件添加到系統路徑中

  tar xvf etcd-v3.2.18-linux-amd64.tar.gz -C /usr/local

  cd /usr/local/etcd-v3.2.18-linux-amd64

  cp etcd* /usr/local/bin

3. 將etcd 服務注冊為系統單元,使用systemctl 管理

vim /usr/lib/systemd/system/etcd.service

 [Unit]
 Description=etcd
 [Service]
 Environment=ETCD_NAME=infra0
 Environment=ETCD_DATA_DIR=/var/lib/etcd
 Environment=ETCD_INITIAL_ADVERTISE_PEER_URLS=http://192.168.209.160:2380
 Environment=ETCD_LISTEN_PEER_URLS=http://192.168.209.160:2380
 Environment=ETCD_LISTEN_CLIENT_URLS=http://192.168.209.160:2379,http://127.0.0.1:2379
 Environment=ETCD_ADVERTISE_CLIENT_URLS=http://192.168.209.160:2379
 Environment=ETCD_INITIAL_CLUSTER_STATE new
 Environment=ETCD_INITIAL_CLUSTER_TOKEN=Kubernetes
 Environment=ETCD_INITIAL_CLUSTER=infra0=http://192.168.209.160:2380,infra1=http://192.168.209.140:2380,infra2=http://192.168.209.158:2380
 ExecStart=/usr/local/bin/etcd
 [Install]
 WantedBy=multi-user.target

解釋:

ETCD_NAME: etcd 服務的名字,不等同於主機名

ETCD_INITIAL_ADVERTISE_PEER_URLS: 通知其它Etcd 實例的地址;

ETCD_LISTEN_PEER_URLS: 監聽其它Etcd 實例的地址;

ETCD_LISTEN_CLIENT_URLS: 監聽客戶端地址,此地方必須監聽127.0.0.1地址 # 

ETCD_ADVERTISE_CLIENT_URLS: 通知客戶端地址;

ETCD_INITIAL_CLUSTER_STATE: 初始化群集的狀態new 代表新建 

ETCD_INITIAL_CLUSTER_TOKEN: 初始化集群的token 

#以上幾項地址填寫本節點的實際地址

ETCD_INITIAL_CLUSTER: 初始化集群節點的地址

4.將配置發送到其它節點上

  scp /usr/lib/systemd/system/etcd.service 192.168.209.160:/usr/lib/systemd/system/

  scp /usr/lib/systemd/system/etcd.service 192.168.209.158:/usr/lib/systemd/system/  

5. 啟動各個節點的etcd 服務 

  systemctl daemon-reload; systemctl start etcd 

6. 查看etcd 節點的信息(正常情況下每個節點都可以查看)

  etcdctl member list 

7. 測試驗證集群是否正常(任意節點均可操作查看)

8. 設置Flannel 子網信息

etcdctl mk /coreos.com/network/config '{"Network":"172.17.0.0/16","SubnetMin":"172.17.1.0","SubnetMax":"172.17.254.0"}'

至此Etcd 集群搭建完畢

Flannel 部署

1. 下載安裝包(同樣需要翻牆)

  wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz

2. 解壓文件,並將可執行文件添加到系統路徑中 

  tar xvf flannel-0.5.5-linux-amd64.tar.gz -C /usr/local/
  cd /usr/local/
  cp flanneld mk-docker-opts.sh /usr/local/bin/

3. 將flannel  服務注冊為系統單元,使用systemctl 管理

vim /usr/lib/systemd/system/flanneld.service
[Unit]
Description=flannel
[Service]
ExecStart=/usr/local/bin/flanneld -etcd-endpoints=http://192.168.209.160:2379                       # 這個地址為etcd 的領導地址(etcdctl member list 可以查看到)
[Install]
WantedBy=multi-user.target

4. 需要部署docker 節點都需要安裝 

  將同樣配置即可

5. 啟動flannled 

  systemctl daemon-reload ; systemctl start flanneld 

6. 啟動后系統將會增加一塊名字為flannel0 的網卡

  

4. 查看etcd 可以看到flanneld 申請的記錄(記錄為對應節點的IP) 

[root@localhost lib]# etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/172.17.99.0-24
/coreos.com/network/subnets/172.17.80.0-24
/coreos.com/network/subnets/172.17.16.0-24

5. 生成修改Docker 的啟動參數(每個flanneld 申請不一樣)

  要想使 docker 使用flannel 的網絡傳遞數據,要修改一些啟動參數

  mk-docker-opts.sh -i         # 生成的文件在/run/docker_opts.env 

[root@localhost local]# cat /run/docker_opts.env
DOCKER_OPT_BIP="--bip=172.17.16.1/24"
DOCKER_OPT_IPMASQ="--ip-masq=true"
DOCKER_OPT_MTU="--mtu=1472"

6. 安裝docker 

  yum -y install docker 即可

7. 更改docker 啟動參數,如果不更改docker 將會使用自己分配的地址段

  vim /etc/sysconfig/docker 

  OPTIONS='--bip=172.17.99.1/24 --ip-masq=true --mtu=1472 --selinux-enabled --log-driver=journald --signature-verification=false'

8. 啟動docker, docker 網卡將會和flannel0 同屬於一個網段

  

 

9. 驗證:

   使用兩個docker 節點,創建兩個容器,兩個容器間能夠直接通訊 

注: 

  本人也在學習docker 中,從最初的etcd 到flannel 也是不斷找資料,踩了不少坑,在不斷踩坑中,學習了不少東西,個人感覺最主要的是個人學習能力與實際動手操作能力,希望個人經驗能夠幫助到你

kubernets 將在下篇文章中介紹;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM