kun432's blog

Alexaなどスマートスピーカーの話題中心に、Voiceflowの日本語情報を発信してます。たまにAWSやkubernetesなど。

〜スマートスピーカーやVoiceflowの記事は右メニューのカテゴリからどうぞ。〜

Amazon 新デバイスの個人的まとめ②

f:id:kun432:20210929083109p:plain

Amazonから発表された新デバイスの発表会の超個人的感想まとめ Part2です。Part1はこちら。

目次

Halo View

f:id:kun432:20210929220755p:plain

活動量などを取得できるフィットネストラッカーとかスマートバンドと呼ばれるもの。$79.99。

去年発表されていたHalo Bandには画面がなくてスマホとセットで使うものだったのが、画面がついてある程度の情報が確認できるようになったみたい。

日本でも色々出ているけど、こういうのどれぐらい活用されているのかわからないな。Mi Band持ってるけどそんなに使わなくなったし、どちらかというとApple Watchのほうがよく見かける気がする。

この分野では後発だし、他社に比べるとちょっと高くて大きい気もするので、どれだけやれることできるか次第。Alexaとの連携はちょっとわからないな。

Halo Fitness/Halo Nutrition

f:id:kun432:20210929221550p:plain

f:id:kun432:20210929221657p:plain

ということで、Haloのメンバーシップサービスに含まれる新しいサービス。Fitnessは専門家によるフィットネスコンテンツ。Halo Viewで取得した数値何かと連携できるっぽい。Nutritionは、健康的な食事のアドバイスやレシピなどを提供してくれる。Whole Foodsあたりと連携してるみたい。

デバイス単体で勝負できることは少ないし、魅力的なサービス含めて提供することが重要なのは、これまでAmazonが出してきたデバイスとサービスを見てるとよくわかる。欧米に比べると、日本のフィットネス市場はデバイス先行で、サービスを中心にした展開は現状あまりないと思ってる。この手のサービス料金に対しては妙にシビアな印象もあるし。日本向けにフィットしたコンテンツやサービスが提供できれば、というのが重要なんじゃないかな。

Ring Always Home Cam

f:id:kun432:20210929232314p:plain

去年発表されたドローン型カメラ。いよいよ出るのかー。$249.99。

アメリカのような広い住環境ではないにせよ、固定側カメラをたくさん配置するのはいろいろな面で厳しい感があるので、このアプローチはちょっと期待してる。なんと言っても面白そうだしw

これは正直ちょっと欲しいな、いい感じの価格帯だと思うので日本にも来てほしい。

Ring Alarm Pro

f:id:kun432:20210929224451p:plain

WiFi6対応ルータ内臓のRing Alarmデバイスのベースステーションかな。$249.99。

動体検知によるアラームやセキュリティ攻撃対策、オンラインバックアップなどのサービスとセットになってる。このへんは最近の海外製ルータにも多いね(逆に国内のメーカーがこういうのやってるんだろうか?)。

Ring Edgeにより、Ring Always HomeCamやDoorbellなんかで撮った映像なんかもエッジ側で処理するというのもプライバシー配慮で良いと思う。セキュリティは色々組み合わせるよりもセットで包括的にやるほうが絶対に良いと思う。デバイス・サービスまとめて提供するというのはAmazonらしい。

ところでこれはAlexa対応しているのかな?Alexa対応WiFiルータということならちょっと気になる。

これの建築現場向けみたいな提供形態として、携帯回線やソーラーバッテリーを採用したRing Job Site Securityというのも出るみたい。

f:id:kun432:20210929225331p:plain

Ring Virtual Security Guard

f:id:kun432:20210929225622p:plain

有人監視のサブスクリプションサービスかな。セコムあたりがやってるようなものだと思う。

先進的なんだか前時代的なんだかわからないけど、まあ結局のところハードやサービスが揃っていても結局それを使って何らかの事象に対応するのはユーザなので、そのあたりをお金を払って人におまかせしちゃえという。

全部技術で解決しちゃえばいいじゃんという考え方もあるとは思うけど、個人的にはこういうところでさらなるビジネスを展開するというのは重要だと思いますね。日本だと個人の家庭には厳しい気もするけど、店舗とかオフィスにまず展開するのがいいんじゃないかな、特にオフィスは今人が少なくなってると思うので。

f:id:kun432:20210929232445p:plain

f:id:kun432:20210929232457p:plain

ドアベルとカメラ。カメラ内臓でモーションセンサーなど。Alexaにも対応してるみたい。

ちょっとよくわからないのはRingにもドアベル製品はある。RingもBlinkもAmazonが出資しているベンチャーブランドだと想像してるのだけど、このあたりどういうふうに住み分けるつもりなんだろうか。

あとプレゼン見てる限りは、なんとなくblinkにはAlexaというキーワードが結構出てきてたけど、Ringにはあまり出てきてなかった印象。

Custom Event Alerts

f:id:kun432:20210929232847p:plain

Ringでカメラを使うと、例えば置き配なんかを検知できるみたいだけど、これをユーザがカスタムに設定できるというもの。例にある通り、車がガレージの前にきたら扉を開けるとか。

