Slide 1

Slide 1 text

#InfraStudy 猫でもわかる KubeEdge チェシャ猫 (@y_taka_23) Infra Study Meetup #7 (23rd Oct. 2020)

Slide 2

Slide 2 text

#InfraStudy おうち EKS 爆誕!? ※ EKS としてはイレギュラーな構成なので自己責任で

Slide 3

Slide 3 text

#InfraStudy Kubernetes 大人気の理由 ● 分散システムとしての優れた拡張性 ○ API Server (etcd) のみが状態を保持 ○ 他コンポーネントは API Server を Watch ○ 同じ枠組みでカスタムコントローラが追加可能 ● The Platform of Platforms ○ 今や様々な CloudNative 的な運用の基盤に Custom Controller

Slide 4

Slide 4 text

#InfraStudy この拡張性をエッジにも延伸したい

Slide 5

Slide 5 text

#InfraStudy サンプルアプリ:カウンタ ● 管理コンソールからデバイスを操作・参照 ○ 管理コンソールコンテナ:クラウドにデプロイ ○ カウンタコンテナ:エッジにデプロイ(デバイスの代用)

Slide 6

Slide 6 text

#InfraStudy Kubernetes によるナイーブな構成

Slide 7

Slide 7 text

#InfraStudy Headless Service HTTP PUT/GET

Slide 8

Slide 8 text

#InfraStudy K8s をエッジに適用する際の問題 ● エッジデバイスは非力で不安定 ○ 情報の同期がいつ行われるのかコントロールしづらい ○ 瞬停したりするとエッジ側のイベント情報が失われる ● 通常の Pod-Service-Pod の通信が困難 ○ エッジがネットワーク接続を持つ瞬間しか成功しない ○ 相手エッジがいつネットワークに復帰するかわからない

Slide 9

Slide 9 text

#InfraStudy https://github.com/kubeedge/kubeedge

Slide 10

Slide 10 text

#InfraStudy KubeEdge の特徴 ● CNCF Incubating Project ○ IoT Edge ワーキンググループ (WG) が担当 ○ Huawei の Intelligent Edge Fabric (IEF) が出自 ● 通常の Kubernetes Node とは仕組みがかなり異なる ○ Kubelet 相当の EdgeD を中心に複数の追加機能 ○ K3s は同じくエッジ用だが通常の Kubernetes に近い

Slide 11

Slide 11 text

#InfraStudy Edge Controller Device Controller Cloud Hub Edge Hub Meta Controller Device Twin EdgeD Event Bus CRI (Docker / containerd / CRI-O)

Slide 12

Slide 12 text

#InfraStudy Edge Node は Master と直接接続しない

Slide 13

Slide 13 text

#InfraStudy Cloud Core Edge Core Cloud Side Edge Side

Slide 14

Slide 14 text

#InfraStudy WebSocket / QUIC Cloud Hub Edge Hub

Slide 15

Slide 15 text

#InfraStudy Pod 作成の仕組み

Slide 16

Slide 16 text

#InfraStudy Edge Controller Cloud Hub Edge Hub pod.yaml watch

Slide 17

Slide 17 text

#InfraStudy Edge Hub Meta Controller 永続化

Slide 18

Slide 18 text

#InfraStudy Meta Controller CRI (Docker / containerd / CRI-O) EdgeD Pod 起動

Slide 19

Slide 19 text

#InfraStudy クラウド・エッジ間通信の仕組み

Slide 20

Slide 20 text

#InfraStudy Device と DeviceModel ● エッジデバイスを CustomResource で抽象化 ○ Device:個々のデバイスに対応 ○ DeviceModel:送受信するメッセージなどのテンプレート ● Pod-Pod を介さずにデバイスとやりとり ○ クラウド側では Device の status.twins を読み書きする ○ エッジ側では MQTT で Pub / Sub される

Slide 21

Slide 21 text

#InfraStudy Device の Manifest apiVersion: device.kubeedge.io/v1alpha2 kind: Device metadata: name: counter spec: deviceModelRef: name: counter-model status: twins: - propertyName: status desired: metadata: type: string value: "OFF"

Slide 22

Slide 22 text

#InfraStudy Device の Manifest apiVersion: device.kubeedge.io/v1alpha2 kind: Device metadata: name: counter spec: deviceModelRef: name: counter-model status: twins: - propertyName: status desired: metadata: type: string value: "OFF" 通信するデータ

Slide 23

Slide 23 text

#InfraStudy Device Controller status: ON Cloud Hub Edge Hub watch PATCH

Slide 24

Slide 24 text

#InfraStudy Edge Hub Device Twin 永続化

Slide 25

Slide 25 text

#InfraStudy Device Twin Event Bus MQTT Pub / Sub

Slide 26

Slide 26 text

#InfraStudy まとめ ● Kubernetes をエッジに拡張する試み ○ Node が切り離された状態でも動ける必要性 ● 回線断に強い KubeEdge のアーキテクチャ ○ Controller を通して接続、Node 内にも DB で永続化 ● 対デバイス通信の Kubernetes Native な扱い ○ Device / DeviceModel による MQTT 通信の抽象化

Slide 27

Slide 27 text

#InfraStudy Let’s Go Over the Cutting Edge! Presented by チェシャ猫 (@y_taka_23)