3Dプリンタを使って何が作れるの?

最近は3Dプリンタで何か作れないかな?と試行錯誤しています

主なものは以前記事にしたのですが、その他細かいものについては触れていなかったので、せっかくなので記事にしてみます。

3Dプリンタで何ができるの?という方に見てもらいたいです。

 

以前記事にしたもの

inajob.hatenablog.jp

inajob.hatenablog.jp

 

クランプ

机の端に何かを固定するための器具。

直径1cmのねじであれば3Dプリンタで出力して、そこそこ強度があるなということが分かった。

(のちにクリアグリーンのフィラメントにしたところ、微妙にうまくいかなくなった、このとき使っていた白フィラメントが特別こういう造形に向いていたようだ)

f:id:inajob:20170930192911p:plain

例えばこんな風にして、机の横の空中にペン立てを固定したりしている

f:id:inajob:20170930193340p:plain

テーブルの脚

使わないテレビ台があったのだが、これにタイヤがつけられるとワゴンのように使えるということで、本来はゴミ箱の脚であったタイヤを流用して、テレビ台にタイヤをつけてみた。

f:id:inajob:20170930193454p:plain

今でも便利に活用中

表札

この要領で家の表札を作った。立体感のある名札みたいなものも作れそう。

背景にある謎の網掛けみたいなのがポイントで、これがないと各パーツがばらばらになってしまう。

f:id:inajob:20170930194002p:plain

 

途中で折れたUSBハブを直す

本来くるくると回転するUSBハブだったのですが、回転部分で折れてしまいました。断線しているわけではないので、USBハブとしては使えるのですが、、、 というものを修理

 

ビフォー↓

f:id:inajob:20170930194155p:plain

あふたー↓  回転機能は失われたが、特に使ってなかったので問題ない。

f:id:inajob:20170930194307p:plain

ゴミ箱にティッシュをひっかけるやつ

これはまだ改良が必要そう。とりあえず床に物を置いていると散らかるということで、ティッシュをゴミ箱と一体化する計画。

f:id:inajob:20170930194418p:plain

自作ゲーム機のケース

過去に記事にした自作ゲーム機をケースに入れてみた。

余裕をもって作ったらかなり大きくなってしまった。上下ケースの固定に3Dプリンタで出力した直径1cmのねじを使うようにしてみた。

inajob.hatenablog.jp

f:id:inajob:20170930194547p:plain

自作ミニピアノのケース

上とほぼ同じ要領で作成した。

f:id:inajob:20170930195020p:plain

中身はこんな感じ、秋月C基板くらいのサイズです

f:id:inajob:20170930195132p:plain

まとめ

今年のはじめに3Dプリンタを買って、いろいろ試行錯誤してきましたが、まだまだやりたいことが残っています。とりあえず「自分で作った電子工作のケースを作る」というのができるようになったので、買った目標はある程度果たせたのかなと思っています。

Fabスペース的なところで3Dプリンタを使うというのもありだとは思うのですが、家に3Dプリンタがあるということは、高速プロトタイピングを行う上ではかなり重要なことだと感じました。ハマっているときは、仕事から帰ってきて、3Dプリントを始めて、まずいところを見つけて、設計を直して、翌日帰宅後にまた3Dプリントをしてみて、というサイクルを回してたりします(留守中に動かすのはまだ怖い)

電子回路、ソフトウェア、3Dプリンタ この3つがそこそこ扱えると、思い描いた装置を最後まで自分の手で設計して作ることができるので、なんというか一種の全能感みたいなものが感じられて非常に楽しいです。モノ作りが好きな方、3Dプリンタおすすめですよ!

inajob.hatenablog.jp

 

ちなみに僕は以前から3Dプリンタがほしいなと漠然と思っていたのですが

sftt.jp

この記事を見て3Dプリンタを買おうと決意しました。悩んでる人はこちらも要チェックです。

 

ESP8266で納豆ボタンをつくってみた

これは何?

納豆が無いときにぽちっと押すと「納豆がない!」とLINEに投稿する素敵なガジェットです。

いわゆるAmazonDashボタンのようなものですね。

f:id:inajob:20170918232404p:plain

 

 

なぜ作った?

以前から我が家ではお手製の「Todoアプリボット」を使っていました。

このボットは「~が無い」とか「~買った」というキーワードに反応するボットで、グループチャットに参加させておくことで、自然と買うものリストを管理できるようになるというものです。

 

