夏の終わりのコード進行

Ⅵm7 → Ⅳ7 → Ⅴ7 → Ⅰ7

これですね

清涼、爽快、余韻、追憶、不安定

ここら辺の印象をごちゃ混ぜにしたようなコード進行。ひぐらしのYouとか久石譲のSummerとかが有名。 ひぐらしのYouは4和音のうち下から2番目を欠落させた伴奏が印象的です。

ひぐらしのYouみたいに4和音のうち下から2番目を欠落させて、さらに12分割表記*1にすると [9 16 19] → [5 12 16] → [7 14 17] → [12 19 23] になってわかりやすいかも。

3番目から4番目までの移動を例にとると 7→12、14→19 が +5 になって気持ちいいんだけど、最後の17→23が特に気持ち悪い。 このキモさ(=不安定さ)が夏の余韻を想起させるんですよね。そもそも全部セブンスのコードだから全体的に浮遊しがちともいえる。

ひぐらしのYouは実際には上の各要素の数字に+1した [10 17 20] → [6 13 17] → [8 15 18] → [13 20 24] (A#m/C#の調)だし、 久石譲のSummerは各要素の数字に+2した [11 18 21] → [7 14 18] → [9 16 19] → [14 21 25] (Bm/Dの調)で表せますね。


実際に弾きました。ピアノの動画を撮るのは高校以来で久々に楽しかったです。あり合わせのGoProで撮ったのであんまり音質が良くないです。

ひぐらしの伴奏をベースにして他の似たような曲も同じ A#m/C#の調 に移調してメドレーで適当に弾いてみました。

ほのぼの神社も入っています。ほのぼの神社ってシンプルで何にでも使えて音楽界の白飯みたいなものですよね。コードの勉強におすすめ。

youtu.be


最近何らかの活動をネットの海に放出してそれなりの緊張感を得て精錬させたいという思想が芽生え始めたので、また仕事が落ち着いているときにパワーを溜めて何かをやりたいですね。


そういえば、アイコンに2つの目を生やして生物感を出しました。

*1:上記の進行を基本のドを0、1オク上のドを12、2オク上のドを24にして 1オクターブの音階を12分割した表記。そういえばこれの正式な名前を知らない...そもそも一般的でない気がする

日本語の意味の木構造がTypeScriptの型パズルに似てる

っていう歌詞があいみょんの曲にあった気がする



去年ぐらいからゆる言語学ラジオにハマって、最近も仕事おわりに過去回を聞くのが日課になっていて自分も言語ネタでなにか文字を書きたいと常々思ってた折、「単語をひらきたい」という衝動に駆られたので約一年ぶりにブログをかいた。別に技術的な記事ではない。

定義

  • 単語をひらく = 「多義的な単語」の意味をひとつひとつ分解してそれぞれ別の単語として並べること
  • 意味の木構造 = 「単語をひらく」ことを、これ以上操作できなくなった状態になるまで繰り返してできた構造のうち木構造のもの(単語の循環を排除したい)

これに関して秀逸な記事があった。2021年の朝日広告賞の読者賞に選ばれた広辞苑の広告で挙げられているもの。

ぱっと見上下逆にした方がプログラマ的にはわかりやすい気もするが、世の中のものがすべてプログラマ中心になる道理はない。


この例は最大深さが2の木構造だけど、ヤバいとエモいという多義的な単語がさらに多義的な単語で説明される構造だから良かったのかも。実際に他の若者言葉でやってみたらほとんどの場合で高さが1であることに気付いた。そういえばキモいとかうざいとかラグいとか短縮(+形容詞化)が多かったな。「すごい」のような意味がたくさんあるマンモス単語は高さが高くなりそう。





ここで再びこの広告の例でふとその構造の先が知りたくなった。 例えばエモい。

  • エモい
    • せつない
      • 憐憫な
      • メランコリーな
      • 悲壮な
    • うつくしい
      • 妖艶な
      • 煌びやかな
      • 麗しい
    • はかない
      • 哀愁
      • センチメンタルな
      • 泡沫
    • なつかしい





「憐憫な」の深さを増やそうとgoo辞書を調べたら 関連語でまず 「哀憐」が出てきた 「哀憐」の意味として「哀憫」も使われていた。

  • エモい
    • せつない
      • 憐憫な
        • 哀憐な | 哀憫な

深さが1増えた。「憐憫な」に「哀」の感情がのった2つの単語をOR記号で結んだ。

次は「メランコリーな」を調べたら、「憂鬱」が出てきた。 でもこれメランコリーから意味増えてなくないかと思って

  • エモい
    • せつない
      • 憐憫な
        • 哀憫な | 哀憐な
      • メランコリーな | 憂鬱な

と表記するようにした。





ここであの曲が流れた。










今日はおしまい。

ゼノブレイド3の感想

はじめに

筆者は現在1週目終わり,2週目終盤に差し掛かったあたりまで進んでます.ヒーロー関連のクエストは全て完了しました(サブクエはちょっと残ってるけど).1週目終了時点でのプレイ時間はストーリありで60時間程度.2週目はストーリ飛ばしながら進めています.ゼノブレイドシリーズはswitchで1,2をプレイ済みです.

詳しい内容や考察は他のブログに譲るとして,個人の率直な感想を簡潔に書き留めておこうと思います.(以下に出てくる引用は開発者に訊きました : ゼノブレイド3|任天堂のものです.)

感想

今作はあまりゼノブレイドらしい「超どんでん返し・熱い・世界が理路整然としたシステムで動く」的なストーリーではなく,より現実的で感覚的なストーリーだったかなと受け止めています.私は当初ゼノブレイドらしい熱さを期待して望んでいましたが,ストーリー中盤で今回はそういうのをメインに表現したいのではないと悟り,新しい静かなゼノブレイドを受け止めるモードで物語を進めていました.

ゲームに出てくるおくりびとシステムも実は世界を維持するのに物理的に役立っていることを期待していたのですが,本編にもケジメとか想いを載せるみたいなキーワードが出てきたことからそういうわけではなさそう?現実で例えると仏教でお線香を焚いて仏壇の前で手を合わせる的な本人の中で落とし前をつける儀式みたいな感じなのか?おくりの粒子は気になる.

はい。モノリスソフトさんの開発される「ゼノブレイド」は、 高橋さんの生み出すキャラクターやストーリーを 果てしなく続く広大なフィールド上で楽しめるロールプレイングゲームRPG)です。 バトルがターン制ではなく、フィールドからシームレスにつながって リアルタイムで動かせるようになっていて、 タイミングやキャラクターの位置取りを駆使しながら 気持ちよくあそんでいただけるゲームになっています。

