konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

【Nutanix Karbon】Xi IoTの為のKubernetes環境を作ってみる

ここまでいろいろと PyTorch で画像処理などお勉強してきました
これを Xi IoT にも生かしていきたのですが、なんらかのアプリを作るには Data Pipeline でコードを組み込むか、Kubernetes Apps で作るかになります
(あんまりIoTぽいことはまだやっていないけど。。。)

ただ、せっかく PyTorch 勉強しましたが、Xi IoT の Function には PyTorch 用意されていません 。。。
f:id:konchangakita:20200520155311p:plain


そんな時は、自作です
プログラミング言語のランタイム環境も Kubernetes Appsで動いているようなので、Runtime Environment で PyTorch環境をコンテナ形式で作ってやればよいのです
f:id:konchangakita:20200520161426p:plain

自作ランタイムを作るにしても、Kubernetes App を作るにしてもお次はコンテナのお勉強が必要になってきました(やれやれ)

Nutanix Karbon

そこで Kubernetes クラスタ環境をNutanix上へ簡単に(無料で)実装できる【Nutanix Karbon】の登場です(無料です)
というわけで前置きが長くなりましたが、本題です
f:id:konchangakita:20200522002551p:plain

Karbon がなんたるか、とか細かいとこ、とかインストール手順というのはこちらにお譲りします
qiita.com

非常にちゃんと細かく書いてあるので、これに沿って簡単にインストールできちゃいます。ほとんど書くことないくらいに

ひとつ書いてないところあるとすれば,
本番運用するんじゃなくて、検証環境でとりあえずコンテナ作るを試したいというのであれば、「Development Cluster」を選ぶと仮想マシンは3台ですんじゃいます
f:id:konchangakita:20200520210649p:plain
使うリソースは、3台トータルで14vCPU、メモリ20GB、ストレージ400GB あれば、
Kebernetes クラスタが名前とIPアドレス入れるくらいの数クリックでポンです
f:id:konchangakita:20200520210229p:plain
会社のノートPC や おうちのデスクトップはあんまり汚したくない(?)ですからね

Windows PC から Karbon 環境へ繋ぐ準備

kubectlをKubernetes 公式から入手するか、Docker Desktopをインストールすると"kubectl"コマンドが使えるようになります

次に Karbon の管理画面に戻り、kubectl configファイルをダウンロードします
f:id:konchangakita:20200520234105p:plain
f:id:konchangakita:20200520234248p:plain


ダウンロードしたファイルと同じフォルダで、PowerShell 上で"kubectl version"コマンドで2個分のバージョンが表示されればOKです
Windows上のバージョンとKarbonのバージョン)

> kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.5", GitCommit:"20c265fef0741dd71a66480e35bd69f18351daea", GitTreeState:"clean", BuildDate:"2019-10-15T19:16:51Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.7", GitCommit:"6c143d35bb11d74970e7bc0b6c45b6bfdffc0bd4", GitTreeState:"clean", BuildDate:"2019-12-11T12:34:17Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

更に Karbon 上の node情報が引っ張ってこれれば完璧ですね

> kubectl get nodes
NAME                                    STATUS   ROLES    AGE   VERSION
karbon-kon-karbon-dd544b-k8s-master-0   Ready    master   33d   v1.15.7
karbon-kon-karbon-dd544b-k8s-worker-0   Ready    node     33d   v1.15.7

ここまで確認できたら、PATHを通しておきましょう
これで、コマンド実行場所を変えても Karbon へコマンド打てるようになります

$Env:KUBECONFIG=("\フルパス\xxx-karbon-kubectl.cfg")

Karbon へ SSH接続

Windows環境からKarbon環境へ sshログインはちょっと大変の模様。。。
MAC/Linux環境から sshしたい場合は、手順は基本的に上記の kubectlの接続とほぼ同じです
f:id:konchangakita:20200521004529p:plain


手間がかかるWindows 10 からの ssh接続の方法を説明しておきます
(Open ssh がインストールされている前提です)

Step1

ダウンロードした "xxx-karbon-ssh-access.sh" を2つコピーします

Step2