これはこれで便利なのですが、台所で家事をしているときに、納豆がないな・・ スマートフォンを取り出して「納豆が無い」、、っと  とやるのが億劫になってきたのでワンタッチでこれができるものが必要となってきたのです。

 

アーキテクチャ

f:id:inajob:20170918210008p:plain

仕組み

ESP8266を使っています。

単三電池3本で駆動します。常に動かしているとすぐに電池がなくなってしまうので、「電源ボタン」を用意しています。これを押してからしばらくの間は入力を受け付け、一定時間が経過すると自動的にスリープに入ります。

(本当はこの部分も自動化して、納豆ボタンを押した瞬間に電源が入って、送信後自動的にスリープするようにしたいが、良い方法が思いつかなかった)

また、納豆だけではつまらないので8個のボタンを搭載しています。我が家では「納豆」「牛乳」「たまご」「豆腐」の追加と削除ができるようにしてみました。

我が家に小型のI2C液晶が余っていたのでステータス表示用に取り付けています。

f:id:inajob:20170918210840p:plain

思いつくままに作ったので、中身が結構ぐちゃぐちゃです。

一応メイン基板と、キーボード基板、液晶基板の3枚構成です。

f:id:inajob:20170918232543p:plain

筐体

3Dプリンタと長いネジで作っています。

f:id:inajob:20170918210950p:plain

まだ慣れないけどFusion360モデリングしました。

 

案外でかいです。もっとコンパクトにする余地あり

f:id:inajob:20170918232434p:plain

 

 まとめ

3Dプリンタがあると思いついた形のものが作れて便利だなと思う反面、せっかく自由度が高い3Dプリンタなのに、なんの面白みもない四角い筐体にしてしまった。

ともあれ、しばらく我が家で動かしてみて電池の持ち具合や、使い勝手について検証したいところです。

650円のマイコンでここまで作れちゃうのはとてもリーズナブル。これを見てる方も生活を便利にするガジェットを作ってみませんか?

 

 参考

Wi−Fiモジュール ESP−WROOM−02 DIP化キット: 無線、高周波関連商品 秋月電子通商 電子部品 ネット通販

ミニI2C液晶モジュール(8x2行)[バックライトなし] - SB0802GN - ネット販売

DeepSleepへの移行とボタン押下による復帰

 

8bitなゲーム環境Fantasy Computerをまとめてみる

Fantasy Computerとは

(おそらく)PICO-8PICO-8: FANTASY CONSOLE)というソフトウェアが言い出した概念のようです。Fantasy ComputerやFantasy Consoleとも呼ばれたりするようです。

低解像度、少ない色数の画面で、ゲームの実行のみならず、プログラミングや画像や効果音、BGMの作成までできてしまうという、ミニマルなゲームの統合開発環境(兼実行環境)です。

ゲームはLuaで記述します。ブラウザ上や、PC、RaspberryPi、PocketCHIPなどで作ったゲームを動作させられるようです。

 

f:id:inajob:20170702092903p:plain

f:id:inajob:20170702092951p:plain

開発するためには有料のソフトを購入する必要があるようですが、ブラウザで遊ぶ分には無料のようです。

 

IchigoJamも似たような感じですが、PICO-8はPC上で動作するソフトウェアで、CPUやメモリはマイコンよりは緩いようです。

Cloneたち

Fantasy ComputerであるPICO-8は商用製品で、かつオープンではありません。また統合開発環境という性質上、自分の独自機能を実装した派生形を作りたい人たちも多いようです。

 

ということで、PICO-8以外にもいくつかの類似したソフトウェアがあります。

TIC-80

nesbox.itch.io

 ブラウザでも動作するFantasy Computer。オープンソースで開発されています。Pro版というのが存在するようで、テキストファイルでのSave,Loadやメモリバンクの拡張などができるようになるようです。

Lua、Moonscript,Javascript, Wren, Flannelなどの言語でゲームを記述します。

画面解像度は240x136、16色ぱれっど 256の8x8スプライト、4チャンネルの音源 など

PICO-8のようにテキストエディタや、スプライトエディタ、マップエディタ、サウンドエディタが同梱されています。

FantasyComputerの中ではかなり活発に開発が進められています。

f:id:inajob:20170702093336p:plain

LICO-12

github.com

LÖVEというゲーム開発環境の上に実装されたFantasyConputerのようです。MIT Licence

Luaでゲームを記述します。作ったゲームはAndroidのLIKO-12でも動作するようです。

 

pixelvision8

pixelvision8.itch.io

