Case Study
Kubernetes（K8s）on R-Car
R-CarH3への最適実装例のご紹介
Osaka NDS Embedded Cross Online Forum #13
山口 洋樹

プロフィール❑経歴• 2011 ～– 大阪エヌデーエス入社– 組み込み開発 (ITS車載器, 空調システム, 空気清浄機 etc.)• 2015 ～ 現在
– Linux 組み込み開発» 無線LANルータ開発» パブリッククラウド 連携 コネクテッドカー向け PoC» 次世代車載IVIシステム向け開発
etc.

❑趣味
• Tennis (Two-Handed Backhand)

Osaka NDS Embedded Cross Online Forum #13

2

目次❖Kubernetes(K8s) とは❑K8s の概要、導入方法を解説❖K8s on R-Car 実装例❑R-Car H3 (arm64) 上で K8s を構築時、苦労した点や課題について共有

Osaka NDS Embedded Cross Online Forum #133

Kubernetes(K8s) とは

Osaka NDS Embedded Cross Online Forum #13

4

K8s 概要❖意味/読み方Apple SE

Kubernetes = 船長

Kubernetes共同創設者/Microsoft Azure SE

Kubernetes
8文字

ケーエイツ / クーバネティス

https://twitter.com/brendandburns/status/585479466648018944
Osaka NDS Embedded Cross Online Forum #13

5

K8s 概要❖K8s とは❑本番環境に耐えられるように、コンテナ化されたアプリを自律的に管理するオープンソースプラットフォーム❑何が嬉しいか• コストがかかるアプリの管理(フェイルオーバー、スケーリング等)をK8sが面倒見てくれる• 管理コストが削減され、開発者はアプリ開発に集中することができる。

❑コンテナ・オーケストレーション ツール• オーケストレーション：
複数のシステムにまたがるワークフローを自動化する• クラウド・オーケストレーション 例：– AWS CloudFormation / OpenStack Heat / Ansible Automation Platform• コンテナ・オーケストレーション 例：– Kubernetes (コンテナ・オーケストレーションのデファクトスタンダード)– Docker Swarm / Apache Mesos
Osaka NDS Embedded Cross Online Forum #13

6

K8s 概要❖アーキテクチャ
manifest

Cluster の理想の状態 を設定し、依頼する

request (REST API)masterAppServiceOS
masterPod
Container

OS・・・

Container

AppAppServiceService

Pod

Pod

Service
Pod
Service

Pod

Pod

directmasterworkerworkerOSOS

OS

Control Plane

Control Plane
master とも呼ばれる。
コンテナ・オーケストレーションを指揮する。
複数の Control Plane で構成される。(高可用性)

Kubernetes cluster

Node・・・

Client(例 kubectl)

Nodeworker とも呼ばれる。
App を実行するコンポーネント。
複数の Node で構成される。(高可用性)
Cluster
複数 Node の集合。

workerOSApp
Pod (複数のコンテナのセット) とService (どう接続するかの定義) 等のオブジェクトで構成される。

Osaka NDS Embedded Cross Online Forum #13

7

K8s 概要❖アーキテクチャ「Control Plane」
kube-api-server
K8sの API。（REST API）
kube-controller manager
クラスタを「理想の状態」にする。
kube-scheduler
Podを適切なノードへスケジューリング。
etcd
クラスタのすべての情報はここに保存。

❑K8sクラスタを構成するコンポーネント「Node」
kubeletコンテナの操作/ノードの監視。
kube-proxy
定義されたルールに従いパケット転送を行う。

https://v1-18.docs.kubernetes.io/ja/docs/concepts/overview/components/❑1つ1つ設定するのは超大変 => 構築ツールを使用して簡単に構築できる (後述)
Osaka NDS Embedded Cross Online Forum #13

8