定形アクションの物理的なトリガーとして、Echo Flexのモーションセンサーはとても良いと思っていたので、こういうのは良いと思う。どれぐらいの精度になるかはあるかもだけど、学習できるみたいなので誤検知は減らせそう。

Ultrasound Occupancy Routines

f:id:kun432:20210929234119p:plain

日本語にすると超音波占有率ルーティン。なんのこっちゃ。

対応しているEchoデバイスから人間には聞こえない超音波を出してその反射を拾って何らかの検出を行うというものらしい。事例では、外出したあとにFire TVがオンのママだったら消す、というのが上がってた。動体検知ではないけど、一定の反応がなければ人がいない(スペースの占有率が下がる)と判断するようなものだと思う。

対応しているEchoデバイスってどれなんだろう。なんとなく第4世代Echoあたりからなのかなぁという気はするけど。

Alexa Together

f:id:kun432:20210929234927p:plain

Alexaを使った見守りサービス。緊急時に24時間/365日でホットラインにつながったり、転倒を検知したり、Alexaで救助を求めたら家族に通知したり、というようなことができるみたい。$19/月。去年出たCare Hubを拡張したようなものなのかな。

あとは家族のデバイスで一定時間アクションがなかったら通知を促したり、家族のデバイスにリマインダーをセットしたり、というリモートからのアシストみたいなこともできるっぽい。このリモートからデバイスを設定できるというのは良いね、おそらく家族に限られているとは思うのでファミリーアカウントなりAmazon Householdなりの枠組みの中でやるのだろうけど。

年老いた親にデバイスの設定をさせるというのは難しいだろうし、ここが最大のハードルだと思うので、ここをかんたんにできれば本来の目的である遠隔での家族のコミュニケーションがやりやすくなるし、声という誰でもかんたんに使えるインタフェースの良さが伝わるのではないかと思う。

Astro

f:id:kun432:20210930000343p:plain

最後はなんとAlexa内蔵ロボット!これはびっくりした。

Alexa対応はもちろん、マップや画像解析とかもあってAIてんこ盛り。RingのセキュリティサービスやAlexa Together何かとも連携してて、セキュリティや見守りの両方に対応できる。頭に当たる部分にはディスプレイがあって、表情のようなものが表示されていて、かつパーソナリティも設定されているらしく、動きなんかも含めてちょっとかわいい感じです。

うちにはMixiのロミィもいて、会話だけで見るととてもお馬鹿さんなのだけど、話してる方向に向いたり、うなずいたり、首振ったりみたいな動きがあるだけで、ただの機械っていう感じがかなり減って、ぜんぜん違うんだよね。最初にひと目見たときはこのデザインはどうかなぁと思ったけど、これなら日本でも受け入れられそうな気がする。

個人的にはカメラが頭からニョキッと出てくるのがR2D2ぽくてよい。$999かー、最初見たときはたけえなぁと思ったけど、そもそもこの価格帯でこのレベルのものを作れるのはちょっとヤバいかもしれない。断然欲しくなってしまったw

DAY1プロダクトみたいなので、正式に製品化されるといいなと期待。

まとめ

長かったー。1時間だけど色々てんこ盛りでキャッチアップするのも大変。

とりあえずの印象としては、

  • デバイス単体の機能ではなく、裏にあるクラウド、MLやAIなどのパワーを全面的に押し出している
  • それらを使って、よりユーザの生活に食い込んでくるようなサービスに力が入っている
  • パーソナライズがキー。セキュリティや見守りなども、広い意味ではパーソナライズの一つ。

という感じで、よりユーザのユースケースが絞られてる感じがしました。AlexaのテーマであるAmbient&Proactiveという点でもぶれてない印象です。

Alexa等VUI開発者の観点でいうと、Alexaにあまり関係なさそうなものもいろいろあったけど、検知やトリガーとなる要素は色々増えた気がするので、これでスキルの利用頻度が上がるといいなという期待はありますね。そういうものとマッチするようなスキルを作りたい。

今の所日本ではEcho Show 15だけなので、その他も日本でも買えるようになるのを期待したいです。

Amazon 新デバイスの個人的まとめ①

f:id:kun432:20210929083109p:plain

去年も今頃だったのかな、Amazonから新しいデバイスの発表がありました。詳しい内容は以下の記事をご覧いただくとして、超個人的な感想をまとめてみます。あくまでも個人的な感想なので、あしからず。

※結構ボリューム増えたので2回に分けます。

発表された製品のまとめはこちら(英語)

TechCrunchのまとめもわかりやすいですね(英語。多分日本語も後で出てくると思います。)

発表会の動画はこちら

目次

AZ2プロセッサ

f:id:kun432:20210929093320p:plain

第4世代Echo/Echo Show 10に搭載されているAZ1プロセッサ、そして今回発表されたEcho Show 15に搭載されているAZ2プロセッサにより、クラウド上に送信することなく、デバイス上で音声処理が可能になったそうです。

