monolog

monora log #=> ものろーぐ

そろそろ Kubernetes 入門する (1)

Cloud Native

いい加減クラウドネイティブっぽいことをやりたいと言い出して早数年、世の中の流れには完全に乗り遅れた感がありますが、今更入門することにしました。

この記事を書いている時点で、すでにこのブログが構築したクラスタ上で動いているところまでは来ていますが、ゆっくり備忘録がてらまとめていくことにします。

ただkubeadmでシングルノードで立てても面白くないよね、ということで、色々と試してみることにしました。

  1. 実験のしやすさを考慮してVMの上に建てる

  2. VM基盤は n0stack を使う

  3. 可能な範囲でちゃんと冗長化する

  4. ちゃんとアプリケーションを乗っける

  5. 完全なお遊び用のクラスタは別に作る

あたりを基本方針にしました。

ホストについて

さて、まずサーバはどうするかという問題がありました。現代なので冗長化するなら3台欲しいので、お手軽かつ高速なマシンが3台必要でした。

また、過去にも同じことをやろうとして、秋葉原で安く売っていたサーバ(通称赤鯖)を3台買ってはいましたが、CPUもRAMも足りない && ファンの音がうるさいということで放置されて早3年が経過したので、次は静かなマシンが良かったわけです。

というわけで安くて速くて静かでRAMが積めるマシンを検討した結果、 Lenovo の M75q Tiny Gen2 を購入しました。定番ですね。Ryzen 7はコアが多くて速い。 ただ、予算の都合でまだ2台しか買えてません。

購入後の感想ですが、静かで小さいので自室の足元に置いても気にならずかなり満足しています。CPU使うと流石にファン回って気になりますけどね。

https://twitter.com/sukukyon/status/1382987513598382081

一方で、色々構築をすすめるにつれ、ストレージが256GBだと足りないか? と思うことがあり、SATAのSSDを追加することを検討しています。 ストレージ足すなら別に小さい必要はなかったのでは……という気持ちがあり、 V55t Mini-Tower とかでも良かったのでは……という気持ちに。計画性がない。

ストレージをどうするか問題は常に付きまといますね。後述するかもしれませんが、現在は、このクラスタとは別に以前から運用していた FreeBSDサーバに刺さっている雑なディスクをミラーリングしてNFS共有しています。RDBMSとかやろうとするとiSCSIの方が良いかもしれない……

OSは雑に Ubuntu 20.04 Server を選択。

n0stack

今回のVM基盤です。別にlibvirtでもOpenStackでもなんでも良いのですが、構築が楽 & 動作が軽くて、コードはなんとなく分かるので気になったら自分で直せるし、ぐらいの気持ちで選択しました。

n0tsack は 友人の @h-otter が主となって開発していて、過去には ICTトラブルシューティングという大会で数百VM規模で動いた実績があります。紹介記事は本人が書いてるので読んでください。

n0stackの紹介 - h-otterの備忘録

https://github.com//n0stack/n0stack を眺めて、 n0core と n0cli があれば動くことが分かったので適当にやります。

VMを起動する/管理する本体である n0core は、全体の管理をする api とQEMU等を制御する agent からなります。 データストアは api にいて、デフォルトでは設定不要の LevelDB を使用します。LevelDB は特にデーモン等が不要のDBで、api が動くホストの /var/lib/n0core あたりに勝手に保存されます。 冗長化したければ etcd も使えます、が構築時点では etcd or LevelDB を使っていて、デフォルトだと LevelDB を使うので、特にDBの設定は不要です。雑に GitHub の README を見てデプロイします。

VMのセットアップはあまり考えずにドキュメントを参照すれば良い、と思いきやハマりました。QEMUの仕様が変わったらしい? https://github.com/n0stack/n0stack/pull/239 で解決。そのうちマージします。

適当な Ubuntu が起動することを確認したところで一旦ここまで。(ホスト名は k8s-0X だが別に Kubernetes は動いていない)

https://twitter.com/sukukyon/status/1390780779911802884

いい加減クラウドネイティブっぽいことをやりたいと言い出して早数年、世の中の流れには完全に乗り遅れた感があります[…]

修論執筆だいありー

お役立ち情報 生活

2021年初ブログ投稿. 就活をしたら次に何が来るか,そう,(卒業|修士|博士)論文です. 今回は修士論文を選択しましたので,クリアまでのチャートを公開します.