K8s 概要❖主な機能 (1/3)❑ノードの抽象化• 複数のノードを１つの大きなリソースプール (クラスタ) として抽象化する。
– 開発者はどのノードでAppが実行されるかを意識せずに開発できる。
» K8sは、コンテナが適切なノードで実行できるようにスケジューリングする。
» ホストを跨いだコンテナ間通信の仕組みを提供している。
実際にはAppはいずれかのNode上で実行される
AppApp

App

App

App

App

workerworkerworkerOSOS・・・

NodeKubernetes cluster

AppApp

App

App

App

App

抽象化

OS
1つの大きなクラスタとして見せる

Osaka NDS Embedded Cross Online Forum #13

9

K8s 概要❖主な機能 (2/3)❑デプロイの自動化• 「理想の状態」を 設定ファイル(manifest)に記述することで、常にその状態になるように自動デプロイする。
manifest
App A v1.0

何もない時は、「理想の状態」になるように１からデプロイする

App A v1.0

App B v2.0

App A v1.0

App A v1.0

kubernetes (K8s) cluster

App B v2.0

kubernetes (K8s) cluster

設定を変更

ロールアウト

ロールバック

水平スケールmanifest
App A v2.0

App A v2.0

App B v1.0

kubernetes (K8s) cluster

App B v1.0

App A v2.0

App A v2.0

App B v1.0

App B v1.0

kubernetes (K8s) cluster
変更された「理想の状態」になるようにデプロイする「理想の状態」を宣言

デプロイの自動化
Osaka NDS Embedded Cross Online Forum #13

10

K8s 概要❖主な機能 (3/3)❑自己回復• App の一部が停止しても、「理想の状態」になるようにデプロイし、復旧してくれる。
• 高信頼性を持つシステムを構築できる。
あるノードが故障してアプリが停止した

App A v1.0

manifest
App A v1.0

App A v1.0

App B v2.0

App B v2.0

kubernetes (K8s) cluster
App A v1.0

App B v2.0

App B v2.0

復旧

他のノードで実行する。

kubernetes (K8s) cluster

App A v1.0

App A v1.0

App B v2.0

App B v2.0

kubernetes (K8s) cluster「理想の状態」を宣言

自己回復
Osaka NDS Embedded Cross Online Forum #13

11

K8s 導入❖K8s クラスタ構築ツールの紹介 (1/2)❑オンプレミス環境に構築• Kubeadm• Minikube (Kubeadm を Wrap)• Kubespray (Kubeadm を Wrap / Ansible)

K8sの機能を理解しながら構築/検証できる (オススメ)

まずは簡単にPC１つで動かしたい人向け

kubernetes (K8s) cluster

kubernetes (K8s) cluster
masterOSOS
Control Plane

masterworkerworkerOSOSOS

・・・

worker・・・

masterworkerOS

NodeControl Plane

Minikube で構築した例

Node

Kubeadm で構築した例
Osaka NDS Embedded Cross Online Forum #1312

K8s 導入❖K8s クラスタ構築ツールの紹介 (1/2)

kubeadm❑Kubeadm でクラスタを構築する手順概要

kubectl• ① ロードバランサーを設置• ② 1個目の Control Plane を作成

manifest
kubernetes (K8s) cluster⑤request$ kubeadm init

AppAppApp

load balancer• ③ ネットワークアドオンをインストール– ホストを跨いだコンテナ間通信をする為に、CNI 準拠のネットワークアドオン をインストールする①④②

workerOSOS④・・・④master・・・• ④ Control Plane / Node を登録$ kubeadm join

App

# ホスト毎に実行

masterworker• ⑤ manifest を記述し、App のデプロイ実施

OS

OS

Control PlaneNode$ kubectl apply

手順詳細：https://kubernetes.io/ja/docs/setup/production-environment/tools/kubeadm/

Osaka NDS Embedded Cross Online Forum #13

13

K8s 導入❖K8s クラスタ構築ツールの紹介 (2/2)❑マネージドサービス を使って簡単に構築 (本番環境向け)• Google Kubernetes Engine (GKE)• Amazon Elastic Kubernetes Service (Amazon EKS)

❖CNCF認定ツール❑紹介したツール含む、Cloud Native Computing Foundationに認定されている 安心のディストリビューション/ツール一覧• https://www.cncf.io/certification/software-conformance/

Osaka NDS Embedded Cross Online Forum #1314

K8s on R-Car 実装例

Osaka NDS Embedded Cross Online Forum #13

15

K8s on R-Car 実装例❖概要❑複数台の R-Car を使用した K8s 環境の実装例の紹介❑構築にあたり苦労した点や課題を共有• K8sクラスタ構成ツールの選定 に苦労• etcd への Request Timeout 問題• ネットワークアドオンのインストールエラー 問題

Osaka NDS Embedded Cross Online Forum #1316

K8s on R-Car 実装例❖システム構成❑Kubeadm を使用して以下の K8s クラスタを構成。
kubectl

access is loadbalancedmanifest

kubeadmkubernetes (K8s) cluster
requestmasterload balancer(HAProxy)OSOSmasterOSControl Plane

directNGINX80

AppNGINX

80

・・・

AppAppuse docker

NGINX

workerworkerOSOSNode80

R-Car Starter Kit
Premier v3.0

手順詳細：https://elinux.org/R-Car/k8s(J)Osaka NDS Embedded Cross Online Forum #13

17

K8sクラスタ構成ツールの選定 に苦労❖Linuxディストリビューションの選定 (2020/9 時点)❑× Yocto (poky)• meta-virtualization に 必要なpackage (docker, kubeadm etc…) は提供されているがdocker / K8s のバージョン互換性がなく実行できない。

❑ ○ Ubuntu 18.04 (arm64)❖K8sクラスタ構築ツールの選定 (2020/9 時点)❑× Kubespray, Minikube• Arm64 未サポート の為実行できない。

❑○ Kubeadm

Osaka NDS Embedded Cross Online Forum #13

18

etcd への Request Timeout 問題❖問題と原因❑etcd への Request Timeout エラーが発生し、Control Plane / Node を 追加 できない。
❑eMMC上の etcd へのアクセスに時間がかかっていることが原因。

❖対策(暫定)❑etcd を eMMC -> RAM にマウント して対策 (永続性が無くなる)❖備考❑タイムアウト時間の設定変更を試みた• kubeadm コマンドの オプションで 設定ファイルを指定できるが、他のオプションと併用できず断念。

❑ etcd を別のホストに分離し、アクセス速度の改善ができそう。
• 高可用性etcdクラスターの作成：https://kubernetes.io/ja/docs/setup/productionenvironment/tools/kubeadm/setup-ha-etcd-with-kubeadm/

Osaka NDS Embedded Cross Online Forum #13

19

ネットワークアドオンのインストールエラー 問題❖問題と原因❑ネットワークアドオンのインストールに失敗する❑原因は (主に)ネットワーク関連の Linux Kernel 機能不足

❖対策
❑ネットワークアドオン、ネットワーク通信を担う Kube-proxy の エラーログを確認し、不足している Kernel Option を調査して追加。 (地道な作業)❖備考❑Docker のように、必要な Kernel Option 一覧を出してくれるツールがなく苦労した(2020/9 時点)

Osaka NDS Embedded Cross Online Forum #13

20

課題❖K8s on R-Car 構築 課題❑データベース(etcd)のアクセス速度の改善❑デプロイ時間の改善• R-Car: K8sクラスタ構成〜アプリのデプロイまで約30分 要する• Ubuntu(x86): 約 2〜3分 で終わる

Osaka NDS Embedded Cross Online Forum #13

21

Thank you❖まとめ❑Kubernetes の概要と導入方法について紹介• Kubeadm 等のクラスタ構築ツールを利用して簡単にスタートできます。

❑K8s on R-Car 実装例 について紹介• エッジ側にK8sを構築する場合の課題について共有。

近年、クラウドを活用したシステム連携が進み、クラウドを支えるK8sを含むコンテナ技術の理解が求められています。
本内容がお役に立てれば幸いです。

Osaka NDS Embedded Cross Online Forum #13

22