一種訪問地址的獲取方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種訪問地址的獲取方法,包括:Kube2sky獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名和IP地址;Kube2sky將所述地址信息寫入第一ETCD中;當用戶利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一ETCD中讀取與所述主機名對應的所述IP地址。本發(fā)明還公開了一種訪問地址的獲取系統(tǒng)。
【專利說明】
一種訪問地址的獲取方法及系統(tǒng)
技術領域
[0001]本發(fā)明涉及互聯網技術領域,尤其涉及一種訪問地址的獲取方法及系統(tǒng)。
【背景技術】
[0002]Docker技術相比虛擬機技術而言,它能讓更多數量的應用程序在同一硬件上運行,開發(fā)人員可以快速構建可隨時運行的容器化應用程序,從而簡化了管理和部署應用程序的任務。Docker技術除了在開源領域廣泛應用,越來越多的商業(yè)公司也將業(yè)務迀移到了Docker容器中。而Kubernetes是開源的容器集群管理系統(tǒng),其提供應用部署、維護、擴展機制等功能,輕量易部署,啟動快速,構成了從容器運行調度、應用存儲支持、虛擬網絡構成,到用戶交互API(Applicat1n Programming Interface,應用程序編程接口)等一套完整的容器管理軟件桟,利用Kubernetes能方便地管理跨機器運行Docker容器化的應用。
[0003]DNS(Domain Name System,域名系統(tǒng))的主要作用是將IP地址映射為便于人們記憶的名稱,另外在域中還提供資源定位和命名空間的作用。Kubernetes本身以插件的形式提供了集群內的DNS解決方案,該方案雖然提供Pod(Pod是Kubernetes中創(chuàng)建、調度和管理的最小部署單位)級的解析,但只能以IP地址組成的名字來解析對應Pod的IP地址,例如:在Kubernetes集群的default命名空間下,DNS后綴設置為cIuster.local,一個名為test的Pod包含一個主機名為hostname的Docker容器,該Pod的IP地址為1.2.3.4,目前的DNS方案可以通過1-2-3-4.default.pod.cluster.local來訪問Pod,但不能直接通過hostname來訪問Docker容器。
[0004]但是,當在Kubernetes中部署Zookeeper、HDFS(HadoopDistributed FileSystem,分布式文件系統(tǒng))等服務時,服務中的各個節(jié)點間需要通過主機名實現相互訪問,而現有的Kubernetes DNS解決方案只能提供Pod級的訪問解析,因此通過現有KubernetesDNS方案并不能在Kubernetes中部署這些服務。
【發(fā)明內容】
[0005]有鑒于此,本發(fā)明實施例的主要目的在于提供一種訪問地址的獲取方法及系統(tǒng),以實現訪問Kubernetes集群中的Docker容器的目的。
[0006]為實現上述目的,本發(fā)明實施例提供了一種訪問地址的獲取方法,包括:
[0007]Kube2sky獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名和IP地址;
[0008]Kube2sky將所述地址信息寫入第一ETCD中;
[0009]當所述Kubernetes集群內利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一 ET⑶中讀取與所述主機名對應的所述IP地址。
[0010]可選的,所述Kube2sky獲取Docker容器的地址信息,包括:
[0011]服務器將Pod的創(chuàng)建信息發(fā)送給客戶端,所述Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息,所述服務器和所述客戶端為所述Kubernetes集群中的設備;
[0012]所述客戶端根據所述Docker容器的創(chuàng)建信息創(chuàng)建并啟動所述Docker容器,并在所述Docker容器啟動成功后,將所述Docker容器的地址信息上報至所述服務器;
[0013]所述服務器將所述地址信息寫入第二ET⑶中;
[0014]Kube2Sky通過所述服務器從所述第二 ET⑶中獲取所述地址信息。
[0015]可選的,所述Kube2sky將所述地址信息寫入第一ET⑶中,包括:
[0016]若所述地址信息為新增Docker容器的地址信息,則在所述第一ET⑶中增加所述地址信息;
[0017]若所述地址信息為已有Docker容器的變化后的地址信息,則利用所述地址信息替換所述第一 ET⑶中的所述已有Docker容器的原有地址信息。
[0018]可選的,所述方法還包括:
[0019]若所述Pod在所述Kubernetes集群中被刪除,則Kube2sky通過所述服務器從所述第二 ET⑶中獲取所述地址信息,并將所述地址信息從所述第一 ET⑶刪除。
[0020]可選的,所述Kube2sky將所述地址信息寫入第一ET⑶中,包括:
[0021]Kube2sky將所述主機名作為ET⑶鍵的一部分,把所述IP地址作為所述ET⑶鍵對應值的一部分,且將所述主機名和所述IP地址以SkyDNS可識別的格式寫入到所述第一 ET⑶中。
[0022]可選的,所述第一ET⑶和所述第二ET⑶為相同或不同的ET⑶。
[0023]本發(fā)明實施例還提供了一種訪問地址的獲取系統(tǒng),包括:
[0024]Kube2sky,用于獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名和IP地址;
[0025]Kube2sky,還用于將所述地址信息寫入第一ETCD中;
[0026]SkyDNS,用于當所述Kubernetes集群內利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一 ET⑶中讀取與所述主機名對應的所述IP地址。
[0027]可選的,所述系統(tǒng)還包括客戶端和服務器,所述服務器和所述客戶端為所述Kubernetes集群中的設備;
[0028]所述服務器,用于將Pod的創(chuàng)建信息發(fā)送給所述客戶端,所述Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息;
[0029]所述客戶端,用于根據所述Docker容器的創(chuàng)建信息創(chuàng)建并啟動所述Docker容器,并在所述Docker容器啟動成功后,將所述Docker容器的地址信息上報至所述服務器;
[0030]所述服務器,還用于將所述地址信息寫入第二ET⑶中;
[0031]所述Kube2Sky,具體用于通過所述服務器從所述第二ET⑶中獲取所述地址信息。
[0032]可選的,所述Kube2sky包括:
[0033]信息增加單元,用于若所述地址信息為新增Docker容器的地址信息,則在所述第一ET⑶中增加所述地址信息;
[0034]信息替換單元,用于若所述地址信息為已有Docker容器的變化后的地址信息,則利用所述地址信息替換所述第一 ET⑶中的所述已有Docker容器的原有地址信息。
[°035] 可選的,所述Kube2sky,還用于若所述Pod在所述Kubernetes集群中被刪除,貝Ij通過所述服務器從所述第二ET⑶中獲取所述地址信息,并將所述地址信息從所述第一ET⑶刪除。
[0036]可選的,所述Kube2Sky,具體用于將所述主機名作為ET⑶鍵的一部分,把所述IP地址作為所述ET⑶鍵對應值的一部分,且將所述主機名和所述IP地址以SkyDNS可識別的格式寫入到所述第一 ET⑶中。
[0037]可選的,所述第一ET⑶和所述第二ET⑶為相同或不同的ET⑶。
[0038]本發(fā)明實施例提供的訪問地址的獲取方法及系統(tǒng),Kube2sky獲取Docker容器的地址信息,所述地址信息包括所述Docker容器的主機名和IP地址;Kube2sky將所述地址信息寫入第一ET⑶中;當用戶利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一ET⑶中讀取與所述主機名對應的所述IP地址??梢姡琄ube2sky通過獲取Docker容器的主機名與IP地址的對應關系,并將主機名與IP地址的對應關系寫入第一ET⑶中,使得SkyDNS可以通過讀取第一ET⑶中的關系記錄來解析容器主機名,因此Kubernetes集群內部可使用容器主機名直接訪問具體的容器,為在Kubernetes集群中部署Zookeeper、HDFS等服務提供了解決方案。
【附圖說明】
[0039]為了更清楚地說明本發(fā)明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0040]圖1為本發(fā)明實施例提供的訪問地址的獲取方法的流程示意圖;
[0041 ]圖2為本發(fā)明實施例提供的信息交互示意圖;
[0042]圖3為本發(fā)明實施例提供的主機名和IP地址的獲取方法的流程示意圖;
[0043]圖4為本發(fā)明實施例提供的訪問地址的獲取系統(tǒng)的組成示意圖。
【具體實施方式】
[0044]為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0045]在介紹本發(fā)明實施例前,首先介紹本發(fā)明中涉及的一些相關術語:
[0046]Docker: —個開源的引擎,可以為任何Linux下的應用創(chuàng)建一個輕量級的、可移植的、自給自足的容器。
[0047 ] Docker容器:在Docker中為進程組創(chuàng)建的隔離環(huán)境。
[0048]Kubernetes: 一個開源的容器集群管理系統(tǒng),構建于Docker之上,提供資源調度、部署運行、服務發(fā)現、擴容縮容等功能,用于管理跨機器運行容器化的應用。
[0049]PocUKubernetes中創(chuàng)建、調度和管理的最小部署單位。
[0050]Kubernetes Service:是一種抽象概念,它定義了一個Pod邏輯集合以及訪問它們的策略。
[0051 ] DNS:全稱為Domain Name System,中文名為“域名系統(tǒng)”,是因特網使用的命名系統(tǒng),用于將人們使用的機器名字轉換為IP地址。
[0052]ETCD:—個開源的、高可用的鍵值存儲系統(tǒng),主要用于共享配置和服務發(fā)現。
[0053]Kube2sky:用于連接Kubernetes和SkyDNS的中間件,監(jiān)控Kubernetes Service變化并通過ET⑶將這些變化反饋給SkyDNS。
[0054]SkyDNS:—種用于服務發(fā)現的分布式系統(tǒng),使用RAFT機制實現高可用性和一致性,使用DNS查詢來發(fā)現可用的服務。
[0055]ZooKeeper:是一個分布式的,開放源碼的分布式應用程序協(xié)調服務,是Google的Chubby—個開源的實現,是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分布式同步、組服務等。
[0056]參見圖1,為本發(fā)明實施例提供的訪問地址的獲取方法的流程示意圖,該方法包括步驟101至步驟103,下面結合圖2所示的信息交互示意圖來說明圖1中各個步驟,圖2中的交互主體包括Kubernetes客戶端、Kubernetes服務端、ETCD1(即第一ETCD)、ETCD2(即第二ETCD)、Kube2sky和SkyDNS。
[0057]步驟101:Kube2sky獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名(hostname)和IP 地址(IP)。
[0058]參見圖3所示的主機名和IP地址的獲取方法的流程示意圖,在本發(fā)明實施例中,步驟101具體可以包括以下步驟301至步驟304。
[0059]步驟301:服務器將Pod的創(chuàng)建信息發(fā)送給客戶端,所述Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息,所述服務器和所述客戶端為所述Kubernetes集群中的設備。
[0000]步驟301對應圖2中的服務端與客戶端的交互步驟I,具體的,在Kubernetes集群中,包括至少一個Kubernetes客戶端和至少一個Kubernetes服務器(即服務端),當Kubernetes集群需要創(chuàng)建Pod時,首先在Kubernetes服務端側建立Pod,當Pod被成功創(chuàng)建后,Pod中相應的容器信息也被成功創(chuàng)建,Kubernetes服務端將Pod的創(chuàng)建信息發(fā)送給Kubernetes客戶端,由于Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息,這樣Kubernetes客戶端便可以根據Docker容器的創(chuàng)建信息來創(chuàng)建對應的Docker容器了。此外,Kubernetes服務端還將Pod的創(chuàng)建信息保存進ET⑶2中與Pod相關的字段里。
[0061]其中,所述Docker容器可以是新建Pod中的容器、也可以是已有Pod中的容器。當Kubernetes服務端新建一個Pod時,需要Kubernetes客戶端新建Pod中的Docker容器,Kubernetes客戶端便可獲取新建Docker容器的主機名和Kubernetes集群分配的IP地址;當出現已有Pod被重啟等操作時,也需要Kubernetes客戶端重建已有Pod中的Docker容器,Kubernetes客戶端便可獲取已有Docker容器的主機名和Kubernetes集群重新分配的IP地址。
[0062]步驟302:所述客戶端根據所述Docker容器的創(chuàng)建信息創(chuàng)建并啟動所述Docker容器,并在所述Docker容器啟動成功后,將所述Docker容器的地址信息上報至所述服務器。
[0063]步驟302對應圖2中的服務端與客戶端的交互步驟2,具體的,當Kubernetes客戶端接收到Kubernetes服務端發(fā)送的Pod的創(chuàng)建信息后,會根據Pod創(chuàng)建信息中攜帶的Docker容器的創(chuàng)建信息創(chuàng)建并啟動相應的Docker容器,由于Docker容器的創(chuàng)建信息中包含有Kubernetes集群分配給Docker容器的主機名和IP地址等相關信息,所以當Docker容器啟動成功后,Kubernetes客戶端可以根據所述相關信息收集到Docker容器的主機名(hostname)和集群內分配給Docker容器的IP地址(InternalIP),并將這些信息上報給Kubernetes服務端。
[0064]步驟303:所述服務器將所述地址信息寫入第二ET⑶中。
[0065]步驟303對應圖2中的服務端與ET⑶2的交互步驟3,具體的,當Kubernetes服務端接收到Kubernetes客戶端發(fā)送的地址信息(包括Docker容器的主機名和IP地址)后,由于ETCD2中的與Pod相關的字段里保存有Pod的創(chuàng)建信息,所以,Kubernetes服務端將接收到的Docker容器的地址信息寫進ET⑶2中與Pod相關的字段里。其中,寫入ET⑶2中的地址信息是新增Docker容器的地址信息或已有Docker容器的變化后的地址信息。
[0066]步驟304:KUbe2Sky通過所述服務器從所述第二 ETCD中獲取所述地址信息。
[0067]在本發(fā)明實施例中,當Kubernetes集群內的Pod被成功創(chuàng)建時,Pod中相應的Docker容器也被創(chuàng)建,此時Kube2sky將監(jiān)控到有新Docker容器的主機名與IP地址的對應關系被加入到Kubernetes集群中;當Kubernetes集群內的Pod被成功刪除時,該Pod內的Dockers容器會被停止并被回收,此時Kube2sky也將監(jiān)控到有Docker容器主機名與IP地址的對應關系從Kubernetes集群中被移除了 ;當Docker容器主機名與IP地址的對應關系發(fā)生變化時,例如Pod被重啟了,Docker容器的IP地址會發(fā)生變化,Kube2sky也將監(jiān)控到這些變化。
[0068]下面介紹Kube2sky如何監(jiān)控上述內容。
[0069]步驟304對應圖2中的服務端與Kube2sky的交互步驟4和6、服務端與ET⑶2的交互步驟5,具體的,首先Kube2sky會定期詢問Kubernetes服務端,即詢問是否有新增或刪除或變化的Docker容器的地址信息(交互步驟4),然后Kubernetes服務端從ETCD2中查詢Kubernetes集群中各個Docker容器的地址信息(交互步驟5),當Kubernetes服務端查詢到有新增或刪除或變化的Docker容器的地址信息時,會將該地址信息發(fā)送給Kube2sky (交互步驟6)。
[0070]步驟102:Kube2sky將所述地址信息寫入第一ETCD中。
[0071 ] 步驟102對應圖2中的ET⑶I (即所述第一ET⑶)與Kube2sky的交互步驟7,具體地,對于Kubernetes集群中的某個新建Pod,關于新建Pod中的每個Docker容器,需要在ETOH中生成容器IP地址和容器主機名的對應關系記錄,以便SkyDNS可以通過這條記錄實現對這個新建Pod中Docker容器的DNS解析;對于Kubernetes集群中的某個已有PocU當已有Pod中的Docker容器的IP地址發(fā)生變化時,Kube2sky可監(jiān)測到該變化并根據該變化更新ET⑶I記錄中的IP地址;當Kubernetes集群中刪除了某個Pod后,Kube2sky可監(jiān)測到刪除了哪個Pod,并將ET⑶I中與這個Pod相關的記錄刪除。
[0072]所以,當Kube2sky通過Kubernetes服務端發(fā)現ETO)2中與Pod相關的字段值發(fā)生了上述更新,即所述更新內容為:新增了 Docker容器的主機名和IP地址、或者已有Docker容器的主機名和IP地址發(fā)生了變化、或者刪除了已有Docker容器的主機名和IP地址,Kube2sky會通過Kubernetes服務端從ET⑶2中拿到所述更新內容(包括Docker容器的主機名和IP地址),如果更新內容是新增的某Docker容器的主機名和IP地址或已有Docker容器的變化后的主機名和IP地址,則將該主機名和IP地址以SkyDNS可識別的記錄形式寫進ET⑶I中與該Docker容器相關的字段里,如果所述更新內容是刪除了的某Docker容器的主機名和IP地址,則將該主機名和IP地址從ET⑶I中刪除。進一步地,ETCDl還會向SkyDNS發(fā)送更新通知(對應圖2中的ETCl與Kube2sky的交互步驟7)。
[0073]基于上述內容,步驟102可以包括:
[0074]若所述地址信息為新增Docker容器的地址信息,則在所述第一ET⑶中增加所述地址信息;
[0075]若所述地址信息為已有Docker容器的變化后的地址信息,則利用所述地址信息替換所述第一 ET⑶中的所述已有Docker容器的原有地址信息。
[0076]進一步地,如果Kubernetes集群中刪除了某Pod,則Pod中各個Docker容器的主機名和IP地址也會被相應的刪除,因此,所述方法還包括:若所述Pod在所述Kubernetes集群中被刪除,則Kube2Sky通過所述服務器從所述第二ETCD中獲取所述地址信息,并將所述地址信息從所述第一 ET⑶刪除。
[0077]進一步地,當Kube2sky監(jiān)控到容器主機名與容器IP地址的對應關系發(fā)生了變化、或新增了容器主機名與容器IP地址的對應關系后,Kube2sky將會把容器主機名作為ET⑶I鍵的一部分、把IP地址作為該鍵對應值的一部分以SkyDNS可識別的格式寫入到ET⑶I中。例如Kubernete s集群中有一個主機名為“kaf ka-l-wkf al”的Docker容器,它的IP地址為“172.20.0.12”,在ET⑶I中對應的記錄可以為如下形式:
[0078]鍵--“/skydns/sohu/domeos/kafka-l-wkfal/19d074al,,;
[0079]值--“{ “host”:,,172.20.0.12” , “pr1rity”: 10, “weight”: 10, “ttl”: 30},,。
[0080]基于上述內容,步驟102還可以包括:
[0081 ] Kube2sky將所述主機名作為ET⑶鍵的一部分、把所述IP地址作為所述ET⑶鍵對應值的一部分、且將所述主機名和所述IP地址以SkyDNS可識別的格式寫入到所述第一 ET⑶中。
[0082]步驟103:當所述Kubernetes集群內利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一 ET⑶中讀取與所述主機名對應的所述IP地址。
[0083]步驟103對應圖2中的SkyDNS與Kubernetes集群的交互步驟8,具體地,當Kubernetes集群內部通過主機名訪問Docker容器時,SkyDNS可根據ETCDI中與SkyDNS相關的字段對Docker容器的主機名進行解析,S卩SkyDNS可以通過讀取ET⑶I中的主機名和IP地址的對應關系記錄來解析出該主機名對應的IP地址。比如,在Kubernetes集群中部署Zookeeper等服務時,各個節(jié)點間通過主機名實現相互訪問,因此需要將主機名與其對應的IP地址的對應關系加入ETCDl中,以便SkyDNS為Kubernetes集群提供DNS服務。
[0084]綜上,在Kubernetes集群中新建Pod、刪除Pod以及已有Pod中的容器IP地址的改變都會觸發(fā)相應的事件,當Kube2sky監(jiān)測到這些事件時,Kube2sky通過訪問Kubernetes服務端的API接口,可以獲取集群中Pod的相關信息,包括該Pod內所有容器的主機名和IP地址等,然后將這些信息以SkyDNS可識別的格式寫入ET⑶I對應鍵值里。當Kubernetes集群需要對Pod中容器主機名進行解析時,SkyDNS就可以讀取ET⑶I中的相關記錄解析出該主機名對應的IP地址。
[0085]需要說明的是,所述第一ETCD和所述第二ETCD為相同或不同的ETCD。由于所述第一ETCD和所述第二ETCD中的數據是相互隔離的,所以,所述第一ETCD和所述第二ETCD可以是不同的ET⑶,所述第一 ET⑶和所述第二 ET⑶也可以是相同的ET⑶,所述第一 ET⑶和所述第二 ETCD中的數據位于不同的數據區(qū)域。
[0086]本發(fā)明實施例提供的訪問地址的獲取方法,Kube2sky獲取Docker容器的地址信息,所述地址信息包括所述Docker容器的主機名和IP地址;Kube2sky將所述地址信息寫入第一ET⑶中;當用戶利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一ET⑶中讀取與所述主機名對應的所述IP地址??梢姡琄ube2sky通過獲取Docker容器的主機名與IP地址的對應關系,并將主機名與IP地址的對應關系寫入第一ET⑶中,使得SkyDNS可以通過讀取第一ET⑶中的關系記錄來解析容器主機名,因此Kubernetes集群內部可使用容器主機名直接訪問具體的容器,為在Kubernetes集群中部署Zookeeper、HDFS等服務提供了解決方案。
[0087]參見圖4,為本發(fā)明實施例提供的訪問地址的獲取系統(tǒng)的組成示意圖,該系統(tǒng)包括:
[0088]Kube2sky401,用于獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名和IP地址;
[0089]Kube2sky401,還用于將所述地址信息寫入第一ETCD中;
[0090]SkyDNS402,用于當所述Kubernetes集群內利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一 ET⑶中讀取與所述主機名對應的所述IP地址。
[0091]在本發(fā)明實施例中,所述系統(tǒng)還包括客戶端和服務器,所述服務器和所述客戶端為所述Kubernetes集群中的設備;
[0092]所述服務器,用于將Pod的創(chuàng)建信息發(fā)送給所述客戶端,所述Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息;
[0093]所述客戶端,用于根據所述Docker容器的創(chuàng)建信息創(chuàng)建并啟動所述Docker容器,并在所述Docker容器啟動成功后,將所述Docker容器的地址信息上報至所述服務器;
[0094]所述服務器,還用于將所述地址信息寫入第二ET⑶中;
[0095]所述Kube2Sky,具體用于通過所述服務器從所述第二ET⑶中獲取所述地址信息。
[0096]在本發(fā)明實施例中,所述Kube2sky包括:
[0097]信息增加單元,用于若所述地址信息為新增Docker容器的地址信息,則在所述第一ET⑶中增加所述地址信息;
[0098]信息替換單元,用于若所述地址信息為已有Docker容器的變化后的地址信息,則利用所述地址信息替換所述第一 ET⑶中的所述已有Docker容器的原有地址信息。
[00"] 在本發(fā)明實施例中,所述Kube2sky,還用于若所述Pod在所述Kubernetes集群中被刪除,則通過所述服務器從所述第二ETCD中獲取所述地址信息,并將所述地址信息從所述第一 ET⑶刪除。
[0100]在本發(fā)明實施例中,所述Kube2sky,具體用于將所述主機名作為ET⑶鍵的一部分、把所述IP地址作為所述ET⑶鍵對應值的一部分、且將所述主機名和所述IP地址以SkyDNS可識別的格式寫入到所述第一ET⑶中。
[0101]在本發(fā)明實施例中,所述第一ET⑶和所述第二ET⑶為相同或不同的ET⑶。
[0102]通過以上的實施方式的描述可知,本領域的技術人員可以清楚地了解到上述實施例方法中的全部或部分步驟可借助軟件加必需的通用硬件平臺的方式來實現?;谶@樣的理解,本發(fā)明的技術方案本質上或者說對現有技術做出貢獻的部分可以以軟件產品的形式體現出來,該計算機軟件產品可以存儲在存儲介質中,如R0M/RAM、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者諸如媒體網關等網絡通信設備,等等)執(zhí)行本發(fā)明各個實施例或者實施例的某些部分所述的方法。
[0103]需要說明的是,對于實施例公開的系統(tǒng)而言,由于其與實施例公開的方法相對應,所以描述的比較簡單,相關之處參見方法部分說明即可。
[0104]還需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0105]對所公開的實施例的上述說明,使本領域專業(yè)技術人員能夠實現或使用本發(fā)明。對這些實施例的多種修改對本領域的專業(yè)技術人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實施例中實現。因此,本發(fā)明將不會被限制于本文所示的這些實施例,而是要符合與本文所公開的原理和新穎特點相一致的最寬的范圍。
【主權項】
1.一種訪問地址的獲取方法,其特征在于,包括: Kube2sky獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名和IP地址; Kube2sky將所述地址信息寫入第一 ETCD中; 當所述Kubernetes集群內利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一ET⑶中讀取與所述主機名對應的所述IP地址。2.根據權利要求1所述的方法,其特征在于,所述Kube2sky獲取Docker容器的地址信息,包括: 服務器將Pod的創(chuàng)建信息發(fā)送給客戶端,所述Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息,所述服務器和所述客戶端為所述Kubernetes集群中的設備; 所述客戶端根據所述Docker容器的創(chuàng)建信息創(chuàng)建并啟動所述Docker容器,并在所述Docker容器啟動成功后,將所述Docker容器的地址信息上報至所述服務器; 所述服務器將所述地址信息寫入第二ET⑶中; Kube2Sky通過所述服務器從所述第二 ET⑶中獲取所述地址信息。3.根據權利要求2所述的方法,其特征在于,所述Kube2sky將所述地址信息寫入第一ET⑶中,包括: 若所述地址信息為新增Docker容器的地址信息,則在所述第一ET⑶中增加所述地址信息; 若所述地址信息為已有Docker容器的變化后的地址信息,則利用所述地址信息替換所述第一 ET⑶中的所述已有Docker容器的原有地址信息。4.根據權利要求2所述的方法,其特征在于,所述方法還包括: 若所述Pod在所述Kubernetes集群中被刪除,則Kube2sky通過所述服務器從所述第二ET⑶中獲取所述地址信息,并將所述地址信息從所述第一 ET⑶刪除。5.根據權利要求1所述的方法,其特征在于,所述Kube2sky將所述地址信息寫入第一ET⑶中,包括: Kube2sky將所述主機名作為ET⑶鍵的一部分,把所述IP地址作為所述ET⑶鍵對應值的一部分,且將所述主機名和所述IP地址以SkyDNS可識別的格式寫入到所述第一 ET⑶中。6.根據權利要求2至5任一項所述的方法,其特征在于,所述第一ETCD和所述第二ETCD為相同或不同的ETCD。7.—種訪問地址的獲取系統(tǒng),其特征在于,包括: Kube2sky,用于獲取Docker容器的地址信息,所述Docker容器為在Kubernetes集群的一個Pod中創(chuàng)建的容器,所述地址信息包括所述Docker容器的主機名和IP地址; Kube2sky,還用于將所述地址信息寫入第一ETCD中; SkyDNS,用于當所述Kubernetes集群內利用所述主機名訪問所述Docker容器時,SkyDNS從所述第一 ET⑶中讀取與所述主機名對應的所述IP地址。8.根據權利要求7所述的系統(tǒng),其特征在于,所述系統(tǒng)還包括客戶端和服務器,所述服務器和所述客戶端為所述Kubernetes集群中的設備; 所述服務器,用于將Pod的創(chuàng)建信息發(fā)送給所述客戶端,所述Pod的創(chuàng)建信息中包含至少一個Docker容器的創(chuàng)建信息; 所述客戶端,用于根據所述Docker容器的創(chuàng)建信息創(chuàng)建并啟動所述Docker容器,并在所述Docker容器啟動成功后,將所述Docker容器的地址信息上報至所述服務器; 所述服務器,還用于將所述地址信息寫入第二 ET⑶中; 所述Kube2Sky,具體用于通過所述服務器從所述第二 ET⑶中獲取所述地址信息。9.根據權利要求8所述的系統(tǒng),其特征在于,所述Kube2sky包括: 信息增加單元,用于若所述地址信息為新增Docker容器的地址信息,則在所述第一ET⑶中增加所述地址信息; 信息替換單元,用于若所述地址信息為已有Docker容器的變化后的地址信息,則利用所述地址信息替換所述第一 ET⑶中的所述已有Docker容器的原有地址信息。10.根據權利要求8所述的系統(tǒng),其特征在于, 所述Kube2sky,還用于若所述Pod在所述Kubernetes集群中被刪除,則通過所述服務器從所述第二 ET⑶中獲取所述地址信息,并將所述地址信息從所述第一 ET⑶刪除。11.根據權利要求7所述的系統(tǒng),其特征在于, 所述Kube2sky,具體用于將所述主機名作為ET⑶鍵的一部分,把所述IP地址作為所述ET⑶鍵對應值的一部分,且將所述主機名和所述IP地址以SkyDNS可識別的格式寫入到所述第一 ETCD中。12.根據權利要求8至11任一項所述的系統(tǒng),其特征在于,所述第一ETCD和所述第二ET⑶為相同或不同的ET⑶。
【文檔編號】H04L29/12GK105897946SQ201610217807
【公開日】2016年8月24日
【申請日】2016年4月8日
【發(fā)明人】許孝盛
【申請人】北京搜狐新媒體信息技術有限公司