時間がないときにはついつい焦ってファイル名をtempやらhogeやらaaaやらにしてしまいがちですが,1週間以上の戦いでそれをやると4日目あたりで死にます.ちゃんとツールを活用しつつ継続的かつコンティニュアスな方法で解決しましょう.

今回は2週間で実験をやって論文を書かないといけなくなった私みたいな読者の方のために,研究を加速させた手法をダイジェストでお届けします.

Tl; DR

https://twitter.com/sukukyon/status/1351925535123755014

read more »

2021年初ブログ投稿. 就活をしたら次に何が来るか,そう,(卒業|修士|博士)論文です. 今回は修士論文を選[…]

就活の技法 / 統括 2020

お役立ち情報

この記事は whywaita Advent Calendar 2020 24日目の記事です。無事今年の木曜日シリーズも終えることができてホッとしています。去年のことは忘れましょう。

タイトルが偉そうですね。そんなことより KMNZ LIZ の声を聞いてください。声が良い。ズのクリスマスボイスを買い忘れて号泣してます。

現代では就活は戦に例えられることも少なくありませんが、そんな私の就活 2021の陣は、他人はおろか自分の想像すら遥かに振り切る不毛な延長っぷりを見せ、冬の陣だったはずが気がつけば夏の陣になり、不毛な「朝X時はどうにかなりませんか?」「無理です」という押し問答も飽きてきて、結果として自分探しの旅へ何度も離島へ行き、その甲斐あってか無事に終わりを迎えました。 関係各位の皆様には、改めて振り回してしまったことをお詫びします。

本編

就活に関する諸々は後述するとして、今回の就活で得た知見を自分なりにまとめたスライドを、今後就活に挑む方々の参考になればと思い供養します。クリスマスプレゼントです。

このスライドは、2020年10月にあるキャリア系企業の依頼で実施したセミナーで使ったものを大幅に改変したものです。こんな就活自分語りに押し寄せた学生の数、なんと50人です。びっくりですね。(募集ページの1つ)

https://speakerdeck.com/kyontan/jobhunting-technique

イベント後に、同期にスライドを見せたら「偉そうなこと言ってるけど本筋は良いこと言ってる(意訳)」みたいな反応を頂いたので、そんなもんかと思っています。

基本的に就活はケースバイケースだと思っていて、自分が受ける業界・企業や時流・自分の個性・特性に応じて色々なやり方があると思うので、そこらへんにうまく折り合いを付けてやってください、という感じです。

以下は延々とおまけ(蛇足)です。

read more »

この記事は whywaita Advent Calendar 2020 24日目の記事です。無事今年の木曜日シ[…]

資産管理術について 2020

生活

この記事は whywaita Advent Calendar 2020 17日目の記事 その2かつ、過去に下にリンクした記事で書いた事柄の現状確認でもあります。

https://blog.monora.me/2017/12/how-to-manage-property-as-of-2017/

皆さんお金は好きですか? 僕は好きです。たくさんあると嬉しい気がします。ただ、今の立ち回りとしては、仕事に求める要件は給与が高いことではなく朝遅いことです。

そういえば、その記事ではこんなこと書いていました。 あれから3年、あなたの承諾した内定の決め手には確かに「朝遅い」が入っていました。喜んでください。

その1はこちら:

これは@whywaita Advent Calendar 2020の17日目の記事です(多分)Railsとフロントエンドの相性についての主観: 僕も現代的なFEとRailsは相性悪いと思うしAPIモードも大概デカイからSinatra+AR(~=Padrino)とかHanami とか流行ればいいのにって思います。いやRails使いたい気持ちは察しますが……

連投形式で何ツイートか書いたので、Railsと現代的なフロントエンドの相性に興味がある方はぜひ目を通してみてください。

Dr.Wallet の銀行口座連携機能、死す

さて、当時はDr.Walletで全ての入出金を管理していた私ですが、ある日 (2020-02-28)、Dr.Walletから届いた一通のお知らせメールが状況を一変させました。

一昨年、銀行法が改正され、銀行口座の参照について新たな規定が設けられました。

各銀行の残高を自動的に取得し家計簿に反映させる「銀行口座連携機能」ですが、 上記の法改正に伴い、今後のご提供を中止させて頂くことになりました。

(略)

今後のご利用については、2020年4月末を以て口座自動取得の停止を予定しております。

そう、銀行口座の連携機能が廃止されたのです。ATMの入出金やクレジットカードの支払い、給与等が反映されなくなったことで、Dr.Walletを使った私の資産管理は終わりを迎えました。残念ですが、開発リソースとか色々ありますから、仕方ないですね。

