TL;DR
k3s上でもKubeEdgeを動かすことができる!(すごい)
kubeadmで構築するよりも簡単(個人の感想)で、より「エッジ」に適したk3s上に構築する方がいいのかもしれません
はじめに
「次はKubeEdgeのExampleを試すと言ったな、あれは嘘だ。」
はいどうも
前回の記事でKubeEdgeをEC2インスタンス上に構築してみましたが、あるお方が言いました
???「k3s上でも動かないのかな」
確かに気になりますね!
ということで、早速試してみました
環境
前回に引き続き、AWSのEC2インスタンス上に構築します
バージョン
今回も現時点(2019/09)での最新版を使用しました
前回からKubeEdgeのマイナーバージョンが上がっています
- k3s: 0.9.1
- KubeEdge: 1.1.0
マシンスペック
前回の反省を活かし、今回はスペックを落としました
マスタとエッジ両方同じスペックです
- OS: Ubuntu 18.04 LTS
- CPU: 2
- Memory: 4GB
- Storage: 8GiB
構築手順
構築手順は基本的には前回と変わりませんが、k3sで動かすために少し変更を加えています
今回は差分を示しながら解説したいと思いますので、割愛部分は前回と同じと思って下さい
※バージョンが書かれたところは適宜、読み替えて下さい
では早速、解説していきます
マスタ
まずは、k3sをインストールします
と言っても、用意されたスクリプトを実行するだけです(便利)
sudo su -
curl -sfL https://get.k3s.io | sh -
無事インストールできたら、KubeEdge用に少し変更を加えます
server \
の次の行に以下を追記し再起動します
vim /etc/systemd/system/k3s.service
+ --http-listen-port 8080
systemctl daemon-reload
systemctl restart k3s
# 確認
kubectl get nodes
ss -ntlp | grep 8080
これでk3sの構築は完了です
あとで必要になるので/var/lib/rancher/k3s/server/node-token
の文字列を控えておきます
あとは前回と同じ手順でマスタ側のKubeEdgeを構築するだけです
ただし、バージョンが上がったことで実行コマンドが少し変わっています
cd /etc/kubeedge/cloud
nohup ./cloudcore/cloudcore > cloudcore.log 2>&1 &
tail cloudcore.log # 確認
エッジ
次はエッジ側です
こちらでもk3sをインストールします
先程控えておいた文字列を使ってk3sクラスタに参加させます
sudo su -
curl -sfL https://get.k3s.io | K3S_URL=https://<マスタのIP>:6443 K3S_TOKEN="<先程控えた文列>" sh -
エッジ側のk3sのインストールはこれで完了です(簡単)
あとは前回と同じ要領でKubeEdgeを構築するだけですが、ここでもひと工夫が必要です
追加で編集した部分のみ抜粋します
cd /etc/kubeedge/edge
vim conf/edge.yaml
- runtime-type: docker
+ runtime-type: remote
- remote-runtime-endpoint: unix:///var/run/dockershim.sock
+ remote-runtime-endpoint: unix:///var/run/k3s/containerd/containerd.sock
- remote-image-endpoint: unix:///var/run/dockershim.sock
+ remote-image-endpoint: unix:///var/run/k3s/containerd/containerd.sock
nohup ./edgecore > edgecore.log 2>&1 &
tail edgecore.log # 確認
今回はDockerを使っていないので、k3sが利用しているcontainerdのソケットを指定します
テスト
最後にk3sクラスタが正しく動いているか確認します
が、前回と同じ手順だと上手くいかないので少し変更します
# 一旦ファイルとして保存
wget -L https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.1/build/deployment.yaml
vim deployment.yaml
- hostPort: 80
+ hostPort: 9080
kubectl apply -f deployment.yaml
kubectl get pods
kubectl get deploy
k3sではhostPort
の80番はすでに使われているので、適当なポートに書き換えます
問題なくPodがデプロイできればOKです
最後に
いかがだったでしょうか
筆者的には、前回と同じ部分があるとはいえ、kubeadmよりも簡単に構築できた気がします
しかし気になるのはマスタ側もk3sでなければならないことですね
k8sとk3sがクラスタを組めれば万々歳なのですが、それは贅沢ってもんですかねw
そしてやはり残る疑問は**「KubeEdge自体がちゃんと動いているのか」**です
なので次こそはExampleを試したいと思います!
ではでは〜