プライバシーというテーマで紹介されていましたが、個人的には、デバイス側での性能向上はいろんなところでメリットがあると思っていて、特にASRに関わる部分で今までできなかったことなどができるのではないかと期待しています。

たとえばユーザカスタムなウェイクワードとかね!カスタムアシスタントも少しづつ広げようとしているようだし、これはぜひやってほしいな。

スマートサーモスタット

f:id:kun432:20210929085353p:plain

$59という価格がどうかなー。

例えばSwitchBotなら、スマホ経由で使うだけならサーモスタットは$19、Alexaと連携したり他のデバイスと連携するならハブを$39で買えば似たような金額になるし、ハブは1台だけあればよいはず。Nestのサーモスタットに比べれば安いし、SwitchBotの場合はどうしてもAlexaのスマートホームデバイスというレイヤーが一枚間にあるので、SwitchBot側の設定が必要だったりすることも踏まえると、導入が多少かんたんにはなるとは思うけど。

そこそこの値段でかんたんに使えそうでAlexaとも連携できるというところがウリになるのかな。目新しい機能は特に見当たらないけど、サーモスタット自体そんなに買う人が多いとは思えないので、案外売れたりするのかなという気もする。

Echo Show 15

f:id:kun432:20210929091328p:plain

噂通りに出てきた15インチ壁掛けEcho Show。$249.99。

大画面化は歓迎なんだけど、いろいろな情報をたくさん表示できるんだったら、個人的にはAtmoph Window並(27インチ)に大きければなーという感じ。15インチだと少し離れると多分見えないと思うし、Atmophぐらいの大きさだとデジタルサイネージ的にも活用できそうな気がする。

縦横どちらでも使えたり、この前発表されたAlexa Widgetが早速活用されそうだし、付箋なんか特にいいと思う。リングドアベルの映像をピクチャー・イン・ピクチャーな感じで表示できるのも良く出来てる。なんとなくこれなら冷蔵庫に貼っつけたいなーと思ってたら、やっぱりキッチンのスマートテレビとして想定しているみたい。

なので、繰り返しになるけど、個人的にはとてもサイズが残念で、リビングのデジタルハブとして使うにはもっと大きいものが欲しかったな。まあそっちはFire TVで、ってことなのかもしれない。

Visual ID

f:id:kun432:20210929100109p:plain

デバイスについているカメラが顔を認識して、そのユーザにパーソナライズされたコンテンツを提供してくれるというもの。

パーソナライズはユーザの使い勝手を良くするには必須で、GoogleのNest Hub Maxでは最初から実装されていたものなので、やっと追いついたか、というところ。デバイス側プロセッサの性能向上もあってこのあたりの処理がデバイスだけでできるというところが、セキュリティとかプライバシーに慎重なAmazonには必要だったのかもしれない。

できればここから開発者にも何らかの形で利用できるようにしてほしいところ。

Preference Teaching

パーソナライズその2。ユーザのお気に入りなどを覚えていく機能。

どういうふうに覚えるのかなと思ったら、ユーザの発話した内容を元に覚えていくみたい。それなら意識せずに使えるからいいなーと思う反面、それでどれユーザの好みを把握できるのかなーとは思う。ただこれは時間が解決しそうなので、ちょっと期待。

全然別物ではあるけど、Alexa Entitiiesみたいに、カスタムスキルからそれを読み出せるといいなぁ(きっと権限の許可が必要になるとは思うけど)

Custom Sound Detection

f:id:kun432:20210929095554p:plain

パーソナライズその3、と言ってもいいかな。Alexaが音声ではなくて、音を聞き取ってそれをもとに通知したりする機能。

これ個人的にはとても大きいなぁと思ったのだけど、プレゼンテーションを見てみると、一般的なモデルを作るのは大変、家庭ごとの音データとして、言っているので、おそらく簡易な学習になるのだろうと思う。音声だけじゃなくてサウンドも学習して汎用的に使えると色々面白そうと思ったのだけどなー。

ただ、それを差し置いても、ガラスが割れる音、犬や赤ちゃんの鳴き声、いびき、などいろいろ活用の幅が広がりそうな気はする。個人的にはこれが一番興味深いと思った。

Amazon Kids+

子供向けコンテンツの拡充。

一応日本でも提供されてるみたいだけど、どれぐらい利用されているのかな???

Celebrity Personalities

Alexaの声に著名人の声が使えるやつね。サミュエル・L・ジャクソンに続いて、シャキール・オニールとメリッサ・マッカーシーが追加されている。

これどこまで使えるものなのか、全然わからないけど、日本でもやってみてほしいなぁ。

Hey Disney

f:id:kun432:20210929101418p:plain

ウェイクワードだけじゃなくて、いろいろできるみたいだし、そして専用デバイスまで。IPは強いね。

ファンにはたまらないと思うし、今後も似たような事例が増えると良いなー。そして、こういうキャラクターは日本には山ほどあるのでぜひ日本でもやってほしい。

Amazon Glow

f:id:kun432:20210929101932p:plain

コロナでよく使われるようになったらしいビデオ通話部分を切り出して、プロジェクション&センシング機能をつけたものらしい。$249.99。