相変わらずレシートの撮影/送信は続けていますが、口座残高や現金がどんどん現実と乖離していくので、今は総資産が-100万円を突破しています。

それはそれとして銀行口座連携は欲しいので、MoneyForwardにも登録しましたが、こちらは現金記録が壊滅しています。たまにポケットからレシートをガサッと取り出してパシャパシャやるぐらいが限界です。

キャッシュレス革命と資産管理の崩壊

現実ではこちらの問題の方が深刻かもしれません。そう、キャッシュレスです。

様々な送金/決済サービスの登場で、現金以外にも資産が存在する状況が当たり前になってきました。 現金以外の資産はこれまでにも交通系ICカードやクレジットカードなどがありましたが、今では私が使っているものだけで Kyash / PayPay / LINE Pay / メルペイ d払い / Revolut / 6gram に残高が分散しています。そのほとんどがモバイルファーストのアプリで、スクレイピング等による連携が難しいものです。

現代では、3人での飲み代をPayPay で5000円支払ったときに、1人からはRevolutで、もう1人からはKyashで、僕は1000円をPayPay残高で支払い、残りは3000円を口座からチャージしてそこから支払うこともあり得ます。 このとき、僕がこの一連のやりとりを当時の文脈を思い出しつつ辿るためには何が記録されているべきでしょうか? 何も分かりません……何も……

とにかくKyashが全てのクレジットカード利用明細を破壊してくるので終わっています。Kyashの利用履歴、アプリでしか見られないしページネーション遅いし検索機能はないし辛いですね。キャッシュレスを肌で感じていきましょう。

現状

そうして管理を諦めたのが現状です。そのうち色々と成熟して、家計簿サービスとも連携していい感じになりそうですが、その世界はまだ来年には実現しなさそうです。

その他

マイルなど

JAL派なのでJALカードnaviを使っています。基本的に利用可能枠は10万円しかないのですが、比較的柔軟に一時引き上げに応じてくれるのでかなり助かっています。

そんなJALのマイレージ、今年はカードマイル(たくさん), フライトマイル(そこそこ)、JALカード系のボーナス(ちょっと)、その他(少し)で、トータル60000マイル強貯めることができました。これまで貯めていた分も合わせれば10万マイルを超えていましたね。さっき計算して自分でも引きました。学生JGC修行ブログ書いてるオタクじゃないんだぞ。 国際線減額マイルを使って卒業旅行にヨーロッパ旅行へ、と夢を抱いてコツコツ貯めてきたマイル、気が付いたら卒業を目前にヨーロッパ4往復できるマイルが溜まってしまったのでドン引きしています。しかし、それでいて結果的に COVID-19 でそれどころではなくなったので世界が憎い。

そうして腹いせにGo To トラベル問わずあちこち飛び回った結果、国内線特典航空券が23枚生え、69000マイル飛んでいったので今年は収支マイナスです。ありがとうございました。 今年の whywaita Advent Calendar の参加者には毎週沖縄に行く人間が複数名存在したようですが([1], [2])、行った離島の数なら勝てるかもしれません。

個人事業主として

生活に使っている口座と個人事業主としての事業用口座を分けていないので、帳簿に「ペイペイ 事業主貸 400円 銀行口座 400円」みたいな仕分が無限に発生して破滅しています。売上なんて月1, 2ぐらいしか生じないんですけどね。 契約書とか請求書の管理、面倒だけれど Misoca とかの SaaS に月500円払うほど心に余裕はない。どうしましょうね。

投資について

過去に仮想通貨バブルに最悪のタイミングで便乗して数万損して懲りたことがありました。 その後、変動が比較的少ない投資信託に数万だけ突っ込んでみて傍観することにしたのですが、最近の日経平均爆上げで結構増えて笑顔になりました。ここで意識を失うか悩みましたが、直近の状況を鑑みるに国内経済は再び落ち込む予感もなんとなくしたので、比較的リスクの低い銘柄以外は利確して終わりにしました。仮想通貨で大損した分ぐらいは取り返せたので良かったですね。

この記事は whywaita Advent Calendar 2020 17日目の記事 その2かつ、過去に下に[…]

ICTSCのコンテストサイトを支えた技術

Programming

この記事は whywaita Advent Calendar 2020 の10日目の記事です。2週目です。来週何を書くか考えるだけで気が遠くなります。