今のところ製品版のみ?フリー版も近いうちにできるのだとか、、クローズドソースのようです。

Luaでゲームを記述します。

$7.49くらい

 

UnicornConsole

github.com

MITライセンス

400x240の解像度、32bit色、3200個の8x8スプライト、400x60セルのマップをサポート。

Rust, JavaScript, Python, Luaでプログラムを作ることができます。

組み込みの画像、サウンド、コードディタ

様々な環境で動作するように設計されておりSDL2, libretro, web, androidなどで利用できます。

pico-8のカートリッジも読み込めるようです。 (おそらく)

ここ1年くらいは更新されていないのが気になります。

f:id:inajob:20170702093831p:plain

tako80 

Tako 80

ブラウザで動作するFantasyComputer。オープンソースで無料。

ゲームはJavaScriptで記述する。コードエディタやスプライトエディタは同梱されていないので、今まで紹介したものとはちょっと毛色が違う。ゲームライブラリという位置づけのようにみえるので、enchant.jsなどに近いものかな?

2年前から更新されていないのが気になります。

f:id:inajob:20170702095040p:plain

basic8

b8 | BASIC8 - The Fantasy Computer/Console!

 

有償の8bitゲーム開発環境

解像度は160x128、2チャンネル音楽と4つのサウンドエフェクト、16色パレット

BASICで開発できる。

開発環境はリッチなGUIで構築されているのが他のFantasy Computerとの大きな違い

f:id:inajob:20190310112956p:plain

script-8

SCRIPT-8

JavaScriptで動作するFantasyConsole。ブラウザ上で動くコード、グラフィックス、マップ、エディタ

作ったゲームはブラウザ上で動作する。

ダークな淡い感じの固定色の8色パレット、60FPS

f:id:inajob:20190310115349p:plain

lowres-nx

LowRes NX

160x128の解像度、64個の32x32スプライト、6bitの8色パレット、4チャンネルのサウンド

プログラムはBASICで記述する

コード、画像、サウンドエディタが組み込まれている。iOSmacOSWindowsで動作する。公式ページではWebブラウザでもゲームが動いている。

ここからダウンロードできる↓

github.com

f:id:inajob:20190310113723p:plain

pix64

Pix64 by ZappedCow

これはちょっと毛色の違うゲーム開発環境です。

プログラムを書く必要はなく64x64のpngファイルを用意するだけでゲームが開発できます。

秘密は「色」で、色に応じて「敵」や「プレーヤー」「壁」などを表現してるようです。

f:id:inajob:20190310114622p:plain

pyxel

github.com

最近話題のPythonで動くゲーム開発環境。

固定色の16色パレットで、4チャンネルのサウンド出力をサポートしています。

キャラクタエディタやマップエディタ、サウンドエディタが組み込まれています。

全部入りのFantasy Computerというよりは、Pythonのゲームライブラリというほうが正確だと思います。

f:id:inajob:20190310115444p:plain

MakeCode Arcade

MakeCode Arcade

Microsoftが提供しているゲーム開発環境

Blockyを使ったビジュアルプログラミングや、JavaScriptを直接記述することでWebブラウザ上でゲームを作成・公開することができます。

いくつかのハードウェアでも作ったプログラムを動かすことができるようです。

f:id:inajob:20190310120546p:plain

 まとめ

8bitな感じのゲームを8bitな感じの統合開発環境で作るというFantasyConputerと呼ばれる分野のソフトを紹介しました。

ゲームを作ることと、ゲームを遊ぶことが一つのソフトでできるというのはゲームを作りながらプログラミングを学んだ僕にとっても、とても親近感の沸く思想です。

プログラミングに興味がある人は、まずは人の作ったゲームを遊ぶところから始めてみてはいかがでしょうか?

 

参考

良いまとめがありました: GitHub - paladin-t/fantasy: A curated list of available fantasy consoles/computers.

更新

  • 2019/03/10 最新の情報に更新しました

組みひも作り器を作った

これは?

組みひも作りを補助してくれる装置を作りました。

f:id:inajob:20170522234925p:plain

 

 

組ひもづくりで調べると、いわゆる「組ひもプレート」をつかった組ひもの作り方が紹介されています。

組ひもミサンガがカンタンにできます!〜手づくりミサンガで願いごとをかなえちゃお~?〜|手編みと手芸の情報サイト あむゆーず

 

これ、手軽でよいのですが慣れないと、途中で訳が分からなくなることがあります。

どこをどこにひっかけなおすか、LEDで教えてくれればよいのに・・・

 