オンラインでの集まりもZoomなどのビデオ通話ツールが広く活用されているし、Echoデバイスが持っていたビデオ通話なんかもきっと活用されているんだろうな(個人的には全く使っていないのでちょっとわからない)。同じ画面内でやるんじゃなくてプロジェクションを使ったのはとても面白いと思う。常に顔が見えているというのが結構重要な気がするね。

ちょっとサイズは気になる(結構大きい)けど、コンテンツ提供者もディズニーを含めて揃えてる感があるし、コンテンツ作成もSDKが用意されているようなので、ちょっと興味深い(ただしDeveloper Previewっぽい)。

今まで見た中では、発表だけ聞いたときと、プレゼン見たときの印象が最も違った(いい意味で)やつかな。


結構真面目にプレゼン見ながら書いてたけど、まだ半分・・・ということで以下あたりはパート2に続きます。

  • Halo View
  • Ring Always Home Cam
  • Virtual Security Guard
  • Ring Jobsite Security
  • New Blink stuff
  • Astro

cephadmでCephを試してみる

f:id:kun432:20210926161533p:plain

クラウドじゃなくてKubernetesを手元で試してみたい、という場合、Dynamic PVとLoad Balancerはちょっとハードルが高い印象です。

Dynamic PVにはrook-cephがよいようなのですが、そもそもCephを知らない、ということで、まずはVMレベルで試してみました。

目次

Cephとは?

ceph.io

分散ストレージソフトウェアというやつです。特徴は以下。

  • 複数の方法でストレージにアクセスできる
    • オブジェクトストレージ(Amazon S3互換)
    • ブロックデバイス
    • ファイルシステム
  • 拡張性と信頼性が高い

これを実現するためにCephのクラスタでは複数のコンポーネントが動作しているようです。

  • MON(Monitoring Daemon)
    • クラスタの管理を行う
  • OSD(Object Storage Daemon)
    • ディスクへの読み書きやレプリケーションなど
    • ディスクごとに起動する
  • MDS(Meta Data Server)
    • メタデータサーバ
    • ファイルシステムとして使う場合のみ使用

全て冗長化が可能になっているようです。

Cephのクラスタ構築・管理ツール「cephadm」

最初にKuberentesでやりたい、ということで調べてみると"rook-ceph"というキーワードが出てくる。さらっと調べてみたけど、cephそのものの基礎知識もないせいか、全くわからなかった。以下を読むととてもわかりやすかった。

雑なまとめだとこんな感じ。

  • cephでストレージクラスタを構築・運用するのはとても大変。公式ツールもなく、いろいろ管理ツールが乱立。
  • コンテナ化の波が来た。Cephもコンテナベースで。
    • Kubernetes向けにはrook
    • それ以外にはcephadm

最終的にやりたいのはKubernetes向けストレージクラスタなのだけど、まずはcephに慣れてみようということで、今回はcephadmでやってみます。

構成

  • Vagrantで構築
  • VMは3台+1台。OSはUbuntu bionic。
    • cephのコンポーネント郡がまだよくわかってないけど、冗長化するなら最低3台は必要っぽいので。MON/OSDは兼用で。あとは作りながら考える。
    • cephのホストは最低でも2GBのメモリが必要です。
    • 残り1台はクラスタ外からストレージに接続するクライアント想定
    • VM間はプライベートネットワーク経由で接続

f:id:kun432:20210926185252p:plain

以下にVagrantfileを用意しました。

$ git clone https://github.com/kun432/vagrant-ceph.git
$ cd vagrant-ceph
$ vagrant up

Vagrantfile

Vagrantfileについて少し補足。

各nodeにはcephで使用する専用のディスクを割り当てる必要があります。Vagrantでは、experimentalだけどディスクの追加を行えるようになっていました。

/dev/sda, /dev/sdbはubuntu bionicのVagrant boxがもともと持っているもので、今回追加したのは/dev/sdcの10GB。これをcephのストレージとして使います。

vagrant@node-1:~$ sudo fdisk -l
Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x0cb2ba1a

Device     Boot Start      End  Sectors Size Id Type
/dev/sda1  *     2048 83886046 83883999  40G 83 Linux


Disk /dev/sdb: 10 MiB, 10485760 bytes, 20480 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

あと、vagrant-hostmanagerプラグインを追加しています。

Vagrant.configure("2") do |config|
  config.vagrant.plugins = ["vagrant-vbguest", "vagrant-hostmanager"]
  config.hostmanager.enabled = true
  config.hostmanager.manage_host = true
  config.hostmanager.manage_guest = true
(snip)

これにより、各VM間およびホスト側からも名前でアクセスができます。

その他、scripts以下のスクリプトで基本となるパッケージの追加や設定などを行っています。ただしcephについては何もしてません。

  • パッケージの最新化
  • chrony(時刻同期)のインストール
  • docker-ceのインストール

cephadmのインストール

クラスタの作成およびcephadmのインストールは、cephノードとなる3台のうち1台で行おうと思います。node-1にsshします。

