fbpx

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/)
新規CTA