と思ったので実際に作ってみました。

 

手始めに組ひもプレートを作る

自動化の前に手動でどうやるのかを確認しておきたい。

覚えたてのFusion360を使って設計をします。

f:id:inajob:20170522224249p:plain

これまた最近購入した3Dプリンタで出力。

100均で買ってきた刺繍糸を使って、すこしやってみる。

組ひもディスク&ミサンガディスク | ハマナカ手芸糸 ここに書いてある「8Zスパイラル」というのを試してみたら、案外いい感じに作れた。

f:id:inajob:20170522224356p:plain

さて、これをLEDで補助してもっと簡単にできるようにしたい。

 

試作

マイクロスイッチにひもをひっかける形で、どこにひもが引っ掛かっているかを、検知しようということで、設計を始める。

16個のスリットのある組みひもプレートをつくりたいが、いきなり作って失敗しても悲しいので、1/16でまずは設計してみる

はじめは、マイクロスイッチについている「穴」で固定しようと、こんな設計にしてたのですが、、

この棒が、よく折れる、、根本的にこの設計はよくないということで方針変更

f:id:inajob:20170522230423p:plain

下から支える形にしてみる。

f:id:inajob:20170522230240p:plain

マイクロスイッチと、LEDが固定できることを確認。

これを円周上に16個複製する。

 

f:id:inajob:20170522230320p:plain

どーん。

これ出力に3時間くらいかかるのです・・・ 何度か試行錯誤して、やっと完成

死屍累々。なんか陰陽道のアイテムを作っているみたいだ・・

f:id:inajob:20170523124431p:plain

で、完成品

f:id:inajob:20170523132845p:plain

0.1ミリ単位で合わせるのは難しかったので、あえて余裕をもって作ったのでマイクロスイッチがかなりガタガタします。そこで、マイクロスイッチを固定するために、くさび型のプラスチック片を突っ込んでいます。

f:id:inajob:20170522231218p:plain

こういうのを作って、ニッパーで切りました。

あと、地味に困ったのが、「おもり」です。

マイクロスイッチを作動させるためには、紐にある程度の力が加わっている必要があるのですが、手近なもので、小さくて重たくて、紐に固定できるものがない・・・ということでホームセンターでこれを買ってきました。

f:id:inajob:20170523132901p:plain

2枚使うといいくらいの重さになりました。

それと、この装置を高い位置に固定するための、円筒形の筒も何を使おうか悩みました。

本場では「丸台」などと呼ばれる、小ぶりの木の椅子のようなものを使うようなのですが、我が家にそのようなものは無いし・・・

f:id:inajob:20170523132920p:plain

案外探せばあるものでした。 容量が足りなくて引退した我が家のピッチャーを流用。

 

回路は単純なのですが、16個のマイクロスイッチとLEDをつなげるために配線がとても面倒・・

また、3Dプリントした部分は熱に弱く、はんだ付けがとても大変でした。

f:id:inajob:20170523132936p:plain

次作るなら一番底はプリント基板にしたい。

ダイオードを入れ忘れて、同時押しが検出できない罠にはまったので、無理やりダイオードを入れました。

今のところ制御はArduino(のファームウェアの入った素のATmega328)。4*4でLEDをダイナミック点灯させて16個のLEDを個別に制御。4*4でスイッチをマトリクス配線し16個のスイッチをスキャン。

f:id:inajob:20170523132954p:plain

ソフトウェアまでくればあとはこっちのもの。

 

できたー!

下の赤い紐を左上の光っているところに移動せよ という感じです。

f:id:inajob:20170523133017p:plain

移動させると

f:id:inajob:20170523133028p:plain

次は上の赤い紐を、右下のLEDのところにもってこい という要領で、光の導きに従って紐を移動させていると、自然と組み紐が完成するという装置です。

 

まとめ

3Dプリンタと電子工作とプログラミングの知識があればこんなものもサクッと作れる!

と言いたいところですが、かなり大変でした。

  • 3Dプリンタは設計通りには出力しない
  • 3Dプリンタで大きなものを作るときはすごい時間がかかるので覚悟する
  • 同じ部品が16個 といった設計は、回路を作る時に大変つらい
  • 困ったらホームセンター・100均をぶらぶらしてみる

 

ちょうど今の僕のスキルでぎりぎり作れるという感じの良いお題でした。せっかく買った3Dプリンタなので、今後も活用していきたいです。

 

追記: 音を鳴らすようにしてみた