$ vagrant ssh node-1
vagrant@node-1:~$ 

cephadmのインストール。公式手順に従いつつ勧めます。

ceph公式のaptレポジトリを追加します。

$ curl --silent https://download.ceph.com/keys/release.asc | sudo apt-key add -
$ sudo apt-add-repository https://download.ceph.com/debian-pacific
$ sudo apt-get update

cephadmをインストールします。

$ sudo apt install -y cephadm

クラスタの作成

ではクラスタを作成します。クラスタの作成はcephadm bootstrapで行います。--mon-ipは、Vagrantのプライベートネットワーク側のIPアドレスを指定します。

$ sudo cephadm bootstrap --mon-ip 10.10.0.21

Creating directory /etc/ceph for ceph.conf
Verifying podman|docker is present...
Verifying lvm2 is present...
Verifying time synchronization is in place...
Unit chrony.service is enabled and running
Repeating the final host check...
podman|docker (/usr/bin/docker) is present
systemctl is present
lvcreate is present
Unit chrony.service is enabled and running
Host looks OK
Cluster fsid: d3ff50c0-1eb9-11ec-87bb-02d610efa747
Verifying IP 10.10.0.21 port 3300 ...
Verifying IP 10.10.0.21 port 6789 ...
Mon IP `10.10.0.21` is in CIDR network `10.10.0.0/24`
- internal network (--cluster-network) has not been provided, OSD replication will default to the public_network
Pulling container image quay.io/ceph/ceph:v16...
Ceph version: ceph version 16.2.6 (ee28fb57e47e9f88813e24bbf4c14496ca299d31) pacific (stable)
Extracting ceph user uid/gid from container image...
Creating initial keys...
Creating initial monmap...
Creating mon...
Waiting for mon to start...
Waiting for mon...
mon is available
Assimilating anything we can from ceph.conf...
Generating new minimal ceph.conf...
Restarting the monitor...
Setting mon public_network to 10.10.0.0/24
Wrote config to /etc/ceph/ceph.conf
Wrote keyring to /etc/ceph/ceph.client.admin.keyring
Creating mgr...
Verifying port 9283 ...
Waiting for mgr to start...
Waiting for mgr...
mgr not available, waiting (1/15)...
mgr not available, waiting (2/15)...
mgr not available, waiting (3/15)...
mgr is available
Enabling cephadm module...
Waiting for the mgr to restart...
Waiting for mgr epoch 5...
mgr epoch 5 is available
Setting orchestrator backend to cephadm...
Generating ssh key...
Wrote public SSH key to /etc/ceph/ceph.pub
Adding key to root@localhost authorized_keys...
Adding host node-1...
Deploying mon service with default placement...
Deploying mgr service with default placement...
Deploying crash service with default placement...
Deploying prometheus service with default placement...
Deploying grafana service with default placement...
Deploying node-exporter service with default placement...
Deploying alertmanager service with default placement...
Enabling the dashboard module...
Waiting for the mgr to restart...
Waiting for mgr epoch 9...
mgr epoch 9 is available
Generating a dashboard self-signed certificate...
Creating initial admin user...
Fetching dashboard port number...
Ceph Dashboard is now available at:

         URL: https://node-1.internal:8443/
        User: admin
    Password: rhpbkxfmny

Enabling client.admin keyring and conf on hosts with "admin" label
You can access the Ceph CLI with:

    sudo /usr/sbin/cephadm shell --fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring

Please consider enabling telemetry to help improve Ceph:

    ceph telemetry on

For more information see:

    https://docs.ceph.com/docs/pacific/mgr/telemetry/

Bootstrap complete.

インストールが完了したようです。クラスタの状態を確認してみましょう。

cephadmにはshellサブコマンドがあり、これを経由してcephのコマンドを実行できるようです。クラスタの状態を確認するのはceph statusコマンド(ceph -sでもOK)になります。

$ sudo cephadm shell -- ceph status
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
  cluster:
    id:     d3ff50c0-1eb9-11ec-87bb-02d610efa747
    health: HEALTH_WARN
            OSD count 0 < osd_pool_default_size 3

  services:
    mon: 1 daemons, quorum node-1 (age 3m)
    mgr: node-1.hsnpph(active, since 39s)
    osd: 0 osds: 0 up, 0 in

  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0 B
    usage:   0 B used, 0 B / 0 B avail
    pgs:

これを見ると、

  • MONが1台動作している。
  • OSDは0。デフォルトは3台なので警告が出ている。

なのがわかります。

また、クラスタ初期化時のメッセージを見ると、GUIの管理画面もあるようです。

(snip)
Ceph Dashboard is now available at:

         URL: https://node-1.internal:8443/
        User: admin
    Password: rhpbkxfmny
(snip)

vagrant-hostmanagerプラグインを使っていれば"node-1.internal"でアクセスできます。ただし、Chromeを使っている場合は自己証明書のサイトにはアクセスできないので、以下を参考に。

ログイン画面が表示されましたので、さきほど表示されていたユーザ名・パスワードでログインします。

f:id:kun432:20210926201842p:plain

