kubed-shとは
ちょっとしたRuby,Python,Nodeのコードを実行したい。けどローカルにRuby,Python,Nodeがインストールされていない。
ってこと時々ありますよね。
repl.itを使う選択肢もありますが、ローカルサーバーや社内サーバーと通信するプログラムの場合そうはいきません。
そういう場合、kubed-shを使うと便利です。
kubed-shはKubernetesクラスタにRuby,Python,Nodeがインストールされたpodを用意してそこでプログラムを実行してくれます。
インストールして試す
試したkubed-shのバージョンは0.5.1です。
まずminikubeとかでKubernetesクラスタをkubectlを使える状態にしておきます。
https://github.com/mhausenblas/kubed-sh#install-it にあるとおりにインストールする。
$ curl -s -L https://github.com/mhausenblas/kubed-sh/releases/download/0.5.1/kubed-sh-macos -o kubed-sh
$ chmod +x kubed-sh
$ sudo mv kubed-sh /usr/local/bin
次にテスト用のスクリプトを用意します。
#!/usr/bin/env ruby
require 'socket'
hostname = Socket.gethostname
puts "Hello from Ruby, running on host #{hostname}"
次にkubed-sh
コマンドを実行します。
$ ./kubed-sh
Note: It seems you're running kubed-sh in a non-Linux environment (detected: darwin),
so make sure the binaries you launch are Linux binaries in ELF format.
Detected Kubernetes client in version v1.8.6 and server in version v1.10.0
Type 'help' to learn about available built-in commands.
[minikube::default]$
これでkubed-shが提供するシェル環境に入った状態になりました。
ここで先程のスクリプトを実行してみます。
# スクリプトがあることを確認できる
[minikube::default]$ ls -l
total 8
-rw-r--r-- 1 akira staff 120 12 22 14:41 test.rb
# スクリプトを実行
[minikube::default]$ ruby fuga.rb
pod "kubed-sh-1545457321216549000" created
uploaded /Users/akira/ws/sandbox/kubed-sh/fuga.rb to kubed-sh-1545457321216549000
Hello from Ruby, running on host kubed-sh-1545457321216549000
実行できましたね。メッセージからスクリプトをする際にpodが作成されているのがわかると思います。
また、先程のスクリプトファイルをローカルマシン側で内容を変更して再度実行すると、変更内容が反映されます。
ローカルサーバーと通信したい場合はローカルマシンのIPを指定すれば通信ができます。
なかなかおもしろいですね。