後日改造して、紐の移動に合わせて音を鳴らすようにしてみました。

 

 

mastodonのぞき見ツールを作った

これはなに?

今話題のmastodonにログインせずに、すごい勢いで流れるタイムラインを見ることができるWebサービスです。

画像だけを表示するモードもあります。(海外からBanされるような画像も流れてくるので職場での閲覧には注意が必要です!)

 

→ mastodonのぞき見ツール

→ mastodon画像だけのぞき見ツール

f:id:inajob:20170423194843p:plain

 

 

仕組み

mastodonAPIは公開されているので、その中にあるストリーミングAPIを使って作りました。

documentation/Streaming-API.md at master · tootsuite/documentation · GitHub

 

しかも nodejsのライブラリを作ってくれてる人がいたので、これを使いました。

github.com

 

図にするとこんな感じです。

f:id:inajob:20170423194810p:plain

姉妹サービス

Twitterのタイムラインをのぞき見する「毎秒新聞」もおすすめです!

inajob.dip.jp

3Dプリンタを買った(ZONESTAR P802N)

3Dプリンタを買った

年末あたりから、妙に3Dプリンタがほしくなり、よく似た機構のプロッタを作ったりしていました(

自作プロッタさらに改良 - inajob's blog )が、ついに購入しました。

どこで買ったの?

知っての通り僕は安いものが大好きなので、3Dプリンタも多少苦労してでも安いものが良い!ということで、中国通販です。

https://ja.aliexpress.com/

機種は?

ZONESTARなる会社のP802Nという機種です。組み立てキット形式

s.click.aliexpress.com

これはReprapと呼ばれるオープンソース3Dプリンタの一種で、これ以外にもたくさんの会社が出しているようです。

RepRap/ja - RepRapWiki

オープンソースということで、交換用の部品や、3Dプリントに関する様々なノウハウが大量にあるのが、こういった商品の良いところですね。

 

追記:近い機種の紹介

本家の機種は販売停止になってしまいました。

今買える近い機種はAnetかな・・

 まぁこの記事を書いた当時からはずいぶん経って、今は良い組み立て済みの3Dプリンタも出てきていますので、「さっさと3Dプリンタで遊びたい」という人はそっちの方が良いでしょう。

事前準備

中国通販もあまりやらないので、事前準備としてインターネットで情報収集。そこで見かけた情報と(僕の場合の)真偽

  • 注文数が多い・星の多いストア・商品を購入しよう → 従いました。☆が少ない商品や注文数が0といった商品は怖そう
  • 部品が足りないことがある → 僕の場合は足りていました。
  • 部品が壊れている・ねじが曲がっている・ねじ山が浅い → 僕の場合はほとんど問題なし

注文

ちょうどaliexpressの7周年セールをやっていたので、それに便乗して購入。

購入から手元に届くまで、1週間半くらい。

aliexpress経由で販売元から説明のチャットが来るが全く読めない(翻訳後に漢字が欠落しているようだ・・)

f:id:inajob:20170410073930p:plain

まぁ何とかなるだろう・・

到着

大きな箱にこんな風に、梱包された部品が届いた。嬉しい!

f:id:inajob:20170410081634p:plain

検品

SDカードが同梱されており、その中にpdfで説明書が入っていた。aliexpressのチャットでも同様の説明書へのリンクをもらった。基本的にはそれに従いながら作業していった。

まずはパーツリストの確認から。

マニュアルのバージョンから、2015/6ごろの製品であることを知る。ねじの本数が少し足りない(後でわかったことだが、ねじは足りていた。マニュアルに記載の本数が多い?)

ほとんどのねじはM3で長さは主に2種類、ねじの種類が少ないのは助かる。

ステッピングモーターのためのケーブルが1セット多い。予備かな?

骨組みは8mm厚くらいのアクリル版をレーザーカットしたもので、品質は微妙。細かいところにバリが残っているので、ものによっては少し削る必要があった。(その辺にあるニッパでちょいちょい程度)

またマニュアルとは微妙に違う形のアクリル板が入っていて焦るが、どうもマニュアルに書いてあるものの代用品であることが判明。

f:id:inajob:20170410081758p:plain

コントローラーボードはZRIB V2という名称のもので、どうやらこれはオープンソースのRAMPS1.4というボードの互換品のようだ。USB-SerialはCP210X、プロセッサはATMEGA2560 (Arduinoを触っているからなんとなく親近感のわくボードだな)

 

RepRapのコントローラーはたくさんの種類があるようで、ここにまとめがある 

Comparison of Electronics - RepRapWiki

組み立て

まずはアクリル板の保護フィルム的なものをひたすらはがす。(これをやっておくと後の作業がスムーズ)

Before

f:id:inajob:20170410081838p:plain

After

f:id:inajob:20170410081852p:plain

あとはマニュアルに従って、作業していく。

www.youtube.com

チャットで教えてもらった、この動画が、非常にわかりやすい。マニュアルはこの動画のスクリーンショットのようなものだった。

Extruderや、Z軸の赤い部品はあらかじめ組み立て済みだった。

組み立ては、基本的にはねじを締めていくだけ。

Z軸の軸受けが微妙に曲がっていて、赤いパーツがスムーズに上下しないトラブルがあったが、軸受けを少しだけ緩めて固定することで事なきを得た。

f:id:inajob:20170410082418p:plain

X軸のリミットスイッチは、あらかじめExtruderに固定してあったが、向きが逆だった。外して付け直す。

f:id:inajob:20170410082110p:plain

配線

ここで壊れたら悔しいので慎重に。

コネクタを刺していくだけなので、間違う要素は少ないとは思いつつ、慎重に作業。

一部のワイヤーは被覆を剥く必要があったので、我が家にあったワイヤーストリッパーを使った。

 

極性のないものについては、同じ色の線になっているようだ。配線が多いので、同梱されていたプラスチック製の配線を束ねるやつで、ぐるぐる巻きにする。これをやらないとヘッドが移動するときに配線のどれかが筐体に引っかかる。

 

電源ユニットは、内部に電圧切り替えスイッチがある。日本に合わせて110Vに設定(本当は100V?)

電源をミスるとボードを壊しそうだったので、単体でスイッチを入れてみて、テスターで出力を測定してみる。正しく12Vが供給されていることを確認後コントロールボードにつなげる。

恐る恐る電源を入れてみたところ・・ ついた!LCDにメニューが表示されている。

 

f:id:inajob:20170410082449p:plain

 

調整

Z軸の左右のバランスを調整。Z軸Limitスイッチの位置調整。ヒートベッドの高さ、傾きの調整。レベル調整確認のgcodeを食わせてみて、Extruderがヒートベッドから良い距離のところにいるかを確認する。

これらができたら、大体準備完了?

初出力

まずはSDカードに入っているgcodeデータを読ませてみる。

が、、、 プラスチックがヒートベッドに全く定着しない・・材質はPLAなので、難易度は低そうなのだが、、

どうやら3Dプリンタにおいては、この1層目を定着させることが大変重要なことのようである。専用のシートや、マスキングテープのようなもので、ヒートベッドの食いつきをよくするような工夫が必要とのこと・・

同梱物の中に、怪しげな青色のシールがあったのでこれをヒートベッドに貼ってみることにする。

無事、1層目が食いついた! 1時間かけて、特に意味のない物体が出力できた!

 

f:id:inajob:20170410082513p:plain

f:id:inajob:20170410082529p:plain

PCとの接続

USBケーブルをつなげ、説明書でおすすめされていたRepetier Hostというソフトからつなげてみる。特に問題なく接続完了。

テキトーなstlファイルを読み込んで、slicerで3Dプリンタのgcodeに変換し、出力する という作業を実施することができた。

f:id:inajob:20170410082921p:plain

f:id:inajob:20170410082545p:plain

かかった時間

マニュアル確認、検品に2時間くらい?

組み立て・配線は、のんびりやってたので7時間くらい

それから3時間くらいかけて、出力にこぎつけた。

感想

トラブルがなくてよかった。出来上がってみれば、大人のプラモデルといった感じ。

他と比べてはいないが、精度もそこそこ良いものだと思われる。1層目の食いつきさえうまくいけば、あとは放っておいてもうまくやってくれる印象。さて、何を作ろうかな・・

 

 

 

月5ドルの海外VPSでKubernetesを試してみる

これは?

Kubernetes試してみたい!ということで、GKEやAmazon ECSを使うのも良いのですが、そこそこお値段が・・ ということで、格安VPSを使ってKubernetesを試してみます。

 

ほかの選択肢

正直なところ純粋にKubernetesを動かす場合はGKEやAmazonECSを使うほうがおすすめです。が、まぁせっかくやってみたので知識の共有ということで記事にしました。

 

ローカルで試す場合はminikubeがおすすめです

github.com

さて、ここまで読んでまだ格安VPSでKubernetesを試してみたい方は、 続きをご覧ください。

 

※※追記:Kubernetes1.9でのやり方をまとめなおしましたので、下の記事を参照してください※※

inajob.hatenablog.jp

※※追記:以下は古い手順です※※

 

海外VPS

僕が使っているのは海外VPSのvultr。と言ってもTokyoリージョンにもマシンを払い出せます。


紹介コードを介すると僕が幸せになるのでお願いします
こちらから登録! ↓

www.vultr.com

さて、vultrでマシンを作るところは省略。
OSはubuntuでメモリ1GB 1CPU Coreのマシンを作る。 これでだいたい月$5のプランのようだ。

f:id:inajob:20170402181428p:plain

 

f:id:inajob:20170402181333p:plain

swapをつくる

swapができないと確実にメモリが足りなくなるので設定します。(このプランでは根本的にメモリが足りないという話はとりあえず無視する)

 

# dd if=/dev/zero of=/swapfile count=2048 bs=1M
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile

参考 https://www.vultr.com/docs/setup-swap-file-on-linux

 

注意

kubeadmはまだ開発中のプロダクトのようです。また、master、workerを1台でやるのもセキュリティ上推奨されていないので、あくまでこのやり方はお試し、ということで

 

 kubeadmでクラスタを作る

kubeadmというツールを使うと、kubernetesクラスタを簡単にお試しできる環境を構築できます。

ざっと図にすると下図のように、kubernetesの稼働に必要なコンポーネントを一気にセットアップしてくれます。あくまでお試し、なのでセキュリティ上はよろしくないところや、etcdが1台のみという全く冗長性のない構成のクラスタであるという点には注意が必要です。

f:id:inajob:20170402183104p:plain

 必要なパッケージをインストールします。

# apt-get update && apt-get install -y apt-transport-https
# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
 deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io
# apt-get install -y kubelet kubeadm kubectl kubernetes-cni

 

 

kubernetesクラスタの構築をします。
「kube-dns」の設定を変える部分が少々トリッキーです。もちろん、もっと良いマシンを使っていれば素直に立ち上がります。
# kubeadm init
(略 結構待つ)

(1台で全部やりたいので、workerにもPodを配置するように設定)
# kubectl taint nodes --all dedicated-


(ネットワークの設定)
# kubectl create -f https://git.io/weave-kube

(kube-dnsが動かないので無理やり設定を変える)
# kubectl edit deployment kube-dns --namespace=kube-system
(viが起動するのでResourceの制限をすべて消したうえで保存する)

# kubectl get pods --namespace=kube-system
(すべてのpodがRunningになるまで待つ)
これで一応kubernetesができたはず
 
試しにkubernetes-dashboardをデプロイしてみる
 
kubernetes-dashboardにアクセスするには、まずNodePortを確認する。
 
 
# kubectl get svc --namespace=kube-system
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)         AGE
kube-dns               10.96.0.10       <none>        53/UDP,53/TCP   2h
kubernetes-dashboard   10.106.150.108   <nodes>       80:31982/TCP    27m
ここに出ている31982というのがそれ。
 