コピーしたファイルの1つ目のファイル名を"xxx-karbon-ssh-access"(拡張子無し)にリネーム
テキストエディタで中身を開き
private_key='~~~~~~~~' の中身だけを残して他を消す

こんな感じの20行前後

-----BEGIN RSA PRIVATE KEY-----
IEowIBAAKCAQEAwCqtcByHxI+Uwr3Q9U+qS6QkYUaJLeiQmIsA9uZ24C8ARAQK
3Wy6w7L3b5HsIV7VcuN7PFVwjGBMPRKOQYn/nRAjw0oEwYC5kB9bLmFDKrkR4Ecx
+
~~~~~~~~~~~~
sm
jNkAxMR6qPpfcCmxN5kWws2dVECnvAVdWJmkGYbh5o9VJwJcJL08GX6a1taiMSga
DFYExsrVosD+BjLxIuX7yLxkkhZztiURZZEWrntThIFqj9vd0+Jg
-----END RSA PRIVATE KEY-----
Step3

コピーした2つ目のファイルを”xxx-karbon-ssh-access.pub”(拡張子を.pub)に変更し
テキストエディタで開き
user_cert='~~~~~~~' の中身だけを残して他を消す

こんな感じの1行

ssh-rsa-cert-v01@openssh.com AAAAHHNza~~~~~z3FnM4rd72jmEHQ==
Step4

先ほど作った2つのファイルを
 ・xxx-karbon-ssh-access
 ・xxx-karbon-ssh-access.pub
”C:\Users\ユーザ名\.ssh\”へ移動します

Step5

PowerShell を起動して

PS> ssh nutanix@172.16.101.114 -i C:\Users\ユーザ名\.ssh\xxx-karbon-ssh-access

これで ssh できるはずです
これで Docker コマンドも使えちゃいます


それではちょっと中身拝見
なんだかいろいろ動いてますね~

PS > kubectl get pods -A
NAMESPACE     NAME                                                   READY   STATUS      RESTARTS   AGE
kube-system   grafana-deployment-798c6bc5f8-qzg54                    1/1     Running     0          10h
kube-system   kube-apiserver-karbon-kon-karbon-dd544b-k8s-master-0   3/3     Running     0          34d
kube-system   kube-dns-855f64fc96-k76zm                              3/3     Running     0          10h
kube-system   kube-flannel-ds-58qtt                                  1/1     Running     1          10h
kube-system   kube-flannel-ds-7cv7q                                  1/1     Running     1          34d
kube-system   kube-proxy-ds-67xsc                                    1/1     Running     0          10h
kube-system   kube-proxy-ds-jx888                                    1/1     Running     0          34d
ntnx-system   alertmanager-main-0                                    2/2     Running     0          10h
ntnx-system   csi-attacher-ntnx-plugin-0                             2/2     Running     0          10h
ntnx-system   csi-node-ntnx-plugin-z98hm                             2/2     Running     0          10h
ntnx-system   csi-provisioner-ntnx-plugin-0                          2/2     Running     0          10h
ntnx-system   elasticsearch-curator-cron-1590105660-8pgd4            0/1     Completed   0          45m
ntnx-system   elasticsearch-logging-0                                1/1     Running     0          10h
ntnx-system   fluent-bit-jclp7                                       1/1     Running     1          34d
ntnx-system   fluent-bit-l9x2r                                       1/1     Running     0          10h
ntnx-system   kibana-logging-84dbb6bf99-2n697                        2/2     Running     0          10h
ntnx-system   kube-state-metrics-57554f6487-sgb8f                    4/4     Running     0          10h
ntnx-system   kubernetes-events-printer-798f7f4d-6qs25               1/1     Running     0          10h
ntnx-system   node-exporter-mg7rn                                    2/2     Running     0          10h
ntnx-system   node-exporter-xj5qs                                    2/2     Running     0          34d
ntnx-system   prometheus-k8s-0                                       3/3     Running     0          10h
ntnx-system   prometheus-operator-6768768d55-8b2pj                   1/1     Running     0          10h

まぁコンテナを作るのは手元の Docker Desktop で作る方がラクかもですけどね
コンテナ開発環境が整のったで、さぁXi IoTのランタイム作ろう


Nutanix Karbon公式ページこちら
www.nutanix.com