Consul - 微服務實戰



本章將瞭解微服務如何與Consul協同工作。我們還將學習以下元件如何影響Consul。

  • 使用Docker
  • 構建Registrator用於服務發現
  • 使用rkt和Nomad

現在讓我們詳細討論每一個。

使用Docker

在開始之前,請勿在生產環境中使用此設定,因為它僅用於演示目的。Docker是一個基於容器的服務,我們可以輕鬆地部署我們的應用程式。為了使用Consul,我們將使用以下連結中的映象 –0

https://hub.docker.com/r/progrium/consul/.

假設您的系統已安裝並正確配置了Docker。讓我們嘗試從Docker Hub拉取映象,執行以下命令:

$ docker pull progrium/consul

輸出將如以下螢幕截圖所示。

Pull Progrium

我們將以以下方式釋出一些帶有其埠的介面(在Docker上使用-p選項)。

  • 8400 (RPC)
  • 8500 (HTTP)
  • 8600 (DNS)

此外,根據拉取操作,我們將主機名設定為node1。您可以使用-h標誌和您自己的主機名將其更改為您想要的任何名稱,如下所示。

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap

輸出將如以下螢幕截圖所示。

Pull Made

您還可以使用以下命令啟用Consul的UI模式:

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap -ui-dir /ui

您可以在https://:8500上檢視基於UI的輸出。以下螢幕截圖可以讓您更好地瞭解基於UI的輸出。

UI based

為了在不同節點上的各種Docker容器上使用Consul,我們可以在不同節點上執行以下命令:

在Node1上

$ docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3

其中,-bootstrap-expect 3表示Consul伺服器將在有3個對等節點連線之前等待,然後才能自我引導併成為一個工作的叢集。

在繼續之前,我們需要透過檢查容器來獲取容器的內部IP。對於我們的用例,我們將宣告$JOIN_IP

$ JOIN_IP = "$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"

在Node2上

因此,讓我們啟動Node2並告訴它使用上面程式中宣告的變數加入Node1。

$docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP

在Node3上

$ docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP

構建Registrator用於服務發現

Registrator透過檢查容器上線情況自動註冊和登出任何Docker容器的服務。我們即將使用的Registrator目前支援可插拔的服務註冊中心,目前包括Consul、EtcdSkyDNS2。當我們在網路上與不同的服務互動時,強烈建議使用Registrator。

$ docker pull gliderlabs/registrator:latest

輸出將如以下螢幕截圖所示。

gliderlabs

$ docker run -d \
--name = registrator \
--net = host \
--volume = /var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
 consul://:8500

輸出將如以下螢幕截圖所示。

gliderlabs

您收到的輸出是您剛剛啟動的Docker容器的ID。您可以使用以下命令檢查容器是否正在執行:

$ docker ps -a

輸出將如以下螢幕截圖所示。

docker ps

您還可以使用以下命令檢視Registrator的日誌。

$ docker logs registrator

使用rkt和Nomad

rkt是另一個基於容器的服務,您可以在您的環境中使用它。它由CoreOS構建。構建rkt的主要原因是提高安全性,這是Docker在2013-14年開發時面臨的危機問題之一。

至於Consul,我們可以使用Rkt Registrator來處理與Consul的服務發現。這個針對rkt的Registrator專案正在開發中,不建議用於生產環境

您可以透過轉到其路徑並執行以下命令來檢查rkt是否已安裝。

$ ./rkt

您可以檢查輸出以檢視它是否已正確安裝,如以下螢幕截圖所示。

Rkt Registrator

要嘗試rkt和Consul,請檢視:https://github.com/r3boot/rkt-registrator

Nomad工具

最常用和最受歡迎的選項之一是Nomad工具。Nomad是一個用於管理機器叢集並在其上執行應用程式的工具。它類似於MesosKubernetes。預設情況下,Nomad在其自身內部包含Docker和rkt驅動程式。因此,如果您正在尋找使用Consul進行大規模容器部署,Nomad可能是一個不錯的解決方案。請檢視https://www.nomadproject.io/docs/drivers/rkt.html,瞭解更多關於Nomad的資訊。

廣告
© . All rights reserved.