iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 7
0
DevOps

從開源雲到邊緣運算系列 第 7

[Day 7]KubeEdge 元件介紹

在開始部屬服務之前,先來讓我們了解運行服務需要哪些元件。

Pod

  1. 介紹
    Pod是Kubernetes中部署的最小單位為Pod(如下圖所示),一個節點會有多個Pod,每個Pod由一至多個容器所組成,Kubernetes會根據當前節點的資源將相同的Pod中的容器分配制同一個節點上,共享相同的IP位址及Port、共
    享儲存空間 (volumes),通常耦合性較高之應用會被部署至相同的Pod當中。在普遍的情況下盡可能遵循微服務(Microservices)的概念,將不同的服務分為多個Pod或容器,使服務具備較高的擴展性及較低的耦合性,使維運人
    員較容易維護。
    https://ithelp.ithome.com.tw/upload/images/20190923/20121071z6lSr4RFGX.png
    在Docker中,不同的容器會有各自獨立的IP,而在Kubernetes中,相同Pod中的容器共享相同IP位址與Port,因此Pod容器內部彼此可以透過localhost來溝通,降低容器之間溝通的延遲。因此,相同Pod的容器需要注意,若某個Port已經被其他容器使用,則此Pod內的容器無法再使用。

    Kubernetes中Pod元件基於臨時性所設計的,因此Pod可以很輕易的建立及刪除,但也因此,Pod不具有在排程錯誤,節點故障等情況提供自我修復的特性,一般來說,使用者不會直接建立Pod,而是透過其他Controller如StatefulSet、DaemonSet、ReplicaSet與Deployment等。

    • StatefulSet:是為具有順序性服務所提供的元件
    • DaemonSet:確保每個Node節點上會有一個Pod元件運行
    • ReplicaSet:則是可以保持Pod副本數量與使用者所定義的數量一致,Pod副本出現故障時,則建立新的Pod副本取代舊有的Pod
    • Deployment:支援 ReplicaSet 的功能,同時也提供滾動更新(Rolling Update)的功能,因此,現今大多以Deployment取代ReplicaSet。
  2. 範例yaml格式

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  containers:
  - image: nginx:1.7.9
    name: nginx

Deployment

  1. 介紹
    Deployment是Kubernetes中十分重要的元件之一,主要提供確保處於服務狀態的Pod副本數量,可以透過定義Deployment的YAML設定檔,來部署一個應用服務,在具備 ReplicaSet 元件特性的同時,也提供了滾動更新(Rolling Update)與滾回應用(Rolling Back)功能,這兩項功能對於維運人員而言十分重要。在傳統的應用下,當服務有新的版本時,需要停機更新,而當新版本的應用服務有重大缺陷時,往往需要消耗大量的人力及時間將版本回復。而在Kubernetes叢集當中,可以透過滾動更新的方式將服務以零停機的方式升級,而在發現服務有重大缺陷時,可以透過滾回應用(Rolling Back)的方式將服務回滾至先前穩定的版本,提供穩定的服務。
    當Deployment在YAML中定義服務副本數量後,Kubernetes根據每個Node節點上的kubelet元件將節點的負載回傳至Master節點,透過內部的排程機制將服務副本以負載大小平均分配至各個節點,避免單一節點上開啟過多的服務副本而導致負載不均的狀況。
    Deployment元件提供的滾動升級、滾回應用等高穩定特性以及具備服務副本等高擴展性,然而其中Deployment中的Pod元件的溝通僅限於相同命名空間(Namespace),這部分會在接下來 Service 元件中討論。
  2. 範例yaml格式
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
          hostPort: 80

Service

在 Pod 服務元件的使用上,Pod 內部運作的功能,需以 Pod 網路的功能請求對外埠號,將原有的 Pod 服務向外提供對外服務的接口,為了實踐 Pod 對外服務與內部 Pod 相互溝通的功能,Kubernetes 提供 Service 中介網路介面機制,服務 Pod 使用 Service 的 Node Port 功能,Kubernetes 將 Pod 副本群中特定服務 Pod (標籤) 進行鎖定,透過相同 Pod 標籤篩選的 Pod 群將服務 Pod 埠號進行轉換,設計對外服務埠號開啟(30000埠以上),對於外部服務埠號進行洩漏,提供外部網路串接服務與終端使用者操作使用,而透過 Cluster IP 功能,在眾多網路獨立的 Pod 服務之中,藉由 Pod 標籤的篩選相同服務類型的服務 Pod,將相同 Pod 標籤的 Pod 副本群的網路 IP 進行整合,轉換一個對內存取服務的 Cluster IP,而其後端導向多個相同標籤的 Pod 副本群,並透過內部 Service 通訊設計,可提供其他服務 Pod 的串接使用。


了解這些元件之後,我們就可以將服務部屬到edge端上,接下來為大家介紹如何部屬服務到edge


上一篇
[Day 6]KubeEdge 運行 - Edge篇
下一篇
[Day 8]KubeEdge 部屬 - 基礎篇
系列文
從開源雲到邊緣運算30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言