初回はパスワードの変更が必要になります。

f:id:kun432:20210926201852p:plain

変更したパスワードでログインします。

f:id:kun432:20210926201933p:plain

ログインできました!

f:id:kun432:20210926202003p:plain

OSDの追加

ceph statusの結果や、管理画面にも出ているように、OSDは最低3つ必要になります。

f:id:kun432:20210926202314p:plain

クラスタ作成したnode-1および残りの2台を使って、OSDを作成していきます。まずnode-1から。

cephのOSDに追加できるデバイスを確認するにはceph orch device lsコマンドを実行します。

vagrant@node-1:~$ 

$ sudo cephadm shell -- ceph orch device ls
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Hostname  Path      Type  Serial  Size   Health   Ident  Fault  Available
node-1    /dev/sdc  hdd           10.7G  Unknown  N/A    N/A    Yes
node-1    /dev/sdb  hdd           10.4M  Unknown  N/A    N/A    No

node-1上で使用可能なディスクの一覧が表示されます。"Available"がYesになっているものがOSDとして追加可能なようです。ceph用にVMに追加した/dev/sdcがAvailableになっていますね。

ではこれを追加します。OSDの追加はceph orch daemon add osdコマンドです。ホスト名とディスクを指定します。

$ sudo cephadm shell -- ceph orch daemon add osd node-1:/dev/sdc

Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Created osd(s) 0 on host 'node-1'

追加できました。OSDが作成されたかどうかを確認します。cephではOSDをサーバとディスクでツリーとしてグループ分けするようです。このツリーの状態を見るにはceph osd treeコマンドを実行します。

$ sudo cephadm shell -- ceph osd tree

Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
ID  CLASS  WEIGHT   TYPE NAME        STATUS  REWEIGHT  PRI-AFF
-1         0.00980  root default
-3         0.00980      host node-1
 0    hdd  0.00980          osd.0        up   1.00000  1.00000

node-1のディスクが追加されているようです。

ホスト&OSDの追加

ではこのツリーに他のホストのディスクを追加していきます。

公式のドキュメントを見ていると、クラスタを作成したcephホスト上にある公開鍵を新しいホストのrootユーザで使えるようにしておく、つまり、rootでのsshアクセスが必要になるようです。

$ ssh-copy-id -f -i /etc/ceph/ceph.pub root@*<new-host>*

Vagrantのubuntu boxだと/etc/ssh/sshd_configを見てみると、一応defaultでrootの公開鍵認証でのログインが可能になってます。

#PermitRootLogin prohibit-password

いちいちパスワード設定してsshできるようにするのは面倒なので、vagrantのsynced_folder経由で公開鍵をコピーしましょう。

vagrant@node-1:~$ 

$ sudo cp -pi /etc/ceph/ceph.pub /share
vagrant@node-2:~$ 

$ cat  /share/ceph.pub | sudo tee -a /root/.ssh/authorized_keys

node-3も同じように公開鍵をコピーしておきます。

では、node-2, node-3をクラスタに追加します。ホストの追加はceph orch host addコマンドを使用します。

$ sudo cephadm shell -- ceph orch host add node-2 10.10.0.22
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Added host 'node-2' with addr '10.10.0.22'

$ sudo cephadm shell -- ceph orch host add node-3 10.10.0.23
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Added host 'node-3' with addr '10.10.0.23'

ホストが追加されたか見てみましょう。ceph orch host lsコマンドで見れます。

$ sudo cephadm shell -- ceph orch host ls
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
HOST    ADDR        LABELS  STATUS
node-1  10.10.0.21  _admin
node-2  10.10.0.22
node-3  10.10.0.23

追加したホストにはラベルが付いていません。cephではこのラベルを使ってホストのクラスタからの切り離し等を行うようで、"_admin"ラベルは、クラスタ作成時に作成された設定ファイルや鍵などを追加ホストにも自動的にコピーするようです。node-1が死んだ場合を考えると付与したほうがいいのかな?と思いますが、ちょっと今回は割愛。

では追加したホストのディスクをOSDとして追加します。ホストを追加してしばらくすると、ceph orch device lsで利用可能なデバイスとして参照できるようになるみたいです。

$ sudo cephadm shell -- ceph orch device ls
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Hostname  Path      Type  Serial  Size   Health   Ident  Fault  Available
node-1    /dev/sdb  hdd           10.4M  Unknown  N/A    N/A    No
node-1    /dev/sdc  hdd           10.7G  Unknown  N/A    N/A    No
node-2    /dev/sdc  hdd           10.7G  Unknown  N/A    N/A    Yes
node-2    /dev/sdb  hdd           10.4M  Unknown  N/A    N/A    No
node-3    /dev/sdc  hdd           10.7G  Unknown  N/A    N/A    Yes
node-3    /dev/sdb  hdd           10.4M  Unknown  N/A    N/A    No

OSDを追加します。

$ sudo cephadm shell -- ceph orch daemon add osd node-2:/dev/sdc
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Created osd(s) 1 on host 'node-2'