バトルシステムは物量が多い割に説明が丁寧でわかりやすくて本当に良かった.ただキャラのアクセサリーなどをいちいち付け直すのが面倒で,マイセット登録機能みたいのが欲しかった.あとエーテルシリンダーとノポンコインの所持上限低くない...?

今回は主人公である6人の想いを均等に描きたかったので、 セリフのワード数をできるだけ均等になるようにしています。 極端な話ですが、ゲームの終盤で 相づちしかうたないキャラクターとかにしたくなかったので・・・。

もうこれゲームというより体験型アニメでは?というぐらいアニメの量が多かった印象.あとはアニメシーンと戦闘シーンがシームレスにつながっているのは没入感を増していて良かった.広大な大地と一体感のある壮大な音楽,これぞゼノブレイドという感じ. あと笛.ゼノブレイド3を象徴づける音で,笛に始まり笛で終わる一貫性は好きです.

ただ,「開発者に訊きました」で語られた通りストーリー的に主人公である6人はそれぞれ目立っていたのだが,終盤に行くにつれて逆にメビウスが空気だった感がある.終盤のメビウスが一番説明不足感あった.エヴァみたいにわからないを楽しむ系統の作品だと思えばそれで良いのだが今回は「わからない」より「ない」が強いんだよな...真っ白なページが渡されていて,余白を楽しむほどの本文がない感じ.DLCに期待.

でも今回は違った切り口で描いてみたかった。 というのも、実は「力」にもいろいろな形があって、 理念や正義や大義ではなく、 面子(メンツ)とか欲とか、実はシンプルなもののほうが多いんじゃないか、と思ったんです。

「未来に向けて新しい自分、新しい道を見つけていく」というのが今作のテーマ

私の中にメビウスの側面もあるかもしれないと思うほどにはメビウス側にもそれなりの共感できる正義がありました. これはメビウスにはものすごく煽ってくる奴から人道的で穏やかなものまで多様性が担保されているおかげかもしれない.

