fc2ブログ

[RaspberryPi]kubernetesクラスタ構成

kubernetes勉強中。

■機材

・Raspberry Pi4 Model B
  4GB x 2台 (Master + Worker)
  2GB x 2台 (Worker)
・LOTW ラズパイ用積層ケース 4段用 x 2個
・Kuman 7インチ タッチディスプレイ x 1個
・TP LINKスイッチングハブ 8ポート x 1個
・UGREEN 急速充電器 65W PD 充電器 4ポート USB-C x 1個
・USBケーブル x 4個

■構成

スポンサーサイト



[Raspberry Pi]USB給電

PoE HATに続き、ラズパイの電源ケーブルを無くしたいという欲望から、これも試してみた。

Ankerとかが有名なUSB給電気、充電器を使うと、1本の電源コンセントで複数ラズパイへの給電をしたい。
買ったのは以下。

UGREEN 65W Wall Charger (3C1A)
https://www.amazon.co.jp/UGREEN-65W%E3%80%90GaN-4%E3%83%9D%E3%83%BC%E3%83%88USB-USB-C%E6%80%A5%E9%80%9F%E5%85%85%E9%9B%BB%E5%99%A8-%E3%81%AA%E3%81%A9%E6%A7%98%E3%80%85%E3%81%AA%E6%A9%9F%E5%99%A8%E4%BA%92%E6%8F%9B%E6%80%A7%E3%81%8C%E3%81%82%E3%82%8A/dp/B088FHJLR1


USB Type-CへRaspberry Pi4 Model Bの4GB x2台、2GB x 1台を接続してみた。
どのポートにどれを、を調べると面倒なので意識してないが、とりあえず3台動いた。

[Raspberry Pi]Pi4のPoE HATが動いた

検証用にいくつかラズパイ持ってるが、いいかげん電源ケーブルがうざい。
kubernetesのクラスタとかいろいろやりたいが、台数増えると、LANケーブル、キーボード&マウスケーブル、HDMIケーブル、電源ケーブルのセットが増えるのがきつい。

HDMIケーブルはssh接続にして省略出来るが、電源ケーブルも省略するために、PoE HATなるものを買ってみた。

いろいろ販売されているが、以下を決めてに次の商品を買ってみた。

 ・IEEE 802.3af、3at両方対応
 ・ラズパイ4対応
 ・値段が安い(2599円)
 ・販売元(GeeekPi)って聞いた事あり、ある程度安心
 ・GPIOピンヘッダが隠れない(全て使えるか未確認)
 ・高さがそれほど高くなくて、使ってる積層式ケース4段(ブランド:LOTW)で使えそう



https://www.amazon.co.jp/GeeekPi-Plus%E3%81%AB%E9%81%A9%E3%81%97%E3%81%9FRaspberry-Pi%E5%86%B7%E5%8D%B4%E3%83%95%E3%82%A1%E3%83%B330x30x7mm%E3%81%A7IEEE-802-3af%E3%81%BE%E3%81%9F%E3%81%AF802-3at-PoE%E6%A8%99%E6%BA%96%E3%82%92%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88/dp/B082LR3DDN?th=1

梱包を開けてみたら、クーラーファンのネジが1個取れてるけど・・・
これで新品なのか?
GeeekPiという販売元だったけど、商品の箱は、www.52pi.comってなってる。
https://www.52pi.com/

けどホームページ見に行っても、この青いPoE HAT見つからない・・・


とりあえず、以下構成で接続してみた。

・PoEスイッチ: TP-LINK T1500G-10MPS
・Raspberry Pi4 model B 2GBメモリ
・カテゴリ5e(6?)LANケーブル



無事動くね。特に問題は無いみたい。
以前AXIS監視カメラ用に購入したPoEスイッチが役に立った。
3at対応のPoE HATが2600円。
クラスタ構成用にあと3つ買うと合計1万円超えるのか・・・もう少し安いのないかな?
後日8GB版でUSB HDDを接続した場合とか試したい。

追記
調子にのって、別のやつも買ってみた。

