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 將在下篇文章中介紹;