最後の方にはメビウスも救われて欲しいなあという気持ちも.大体スタートラインや成長の過程は運命で決まっていて,最後に納得して笑えたらそれでいいみたいなストーリーだったけど,本人は生きている大部分で救われてないよなあとモヤった部分でもあります(シャナイア生きてくれ).ただ,困難に態度することに価値を見出さなければ生きる道はないという現実感のあるストーリーでもある.

おわりに

全体を通して,ストーリー的には個人的に1,2が好みだったけどシステム面では3がいいかなという感じです.3は序盤は良かったけど,終盤に進むにつれてサブクエやってても本編のストーリーの物足りなさを感じてしまったので今は今後のDLCをゆるゆる待つのみかなあとおもいます.ただ,ギアスとか含め前作やってた人向けのファンサービス多めだし,やればやるだけおもしろさの見つかるスルメ感のある作品ではあるので,最終的にやっぱり自分はゼノ好きだなあとなりました.開発者の方々ありがとう!

ここまで読んでくださりありがとうございました.

はじプロ言語 HPL v1.0.0

「ナビつき!つくってわかる はじめてゲームプログラミング (© Nintendo)」の記事です。2021年に発売したゲームで前々から気になってはいましたが、ついに先日買いました

最初は普通にナビ付きレッスンのモードで遊んでゲームを進めていきました。個人的には特に定数ノードンがとても好きです。定数の安心感があってかわいい。

ナビ付きレッスンを終えたらフリープログラミングモードで自分でゲーム作って公開したり、逆に人の作ったゲームを遊べるらしいので、早速色々ダウンロードして遊んでいたら、これに出会ってしまいました。

higepine.com

これはただの記憶装置ではなくて、今までカウンター方式しかなかった値の記憶が全く別の仕組み「発振回路」で動いているすごい記憶装置です。 これの良さは省スペースなこと。これによって16個の変数の値の代入と読み出しがよりコンパクトになり、ノードン数上限512のあるこのゲームにおいてとても有用な手法になっています。

調べてみたらこのはじプロ界に革命をもたらした技術、発振回路のおかげで遊びの幅が広がっているようです。

解説はこれがわかりやすい↓

www.youtube.com

このゲーム内ではどうやら1wireあたり1stepのずれが発生するようで、これを応用した方法らしいです。はじプロのゲームは1frame=16stepで動いているため、1描画の間に16回の内部計算がされます。我々に見えるのはこの中のある1step直後の状態なので、これだけで16個の状態を持てていることになります。


記憶装置があるということは言語が作れるということで、独自言語「はじプロ言語 HPL」を作ってみました。ひげぱいん様のサイトで紹介されています。

higepine.com

言語ということは文字を表示できなくては困るのでまず文字出力システムを作ってみます。

文字の表示方法ですが、① ことばつきモノで表示 ② モノにテクスチャをはって表示 の2種類があります。①のことばつきモノは同一ワールドに8体しか置けないというきつい制約があるので不採用にしました。一方、②のテクスチャノードンは128体おけるのでなんとASCIIコード全てに対応できます。やったぜ。

もう一つ問題点があって、複数文字をそれぞれ出力しようとするとあまりにもノードン数が多くなってしまいすぐ上限に到達してしまうので、各モノノードンは使い回すことに。現在のプログラムカウンタが指し示す番号を持つレジスタから文字コードを読み出して、対応する文字テクスチャ付きのモノノードンを拠点近くにワープさせて重力で下に流すという仕組みです。こうしてみると上から下に流れる感じがよりstreamの原義に近い状態になっているかもしれない。

試しにアルファベット大文字だけをサポートして、"HELLOWORLD"を表示するプログラムを書いてみました。今は1〜26をA〜Zにマッピングしています。後々ASCII文字全部に対応させたい。

youtu.be

みんなも自分だけの独自言語を作ろう!

Github ProjectsのChrome拡張機能

chrome.google.com

Github ProjectsをよりAgile仕様にする拡張機能を作成しました.

イメージとしてはGithub ProjectsのKanbanでこんな風にしておくと,

f:id:saku44127:20201104202224p:plain progressバーがストーリーポイントの割合で表示されたり,

