Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RubyでKubernetesプログラミング
Search
Satoru Takeuchi
PRO
January 18, 2025
Technology
4
240
RubyでKubernetesプログラミング
北陸三県.rb Lightning Talks in Kanazawaの発表スライドです。
https://kzrb.doorkeeper.jp/events/180430
Satoru Takeuchi
PRO
January 18, 2025
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
eBPF
sat
PRO
1
110
waruiBPF
sat
PRO
0
100
eBPFとwaruiBPF
sat
PRO
5
3.3k
Pythonのコードの気になる行でスタックトレースを出す
sat
PRO
0
92
ソースコードを読むときの思考プロセスの例 ~markdownのレンダリング方法を知りたかった2 markdownパッケージ~
sat
PRO
0
180
様々なファイルシステム
sat
PRO
0
330
ソースを読む時の思考プロセスの例-MkDocs
sat
PRO
1
420
ソースを読むプロセスの例
sat
PRO
22
18k
メモリマップトファイル
sat
PRO
1
180
Other Decks in Technology
See All in Technology
製造業から学んだ「本質を守り現場に合わせるアジャイル実践」
kamitokusari
0
230
ソフトウェアエンジニアとAIエンジニアの役割分担についてのある事例
kworkdev
PRO
1
360
「駆動」って言葉、なんかカッコイイ_Mitz
comucal
PRO
0
130
人工知能のための哲学塾 ニューロフィロソフィ篇 第零夜 「ニューロフィロソフィとは何か?」
miyayou
0
330
Authlete で実装する MCP OAuth 認可サーバー #CIMD の実装を添えて
watahani
0
390
Everything As Code
yosuke_ai
0
490
迷わない!AI×MCP連携のリファレンスアーキテクチャ完全ガイド
cdataj
0
170
Introduction to Bill One Development Engineer
sansan33
PRO
0
340
業務の煩悩を祓うAI活用術108選 / AI 108 Usages
smartbank
9
19k
2025年 山梨の技術コミュニティを振り返る
yuukis
0
150
202512_AIoT.pdf
iotcomjpadmin
0
180
Agentic AIが変革するAWSの開発・運用・セキュリティ ~Frontier Agentsを試してみた~ / Agentic AI transforms AWS development, operations, and security I tried Frontier Agents
yuj1osm
0
200
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
120
Making Projects Easy
brettharned
120
6.5k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
590
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
110
Ruling the World: When Life Gets Gamed
codingconduct
0
120
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
37
Rebuilding a faster, lazier Slack
samanthasiow
85
9.3k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.3k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
WENDY [Excerpt]
tessaabrams
9
35k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Transcript
Rubyで Kubernetesプログラミング Jan. 18th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
• sat(武内 覚) ◦ X: satoru_takeuchi • 会社員 ◦ Kubernetes(K8s)上で動く分散ストレージの開発
• 個人事業主 ◦ 本や記事の執筆 2
懺悔の時間 • Rubyで実用的なプログラムを書いたのが20年前 • kanazawa.rbに参加してから6年、Rubyの話をしたことがほぼ無い 3
何しに来たの? 4
何しに来たの? • 3県合同Rubyイベントなので久々にRubyを触ってみることにした • K8sクライアントをRubyで書くことにした 5
KubernetesのRubyクライアント探し • 公式サイトにサポートされているライブラリが載っていた ◦ https://kubernetes.io/docs/reference/using-api/client-libraries/ … 6
メンテされてなかった • 最終コミットは4年前 ◦ https://github.com/kubernetes-client/ruby 7
メンテされてなかった • 最終コミットは4年前 ◦ https://github.com/kubernetes-client/ruby 8 ☠終了☠
まだ終わらんよ • “Community-maintained client libraries”節の中にk8s-rubyというものを発見 ◦ https://github.com/k8s-ruby/k8s-ruby • 過去にKontenaという会社が開発していて、会社close後にforkしてコミュニティベー スで開発が続いているらしい
9
動作環境 • OS: Ubuntu 24.0.1 • kind: v0.26.0 • kubernetes:
v1.32.0 • ruby: 3.2.3 • k8s-ruby: v0.16.0 10
比較対象: Go(client-go)でpod一覧表示 package main import ( "context" "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" ) func main() { config , _ := clientcmd .BuildConfigFromFlags ("", "/home/sat/.kube/config" ) clientset , _ := kubernetes .NewForConfig (config ) pods, _ := clientset .CoreV1 ().Pods("").List(context .Background (), metav1 .ListOptions {}) for _, pod := range pods.Items { fmt.Printf ("ns=%s, name= %s\n", pod.GetNamespace (), pod.GetName ()) } } 11
k8s-rubyならこうなる • まあまあ短くなる • 実行結果 12 require 'k8s-ruby' client =
K8s::Client .config( K8s::Config .load_file( ’/home/sat/.kube/config' )) client.api( 'v1').resource( 'pods' , namespace: 'default' ).list().each do |pod| puts "ns=#{pod.metadata.namespace }, pod= #{pod.metadata.name }" end $ bundle exec ./test.rb ns=default, name=nginx ns=default, name=nginx2
コントローラも書けるよ • K8sのコントローラとは、あるリソースの状態を監視してなんらかのアクションをする プログラム • 今回はpodに心霊現象を起こすコントローラを作る 13
ソース #!/usr/bin/ruby require 'k8s-ruby' client = K8s::Client .config( K8s::Config .load_file(
’/home/sat/.kube/config' )) client.api( 'v1').resource( 'pods' , namespace: 'default' ).watch() do |event | pod = client.api( 'v1').resource( 'pods' , namespace: 'default' ).get(event.resource.metadata.name) pod.metadata. annotations[ 'message' ] = "???" client.api( 'v1').resource( 'pods' , namespace: 'default' ).update_resource (pod) end 14
今は霊圧を感じない… 15 $ kubectl get pod nginx -o yaml apiVersion:
v1 kind: Pod metadata: annotations: … spec:
コントローラを実行して… 16 $ kubectl get pod nginx -o yaml …
$ bundle exec ./spiritual-pod-controller.rb &
podをリストすると… 17 … $ kubectl get pod nginx -o yaml
怪奇現象が…! 18 … $ kubectl get pod nginx -o yaml
apiVersion: v1 kind: Pod metadata: annotations: … spiritual-message: タスケテ... … spec:
まとめ • RubyでK8sプログラミングができることがわかった • どれだけ実用に耐えるかはよくわからない ◦ 開発が活発じゃなさそう ◦ ドキュメントが皆無 ◦
ここ数年追加された機能には対応していなさそう • サンプルコード ◦ https://github.com/satoru-takeuchi/test-k8s-ruby 19