$ sudo cephadm shell -- ceph orch daemon add osd node-3:/dev/sdc
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
Created osd(s) 2 on host 'node-3'

追加されました。

$ sudo cephadm shell -- ceph osd tree
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
ID  CLASS  WEIGHT   TYPE NAME        STATUS  REWEIGHT  PRI-AFF
-1         0.02939  root default
-3         0.00980      host node-1
 0    hdd  0.00980          osd.0        up   1.00000  1.00000
-5         0.00980      host node-2
 1    hdd  0.00980          osd.1        up   1.00000  1.00000
-7         0.00980      host node-3
 2    hdd  0.00980          osd.2        up   1.00000  1.00000

これでOSDが3つになったので、クラスタの状態を見てみましょう。

$ sudo cephadm shell -- ceph status
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
  cluster:
    id:     d3ff50c0-1eb9-11ec-87bb-02d610efa747
    health: HEALTH_OK

  services:
    mon: 3 daemons, quorum node-1,node-2,node-3 (age 9m)
    mgr: node-1.hsnpph(active, since 73m), standbys: node-2.jebvpv
    osd: 3 osds: 3 up (since 61s), 3 in (since 75s)

  data:
    pools:   1 pools, 128 pgs
    objects: 0 objects, 0 B
    usage:   19 MiB used, 30 GiB / 30 GiB avail
    pgs:     128 active+clean

  progress:

clusterのhealthがHEALTH_OKになっていますね。GUIのほうでも同じようにHEALTH_OKになっています。あと、dataのusageを見ると容量が増えているがわかりますね。

f:id:kun432:20210926212601p:plain

ファイルシステムの作成

ではクライアントからストレージを利用できるようにしましょう。今回はCephFSで接続できるようにします。

CephFSのファイルシステムをceph fs volume create ファイルシステム名で作成します。ファイルシステム名は今回は"sample"にしました。

$ sudo cephadm shell -- ceph fs volume create sample
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6

ファイルシステムが作成されたか確認します。ceph fs volume lsで。

$ sudo cephadm shell -- ceph fs volume ls
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
[
    {
        "name": "sample"
    }
]

これだけかー。とりあえずできてるみたいですね。

あと、最初にファイルシステムの場合にはMDSが必要とありました。ファイルシステムを作成したタイミングでこれも自動的にデプロイされています。

$ sudo cephadm shell -- ceph status
(snip)
  services:
    mon: 3 daemons, quorum node-1,node-2,node-3 (age 57m)
    mgr: node-1.hsnpph(active, since 2h), standbys: node-2.jebvpv
    mds: 1/1 daemons up, 1 standby
    osd: 3 osds: 3 up (since 48m), 3 in (since 48m)

(snip)

GUIでも見れますね。

f:id:kun432:20210926221532p:plain

クライアントからマウントする

CephFSをマウントするには、cephの設定ファイルや認証などを事前に準備しておく必要があるようです。以下に従って準備します。

設定ファイルを配置するディレクトリを作成。

vagrant@client:~$

$ sudo mkdir -p -m 755 /etc/ceph

設定ファイルを作成します。ドキュメントだとssh経由でcephコマンドを実行して取得しようとしていますが、

$ ssh {user}@{mon-host} "sudo ceph config generate-minimal-conf" | sudo tee /etc/ceph/ceph.conf

sshさせるのが面倒なので、ここもsynched_folderを使って受け渡しましょう。

vagrant@node-1:~$

$ sudo cephadm shell -- ceph config generate-minimal-conf > /share/ceph.conf
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6
vagrant@client:~$ 

$ sudo cp -pi /share/ceph.conf /etc/ceph/.

次にファイルシステムにアクセスするユーザと鍵を作成します。ここも同様にsynched_folderで経由で。

vagrant@node-1:~$

$ sudo cephadm shell -- ceph fs authorize sample client.foo / rw > /share/ceph.client.foo.keyring
Inferring fsid d3ff50c0-1eb9-11ec-87bb-02d610efa747
Using recent ceph image quay.io/ceph/ceph@sha256:10da7d95802d2a75e83fc0f6a2eaa11e3159371c3dea40875947c8be6ad4a9e6

ceph fs authorizeコマンドの引数は以下です。

  • ファイルシステム名。ceph fs volume createで作成したファイルシステム名。今回は"sample"。
  • クライアント名。client.クライアント名という書き方になるみたい。今回は"foo"で。
  • CephFS内のパス。パスの作成がよくわかってない(ここまでの手順では出てきていない)ので"/"で。
  • ファイルシステムへの権限。

これでユーザと鍵情報を記載したファイルが生成されるので、クライアント側で/etc/ceph以下に配置します。

vagrant@client:~$ 

$ sudo cp -pi /share/ceph.client.foo.keyring /etc/ceph/.

ではいよいよマウントです。カーネルドライバを使う場合とFUSEを使う場合がありますが、今回はカーネルドライバで。Ubuntuの場合はceph-commonパッケージを使えば良いようです。

vagrant@client:~$ 

$ sudo apt-get install -y ceph-common

マウントポイントを作成します。