f:id:saku44127:20201104202229p:plain こんな風にタグ別表示してくれます.

主な機能は

  • タスクへのストーリーポイントの付与
  • タスクのタグ付け
  • ストーリーポイントから計算したprogressバー表示
  • タグ別タスク表示

です.

詳しい使い方はこちら↓
GitHub - sakupo/Github-Agile-TaskViewer

開発

急な思いつきでピュアなhtml/css/jsだけで最小構成で作って,まだtsの環境とかlintとかタスクランナーとか入れてません.時間があったらUI改善とかやります.いまは卒業研究を終わらせにかからないといけない時期で趣味開発している場合ではないんですが,私は時間に余裕がないほど趣味開発したくなります(最悪).

実は一回目に審査出したところreject食らいました.
その原因が「次の権限をリクエストしているが使用していない tabs」となっていて,
えーでもchrome.tabs.executeScript使ってるけどな〜と思っていたら, ここのtabsの欄に,

In many circumstances your extension will not need to declare the "tabs" permission to make use of these APIs.

と思いっきり書いてありました.

そこでmanifest.jsonのpermission欄に書いていたtabsを消したら審査通りました.
よかった〜

f:id:saku44127:20201114162626p:plain

zoom講義に自動出席するだけ(Windows10)

PC立ち上げてzoomいちいち開くの面倒くさいなと思ったのでメモ

火・金の10時45分に講義が始まる想定

自動起動

WindowsなのでUEFI(BIOS)から自動起動設定をしようとおもいます.

UEFIの立ち上げ方はメーカによって違うのであれですが,PC起動と同時にF2キー長押しで行けました(Dell並感).

Power Management → Auto On Time を開いて火・金の10時30分に起動するように設定.

f:id:saku44127:20201002154740j:plain
UEFI画面

zoom自動立ち上げ

以下はzoom立ち上げ用のpowershellスクリプト.自分は今期一つしか講義を受けていないのでとりあえず1つのurlのみに対応. あと日本語だとエンコードが面倒そうだったので曜日は英語化した.

$us = New-Object system.globalization.cultureinfo("en-US")
$date    = (Get-Date).toString("ddd", $us) # 曜日の英語化
$hours   = Get-Date -Format "HH"

$browser_path = "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" # ブラウザの場所指定
$zoom_url     = "https://[zoomのURL]"
if (!($date -eq "Tue") -And !($date -eq "Fri")) { # 火曜と金曜以外には起動させない
    echo "Out of school dates."
    exit
}
if (($hours -lt 10) -Or ($hours -gt 11)) { # 10時台と11時台以外には起動させない
    echo "Out of school hours."
    exit
}

start $browser_path $zoom_url # zoomの立ち上げ

ifをいい感じにすればいろんな講義に対応できそう.

(でもこれzoomのURL変わったら終わるよ.)

そんなことは気にせず,これをautoStartZoom.ps1とかの名前で保存.

Windowsキー+Rでshell:startupを入力してEnterした場所にautoStartZoom.ps1のショートカットを置いてスタートアッププログラムとして登録.

あとps1ファイルをpowershellで開いてもらうために,プログラムから開く→別のプログラムを選択→その他のアプリからpowershellを既定のプログラムに選択. 自分の環境では,C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exepowershellがあった.

これで楽になるはず...


追記: 楽にはなったんですが,ZoomのURLが変わったら講義前までにURL登録し直しになるので注意.GoogleDriveとか使ってスクリプトを共有する方法もなくはないけど,やっぱりローカルで完結させたいのでナシ.

おうちKubernetesクラスタ構築チャレンジ with Alpine

経緯

  • おうちにk8sがあることの安心感
  • おうちにk8sがあることの優越感
  • おうちにk8sがあることの多幸感

を求めて...

目標

おうちに安くk8sクラスタを構築する!!!!!!!!!!!!!!!!!

参考文献

Day1: 材料調達

材料 個数
Raspberry Pi 4 Model B/4G 3
microSDカード/32G 3
type-C USBケーブル 3
microHDMI-HDMIケーブル 1
USB充電器 5ポート 1
USB(無線)キーボード・マウス 1
ケース/ヒートシンク 1
モニタ 1
無線LANルータ 1
クーラーの効いた涼しい部屋 1

