IoT開発、設備・DIYのブログ!
このプログラムをコンテナ化しdocker image を作成するためにdocer fileを作ります。今の天気はbroken clouds温度は22.64℃だよ
— 神奈川県の天気と気温 (@setsubinomania) October 2, 2020
前回からkubernetes環境を構築してます。ラズパイは3B、3B+、4の3台。
ちょっと今回はローカルのdocker imageをkubernetesでデプロイしてみます。
まずは正常に動作してるか確認します。
kubectl get node
3台分STATUSがReadyであれば大丈夫です。
①kubernetesでデプロイするためのdocker imageの準備
まずはワーカーノードのラズパイで下記のようなDockerfileを作成します。
Dockerfileと同じフォルダの中にpublic-htmlというフォルダを作り、index.htmlという名前で下記ファイルを作ります。
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
hello world
</body>
</html>
Dockerfileを作った任意のフォルダでdocker imageをビルドします。
ラズパイって新しいのが出るとついつい買ってしまいますよね。ラズパイ3Bから初めて3B+とラズパイ4が家にあって… 何台もあるけど使っているのは新しい一台だけ。そんな方多いんじゃないでしょうか。
ラズパイをクラスタ化してkubernetesを導入するという試み(というか記事)が多くあったので
思い切ってルータとスイッチングhubを買ってやってみることにしました。
↓有線LANで接続するため、短めのLANケーブルが数本必要です。
こういうのがあったほうがいいかもです
1番参考にした記事はこちらです、 → Raspberry Pi 4 でおうちKubernetesを作ろう(Raspbian Buster Lite対応版)
3台でクラスタ化をしている記事が多いですが、kubernetesを使ってみるだけであればラズパイはマスターとワーカーノードで2台で十分です。(かなり動きがもっさりしますが…)
今回ラズパイ3B+とラズパイ4でクラスタ化を試みました。
OSのインストールはせず、現在使っている環境でやってみました。
マスター ラズパイ4 rasbian 10.4
ワーカーノード ラズパイ3B+ rasbian 9.13
手順としては…
①初めにルーターを家の無線wi-hiにつなぐ
・ルーター本体記載のSSIDとパスワードでまずPCから接続。
・WEBブラウザを開いてhttp://192.168.13.1/へ接続。設定ウィザードからワイヤレスワンモードにする。
②ラズパイのIPアドレスをマスター192.168.13.101、ワーカー 192.168.13.102にする。
sudo nano /etc/dhcpcd.conf コマンドで下記を追加(マスターの例)
interface eth0
static ip_address=192.168.13.101/24
static routers=192.168.13.1
static domain_name_servers=192.168.13.1 8.8.8.8 fd51:42f8:caae:d92e::1
sudo nano /etc/hosts で
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 k8s-master
192.168.13.101 k8s-master
192.168.13.102 k8s-node1
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
※ラズパイ3B+ではできませんでした。(下記エラーがでますが今のところ問題なし)
update-alternatives: エラー: iptables の alternatives がありません
sudo -i
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/containerd.io_1.2.6-3_armhf.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/docker-ce-cli_19.03.5~3-0~debian-buster_armhf.deb
wget https://download.docker.com/linux/debian/dists/buster/pool/stable/armhf/docker-ce_19.03.5~3-0~debian-buster_armhf.deb
dpkg -i containerd.io_1.2.6-3_armhf.deb
dpkg -i docker-ce-cli_19.03.5~3-0~debian-buster_armhf.deb
dpkg -i docker-ce_19.03.5~3-0~debian-buster_armhf.deb
⑨kubernetes関連インストール
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get install -y kubelet kubeadm kubectl
⓾マスターの構築 ※ワーカーはやらなくてOKです
kubeadm init --pod-network-cidr=10.244.0.0/16
上記のコマンドで kubeadm join 192.168.13.101:6443 --token~ をメモって下さい。
ワーカーから接続するときに使用します。
⑪kubectの設定
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ここで kubectl get node コマンドでマスター単体の動作確認ができます。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/
2140ac876ef134e0ed5af15c65e414cf26827915/Documentation/kube-flannel.yml
⑬ワーカーのクラスタ参加 ※ワーカーのみ
⓾でメモったトークンとハッシュ値を入力しクラスタに参加します。
kubeadm join 192.168.13.101:6443 --token~
error execution phase preflight: couldn't validate the identity of the API Server: could not find a JWS signature in the cluster-info ConfigMap for token ID "ww3i31"
とエラーがでたらトークンの有効期限が切れています。
マスターでkubeadm token createとコマンドを打てばまたもらえます。
うまくいけば下記のようにマスター、ノードともにReadyになります。
ワーカーが1台しかないのでpodが増えると異常に重くなります。レプリカ数を減らすとなんとか動きます。スペックの高いラズパイ4のほうをワーカーにしたほうがよかったかなと後悔…。
→もう一台つなげてdocker imageをデプロイしてみました