DSLRKIT Power Over Ethernet PoE HAT IEEE802.3at DC 5V 4A PoE+ for Raspberry Pi 4B 3B+ 3B Plus
https://www.amazon.co.jp/DSLRKIT-Ethernet-HAT-IEEE802-3at-Raspberry/dp/B07JQ2Z8NG/ref=pd_sbs_3/357-7165319-3188863?pd_rd_w=iREor&pf_rd_p=52ecde5f-22cd-44a8-9320-89e5f2926931&pf_rd_r=XHE9PZPTZ3GMXDJZPDWF&pd_rd_r=be762d1f-0fe9-456f-b1b0-be0bcbc94a3b&pd_rd_wg=4odpD&pd_rd_i=B07JQ2Z8NG&psc=1

1690円なので価格は良し。
GPIOピンヘッダも外に出せるので問題なし。
以下構成で動作する事を確認。3at対応だから問題ないね。
しかし、残念ながら、使ってる積層ケースだと高さオーバーで積層出来ない。
惜しい! 高過ぎる以外は全てクリアかな。

・PoEスイッチ: TP-LINK T1500G-10MPS
・Raspberry Pi4 model B 8GBメモリ
・カテゴリ5e LANケーブル


[RaspberryPi][Ubuntu]コマンド2

PukiWikiサーバ構築

# cat /etc/os-release

NAME="Ubuntu"
VERSION="16.04.2 LTS (Xenial Xerus)"
:


# apt-get update
# apt-get -y install wget
# apt-get -y install unzip
# apt-get -y install vim
# apt-get -y install apache2
# apt-get install php
# vim /var/www/html/test.php

< ?php ※ 表示されなくなるので、<と?の間に空白入れてるが、実際は無し。
phpinfo();
?>


他PCでhttp://<ラズパイのIPアドレス>/test.php
へアクセスしてみる。
無事に
PHP Version 7.2.10-1+ubuntu16.04.1+deb.sury.org+1
というページが表示された。

# wget 'https://ja.osdn.net/frs/redir.php?m=iij&f=%2Fpukiwiki%2F64807%2Fpukiwiki-1.5.1_utf8.zip' -O pukiwiki.zip
# unzip pukiwiki.zip
# mv pukiwiki-1.5.1_utf8 pukiwiki

他PCで
http://<ラズパイのIPアドレス>/pukiwiki/index.php
へアクセスしてみると、Wikiの画面が表示された。

[RPi]Linuxデバドラ

使ってるのはたぶんラズパイ2.
# uname -a

Linux rp2 4.4.38-v7+ #938 SMP Thu Dec 15 15:22:21 GMT 2016 armv7l armv7l armv7l GNU/Linux


# cat /etc/issue

Ubuntu 16.04.2 LTS \n \l




参照先の記事作成者に感謝。


組み込みLinuxデバイスドライバの作り方 (1)

https://qiita.com/take-iwiw/items/1fdd2e0faaaa868a2db2

# sudo apt-get install raspberrypi-kernel-headers

# vi MyModule.c

#include

static int test_init(void)
{
printk("Hello my module\n");
return 0;
}

static void test_exit(void)
{
printk("Bye bye my module\n");
}

module_init(test_init);
module_exit(test_exit);



# vi Makefile

CFILES = MyModule.c

obj-m := MyModule.o
MyModule-objs := $(CFILES:.c=.o)

all:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean


# make
# sudo insmod MyModule.ko
# sudo rmmod MyModule.ko
# dmesg


[ 3088.36446 ] Hello my module
[ 3142.463604 ] Bye bye module



確かにモジュールのロード、アンロードのメッセージが出てた。



組み込みLinuxデバイスドライバの作り方 (2)

https://qiita.com/take-iwiw/items/580ec7db2e88beeac3de

# vi Makefile

CFILE =MyDeviceDriver.c
obj-m:=MyDeviceDriver.o
MyDeviceDriver-objs:=$(CFILE:.c=.o)

all:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) clean


# vi MyDeviceDriver.c
 ※ 記事と同じため省略。

ビルドする。
# make
ロードする。
# sudo insmod MyDeviceModule.ko
# cat /proc/devices

1 mem
4 /dev/vc/0
5 /dev/tty
5 /dev/ptmx
5 ttyprintk
7 vcs
10 misc
13 input
14 sound
29 fb
63 MyDevice_NAME > ★ここに現れた



ユーザがアクセス出来るようにデバイスファイルを作る
# sudo mknod /dev/myDevice c 63 1
# sudo chmod 666 /dev/myDevice
# ls -lsta

0 crw-rw-rw- 1 root root 63, 1 2月 2 14:27 myDevice



シェルからWriteしてみる。
# echo "a" > /dev/myDevice
# dmesg