これでアクセスできる。(31982は環境によって違うはずです)

ちなみに、これなんの認証もないので、インターネット上の誰でも見える状態になっています。kubernetes-dashboardからは任意のコンテナを実行させたりできるので、これは非常に危険です。確認が終わったら、すぐにkubernetes-dashboardは消すか、外から直接アクセスできないようにすることをお勧めします。

手元のマシンからkubectlを実行する

f:id:inajob:20170402183038p:plain

 

いちいちVPSにログインしてkubectlを実行するのもだるい。

幸いkubectlは各OSごとにバイナリが提供されているので、例えばWindowsのノートパソコンから利用できる。
手元からkubernetesクラスタへアクセスするためには向き先や認証情報を取得する必要がある。

 

 先ほどセットアップしたVPSのv /etc/kubernetes/admin.conf というファイルに必要な情報が入っているので、SCPなどで手元に持ってくる。

手元のマシンにkubectlのインストール

手元のマシンの環境に合ったkubectlをインストール(といってもバイナリを落としてくるだけ)

 OSごとに違うのでやり方は下記を参考

kubernetes.io

 

手元のマシンでkubectl proxyを実行

$ kubectl --kubeconfig=admin.conf proxy --port=8080
 
これで、手元のマシンにkubernetesのapiserverへの認証済みのプロキシが作られた。
 