昨日は @icchy さんで 「whywaitaであいうえお作文する」でした。タイトルだけでだいたい想像できますね。

https://twitter.com/icchyr/status/1336325587929976834

なるほど。

@icchy さんのおすすめインターネットコンテンツは飲酒日記です。

https://alcoholog.hatenablog.jp/entry/2020/12/01/015540

閑話休題。 アドベントカレンダー、書くネタはあれど頭を使うものばかりで泣きそうになったので、とりあえず過去の下書きを漁っていたらタイトルだけ書かれたこの記事の下書きを見つけました。 最近思うこともあったので、すでに忘れ去られ、誰もが忘れたままでいたいと思っていたICTSCのコンテストサイトの歴史を紐解いてみたいと思います。 whyawitaさんとの関わりもあるし、whywaita Advent Calendar的には100点満点のネタですね。よろしくお願いします。

read more »

この記事は whywaita Advent Calendar 2020 の10日目の記事です。2週目です。来週[…]

移動が好きなオタクの話

生活 雑記

こんにちは。この記事は whywaita Advent Calendar 2020 の3日目の記事です。今日から4週連続で何らかの記事をお届けする予定です。

本日の記事を書くにあたっては、まず執筆背景を説明する必要があります。記事執筆日の日付が変わった直後の状況は次の画像で説明されます。

地図にあるように、私は今陸上ではないところにいます。

陸地でも密を回避すべく主要3(+1)キャリアの回線が入らないところに行きがちな最近の私ではありますが、陸地でないところでのインターネット通信には更に困難が伴います。これではワーケーションどころではありません。

記事を公開するまで、インターネットへの到達性が維持されることを祈りながら書きたいと思います。

さて、前置きが長くなりましたが、今回は移動が好きという話をしたいと思います。

read more »

こんにちは。この記事は whywaita Advent Calendar 2020 の3日目の記事です。今日か[…]

ISUCON10 予選の参加ログ (チーム: 再起動非対応, 最終スコア1997, 40位ぐらい)

未分類

こんばんは、kyontanです。

前々回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。チーム名は前日まで考えていましたが変えるのを忘れました。 言語はGo, ベストスコアは2101, 最終スコアは1997で、多分40位ぐらいでした。悔しい〜〜

本チーム「再起動非対応」は同期3人 (自分 @kyontan, @hogashi, @h-otter) です。このメンバーで4回目の参加です。学生はうち2人なので、一般チームです。

read more »

こんばんは、kyontanです。 前々回再起動試験で落ちたのでチーム「再起動非対応」で参加しました。チーム名は[…]

生活に投資する話

雑記

今日はタイトルの通りの話です。いつもタイトルと違う話はしてないけれど。

ここ数年、毎年少し高くても良いものを買うように心がけています。 理由は一つではなくて、これまで安物買いの銭失いを大量にしてきたからというのもあるし、単にバイト等で収入がある程度増えたからというのもあります。

キーボードやマウスは個人の好みなのでなんとも言えないけれど、例えばPC本体やマイク、Webカメラ、音響関係(スピーカー, マイク, ヘッドフォン)は、それぞれ一定のラインまで金をかけると明らかに機能や性能、信頼性が上がるのが体感できる。

とはいえ、別に生活に投資するというのは電化製品だけの話ではない、というのが今回のお話。

気が付いたら超長文になってしまったので、飛ばし飛ばし読んでください。

read more »

今日はタイトルの通りの話です。いつもタイトルと違う話はしてないけれど。 ここ数年、毎年少し高くても良いものを買[…]

Cisco IOS で tftp を使ったアップロードが Permission denied で怒られる件

Infrastructure

家の回線をv6プラスにしたところ、外側から特定のポートへアクセスさせたいような用途、つまりこのブログを自宅サーバーから提供することができないことに変更してから気が付いた。 しばらくは FreeBSD で PPPoE を終端して遊んでいたが、うっかりご家庭用のルータであるところの Cisco C891FJを買ってしまった。

とりあえずIOSのバックアップをすべく copy コマンドで自宅のサーバへ IOS をアップロードしようとした。しかし、Permission denied と怒られてアップロードに成功しなかった。

tftp (具体的には tftpd-hpa) サーバでの tftp 127.0.0.1 によるアップロード/ダウンロードはできる。何かがおかしい……

状況を整理

tftpd は 0.0.0.0:69/udp で listen している。 (systemctl start で動かない問題もあったが、それはまた別の問題)

