iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
0
Software Development

用30天介紹 open source 專案 Ohara 系列 第 15

Day 15 Ohara 的 Cluster 在 Kubernetes 的平台執行 (四)

  • 分享至 

  • xImage
  •  

前幾天已經介紹了要如何安裝、設定 Kubernetes 並且可以在 Ohara 上,使用 Kubernetes 的環境建立 Zookeeper Cluster、Broker Cluster 和 Worker Cluster 服務的 Container,今天主要介紹 Ohara 呼叫了 Kubernetes 的哪些 Restful API。

在介紹 Ohara 呼叫了哪些 Kubernetes 的 Restful API 之前,先說明一下 Ohara 的程式碼是如何連到 Kubernetes 的 Restful API。Ohara 主要是透過 Akka 的 HTTP 連到 Kubernetes 的 Restful API,Request 和 Response 的資料格式是使用 JSON 傳送,透過 akka http spray json 的 library 來做物件的轉換。

簡單的程式碼範例如下:

Http() 
  .singleRequest(HttpRequest(HttpMethods.GET, uri = s"$k8sApiServerURL/nodes")) 
  .flatMap(unmarshal[K8SNodeInfo]) 
  .map(nodeInfo => 
     nodeInfo.items.map(item => { 
      val internalIP: String = 
          item.status.addresses.filter(node => node.nodeType.equals("InternalIP")).head.nodeAddress 
      val hostName: String = 
         item.status.addresses.filter(node => node.nodeType.equals("Hostname")).head.nodeAddress 
        HostAliases(internalIP, Seq(hostName)) 
})) 

以上的程式碼呼叫 Http() 方法,就是使用 akka http 的 library,然後呼叫 Kubernetes 的 nodes Restful API,找到 Kubernetes 的 node name 和 IP 的對應資訊,之後設定給 HostAliases 的 case class 裡。

Response 是一個 JSON 的值會被轉換成 K8SNodeInfo 的 case class,程式碼如下:

final case class K8SNodeInfo(items: Seq[NodeItems]) 
implicit val K8SNODEINFO_JSON_FORMAT: RootJsonFormat[K8SNodeInfo] = jsonFormat1(K8SNodeInfo) 

以下介紹 Ohara 主要使用了哪些 Kubernetes 的 Restful API:

  • POST /pods
    Ohara 的設計主要是一個 pod 只會對應到一個 container。呼叫 pods 的目的是要收集所有在 kubernetes 的 container 狀態,像是環境變數, port mapping, 建立的時間....等等的資訊。

  • GET /nodes/${NodeName}
    用來查詢 Kubernetes 的 node 詳細資訊。像是 node 的 IP, pull 了哪些的 docker image....等等的 node 資訊

  • Get /nodes
    列出 Kubernetes 環境上有哪些 node

  • Get /namespaces/default/pods/${podName}/log
    顯示 container 執行的 log 資訊

  • Post /namespaces/default/pods
    在 kubernetes 的環境上,建立 pod

  • Delete /namespaces/default/pods/${pods}
    用於刪除 pod,如果後面再加上 gracePeriodSeconds=0 的參數,代表要強制刪除 pod,主要的使用情境是在執行整合測試時,當 pod 執行完之後要快速的刪除 pod,減少執行等待的時間避免測試發生 timeout 的問題

今天已經介紹了,Ohara 使用了哪些 Kubernetes 的 Restful API。如果對於 Ohara 整合 Kubernetes 平台有興趣,可以參考 Ohara 官方的 K8SClient 程式碼,連結如下:
https://github.com/oharastream/ohara/blob/0.7.1/ohara-agent/src/main/scala/com/island/ohara/agent/k8s/K8SClient.scala


上一篇
Day 14 Ohara 的 Cluster 在 Kubernetes 平台上執行(三)
下一篇
Day 16 如何 Build Ohara 的程式碼
系列文
用30天介紹 open source 專案 Ohara 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言