モニタ以下は既に家にあったものを使用しました.ルータは普通のBuffaloのやつ. それ以外の総額は税込31474円. N*** Switchより安い! f:id:saku44127:20200827203712j:plain

構成

名前 k8sでの役割 OS local ipアドレス
khost Master Raspberry Pi OS 192.168.11.20
knode1 Worker Alpine Linux 192.168.11.21
knode2 Worker Alpine Linux 192.168.11.22

Day2: OSインストール

khost

Raspberry Pi OS 64bit - OSイメージをダウンロード - 今回は2020-08-20-raspios-buster-arm64.zipを選択 - microSDカードにOSイメージを書き込む.SDカードがマウントされている場所を調べ,アンマウントしてからディスク書き込みを行うという流れ. ↓ Mac Terminalでの書き込み手順(NAMEはSDカードの名前.初期状態ではNO NAMEとなっていた.)

  > diskutil list
  # 中略
  /dev/disk2 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *31.9 GB    disk2
   1:             Windows_FAT_32 RSPI-HOST               31.9 GB    disk2s1
  > diskutil unmountDisk /dev/disk2
  > dd if=rspiOSのイメージ名.img of=/dev/disk2 bs=16m
  > diskutil eject /dev/disk2
  • cgroupの設定(for kubeadm init)
    • cmdline.txtにcgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1を追加

knode*

Alpine Linux - RASPBERRY PI aarch64をダウンロード - tar.gzを解凍してできたフォルダの中身すべてをmicroSDカードにコピぺ - cgroupの設定(for kubeadm init) - cmdline.txtにcgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1を追加

Day3: raspiの起動・設定

khost

  • マウス,キーボード,microHDMIケーブルをraspiに取り付ける
  • type-C充電器(電源)と接続して起動
  • GUIから流れに従って初期設定
  • sshの有効化
    • 左上設定から,もしくはsudo raspi-configから
  • ipアドレスの固定化
    • ルータのdhcp手動設定を追加
    • もしくは/etc/dhcp/dhcpd.confを書き換えても良い.詳細は割愛
    • 今回は外部に接続しない.外部に接続するにはポート開放とルータのポート変換,固定グローバルIPアドレス(もしくはDDNS)が必要.
  • 作業user作成(hogeは好きな名前に変える)
> sudo adduser hoge
> passwd hoge 
> sudo gpasswd -a hoge sudo
> sudo dphys-swapfile swapoff
> sudo dphys-swapfile uninstall
> sudo systemctl disable dphys-swapfile
  • セキュリティ
> sudo passwd root
  • Dockerのセットアップ
> sudo apt install apt-transport-https ca-certificates curl software-properties-common
# GPGキーの追加
> curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg | sudo apt-key add -
# リポジトリの追加
> echo "deb [arch=armhf] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list
# Dockerのインストール
> sudo apt update
> sudo apt install docker-ce
# GPGキーの追加
> curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo apt-key add -
# リポジトリの追加
> echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kube.list
# Kubernetesのインストール
> sudo apt update
> sudo apt install kubelet kubeadm kubectl

