コンテナの疲れをk3sとRemoで癒やした話
Cloud Native Kansai #02 に参加してきました!
そしてこの記事の題名にもあるように「コンテナの疲れをk3sとRemoで癒やした話」という題名でLTもやらせていただきました。
発表資料
ストーリー
コンテナに限らずですが技術の進化が早すぎ&自分の守備範囲が比較的広いため、様々な分野にキャッチアップしていくのが年々大変になっていってる気がします。「手を出しすぎなだけでしょ?」と言われてしまえばそうなのかもしれないですが、無知であることが怖いと思うところもあってついつい手を出してしまうのです。
いろいろあってなんだか最近「追われながら学習している」ことが多い気がするので、純粋に技術を楽しもうと思って家にある「ラズパイ」、「Nature Remo」を使ってお家ハックしてみました!「開発の疲れは開発で癒やす」と昔先輩に教えてもらったので、「コンテナの疲れはコンテナで癒す」を実践しました(笑)
出来上がるとラズパイ1台で、 k3s で作ったk8s上のPrometheus, Grafanaを使って次の画面が作れるようになります!
注意:Grafanaのグラフは自分で設定する必要があります
家のラズパイで試してみたい人は以下リポジトリの手順に従ってぜひ構築してみてください!
まとめ
余談
Clean Architectureに気づいてくれる人がいた
Cloud Native Meetupだけど、スライドに入っている図から以下を共感してもらえたことが実はすごくうれしかった。
Clean Architectureに苦しめられる日々 #cnjp
— 子兎音 (@AtCoderJobs) March 15, 2019
#cnjp
— silverbirder (@silver_birder) March 15, 2019
クリーンアーキテクチャで苦しむ人、同士だ。。。@kenfdevさん
armとamdで同じイメージパスを指定
おまけ情報ですが、今回のお家ハックを通してarmとamdでアーキテクチャが違っていても、Docker HubのURLを同じものとして使える方法について知ることができました。参考になるのは以下のGrafanaのPR。これで、ラズパイ(arm)だろうがmacbook(amd)だろうが、同じ grafana/grafana:latest
イメージを指定することができます! kenfdev/remo-exporter
も真似をして、同一のイメージパスを指定できます!
参考
- 基盤には前回の記事でも紹介したk3sを使っています
- ダッシュボードの雰囲気は以下記事を参考にしています
k3sをラズパイで起動するまでにやったこと
LightweightなKubernetesとして最近話題に上がっているk3s。僕もミーハーなのでさっそく家のラズパイに入れてみました。
k3sがなんなのか、という点についてはQiitaの以下の記事が簡潔によくまとまっています。
我が家には半年ほど前にkubeadmで構築したラズパイが放置されていたので、初期化してk3sを入れてみました。なんだかんだでいつも同じようなページをググりながらセットアップするので以下に手順を残しておきます。
【注意】この記事ではPodを動かしたりしません。あくまでラズパイをセットアップしてk3sでノード情報を取得(kubectl get nodes)するところまでをゴールとしています
MicroSDの準備
Raspbian Stretch Liteを使うので公式サイトからダウンロードします。
これをMicroSDに焼きたいのでbalenaEtcherというソフトを使います。以下からダウンロードしておきます。
これを使ってMicroSDにRaspbian Stretch Liteが入れられます。
ラズパイ用のディスプレイは持っていないのでsshできるようにしておきます。これはMicroSDのルートに ssh
というファイルを置いておけばOK。おそらく boot
というボリュームでマウントされているのでほとんどの場合次のコマンドでOKです。
$ sudo touch /Volumes/boot/ssh
あとはMicroSDをラズパイに差し込んで完了!
ラズパイの下準備
ラズパイを起動したらIPアドレスをルーターなりで調べて ssh
で繋ぎます。デフォルトユーザーは pi
でパスワードは raspberry
です。どのみち家でしか使わないのと、またすぐ破壊する環境なのでここらへんは特に変更しません。
$ ssh pi@192.168.11.4
ホスト名を変更
この手順は任意ですが、わかりやすいようにホスト名を変更しておきます。これには raspi-config
を使用。
$ sudo raspi-config
次の画面が出てくるので 2 Network Options
を選択。
続いて N1 Hostname
を選択します。
k3s-master
とでも設定しておきます。
決定すると再起動するか聞かれるので再起動します。
cgroupの有効化
再起動後に再度 ssh
して、次はRaspbianで cgroup
を有効にしておきます。 この手順を忘れるとk3sの起動時にエラーとなる ので要注意です。
# 好きなエディタで開きます
$ sudo vi /boot/cmdline.txt
次の値を 行の末尾に追加します 。
cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
新しい行に追加しちゃダメです。 必ず 末尾 に追加してください。 追加したあとは↓のようになります。(わかりにくいですが1行です)
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=9cdfde31-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory
保存したら再起動しましょう。ラズパイの下準備はこれでOKです。
$ sudo reboot
k3sのインストールと起動
ラズパイに再度 ssh
して次のコマンドを叩くだけでk3sの
- 最新版のダウンロード
- systemdへのサービス登録
- 起動
まですべて完了します!
$ curl -sfL https://get.k3s.io | sh -
シェルの中身が気になる人は以下にアクセスすれば中身チェックできます。
関数の名前からも何をやっているかはなんとなくわかります。
# --- run the install process -- { verify_systemd setup_env ${INSTALL_K3S_EXEC} $@ download_and_verify create_symlinks create_uninstall systemd_disable create_env_file create_service_file systemd_enable_and_start }
kubectl get nodes
をk3sで実行してみましょう。通常の kubectl
の先頭に k3s
をつければOKです。
$ k3s kubectl get nodes NAME STATUS ROLES AGE VERSION k3s-master Ready <none> 8d v1.13.4-k3s.1
正常に実行できているのが確認できます。
k3s kubectl
毎回入力するので k
で alias
貼っておきます。
$ vi ~/.bashrc
末尾に以下を追加しておきました。
alias k='k3s kubectl'
これで k get nodes
のようにもっと省略してコマンド打てるようになるのですっきり!
おわりに
以上でラズパイ上での k3s
のセットアップは完了です!ほとんど同じような手順でクラスタにノードを追加していけるのですが、その話はまたの機会にします。
k3sで「お家ハック」もしていけると、モチベーション維持しながらkubernetesの経験も積んでいけるので引き続き共有していきたいと思います!
AWS SAA再認定のために5日間頑張ったこと
昨日AWSソリューションアーキテクト・アソシエイト(以下SAA)に再認定されました。3月中に取得しないといけないというミッションがあったので慌てて先週申し込みました。試験会場の関係で試験日まで5日しか無かったのですが、合格できたので備忘録を残しておきます。
TL;DR(まとめ)
- 背景
- 昨年12月にSAAの有効期限が切れました
- 半年ほどAWSは触っていません(ほとんどコード書いてました)
- 3月中に取得しないといけないのに、試験日は一番後ろにしても5日しか猶予がなかったです
- 確保できた勉強時間は13時間くらいです
- 『最短突破 AWS認定ソリューションアーキテクト アソシエイト 合格教本』を読みました
- Whizlabsの模擬試験をやりました(7個中4個しかやれる時間はありませんでした)
- Whizlabsのセクションテストをやりましたが、以下しかやれる時間はありませんでした
- 模擬試験を英語で受けたので本番も英語で受けました
- 自信をもって答えられたのは75%くらいです。結果をみたら905/1000点だったので、迷った選択肢は良い方向に転んでくれていた様です
背景
まず僕が何者なのか、というところですが毎日AWSを触るような業務は最近になるまでやってませんでした。普段はコードを書いている(JavaScript, PHP, Goなど)ことが多く、インフラに関連することをやるのはコンテナを触るときくらいです。
SAAをとったのは2年以上前で、そのときは結構ガッツリ勉強しています。ただし合格してからもそれほどAWSを使う機会はなく、使ってもELBとEC2くらいでした。ここ1年ほどはAWSのホットな情報にはほとんどついていけてないです。
ここまでは割と意識低い系に捉えられそうですが、割と重要なポイントとして僕は「インフラが好き」です!得意ではないのですが、好きです。なのでインフラに関連することを勉強するのは苦ではないタイプです。
試験申し込み
試験申し込みにはAWS認定アカウントが必要で、このサイトから試験会場が選べます。同僚からは「Webカメラでリモート監視員に監視されながらテスト受けた」と聞いていたため、この2年の間で試験の方法が変わったのかと思っていました。ところがそうではなく、「キオスク」タイプとそうでないタイプに分かれているようです。試験会場に「K」や「キオスク」と書いてあるものが、リモート監視員による監視のもと、専用端末で試験を受けるタイプの様です。僕は2年前同様、普通の端末でWebカメラでの監視もなく試験を受けました。
もう1つ再認定の特に重要なのは、「特典」を使用することです。AWS認定アカウントの「特典」のページに行けば、クーポンが発行できるので、試験申し込み時にこのクーポンを使うことで半額(執筆時点では16200円/2=8100円!)で試験を受けられます。 また、通常であればRecertificationという試験も受けられるはずです。この試験は試験時間が90分と書かれていましたが、試験の期限が2019年3月3日に設定されていて、2月28日に申し込んだ僕としては準備期間が少なすぎるので断念しました(たぶん昨年SAAが刷新されたことと関連している)。 よって、通常の試験を申し込んでいます。半額のクーポンは使えるのでご安心ください。
試験勉強でやったこと
とはいえ、日常でさほど触っていないAWSの試験を受けるので、僕も結構プレッシャーを感じました。試験までは「土、日、月、火、水」と5日しかなくて、確保できた勉強時間は13時間ほど。何をしたかというのは以下の通り。
- 土(3時間)
- 『最短突破 AWS認定ソリューションアーキテクト アソシエイト 合格教本』 がちょうど発売したばかりだったので、Kindleで買ってすぐに全部読みました。「最短突破」とも書いてあるように、ボリュームもちょうど良くて読みやすかったです。本番同様65問で構成されている模擬試験もついているので、おすすめです。この日のうちに全部読みました。
最短突破 AWS認定ソリューションアーキテクト アソシエイト 合格教本
- 作者: 村主壮悟
- 出版社/メーカー: 技術評論社
- 発売日: 2019/02/26
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
- 『最短突破 AWS認定ソリューションアーキテクト アソシエイト 合格教本』 がちょうど発売したばかりだったので、Kindleで買ってすぐに全部読みました。「最短突破」とも書いてあるように、ボリュームもちょうど良くて読みやすかったです。本番同様65問で構成されている模擬試験もついているので、おすすめです。この日のうちに全部読みました。
- 日(3時間)
- ↑の模擬試験をやりました。間違えたところはググりながら復習しました。
- これだけではかなり不安だったので、海外で人気のWhizlabsのAWS CERTIFIED SOLUTIONS ARCHITECT ASSOCIATE – PRACTICE TESTSを購入しました。割引19.95ドルからクーポン使って16.96ドル!
- 月(2時間)
- 火(2時間)
- 水(3時間)
- WhizlabsのPractice Test 3を実施しました。合格(正答率87.69%)
- WhizlabsのPractice Test 4を実施しました。合格(正答率80%)
- 解説で復習しました。
- 木
- 試験当日
アドバイス
- 試験の長さ(65問・130分)に慣れるためにも模擬試験を数こなしたほうが良いです。集中力の持続力が合否を分けるような気がします。
- WhizlabsのセクションテストとPractice Testの難易度が違いすぎる気が。。。(セクションテストは1個も合格できなかった。。。)
- WhizlabsのPractice Testは全部合格だったので、解説を読むのを怠りそうになったのですが、間違えたところちゃんと復習しましょう。復習しなかったところが問題に出ると超後悔します。
- ↑にも関連するのですが、思ったより見慣れた問題がなくてちょっと焦りました。
- 英語がある程度抵抗なければ英語で受験するのもありです。Whizlabsで英語に慣れている場合、当日日本語の問題にあたったときに妙な違和感があったりします(僕にとって1回目のSAAがそうでした)
試験当日
- 僕は運転免許証とクレジットカードで身分証明しました(コピーじゃなくて本物を見せます)。
- 試験実施する部屋には何も持っていかなくてOKでした(身分証明書も不要)。時計も持ち込めなかったです。ロッカーに全部しまいます。
- 試験会場でボールペンと紙を5枚ほどメモ用にもらいました。試験が終わると回収されます。
- WhizlabsのPractice Testは130分ある中、いつも70分ほど余ってたのですが、本番では見直しもしてたら残り3分になっちゃいました。。。やっぱり本番は何かしら心理的にやられてる気がします。落ち着きましょう。
おわりに
合格できたからよかったですが、当日は問題にフラグがつきっぱなしのものが15問ほどあったので、「もしかしたらこれは落ちるかも」と思いました。選択問題を2問までは絞り込めるものの、最後の1つに絞り込む決定的な知識が不足していると痛感しました。運良くそれらの問題が正解に転んでくれたんだとますが、精神衛生上よろしくないのと、そもそも「AWSの実力」的にその状態はどうなんだ、という疑問が残りますね。。。可能であれば普段からAWSに触れておくことが一番大事でしょう。そうすることで自然と「あの画面にあのパラメータがあったな」みたいなのがインプットされていくはずです。
この記事が、次に受けるときの自分へのメッセージにすることと、僕のように準備期間が少なくとも再認定してもらいたい人の参考になれば幸いです!