一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
ストーリー
- 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -
- 一足遅れて Kubernetes を学び始める - 02. Docker For Mac -
- 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -
- 一足遅れて Kubernetes を学び始める - 04. kubectl -
- 一足遅れて Kubernetes を学び始める - 05. workloads その 1 -
- 一足遅れて Kubernetes を学び始める - 06. workloads その 2 -
- 一足遅れて Kubernetes を学び始める - 07. workloads その 3 -
- 一足遅れて Kubernetes を学び始める - 08. discovery&LB その 1 -
- 一足遅れて Kubernetes を学び始める - 09. discovery&LB その 2 -
- 一足遅れて Kubernetes を学び始める - 10. config&storage その 1 -
- 一足遅れて Kubernetes を学び始める - 11. config&storage その 2 -
- 一足遅れて Kubernetes を学び始める - 12. リソース制限 -
- 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -
- 一足遅れて Kubernetes を学び始める - 14. スケジューリング -
- 一足遅れて Kubernetes を学び始める - 15. セキュリティ -
- 一足遅れて Kubernetes を学び始める - 16. コンポーネント -
前回
一足遅れて Kubernetes を学び始める - 02. Docker For Mac -では、Mac で Kubernetes を軽く動かしてみました。DockerForMac では、Node が Master のみだったため、Kubernetes を学習するには、ものたりない感がありました。そこで、RaspberryPi を使っておうち Kubernetes を構築することになりました。
参考サイト
- ラズパイで Kubernetes クラスタを構築する
- おうち Kubernetes 構築でハマったところ - ニッチ編 -
- おうち kubernetes でデータを永続化する
- kubernetes のラズパイ包みが美味しそうだったので、kubeadm を使って作ってみた
- Raspberry PI と kubeadm で自宅 Kubernetes クラスタを構築する
- 3 日間クッキング【Kubernetes のラズペリーパイ包み “サイバーエージェント風”】
- 33 時間クッキング【Kubernetes のラズベリーパイ包み〜ウエパ風〜】
レシピ
商品名 | 個数 | 用途 |
---|---|---|
Raspberry Pi 3 Model B | 3 つ | MasterNode1 台 WorkerNode2 台 |
microSDHC カード 16GB | 3 枚 | RaspberryPi の image 書き込み先 |
LAN ケーブル | 1 本 | RaspberryPi とネットワーク接続 |
USB 充電器 | 1 台 | RaspberryPi の電源 |
Micro USB ケーブル | 4 本 | RaspberryPi と USB 充電器をつなげる |
for Raspberry Pi ケース 専用 4 段 ヒートシンク付 | 1 台 | 4 段 (3:RaspberryPi,1:USB 充電器) |
RaspberryPi は世代 3 の ModelB なら WiFi 接続できるので、自宅の WiFi につなげることにしました。自宅では SoftbankAir を使っています。 (ただし、初回のみ LAN ケーブルでネットワーク接続します)
また、私の環境は下記のとおりです。
iMac (21.5-inch, 2017)
構築(物理)
Raspberry Pi でおうち Kubernetes 構築【物理編】で十分な情報があります。こちらを参考にして組み立てします。 できたものがこちらです。
WiFi を使うために、LAN ケーブルや WiFi 親機などがなくなり、スッキリしました。 電源を確保できるところであれば、家の中なら、どこでも持ち運びできます。 ✨
構築(論理)
Raspbian Stretch Liteをダウンロードしておきます。
Step の 1 から 3 までの手順をRaspberryPi 一台ずつ 、下記の手続きを踏んでいきます。
1. 初期設定
microSD カードを Mac につなげた後に、下記を実施します。
$ diskutil list
$ sudo diskutil umount /dev/disk3s1
$ sudo dd bs=1m if=2019-04-08-raspbian-stretch-lite.img of=/dev/rdisk3 conv=sync
$ cd /Volumes/boot
$ touch ssh
$ vim cmdline.txt
# 下記を末尾に追記
cgroup_enable=cpuset cgroup_enable=memory cgroup_memory=1
イメージを書き込み際、r をつける (rdisk3)と、高速になるそうです。
2. RaspberryPi に接続
MicroSD カードを RaspbeeryPi に挿入し、電源をつけたら、下記を実施します。 LAN ケーブルは、自宅の WiFi に直接つなげます。(私の場合は SoftBankAir)
hostname は、お好みの名前にします。(私は、Master:raspi001, Worker:raspi002,raspi003
としました。)
$ slogin pi@raspberrypi.local
# 初回password「raspberry」
pi@raspbeerypi:~ $ sudo passwd pi
pi@raspbeerypi:~ $ sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get install -y vim
pi@raspbeerypi:~ $ sudo vim /etc/hostname
pi@raspbeerypi:~ $ sudo sh -c 'wpa_passphrase <SSID> <PASSWORD> >> /etc/wpa_supplicant/wpa_supplicant.conf'
pi@raspbeerypi:~ $ sudo shutdown -r now
※ 2 回目以降は、ssh-keygen -R raspberrypi.local
をしましょう。
電源を落として、LAN ケーブルを外します。再度電源をつけて数分待ってから、下記を実施します。
$ slogin pi@raspi001.local
pi@raspi001:~ $
接続できたら成功です。
3. 各種インストール
おまじないをします。
pi@raspi001:~ $ sudo dphys-swapfile swapoff && sudo dphys-swapfile uninstall && sudo update-rc.d dphys-swapfile remove
Docker をインストールします。
pi@raspi001:~ $ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
pi@raspi001:~ $ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
pi@raspi001:~ $ 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
pi@raspi001:~ $ sudo apt-get update -y
pi@raspi001:~ $ sudo apt-get install docker-ce -y
Kubernetes をインストールします。
pi@raspi001:~ $ curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg|sudo apt-key add -
pi@raspi001:~ $ echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kube.list
pi@raspi001:~ $ sudo apt-get update -y && sudo apt-get install kubelet kubeadm kubectl -y
4. MasterNode の設定
MasterNode にする RaspberryPi に対して下記を実施します。
pi@raspi001:~ $ sudo kubeadm init --pod-network-cidr=10.244.0.0/16
pi@raspi001:~ $ mkdir -p $HOME/.kube
pi@raspi001:~ $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
pi@raspi001:~ $ sudo chown $(id -u):$(id -g) $HOME/.kube/config
出力される join メッセージをメモしておき、WorkerNode の構築時に使います。
こちらに従い下記を実行します。
pi@raspi001:~ $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml
pi@raspi001:~ $ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-fb8b8dccf-lglcr 0/1 ContainerCreating 0 4d16h
kube-system coredns-fb8b8dccf-snt7d 0/1 ContainerCreating 0 4d16h
...
5. WorkerNode の設定
MasterNode から出力された join コマンドを実施します。
pi@raspi002 $ kubeadm join 192.168.3.32:6443 --token X \
--discovery-token-ca-cert-hash sha256:X
6. MasterNode から確認
Node が増えているか確認します。
pi@raspi001:~ $ kubectl get nodes
NAME STATUS ROLES AGE VERSION
raspi001 Ready master 65m v1.14.1
raspi002 Ready <none> 18m v1.14.1
raspi002 Ready <none> 18m v1.14.1
pi@raspi001:~ $ kubectl label node raspi002 node-role.kubernetes.io/worker=worker
pi@raspi001:~ $ kubectl label node raspi003 node-role.kubernetes.io/worker=worker
pi@raspi001:~ $ kubectl get nodes
NAME STATUS ROLES AGE VERSION
raspi001 Ready master 65m v1.14.1
raspi002 Ready worker 37m v1.14.1
raspi003 Ready worker 37m v1.14.1
7. ブラウザから確認
試しにデプロイ → サービス公開 → ブラウザ確認までを、さっと通してみます。
pi@raspi001:~ $ kubectl run nginx --image=nginx --replicas=1 --port=80
pi@raspi001:~ $ kubectl expose deployment nginx --port 80 --target-port 80 --type NodePort
pi@raspi001:~ $ kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.99.227.194 <none> 80:30783/TCP 17m
サービス公開までしたので、アクセスしてみます。
内部
pi@raspi001:~ $ curl http://10.99.227.194:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
外部
pi@raspi001:~ $ ifconfig
...
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.3.32 netmask 255.255.255.0 broadcast 192.168.3.255
http://192.168.3.32:30783
にアクセス
OK!
お片付け
pi@raspi001:~ $ kubectl delete deployments nginx
deployment.extensions "nginx" deleted
pi@raspi001:~ $ kubectl delete service nginx
service "nginx" deleted
完成
すんなりと構築することができました。これは先人たちの記事がたくさんあるので、 サクサクと進めることができました。これで、Kubernetes を使いまくります!! 💪💪 次回はこちらです。
Tags
2019-07-27
今回、東京で開催されましたCloud Native Days Tokyo 2019に2日間とも参加してきましたので、報告しようと思います。セッション毎の報告というより、全体を通した感想を話そうかなと思います。...
2019-06-10
前回 一足遅れて Kubernetes を学び始める - 15. セキュリティ -では、RBACによる権限について学習しました。今回は最後にKubernetesのコンポーネントについて学習します。...
2019-06-07
前回 一足遅れて Kubernetes を学び始める - 14. スケジューリング -では、AffinityなどでPodのスケジューリングについて学習しました。今回は、セキュリティについて学習します。...
2019-06-05
前回 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -では、requestsやlimitといったヘルスチェックの仕方を学びました。今回は、Affinityなどによるスケジューリングについて学習します。...
2019-06-01
大阪からKubernetes Meetup Tokyoに参加できるとのことで、こちらに参加してきました。Kubernetesの生みの親である3人の内の1人のJoe Bedaから、Kubernetesの歴史の経緯について教えて頂きました。その話がとてもわかりやすく、なるほどなと思ったので、ぜひとも共有したいと思います。...
2019-05-30
前回 一足遅れて Kubernetes を学び始める - 12. リソース制限 -では、requestsやlimitなどのリソース制限について学習しました。今回は、ヘルスチェックとコンテナライフサイクルについて学習します。...
2019-05-29
前回 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -では、storageについて学習しました。今回は、リソース制限について学習します。...
2019-05-27
前回 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -では、configについて学習しました。今回は、storageを学びます。...
2019-05-23
前回 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -では、様々なserviceを学習しました。今回は、config&storageのconfigを学びます。...
2019-05-22
今回、k8sの体験を目的として参加したのですが、意外な収穫があったので、共有したく、記事を書くことにしました。...
2019-05-15
前回 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -でServiceについての概要を学びました。今回は下記を一気に学びます。...
2019-05-07
前回 一足遅れて Kubernetes を学び始める - 07. workloads その3 -でようやくworkloadsが終了しました。今回は、discovery&LBを進めようと思います。...
2019-05-06
前回 一足遅れて Kubernetes を学び始める - 06. workloads その2 -にて、DaemonSetとStatefulSet(一部)を学習しました。今回は、StatefulSetの続きとJob,CronJobを学習します。...
2019-05-05
前回 一足遅れて Kubernetes を学び始める - 05. workloads その1 -では、Pod,ReplicaSet,Deploymentの3つを学習しました。今回はDaemonSet,StatefulSet(一部)を学びます。...
2019-05-03
前回 一足遅れて Kubernetes を学び始める - 04. kubectl -では、kubenetesのCLIツールkubectlを学習しました。今回は、目玉機能であるworkloadsについて学習します。...
2019-05-02
前回 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。...
2019-04-27
前回 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。...
2019-04-18
経緯 Kubernetesを使えるようになりたいな〜(定義不明) けど、他にやりたいこと(アプリ開発)あるから後回しにしちゃえ〜!!と、今までずっと、ちゃんと学ばなかったKubernetesを、本腰入れて使ってみようと思います。...
2019-06-10
前回 一足遅れて Kubernetes を学び始める - 15. セキュリティ -では、RBACによる権限について学習しました。今回は最後にKubernetesのコンポーネントについて学習します。...
2019-06-07
前回 一足遅れて Kubernetes を学び始める - 14. スケジューリング -では、AffinityなどでPodのスケジューリングについて学習しました。今回は、セキュリティについて学習します。...
2019-06-05
前回 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -では、requestsやlimitといったヘルスチェックの仕方を学びました。今回は、Affinityなどによるスケジューリングについて学習します。...
2019-05-30
前回 一足遅れて Kubernetes を学び始める - 12. リソース制限 -では、requestsやlimitなどのリソース制限について学習しました。今回は、ヘルスチェックとコンテナライフサイクルについて学習します。...
2019-05-29
前回 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -では、storageについて学習しました。今回は、リソース制限について学習します。...
2019-05-27
前回 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -では、configについて学習しました。今回は、storageを学びます。...
2019-05-23
前回 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -では、様々なserviceを学習しました。今回は、config&storageのconfigを学びます。...
2019-05-15
前回 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -でServiceについての概要を学びました。今回は下記を一気に学びます。...
2019-05-07
前回 一足遅れて Kubernetes を学び始める - 07. workloads その3 -でようやくworkloadsが終了しました。今回は、discovery&LBを進めようと思います。...
2019-05-06
前回 一足遅れて Kubernetes を学び始める - 06. workloads その2 -にて、DaemonSetとStatefulSet(一部)を学習しました。今回は、StatefulSetの続きとJob,CronJobを学習します。...
2019-05-05
前回 一足遅れて Kubernetes を学び始める - 05. workloads その1 -では、Pod,ReplicaSet,Deploymentの3つを学習しました。今回はDaemonSet,StatefulSet(一部)を学びます。...
2019-05-03
前回 一足遅れて Kubernetes を学び始める - 04. kubectl -では、kubenetesのCLIツールkubectlを学習しました。今回は、目玉機能であるworkloadsについて学習します。...
2019-05-02
前回 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。...
2019-04-27
前回 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。...
2019-04-18
経緯 Kubernetesを使えるようになりたいな〜(定義不明) けど、他にやりたいこと(アプリ開発)あるから後回しにしちゃえ〜!!と、今までずっと、ちゃんと学ばなかったKubernetesを、本腰入れて使ってみようと思います。...
2021-09-04
コンパイラ基盤であるLLVMについて、全く知識がない私が、javascriptソースコードをパースしLLVMでコンパイルできるようになりました。LLVMの記事は数多くありますが、初心者向けの記事が少なく感じたため、本記事では、できる限り分かりやすくLLVMについて紹介できる記事を書こうと思います。ソースコードは、こちらに置いています。...
2020-07-10
どうも、こんにちは。Re:ゼロ2期 始まりましたね、 @silverbirderです。最近、仕事の関係上、Apache Beam + Kotlin を使うことになりました。それらの技術が一切知らなかったので、この記事に学んだことを書いていきます。...
2019-06-10
前回 一足遅れて Kubernetes を学び始める - 15. セキュリティ -では、RBACによる権限について学習しました。今回は最後にKubernetesのコンポーネントについて学習します。...
2019-06-07
前回 一足遅れて Kubernetes を学び始める - 14. スケジューリング -では、AffinityなどでPodのスケジューリングについて学習しました。今回は、セキュリティについて学習します。...
2019-06-05
前回 一足遅れて Kubernetes を学び始める - 13. ヘルスチェックとコンテナライフサイクル -では、requestsやlimitといったヘルスチェックの仕方を学びました。今回は、Affinityなどによるスケジューリングについて学習します。...
2019-05-30
前回 一足遅れて Kubernetes を学び始める - 12. リソース制限 -では、requestsやlimitなどのリソース制限について学習しました。今回は、ヘルスチェックとコンテナライフサイクルについて学習します。...
2019-05-29
前回 一足遅れて Kubernetes を学び始める - 11. config&storage その2 -では、storageについて学習しました。今回は、リソース制限について学習します。...
2019-05-27
前回 一足遅れて Kubernetes を学び始める - 10. config&storage その1 -では、configについて学習しました。今回は、storageを学びます。...
2019-05-23
前回 一足遅れて Kubernetes を学び始める - 09. discovery&LB その2 -では、様々なserviceを学習しました。今回は、config&storageのconfigを学びます。...
2019-05-22
今回、k8sの体験を目的として参加したのですが、意外な収穫があったので、共有したく、記事を書くことにしました。...
2019-05-15
前回 一足遅れて Kubernetes を学び始める - 08. discovery&LB その1 -でServiceについての概要を学びました。今回は下記を一気に学びます。...
2019-05-07
前回 一足遅れて Kubernetes を学び始める - 07. workloads その3 -でようやくworkloadsが終了しました。今回は、discovery&LBを進めようと思います。...
2019-05-06
前回 一足遅れて Kubernetes を学び始める - 06. workloads その2 -にて、DaemonSetとStatefulSet(一部)を学習しました。今回は、StatefulSetの続きとJob,CronJobを学習します。...
2019-05-05
前回 一足遅れて Kubernetes を学び始める - 05. workloads その1 -では、Pod,ReplicaSet,Deploymentの3つを学習しました。今回はDaemonSet,StatefulSet(一部)を学びます。...
2019-05-03
前回 一足遅れて Kubernetes を学び始める - 04. kubectl -では、kubenetesのCLIツールkubectlを学習しました。今回は、目玉機能であるworkloadsについて学習します。...
2019-05-02
前回 一足遅れて Kubernetes を学び始める - 03. Raspberry Pi -では、RaspberryPiの環境にKubernetesを導入しました。無事、動作確認ができたので、さっそく学習していきたいです。...
2019-04-27
前回 一足遅れて Kubernetes を学び始める - 01. 環境選択編 -にて、Kubernetesを学ぶ環境を考えてみました。いきなりGKEを使うんじゃなくて、お手軽に試せるDockerForMacを使おうとなりました。...
2019-04-18
経緯 Kubernetesを使えるようになりたいな〜(定義不明) けど、他にやりたいこと(アプリ開発)あるから後回しにしちゃえ〜!!と、今までずっと、ちゃんと学ばなかったKubernetesを、本腰入れて使ってみようと思います。...