knode*

  • キーボード,microHDMIケーブルをraspiに取り付ける
  • type-C充電器(電源)と接続して起動
  • CUIから流れに従って初期設定
  • 初期設定ではユーザ名: root,パスワードは無し
  # 初期設定の開始
  > setup-alpine

  # キーボードレイアウトの設定
  Select keyboad layout [none]: jp

  Select variant: jp

  # ホスト名の設定
  Enter system hostname [localhost]: knode1

  # ネットワークの設定
  Which one do you want to initialize? [eth0] ENTERキー押下

  Ip addres for eth0? [dhcp] ENTERキー押下

  Which one do you want to initialize? [wlan0] ENTERキー押下

  # 無線LANのSSID
  Type the wireless network name to connect to: xxxxxxxx

  # 無線LANのパスワード
  Type the "xxxxxxxx" network Pre-Shared Key: xxxxxxxx

  Ip address for wlan0? [dhcp] ENTERキー押下

  Do you want to do any manual network configuration? [no] ENTERキー押下

  # rootパスワードの設定
  New password: xxxxxxxx

  Retype password: xxxxxxxx

  # タイムゾーンの設定
  Which timezone are you in? [UTC] Japan

  # プロキシの設定
  HTTP/FTP proxy URL? [none] ENTERキー押下

  # NTPの設定
  Which NTP client to run? [chrony] ENTERキー押下

  # パッケージを取得するミラーサイトの設定
  # rはランダム、fはファステストまたは番号指定
  Enter mirror number (1-46) or URL to add (or r/f/e/done) [1]: ENTERキー押下

  # SSHの設定
  Which SSH server? [openssh] ENTERキー押下

  # データの保存先
  Enter where to store configs [mmcblk0p1]: ENTERキー押下

  Enter apk cache directory [/media/mmcblk0p1/cache]: ENTERキー押下
  # 設定の保存
  > lbu commit
  > apk update
  > apk upgrade
  > rc-update add wpa_supplicant boot
  > apk add avahi
  > apk add dbus
  > rc-update add dbus
  > rc-update add avahi-daemon
  > service avahi-daemon restart
  > lbu commit
  > reboot
  > apk add linux-firmware-brcm
  # errorの場合,apk update,apk upgrade,lbu commit,rebootして
  # もう一度上記コマンドを入力
  > lbu commit
  > apk add sudo
  > adduser hoge
  > addgroup hoge wheel
  > vi /etc/sudoers
  # ファイルの下の方の"# %wheel ALL=(ALL) ALL"を#だけxで消して(コメントを外して):wq!で保存
  > lbu add /home # /home をlbu管理下に置く
  > lbu commit
  > reboot

lbuについて https://wiki.alpinelinux.org/wiki/Alpine_local_backup Alpine Linuxディスクレスモードではそのまま電源を落とすと変更したファイルがすべて破棄される.そのため,その都度lbu commitまたはlbu ciを入力しデータを永続化する必要がある.lbu statusで次に永続化されるファイルが表示される.

  • ipアドレスの固定化
    • ルータのdhcp手動設定を追加
  • Dockerのセットアップ https://wiki.alpinelinux.org/wiki/Docker の手順に従う. 事前に/etc/apk/repositoriesの編集が必要.#http://dl-cdn.alpinelinux.org/alpine/edge/communityのコメント#を外す.
  • Kubernetesのセットアップ 事前に/etc/apk/repositoriesの編集が必要.#http://dl-cdn.alpinelinux.org/alpine/edge/testingのコメント#を外す.
  > sudo apk add kubelet kubeadm kubectl
  > sudo lbu commit

Day4: k8s/Dockerのテスト

local

~/.ssh/config

Host kh
     USER hoge
     HostName 192.168.11.20
     Port 22
     ServerAliveInterval 15
Host kn1
     USER hoge
     HostName 192.168.11.21
     Port 22
     ServerAliveInterval 15
Host kn2
     USER hoge
     HostName 192.168.11.22
     Port 22
     ServerAliveInterval 15

ssh接続には以下のように実行(パスワード認証)

> ssh kh

khost

> sudo kubeadm init --pod-network-cidr=10.244.0.0/16
> mkdir -p $HOME/.kube
> sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
> sudo chown $(id -u):$(id -g) $HOME/.kube/config
# ネットワークインターフェース追加
> kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

下記のknodeでの作業後,以下を実行

> kubectl get nodes

これでkhost,knode1,knode2が表示されたら成功!

  • Labeling
> kubectl label node knode1 node-role.kubernetes.io/worker=worker
> kubectl label node knode2 node-role.kubernetes.io/worker=worker

f:id:saku44127:20200827203725p:plain

knode*

khostでkubeadm initの際に最後に出てきたjoinコマンドを各knodeで入力

> sudo kubeadm join 192.168.11.20:6443 --token xxx --discovery-token-ca-cert-hash sha256:xxx

Reset

khost,knode1,knode2で以下を実行

> sudo kubeadm reset
> ifconfig flannel.1 down
> ip link delete flannel.1

ひとまず完成しました... 各raspiでの設定途中にAnsibleとかが欲しくなりました(3台くらいなら手動設定でなんとか行けるレベルではありました).

SDカード書き込み時にLANの設定とかすればヘッドレスでssh越しでの作業だけで事足りるのでモニタいらないかもしれません.

完成形を眺めてるだけでもうれしいものです.

これを使って何かするのは来年以降になりそうです.

Day5: To be continued...