久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      Flannel入門介紹

      Flannel是CoreOS團(tuán)隊(duì)針對(duì)Kubernetes設(shè)計(jì)的一個(gè)網(wǎng)絡(luò)規(guī)劃服務(wù),簡(jiǎn)單來(lái)說(shuō),它的功能是讓集群中的不同節(jié)點(diǎn)主機(jī)創(chuàng)建的Docker容器都具有全集群唯一的虛擬IP地址。 

      在Kubernetes的網(wǎng)絡(luò)模型中,假設(shè)了每個(gè)物理節(jié)點(diǎn)應(yīng)該具備一段“屬于同一個(gè)內(nèi)網(wǎng)IP段內(nèi)”的“專用的子網(wǎng)IP”。例如: 

      節(jié)點(diǎn)A:10.0.1.0/24  節(jié)點(diǎn)B:10.0.2.0/24  節(jié)點(diǎn)C:10.0.3.0/24  

      但在默認(rèn)的Docker配置中,每個(gè)節(jié)點(diǎn)上的Docker服務(wù)會(huì)分別負(fù)責(zé)所在節(jié)點(diǎn)容器的IP分配。這樣導(dǎo)致的一個(gè)問(wèn)題是,不同節(jié)點(diǎn)上容器可能獲得相同的內(nèi)外IP地址。并使這些容器之間能夠之間通過(guò)IP地址相互找到,也就是相互ping通。 
      Flannel的設(shè)計(jì)目的就是為集群中的所有節(jié)點(diǎn)重新規(guī)劃IP地址的使用規(guī)則,從而使得不同節(jié)點(diǎn)上的容器能夠獲得“同屬一個(gè)內(nèi)網(wǎng)”且”不重復(fù)的”IP地址,并讓屬于不同節(jié)點(diǎn)上的容器能夠直接通過(guò)內(nèi)網(wǎng)IP通信。 

      2Flannel的工作原理

      Flannel實(shí)質(zhì)上是一種“覆蓋網(wǎng)絡(luò)(overlay network)”,也就是將TCP數(shù)據(jù)包裝在另一種網(wǎng)絡(luò)包里面進(jìn)行路由轉(zhuǎn)發(fā)和通信,目前已經(jīng)支持UDP、VxLAN、AWS VPC和GCE路由等數(shù)據(jù)轉(zhuǎn)發(fā)方式。 

      默認(rèn)的節(jié)點(diǎn)間數(shù)據(jù)通信方式是UDP轉(zhuǎn)發(fā),在Flannel的GitHub頁(yè)面有如下的一張?jiān)韴D: 

      Flannel入門介紹

      這張圖的信息量很全,下面簡(jiǎn)單的解讀一下。 
      數(shù)據(jù)從源容器中發(fā)出后,經(jīng)由所在主機(jī)的docker0虛擬網(wǎng)卡轉(zhuǎn)發(fā)到flannel0虛擬網(wǎng)卡,這是個(gè)P2P的虛擬網(wǎng)卡,flanneld服務(wù)監(jiān)聽(tīng)在網(wǎng)卡的另外一端。 
      Flannel通過(guò)Etcd服務(wù)維護(hù)了一張節(jié)點(diǎn)間的路由表,在稍后的配置部分我們會(huì)介紹其中的內(nèi)容。 
      源主機(jī)的flanneld服務(wù)將原本的數(shù)據(jù)內(nèi)容UDP封裝后根據(jù)自己的路由表投遞給目的節(jié)點(diǎn)的flanneld服務(wù),數(shù)據(jù)到達(dá)以后被解包,然后直 接進(jìn)入目的節(jié)點(diǎn)的flannel0虛擬網(wǎng)卡,然后被轉(zhuǎn)發(fā)到目的主機(jī)的docker0虛擬網(wǎng)卡,最后就像本機(jī)容器通信一下的有docker0路由到達(dá)目標(biāo)容器。 
      這樣整個(gè)數(shù)據(jù)包的傳遞就完成了,這里需要解釋三個(gè)問(wèn)題。 

      第一個(gè)問(wèn)題,UDP封裝是怎么一回事? 

      我們來(lái)看下面這個(gè)圖,這是在其中一個(gè)通信節(jié)點(diǎn)上抓取到的ping命令通信數(shù)據(jù)包。可以看到在UDP的數(shù)據(jù)內(nèi)容部分其實(shí)是另一個(gè)ICMP(也就是ping命令)的數(shù)據(jù)包。 

      Flannel入門介紹

      原始數(shù)據(jù)是在起始節(jié)點(diǎn)的Flannel服務(wù)上進(jìn)行UDP封裝的,投遞到目的節(jié)點(diǎn)后就被另一端的Flannel服務(wù)還原成了原始的數(shù)據(jù)包,兩邊的Docker服務(wù)都感覺(jué)不到這個(gè)過(guò)程的存在。 

      第二個(gè)問(wèn)題,為什么每個(gè)節(jié)點(diǎn)上的Docker會(huì)使用不同的IP地址段? 

      這個(gè)事情看起來(lái)很詭異,但真相十分簡(jiǎn)單。其實(shí)只是單純的因?yàn)镕lannel通過(guò)Etcd分配了每個(gè)節(jié)點(diǎn)可用的IP地址段后,偷偷的修改了Docker的啟動(dòng)參數(shù),見(jiàn)下圖。 

      Flannel入門介紹

      這個(gè)是在運(yùn)行了Flannel服務(wù)的節(jié)點(diǎn)上查看到的Docker服務(wù)進(jìn)程運(yùn)行參數(shù)。 

      注意其中的“–bip=172.17.18.1/24”這個(gè)參數(shù),它限制了所在節(jié)點(diǎn)容器獲得的IP范圍。 

      這個(gè)IP范圍是由Flannel自動(dòng)分配的,由Flannel通過(guò)保存在Etcd服務(wù)中的記錄確保它們不會(huì)重復(fù)。 

      第三個(gè)問(wèn)題,為什么在發(fā)送節(jié)點(diǎn)上的數(shù)據(jù)會(huì)從docker0路由到flannel0虛擬網(wǎng)卡,在目的節(jié)點(diǎn)會(huì)從flannel0路由到docker0虛擬網(wǎng)卡? 

      我們來(lái)看一眼安裝了Flannel的節(jié)點(diǎn)上的路由表。下面是數(shù)據(jù)發(fā)送節(jié)點(diǎn)的路由表: 

      Flannel入門介紹

      這個(gè)是數(shù)據(jù)接收節(jié)點(diǎn)的路由表: 

      Flannel入門介紹

      例如現(xiàn)在有一個(gè)數(shù)據(jù)包要從IP為172.17.18.2的容器發(fā)到IP為172.17.46.2的容器。根據(jù)數(shù)據(jù)發(fā)送節(jié)點(diǎn)的路由表,它只與 172.17.0.0/16匹配這條記錄匹配,因此數(shù)據(jù)從docker0出來(lái)以后就被投遞到了flannel0。同理在目標(biāo)節(jié)點(diǎn),由于投遞的地址是一個(gè)容 器,因此目的地址一定會(huì)落在docker0對(duì)于的172.17.46.0/24這個(gè)記錄上,自然的被投遞到了docker0網(wǎng)卡。 

      回到頂部

       

      3Flannel的安裝和配置

      Flannel是Golang編寫的程序,因此的安裝十分簡(jiǎn)單。 
      從 https://github.com/coreos/flannel/releases和 https://github.com/coreos/etcd/releases分別下載Flannel和Etcd的最新版本二進(jìn)制包。 
      解壓后將Flannel的二進(jìn)制文件“flanneld”和腳本文件“mk-docker-opts.sh”、以及Etcd的二進(jìn)制文件“etcd”和“etcdctl”放到系統(tǒng)的PATH目錄下面安裝就算完成了。 
      配置部分要復(fù)雜一些。 
      首先啟動(dòng)Etcd,參考 https://github.com/coreos/etcd … overy。 
      訪問(wèn)這個(gè)地址: https://discovery.etcd.io/new?size=3 獲得一個(gè)“Discovery地址” 
      在每個(gè)節(jié)點(diǎn)上運(yùn)行以下啟動(dòng)命令: 
      etcd -initial-advertise-peer-urls http://<當(dāng)前節(jié)點(diǎn)IP>:2380 -listen-peer-urls http://<當(dāng)前節(jié)點(diǎn)IP>:2380 -listen-client-urlshttp://<當(dāng)前節(jié)點(diǎn)IP>:2379,http://<當(dāng)前節(jié)點(diǎn)IP>:2379 -advertise-client-urls http://<當(dāng)前節(jié)點(diǎn)IP>:2379 -discovery <剛剛獲得的Discovery地址> & 
      啟動(dòng)完Etcd以后,就可以配置Flannel了。 

      Flannel的配置信息全部在Etcd里面記錄,往Etcd里面寫入下面這個(gè)最簡(jiǎn)單的配置,只指定Flannel能用來(lái)分配給每個(gè)Docker節(jié)點(diǎn)的擬IP地址段: 

      etcdctl set /coreos.com/network/config '{ "Network": "172.17.0.0/16" }'

      然后在每個(gè)節(jié)點(diǎn)分別啟動(dòng)Flannel: 

      flanneld &

      最后需要給Docker動(dòng)一點(diǎn)手腳,修改它的啟動(dòng)參數(shù)和docker0地址。 

      在每個(gè)節(jié)點(diǎn)上執(zhí)行: 

      sudo mk-docker-opts.sh -i  source /run/flannel/subnet.env  sudo rm /var/run/docker.pid  sudo ifconfig docker0 ${FLANNEL_SUBNET}   

      重啟動(dòng)一次Docker,這樣配置就完成了。 

      現(xiàn)在在兩個(gè)節(jié)點(diǎn)分別啟動(dòng)一個(gè)Docker容器,它們之間已經(jīng)通過(guò)IP地址直接相互ping通了。 

      到此,整個(gè)Flannel集群也就正常運(yùn)行了。 

      最后,前面反復(fù)提到過(guò)Flannel有一個(gè)保存在Etcd的路由表,可以在Etcd數(shù)據(jù)中找到這些路由記錄,如下圖。 

      Flannel入門介紹

      Q&A

      問(wèn):數(shù)據(jù)從源容器中發(fā)出后,經(jīng)由所在主機(jī)的docker0虛擬網(wǎng)卡轉(zhuǎn)發(fā)到flannel0虛擬網(wǎng)卡,這種P2P實(shí)際生產(chǎn)中是否存在丟包,或者此機(jī)制有高可用保障么? 
      答:只是本機(jī)的P2P網(wǎng)卡,沒(méi)有經(jīng)過(guò)外部網(wǎng)絡(luò),應(yīng)該還比較穩(wěn)定。但我這里沒(méi)有具體數(shù)據(jù)。 

      問(wèn):UDP數(shù)據(jù)封裝,轉(zhuǎn)發(fā)的形式也是UDP么?我們一般知道UDP發(fā)送數(shù)據(jù)是無(wú)狀態(tài)的,可靠么? 
      答:轉(zhuǎn)發(fā)的是UDP,高并發(fā)數(shù)據(jù)流時(shí)候也許會(huì)有問(wèn)題,我這里同樣沒(méi)有數(shù)據(jù)。 

      問(wèn):實(shí)際上,kubernates是淡化了容器ip,外圍用戶只需關(guān)注所調(diào)用的服務(wù),并不關(guān)心具體的ip,這里fannel將IP分開(kāi)且唯一,這樣做有什么好處?有實(shí)際應(yīng)用的業(yè)務(wù)場(chǎng)景么? 
      答: IP唯一是Kubernetes能夠組網(wǎng)的條件之一,不把網(wǎng)絡(luò)拉通后面的事情都不好整。 

      問(wèn):Flannel通過(guò)Etcd分配了每個(gè)節(jié)點(diǎn)可用的IP地址段后,偷偷的修改了Docker的啟動(dòng)參數(shù):那么如果增加節(jié)點(diǎn),或刪除節(jié)點(diǎn),這些地址段(ETCD上)會(huì)動(dòng)態(tài)變化么?如果不是動(dòng)態(tài)變化,會(huì)造成IP地址的浪費(fèi)么? 
      答會(huì)造成一些浪費(fèi),一般使用10.x.x.x的IP段。 

      問(wèn):sudo mk-docker-opts.sh -i 這個(gè)命令具體干什么了?非coreos上使用flannel有什么不同? 
      答:生成了一個(gè)Docker啟動(dòng)的環(huán)境變量文件,里面給Docker增加了啟動(dòng)參數(shù)。 
      沒(méi)有什么不同,只是CoreOS集成了Flannel,在CoreOS上面啟動(dòng)Flannel只是一行命令:systemctl start flanneld。 

      問(wèn):容器IP都是固定的嗎?外網(wǎng)與物理主機(jī)能ping通,也能ping通所有Docker集群的容器IP? 
      答:不是固定的,IP分配還是Docker在做,F(xiàn)lannel只是分配了子網(wǎng)。 

      問(wèn):Flannel的能否實(shí)現(xiàn)VPN?你們有沒(méi)有研究過(guò)? 
      答: 應(yīng)該不能,它要求這些容器本來(lái)就在一個(gè)內(nèi)網(wǎng)里面。 

      問(wèn):Flannl是誰(shuí)開(kāi)發(fā)的?全是對(duì)k8s的二次開(kāi)發(fā)嗎? 
      答: CoreOS公司,不是k8s的二次開(kāi)發(fā),獨(dú)立的開(kāi)源項(xiàng)目,給k8s提供基礎(chǔ)網(wǎng)絡(luò)環(huán)境。 

      問(wèn):Flannel支持非封包的純轉(zhuǎn)發(fā)嗎?這樣性能就不會(huì)有損失了? 
      答:非封裝怎樣路由呢?發(fā)出來(lái)的TCP包本身并沒(méi)有在網(wǎng)絡(luò)間路由的信息,別忘了,兩個(gè)Flannel不是直連的,隔著普通的局域網(wǎng)絡(luò)。 

      問(wèn): Flanel現(xiàn)在到哪個(gè)版本了,后續(xù)版本有什么側(cè)重點(diǎn)?性能優(yōu)化,還是功能擴(kuò)展? 
      答:還沒(méi)到1.0,在GitHub上面有他們的發(fā)展計(jì)劃,性能是很大的一部分。 

      問(wèn): 就是在CoreOS中,客戶還需要安裝Flannel嗎? 
      答:不需要,在啟動(dòng)的Cloudinit配置里面給Etcd寫入Flannel配置,然后加上flanneld.service command: start 就可以了,啟動(dòng)完直接可用,文檔連接我不找了,有這段配置,現(xiàn)成的。 

      問(wèn): 可不可以直接用命令指定每個(gè)主機(jī)的ip范圍,然后做gre隧道實(shí)現(xiàn)節(jié)點(diǎn)之間的通信?這樣也可以實(shí)現(xiàn)不同主機(jī)上的容器ip不同且可以相互通信吧? 
      答:還不支持指定哪個(gè)節(jié)點(diǎn)用那段IP,不過(guò)貌似可以在Etcd手改。 

      問(wèn): Flannel只是負(fù)責(zé)通信服務(wù),那是不是還要安裝k8s? 
      答:是的,k8s是單獨(dú)的。 

      問(wèn):現(xiàn)在Docker的網(wǎng)絡(luò)組件還有什么可以選擇或者推薦的? 
      答:Overlay網(wǎng)絡(luò)的常用就是Flannel和Weave,其他OVS之類的另說(shuō)了。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)