k3s × Istio やってみた
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
k3s とは?
Kubernetes といえば DX(Digital Transformation)時代のアプリケーション基盤として有力です.k3s とは CNCF 公式の認証付きの軽量なKubernetesディストリビューションです.Edge やローカル PC などでも動作する軽量な Kuberntes を求めているユーザのためのプロダクトとして生まれました.特徴としては,50MBのシングルバイナリで動作する.簡易なコマンドでクラスタを構築できる.
クラスタの作り方
↓マスターを作る↓
k3s server --disable-agent
↓ワーカーを作る↓
k3s agent --server https://myserver:6443 --token
上記の手続きでクラスタ構築が完了する.とても簡単に実行できます!
k3s のユースケース
IoT が騒がれる今,トラフィックの最適化・低遅延のリアルタイム処理・データ分析において,ユーザに近い位置にコンピューティングリソースを配置し処理する Edge Computing が期待されています.
k3s の Agent は,Raspberry Pi や監視カメラ等のデバイス類にインストールが想定され,実際に工場 IoT や 銀行支店システムで利用されています.顧客により近い Edge で Kubernetes を動かすニーズは増えていくと予想できるでしょう...!
k3s と Istio
Kubernetes を運用していると 通信の暗号化・トラフィックモニタリング・細かなルーティングのために,Istio にお世話になることも多いと思います.
Istio はホストPCに要求するリソースも大きいので,Edge の環境で実際動くのだろうか・・・.今回は,k3s で Istioを動かせるかを検証していきたいと思います!
環境準備
↓筆者の開発環境はこちら↓
- OS (Mac OS Catalina)
- k3s (Kubernetes 軽量distro)
- multipass (仮想マシン管理ツール)
k3s は,MacOS での動作をサポートしていないので,仮想環境を構築していきたいと思います.
1. Multipass で k3s を実行するためのインスタンスを作成
multipass launch --name k3s --cpus 2 --mem 4g --disk 20
※ Raspberry Pi のスペックを参考にしてみました
2. k3s のインストール
2-1. インスタンスにログイン
multipass shell k3s
2-2. k3s の初期設定用スクリプトを実行
curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" INSTALL_K3S_EXEC="--no-deploy traefik" sh -
※ Ingress Gateway は,istio-ingressgateway を使うため,traefik はデプロイしません.
3. kubeconfig の設定
- 目標
- ホスト PC から,仮想環境の k3s クラスタにアクセスできるようにする
3-1. kubeconfig をホストPCにコピー
ここに置いてあります (/etc/rancher/k3s/k3s.yaml)
3-2. ホスト PC からアクセスできるインスタンスのプライベートIPを取得します
multipass info k3s
3-3. kubeconfig に記載されている API Server のアドレスを,プライベートIPに置き換えます
3-4. ホストPCから,仮想環境で動く k3s クラスタにアクセスできれば OK です
4. Istio
- 目標
- k3s クラスタに Istio をインストールする
4-1. Istio をカスタマイズ
IstioOperator を istioctl に渡すことで,デプロイする Yaml をカスタマイズできます.
Istio のコンポーネントは,デフォルトで予約するリソースが大きいため,とりあえず 「1/20」 で設定してみます.
Podへのインバウンド通信は全て,istio-ingressgateway を通過するので NodePort を指定します.
apiVersion: operator.istio.io/v1alpha1 kind: IstioOperator spec: components: pilot: k8s: resources: requests: cpu: 25m # default 500m memory: 128Mi # default 2048Mi hpaSpec: maxReplicas: 3 minReplicas: 2 ingressGateways: - name: istio-ingressgateway enabled: true k8s: service: type: NodePort ports: - name: status-port port: 15021 targetPort: 15021 - name: http2 port: 80 targetPort: 8080 - name: https port: 443 targetPort: 8443 - name: tls port: 15443 targetPort: 15443
4-2. Istioctl インストール
istioctl install -f hogehoge-istio-operator.yaml
5. Prometheus・Grafana・Kiali のインストール
- 目標
- 可観測性のため k3s クラスタにアドオンをインストールする
- 通信やリソース状況など把握できた方が運用が楽になります!モニタリング系も入れていきましょう!
5-1. CRD インストール
Prometheus と Grafana の CRD は,こちら から拝借します
Kiali は,こちら から拝借
適宜 kubectl apply -f しましょう!
5-2. ダッシュボードで見てみよう!
istioctl が kubectl を使用して port-forward してくれます
istioctl dashboard kiali
※ kiali は後ほど...!
istioctl dashboard grafana
istioctl dashboard prometheus
6. Demo アプリのデプロイ
- 目標
- マイクロサービス (複数のアプリ) をインストールしてみて,k3s クラスタと Istio が動きそうか確認してみる
Demo アプリは Google の microservice example repository を使います!
12個の Pod が立ち上がります
改めて,Kiali を起動してトポロジを見てみましょう.Pod 間通信の向きや通信状況が見えるのは助かりますね...!
7. まとめ
Edge でもサービスメッシュやメトリクスを収集 + 可視化したいというニーズはあると思います.
今回は,k3s クラスタで動くのか気になったので,Istio + モニタリング系のアプリを導入してみました.
KubeEdge という OSS でもロードマップに,service mesh が含まれているので,こちらも気になるところです!
以上,k3s に Istio を入れてみたでした!
参考資料
- Running K3s with Multipass on Macbook (https://zhimin-wen.medium.com/running-k3s-with-multipass-on-mac-fbd559966f7c)
- KubeEdge (https://kubeedge.io/en/docs/roadmap/)