$ sudo mkdir -p /mnt/mycephfs

マウントします。

$ sudo mount -t ceph :/ /mnt/mycephfs -o name=foo
server address expected
failed to resolve source

できません・・・ドキュメントによると、/etc/ceph配下に設定ファイル等をおいておけばよしなにやってくれるみたいなのだけど、私の環境ではダメだったので、ホスト名などを指定してみます。

$ sudo mount -t ceph node-1.internal:6789,node-2.internal:6789,node-3.internal:6789,:/ /mnt/mycephfs -o name=foo,secret=AQBsd1Bhs6jcMxAAk7IKLCnyrbkPO9D3/GCCsw==
$ df -h
$ df -h
Filesystem                                         Size  Used Avail Use% Mounted on
udev                                               480M     0  480M   0% /dev
tmpfs                                               99M  640K   98M   1% /run
/dev/sda1                                           39G  1.6G   38G   5% /
tmpfs                                              493M     0  493M   0% /dev/shm
tmpfs                                              5.0M     0  5.0M   0% /run/lock
tmpfs                                              493M     0  493M   0% /sys/fs/cgroup
share                                              932G  367G  566G  40% /share
vagrant                                            932G  367G  566G  40% /vagrant
tmpfs                                               99M     0   99M   0% /run/user/1000
10.10.0.21:6789,10.10.0.22:6789,10.10.0.23:6789:/  9.5G     0  9.5G   0% /mnt/mycephfs

できました。マウントコマンドの引数ですが、ホスト名は複数指定可能なので、3台のノードをカンマ区切りで指定します。ポートは6789です。

あと。-oで、クライアント名と鍵を指定します。鍵はceph.client.foo.keyring内の鍵文字列をそのまま指定します。

$ cat /etc/ceph/ceph.client.foo.keyring
[client.foo]
    key = AQBsd1Bhs6jcMxAAk7IKLCnyrbkPO9D3/GCCsw==

ただ、secretがそのまま見えるのはよろしくないので、secretfileで指定することもできます。secretfileで指定する場合、上記のフォーマットではなく、鍵文字列だけにする必要があるようです。以下のコマンドで作成できます。

$ ceph-authtool -p /etc/ceph/ceph.client.foo.keyring -n client.foo | tee -a /etc/ceph/secret.foo

マウントし直します。

$ sudo umount /mnt/mycephfs
$ sudo mount -t ceph node-1.internal:6789,node-2.internal:6789,node-3.internal:6789:/ /mnt/mycephfs -o name=foo,secretfile=/etc/ceph/secret.foo

cephのファイルシステムに書き込んでみます。

$ sudo touch /mnt/mycephfs/hoge.txt
$ ls -lt /mnt/mycephfs/hoge.txt
-rw-r--r-- 1 root root 0 Sep 26 23:49 /mnt/mycephfs/hoge.txt
$ echo "this is test" | sudo tee /mnt/mycephfs/hoge.txt
this is test
$ ls -lt /mnt/mycephfs/hoge.txt
-rw-r--r-- 1 root root 13 Sep 26 23:50 /mnt/mycephfs/hoge.txt

これだけだとちょっと分散ストレージというのがわかりにくいので、ちょっとひねってみます。

$ sudo mkdir  /mnt/mycephfs_node-1
$ sudo mkdir  /mnt/mycephfs_node-2
$ sudo mkdir  /mnt/mycephfs_node-3
$ sudo mount -t ceph node-1.internal:6789:/ /mnt/mycephfs_node-1 -o name=foo,secretfile=/etc/ceph/secret.foo
$ sudo mount -t ceph node-2.internal:6789:/ /mnt/mycephfs_node-2 -o name=foo,secretfile=/etc/ceph/secret.foo
$ sudo mount -t ceph node-3.internal:6789:/ /mnt/mycephfs_node-3 -o name=foo,secretfile=/etc/ceph/secret.foo
$ sudo touch /mnt/mycephfs_node-1/foo.txt
$ sudo touch /mnt/mycephfs_node-2/bar.txt
$ sudo touch /mnt/mycephfs_node-3/foobar.txt
$ ls /mnt/mycephfs_node-1
bar.txt  foo.txt  foobar.txt  hoge.txt
$ ls /mnt/mycephfs_node-2
bar.txt  foo.txt  foobar.txt  hoge.txt
$ ls /mnt/mycephfs_node-3
bar.txt  foo.txt  foobar.txt  hoge.txt

これで分散ストレージとして動いているのがわかりますね。

まとめ

分散ストレージ、初めてやってみたのですが、実際に動くとちょっと感動ですねぇ。ただ、ちょろっと触ってみた感じだと、

  • 最初に概念的なものを理解するのが大変
  • いろいろなものが動いてて複雑
  • ドキュメントがほぼ公式しかない

あたり、ちゃんと運用しようと思うといろいろ調べないといけないことが多そうです。Kuberetes触り始めたときと同じ感じですね。

とりあえずぼんやりcephの雰囲気を味わったので、次はrook-cephをやってみる予定です。

参考

blog.father.gedow.net