こんにちは、弊社サービスのインフラを運用している id:keijiu (ijikeman)です。
今回は、「Knative on minikubeでServing & Eventing Helloworldを動かすまで(構築編)」を記載します。
[対象読者]
- Knative Eventing環境を自分で作ってみたい人
- Knative EventingでサンプルコードHelloworldを動かしたい人
- Knative Eventingの構成を理解したい人
[記事を読んでわかること]
- knative Cli[kn]を使ってminikube上でKnative Eventingを構築
[構築環境情報]
目次
1. docker-ceのセットアップ
minikubeを動作させる為にはいくつかのDriverをあらかじめセットアップしておく必要があります。
から今回はdocker-ceを選択します。
Docker-CEのセットアップは以下の情報を元にセットアップを行います。 Docker CE の入手(CentOS 向け) — Docker-docs-ja 20.10 ドキュメント
docker-ceリポジトリのセットアップ
# sudo yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 # sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
docker-ceのインストールと起動
# sudo yum install -y docker-ce # sudo systemctl enable docker # sudo systemctl start docker
docker-ceの起動を確認
# sudo systemctl status docker --- ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-05-25 23:56:00 EDT; 2s ago Docs: https://docs.docker.com Main PID: 26493 (dockerd) Tasks: 9 Memory: 35.2M CGroup: /system.slice/docker.service └─26493 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ---
2. minikube CLIのセットアップ
今回はRPMを使ってセットアップします。 ※ご自身の環境に合わせて選択肢を変更してください。
minikube CLIコマンドのセットアップ
# sudo curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm # sudo rpm -Uvh minikube-latest.x86_64.rpm
minikubeの動作確認
以下の様にroot権限のアカウントではminikubeは起動できませんので専用アカウントを用意します。
確認の為にminikube Driverにdockerを指定してminikube clusterを構築します。
# sudo minikube start --driver=docexitker --- * Rocky 8.5 (amd64) 上の minikube v1.25.2 * ユーザーの設定に基づいて docker ドライバーを使用します * 「docker」ドライバーは root 権限で使用すべきではありません。 * If you are running minikube within a VM, consider using --driver=none: * https://minikube.sigs.k8s.io/docs/reference/drivers/none/ X DRV_AS_ROOT が原因で終了します: 「docker」ドライバーは root 権限で使用すべきではありません。 ---
minikube用アカウントを用意する
minikube構築用にk8sグループとユーザを作成し、dockerグループに付属させます。
# groupadd k8s # useradd k8s -g k8s -s /bin/bash -d /home/k8s # sudo usermod -aG docker k8s && newgrp docker
dockerグループに付属していることを確認
# egrep docker /etc/group --- docker:x:987:k8s ---
k8sユーザに変更し、minikubeクラスタを構築する
# su - k8s -c 'minikube start --driver=docker' --- * Rocky 8.5 (amd64) 上の minikube v1.25.2 * 既存のプロファイルを元に、docker ドライバーを使用します * minikube クラスター中のコントロールプレーンの minikube ノードを起動しています * ベースイメージを取得しています... * docker 「 minikube 」 container がありません。再生成します。 * docker container (CPUs=2, Memory=2200MB) を作成しています... * Docker 20.10.12 で Kubernetes v1.23.3 を準備しています... - kubelet.housekeeping-interval=5m - 証明書と鍵を作成しています... - コントロールプレーンを起動しています... - RBAC のルールを設定中です... * Kubernetes コンポーネントを検証しています... - gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています * 有効なアドオン: storage-provisioner, default-storageclass * kubectl が見つかりません。kubectl が必要な場合、'minikube kubectl -- get pods -A' を試してください * 完了しました! kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました ---
minikube clusterの作成が可能であることが確認できましたので、作成したminikube clusterを削除しておきます
# su - k8s -c 'minikube delete' --- * docker の「minikube」を削除しています... * コンテナー「minikube」を削除しています... * /home/k8s/.minikube/machines/minikube を削除しています... * クラスター「minikube」の全てのトレースを削除しました。 ---
3. Knativeのセットアップ
ここまでこればKnative環境を構築するのは簡単です。
Knative環境の構築方法は以下2種類あります。
- knative Cli(kn) + Knative quickstart plugin
- こちらはKnative ServingとKnative Eventingの両方をセットアップしてくれます。
- 動作が保証された状態でセットアップできることから、環境構築に手間をかけたくない。とりあえずKnative触ってみたいといった人に向いています。
- kubectl + YAML
kubectlコマンドの設置
どちらの構築方法を選択してもkubectlコマンドの設置が必要となりますので、実施します。
# sudo curl -L -o /usr/local/bin/kubectl "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl" # sudo chmod +x /usr/local/bin/kubectl
knative Cli(kn) + Knative quickstart pluginによる構築
公式サイトに書かれている方法構築していきます。
Install Knative using quickstart - Knative
knativeのバージョン指定
Knativeのバージョンを指定します。
KNATIVE_VERSION='1.4.0'
kn(Knative cli)の設置
上記指定したバージョンにてknコマンドを設置します。
# sudo curl -LO https://github.com/knative/client/releases/download/knative-v${KNATIVE_VERSION}/kn-linux-amd64 # sudo mv kn-linux-amd64 /usr/local/bin/kn # sudo chmod +x /usr/local/bin/kn
Knative Quickstart Pluginの設置
次にquickstart plugin用コマンドを設置します。
# sudo curl -LO https://github.com/knative-sandbox/kn-plugin-quickstart/releases/download/knative-v${KNATIVE_VERSION}/kn-quickstart-linux-amd64 # sudo mv kn-quickstart-linux-amd64 /usr/local/bin/kn-quickstart # sudo chmod +x /usr/local/bin/kn-quickstart
Knative(Serving + Eventing)のセットアップ
一旦k8sユーザに切り替えます。
# su - k8s
いよいよKnativeのセットアップを行います。
下記ログより
- minikube clusterの構築
- kubectlコマンドの参照先をknativeクラスタを参照させる
- Knative Servingのセットアップ
- Kourier Netowrk Layerのセットアップ
- Knative Eventingのセットアップ
をそれぞれ実施しています。
k8s$ kn quickstart minikube --- Running Knative Quickstart using Minikube Minikube version is: v1.25.2 ☸ Creating Minikube cluster... Using the standard minikube driver for your system If you wish to use a different driver, please configure minikube using minikube config set driver <your-driver> * Rocky 8.5 (amd64) 上の [knative] minikube v1.25.2 ! Specified Kubernetes version 1.23.4 is newer than the newest supported version: v1.23.4-rc.0 * docker ドライバーが自動的に選択されました ! あなたの cgroup ではメモリーの設定ができません。 - 追加情報: https://docs.docker.com/engine/install/linux-postinstall/#your-kernel-does-not-support-cgroup-swap-limit-capabilities X 要求された 3072MiB のメモリー割当は、システムのオーバーヘッド (合計システムメモリー: 3684MiB) に十分な空きを残しません。安定性の問題に直面するかも知れません。 * 提案: Start minikube with less memory allocated: 'minikube start --memory=3072mb' * knative クラスター中のコントロールプレーンの knative ノードを起動しています * ベースイメージを取得しています... * Kubernetes v1.23.4 のダウンロードの準備をしています > preloaded-images-k8s-v17-v1...: 505.67 MiB / 505.67 MiB 100.00% 35.55 Mi * docker container (CPUs=3, Memory=3072MB) を作成しています... * Docker 20.10.12 で Kubernetes v1.23.4 を準備しています... - kubelet.housekeeping-interval=5m - 証明書と鍵を作成しています... - コントロールプレーンを起動しています... - RBAC のルールを設定中です... * Kubernetes コンポーネントを検証しています... - gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています * 有効なアドオン: default-storageclass, storage-provisioner * 完了しました! kubectl が「"knative"」クラスタと「"default"」ネームスペースを使用するよう構成されました 🍿 Installing Knative Serving v1.4.0 ... CRDs installed... Core installed... Finished installing Knative Serving 🕸️ Installing Kourier networking layer v1.4.0 ... Kourier installed... Ingress patched... Finished installing Kourier Networking layer 🕸 Configuring Kourier for Minikube... Domain DNS set up... Minikube tunnel... Finished configuring Kourier 🔥 Installing Knative Eventing v1.4.0 ... CRDs installed... Core installed... In-memory channel installed... Mt-channel broker installed... Example broker installed... Finished installing Knative Eventing 🚀 Knative install took: 3m25s 🎉 Now have some fun with Serverless and Event Driven Apps! ---
Knative環境の動作状況を確認する
まずは、namespace情報を確認します knative-eventing, knative-serving, kourier-systemができていることが確認できます。
※kube-node-lease, kube-public, kube-systemはminikubeのnamespaceです。
k8s$ kubectl get namespaces NAME STATUS AGE default Active 9m26s knative-eventing Active 7m27s knative-serving Active 8m26s kourier-system Active 8m1s kube-node-lease Active 9m28s kube-public Active 9m28s kube-system Active 9m28s
次に各deploymentの状況を確認します。全てREADY 1/1となっているか確認します。
※pingsourceは0/0で問題ありません。
knative-eventingのコンポーネントです。
ChannelはIn Memory Channel(imc-*)が選択されています。
BrokerはMT-Channel-based(mt-broker-*)が選択されています。
$ kubectl get deployment --namespace knative-eventing --- NAME READY UP-TO-DATE AVAILABLE AGE eventing-controller 1/1 1 1 13m eventing-webhook 1/1 1 1 13m imc-controller 1/1 1 1 12m imc-dispatcher 1/1 1 1 12m mt-broker-controller 1/1 1 1 12m mt-broker-filter 1/1 1 1 12m mt-broker-ingress 1/1 1 1 12m pingsource-mt-adapter 0/0 0 0 13m ---
knative-servingのコンポーネントです。
networkにkourier network layerが選択されています。
$ kubectl get deployment --namespace knative-serving --- NAME READY UP-TO-DATE AVAILABLE AGE activator 1/1 1 1 16m autoscaler 1/1 1 1 16m controller 1/1 1 1 16m domain-mapping 1/1 1 1 16m domainmapping-webhook 1/1 1 1 16m net-kourier-controller 1/1 1 1 16m webhook 1/1 1 1 16m --- $ kubectl get deployment --namespace kourier-system --- NAME READY UP-TO-DATE AVAILABLE AGE 3scale-kourier-gateway 1/1 1 1 16m ---
環境構築は以上で終了です。
続はいよいよ 構築したKnative on minikubeでServing & Eventing Helloworldを動かすまで(実行編) にて
- Knative ServingのHelloworldの動作確認
- Knative Eventing Helloworldの動作確認
- Knative Serving + Eventingを組み合わせたHelloworld
を行います。お楽しみに!!
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com