手元のマシンでkubectl を実行

$ kubectl get pods
 
などと、kubectlコマンドを実行できる。
ここまでできればkubernetesのホストにログインする必要はなくなる。
 

メトリクスを収集する

なんといっても非力なスペックのVPSです。メトリクスが気になります。
 この記事に従って、Prometheusを入れてみます。
 
 prometheusのUIを確認してみます。まずはアクセスするためのポートを知る必要があります。
 
$ kubectl get svc prometheus
NAME         CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
prometheus   10.103.242.223   <nodes>       9090:30090/TCP   1m
PORTSのところの30090に注目
  にアクセスすることでprometheusの画面を見ることができます。

f:id:inajob:20170402185713p:plain

 CPUやメモリの様子が見たいのでnode-exporterを入れる

node-exporterをデプロイして、数分待つと、prometheusにメトリクスが収集されます。

f:id:inajob:20170402190115p:plain

prometheusのUIは慣れないとわかりにくいのですが、一番上のテキストエリアに"node_cpu"と入力し「Execute」をクリックするとこの画面になります。 Valueのところに、それっぽい値が出ています。
また、Graphというタブみたいなのをクリックすると

f:id:inajob:20170402190305p:plain

なんかグラフっぽいものを見ることもできます。

気になるメモリは?