[ xxxx.xxxx ] myDevice_open
[ xxxx.xxxx ] myDevice_write
[ xxxx.xxxx ] myDevice_write
[ xxxx.xxxx ] myDevice_close



シェルからReadしてみる。
# cat /dev/myDevice
これを実行したら延々とAが出力された。

使い終わったら以下で削除する。
# sudo rmmod MyDeviceModule
# sudo rm /dev/myDevice



組み込みLinuxデバイスドライバの作り方 (3)

https://qiita.com/take-iwiw/items/6b02494a3668f79800e6


# vi Makefile
 ※ 記事の通り。
# vi MyDeviceDriver.c
 ※ 記事の通り。
# make
# sudo insmod MyDeviceModule.ko
実験的に3つ作成。
# sudo mknod --mode=666 /dev/mydevice0 c `grep MyDevice /proc/devices | awk '{print $1;}'` 0
# sudo mknod --mode=666 /dev/mydevice0 c `grep MyDevice /proc/devices | awk '{print $1;}'` 1
# sudo mknod --mode=666 /dev/mydevice0 c `grep MyDevice /proc/devices | awk '{print $1;}'` 2

静的な場合と同じく以下で削除。
# sudo rmmod MyDeviceDriver
# sudo rm /dev/mydevice0
# sudo rm /dev/mydevice1
# sudo rm /dev/mydevice2

ここまでで、メジャー番号の動的割り当てが出来た。
この後は、Linuxのudevの仕組みを使って、ロード(insmod)、及びデバイスファイル作成を自動化する。

# vi MyDeviceDriver.c
 ※ 記事と同じ。

これでudevにより/sys/class/mydevice/mydevice0/dev情報を基に自動的に
デバイスファイル/dev/mydevice0が作られるが、defaultでは一般ユーザのアクセス権が無い。
そこでルールファイルを作り、権限を変更してやる。

sudoでは/etc/udev/rule.d/の中をいじれないらしいのでrootになる。
# sudo -i
.ruleの前の名前は何でも良いらしい。
# echo 'KERNEL=="mydevice[0-9]*", GROUP="root", MODE="0666"' >> /etc/udev/rules.d/81-my.rules
# exit

# make

error implicit declaration of function 'class_create'


って言われた。
原因は以下が無かったから。

#include



ビルドし直してからロード。
# sudo insmod MyDeviceDriver.ko
デバイスファイルが自動で生成されたか確かめる。
# ls -lsta /dev/my*

0 crw-rw-rw- 1 root root 242, 0 2月 2 16:36 /dev/mydevice0
0 crw-rw-rw- 1 root root 242, 1 2月 2 16:36 /dev/mydevice1


メジャー番号242、マイナー番号0/1でmydevice0/1が生成されてる。

さらにデバイス情報のファイルが以下にあった。
# cat /sys/class/mydevice/mydevice0/dev

242:0

# cat /sys/class/mydevice/mydevice0/uevent

MAJOR=242
MINOR=0
DEVNAME=mydevice0





組み込みLinuxデバイスドライバの作り方 (4)

https://qiita.com/take-iwiw/items/26d5f7f4894ccc4ce227

ラズパイのメモリ空間が上記記事に添付されてる。



I2Cデバイスドライバ作成トライ

https://www.kernel.org/doc/Documentation/i2c/dev-interface

それぞれのI2Cアダプタは0から連番の番号を割り振られる。以下いずれかの方法で確認出来る。
# ls -lst /sys/class/i2c-dev/*

0 lrwxrwxrwx 1 root root 0 2月 17 14:18 i2c-1 -> ../../devices/platform/soc/3f804000.i2c/i2c-1/i2c-dev/i2c-1



# i2cdetect -l

i2c-1 i2c 3f804000.i2c I2C adapter




#include
#include

int file;
int adapter_nr = 2; /* probably dynamically determined */
char filename[20];

snprintf(filename, 19, "/dev/i2c-1", adapter_nr);
file = open(filename, O_RDWR);
if (file < 0) {
/* ERROR HANDLING; you can check errno to see what went wrong */
exit(1);
}

int addr = 0x40; /* The I2C address */

if (ioctl(file, I2C_SLAVE, addr) < 0) {
/* ERROR HANDLING; you can check errno to see what went wrong */
exit(1);
}

カレンダー
09 | 2022/10 | 11
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード