Juju/MAASで作る
Kubernets + GPU
⽇本仮想化技術
遠⼭洋平
2018年5⽉9⽇ rev.0
1
Kubernetesとは
• Googleが開発
• オープンソースで公開
• コンテナーのオーケストレーションツール
• 複数ホスト間のコンテナーの展開
• 冗長構成を意識したコンテナーの展開と管理
• YAML形式のファイルを使ったデプロイメント
• アプリケーションの展開
• 機能の追加
• ステータスの確認
• 削除
2
% kubectl create -f deploy.yml
% kubectl get -f deploy.yml
% kubectl delete -f deploy.yml
コマンドの一例
Jujuとは
• アプリケーションの構成管理と簡易監視ツール
• マルチクラウド(AWS,Azure,GCE,OpenStack etc...)
• MAAS,LXC,vSphere
• Ubuntu,CentOS,Windows,macOSクライアントが存在
• OSSで開発
3
OS SSH App Config
OS SSH App Config
Juju
Ansible
MAASとは
• Metal As A Serviceを提供
• ノード資源の管理
• 物理サーバー
• Cisco UCS , HPE Moonshot , Intel RSD...
• 仮想サーバー(KVM + Libvirt)
• ネットワークの管理
• IPアドレスなど
• デプロイメント/リリース
• Ubuntu,CentOS(x86-64bitのみ),Windows...
• 多アーキティチャー(x86,ARM32,ARM64,PPC64...)
• BIOS/UEFI
4
MAASの概要
5
※公式サイトから引用
• 電源の管理はIPMIを利用
• OSSで構成されている
• DNS
• DHCP
• PXE
• IPMI
CanonicalとKubernetes
• Kubernetesのエンタープライズサポートを表明
• JujuのCharmやBundleが用意されている
6
※公式サイトから引用
LONDON, U.K, Aug 23rd, 2017, Canonical today announced two
consulting packages for enterprise Kubernetes deployments,
and expanded enterprise support to include serverless
infrastructure from Galactic Fog, container management
workflows from Rancher, and Weave Cloud from Weaveworks.
インストール方法
7
MAASのセットアップ
• MAASを公式の手順でセットアップ
• イメージのインポート
• MAAS DHCPサーバー
• SSHキーペア
• サーバー設置
• サーバーの電源投入
• Enlist
• Commission
• ノードにタグを設定
8
MAASでデプロイするまで
1. Enlist処理 ※
• IPMIツールでmaasユーザーを登録
• BMCの情報を取得してノードを登録
2. Commission処理 ※
• ハードウェア情報などを取得
3. Ready
• IPアドレスやNICの設定
4. デプロイ
※ノードを起動し、ミニOSがメモリーに読み込まれて各処理
9
Jujuのセットアップ
• Jujuを公式の手順でインストール
• sudo snap install juju --classic (Ubuntuの場合)
• Jujuクライアントと「Cloud」との関連づけ
• Juju Modelの作成と切替え
• Juju bootstrapの実行
10
MAAS
Cloud
Kubernetesのデプロイ
• juju deploy bundle.yaml
• machinesでMAASノードのタグなど識別
• charmでチャームのリビジョン
• num_unitsでユニット数 (2以上にするとHA)
• VIP IPを指定するとLB
• toでデプロイ先 (0...物理 ,lxd:0...コンテナ)
11
KubernetesのGPU活用
• Schedule GPUsを参考にセットアップするとGPUを利用可能
• JujuではNVIDIA GPUを実装していれば、ここまで自動化可
1. Ubuntuのデプロイと初期設定
2. Kubernetesのセットアップ
3. Docker CEの導入
4. NVIDIA-Docker2の導入
5. NVIDIA GPU Device Pluginの導入
6. CUDAのセットアップ
12
KubernetesでPodの作成
• Podの作成
• kubectl create -f firstpod.yml
• Podの状態確認
• kubectl get -w -f firstpod.yml
• kubectl describe -f firstpod.yml
• シェルにログイン
• kubectl exec -it testpod bash
• コマンドを実行
• kubectl exec -it testpod command
13
apiVersion: v1
kind: Pod
metadata:
name: testpod
spec:
restartPolicy: OnFailure
containers:
- name: testpod
image: ubuntu:latest
tty: true
#以下はGPU利⽤する場合に指定
resources:
limits:
nvidia.com/gpu: 1
YAMLの例
画像解析MNISTによる比較
• CPUは3分30秒かかる
• GPU利用すれば30秒で解析可能
14
現在検証中のこと
• Rook
• 永続ストレージのオーケ
ストレーター
• 超簡単! 15フンデデキタ!
• MetalLB
• 簡易LB
• 「K8sでPublic IPを使いた
い」を簡単に叶えてくれる
• どれくらいの負荷に耐え
られるか?
15
• Kubernetes Helm
• テンプレートベースのアプ
リケーション展開
• 監視
• Prometheus
• Grafana
今後検証予定のこと
• Ubuntu 18.04ベースでKubernetes
• Docker CE対応待ち
• Ubuntu 18.04.1以降を予定
• Spinnaker
• gVisor
• Cilium
• Kubeflow
• Kubernetes + Calico
16

Juju/MAASで作る Kubernetes + GPU