"node_memory_MemFree" がそれっぽいですね。

f:id:inajob:20170402190425p:plain

 えーっと、あと80M余ってるということかな・・?

メトリクスを可視化する

f:id:inajob:20170402193918p:plain

Prometheusの可視化もまぁそこそこですが、もう少し見やすくするためにGrafanaを導入します。
先ほど紹介した記事によると

Kubernetes のメトリクスを Prometheus を使って監視する - Qiita

 メトリクスを監視するというタイトルで記事を書き始めましたが, メトリクスを収集するところまでで終わってしまいました. 次は今回収集したメトリクスをどのように可視化するかについてまとめたいと思います.

 次回作に期待・・となっている

しかしリポジトリを見るとすでに用意してあるではないか!

github.com

 
感謝しつつ、これを使ってみることにする。
grafanaにアクセスするためのポートを確認
$ kubectl get svc grafana
NAME      CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
grafana   10.103.143.142   <nodes>       3000:30000/TCP   8s
30000のようだ。
をブラウザに打ち込んでみる。

f:id:inajob:20170402191301p:plain

それっぽい画面が出ました!

graphanaは可視化専用ツールなので、先ほどのprometheusをgraphanaに登録して、そのデータを見ることになる。

左上のロゴマークから、「Data Sources」を選択、その後緑の「+ Add data source」をクリック

f:id:inajob:20170402191441p:plain

設定はどうしようか・・

Name: 好きな名前でOK 画像だと"prometheus"

Type: Prometheusを選択、選択すると、それ以降の項目が変化する

Url: http://prometheus:9090 とする

f:id:inajob:20170402191751p:plain

Urlがhttp://prometheus:9090というのは初見では驚くかもしれない。これで、先ほど作ったprometheusにアクセスできる。

種明かしをするとkubernetesクラスタの中にはdnsサーバが同梱されていて、まずServiceの名前として解決できるかを調べるようになっている。そのため、このような名前でアクセスできる。

 

さて、データベースの登録が終わったので、いよいよ可視化してみよう。

可視化のためには、先ほどのように、"node_cpu"だの"node_memory_MemFree"だの、prometheusやnode_exporterの知識が必要となる。だるい。。

ということで、先人の用意したdashboardを借りてくることにする。

dashboardは下記から探すことができる。

grafana.com

今回はnode-exporter用と思われる https://grafana.com/dashboards/22 をつかう。

 

ロゴからDashboards、からのImport

f:id:inajob:20170402192427p:plain

 Graphana.net Dashboardというところに「https://grafana.com/dashboards/22」と入力

f:id:inajob:20170402192652p:plain

入力してしばらくすると画面が変わる。

OpthinsのPrometheusのところ、ドロップダウンメニューから、先ほど登録したDataSourceの名前を選択して、Sava&Open!

f:id:inajob:20170402192925p:plain

 やった!かっこいいグラフが出たよ!

f:id:inajob:20170402193016p:plain

ここまでできたら、メトリクスもサーバにログインせずに見ることができる。
さぁあとはkubernetesを使い倒すだけだ!
 

注意

kubeadmはまだ開発中のプロダクトのようです。また、master、workerを1台でやるのもセキュリティ上推奨されていないので、あくまでこのやり方はお試し、ということで