# sudo lsof -i:69
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
in.tftpd 29780 root    4u  IPv4 xxxxxxx      0t0  UDP *:tftp
in.tftpd 29780 root    5u  IPv6 xxxxxxx      0t0  UDP *:tftp

tftpd root は /srv/tftpboot。こういう挙動をする。

# tftp 127.0.0.1
tftp> get something
Error code 2: Only absolute filenames allowed
tftp> get /something
Error code 2: Forbidden directory
tftp> get /srv/tftpboot/something
Received 7 bytes in 0.0 seconds

IOSでのエラーメッセージはこんな感じ。tftpd は verbose フラグを付けてもだんまり。

#copy flash:c800-universalk9-mz.SPA.153-3.M3.bin tftp://10.0.0.1/srv/tftpboot/ios/
Address or name of remote host [10.0.0.1]?
Destination filename [srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin]?
%Error opening tftp://10.0.0.1/srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin (Permission denied)

なるほど……?

解決方法

ホスト名とパスの間にもう1つ / を足せばよい。つまり tftp://[ホスト名]//パス とすればよい。

#copy flash:c800-universalk9-mz.SPA.153-3.M3.bin tftp://10.0.0.1//srv/tftpboot/ios/
Address or name of remote host [10.0.0.1]?
Destination filename [/srv/tftpboot/ios/c800-universalk9-mz.SPA.153-3.M3.bin]?
!!!!!!!!!!!!!!(snip)!!
68176296 bytes copied in 129.832 secs (525112 bytes/sec)

気付いたきっかけは Destination filename の確認プロンプトだが、まさかこんなところでハマるとは思わなかった。 自宅インフラはトラブルシューティングが99%

read more »

家の回線をv6プラスにしたところ、外側から特定のポートへアクセスさせたいような用途、つまりこのブログを自宅サー[…]

macOS で Windows 10 のインストーラをUSBメモリに作る

Software 雑記

2020年にもなってこんなことで微妙に苦しんだので備忘録。

EFIなら何も考えなくてもいいのかもしれないが、レガシーPC向けにMBRでやろうとすると微妙にはまったので

  1. Windows 10 の ISO をダウンロードしてくる https://www.microsoft.com/ja-jp/software-download/windows10ISO

  2. これに従う https://alexlubbock.com/bootable-windows-usb-on-mac

  3. ブートローダーを書く このリンクの Step 3 以降に従う

  4. https://www.oueta.com/macos/create-windows-7-8-10-bootable-usb-drive-in-macos-with-command-line-mbr-partitioning-scheme/

ざっくりコマンドの流れを書くとこんな感じ。ディスクは /dev/disk2 とします。ツール等のリンクは参照した記事ママなので、リンク切れしていたら別のところから探してきてください。

$ brew install wimlib
$ hdiutil mount Win10_1909_Japanese_x64.iso
$ sudo diskutil eraseDisk MS-DOS "WIN10" MBR /dev/disk2

$ rsync -vha --exclude=sources/install.wim /Volumes/[isoのマウント先]/ /Volumes/WIN10
$ wimlib-imagex split /Volumes/[isoのマウント先]/sources/install.wim /Volumes/WIN10/sources/install.swm 4000

$ curl https://www.oueta.com/wp-content/uploads/2018/10/syslinux-4.03.tar.gz -o syslinux-4.03.tar.gz
$ tar -zxvf syslinux-4.03.tar.gz

$ curl https://www.oueta.com/wp-content/uploads/2018/10/syslinux-mac.tar.gz -o syslinux-mac.tar.gz
$ tar -zxvf syslinux-mac.tar.gz

$ sudo dd if=syslinux-4.03/mbr/mbr.bin of=/dev/disk2 bs=440 count=1
$ sudo ./syslinux -i /dev/disk2s1

$ mkdir /Volumes/WIN10/syslinux
$ cp syslinux-4.03/com32/modules/*.c32 /Volumes/WIN10/syslinux
$ $EDITOR /Volumes/WIN10/syslinux/syslinux.cfg

$ sudo diskutil unmountDisk disk2

$ sudo fdisk -e /dev/disk2
fdisk: 1> flag 1
Partition 1 marked active.
fdisk:*1> write
Writing MBR at offset 0.
fdisk: 1> exit
$ diskutil eject disk2
2020年にもなってこんなことで微妙に苦しんだので備忘録。 EFIなら何も考えなくてもいいのかもしれないが、レ[…]