Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RubyでKubernetesプログラミング
Search
Satoru Takeuchi
PRO
January 18, 2025
Technology
280
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RubyでKubernetesプログラミング
北陸三県.rb Lightning Talks in Kanazawaの発表スライドです。
https://kzrb.doorkeeper.jp/events/180430
Satoru Takeuchi
PRO
January 18, 2025
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
119-多機能ファイルシステムBtrfs_のコピー.pdf
sat
PRO
1
74
Linuxカーネルの インタフェースは変わりうる?
sat
PRO
1
99
あなたの知らないバージョン命名規則
sat
PRO
3
910
Rook: Intro and Deep Dive with Ceph
sat
PRO
1
66
Machine Check Exception
sat
PRO
2
67
バイナリダンプの模様を読む
sat
PRO
0
92
cpコマンドはディスク上でデータを コピーしないことがある
sat
PRO
3
92
114-ファイルのshallow_copy.pdf
sat
PRO
2
59
113-Btrfsのスナップショット.pdf
sat
PRO
0
42
Other Decks in Technology
See All in Technology
Swap and Memory Reclaim - Squeezing Out More RAM
ennael
PRO
1
1.4k
DORA_Metrics.pdf
wagnerfusca
1
140
AWS FinOps Agent 結局何が得意なの?
siromi
0
220
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
340
Confitura 2026
logico_jp
0
110
Kiro Meetup #8 Kiro アップデート (2026/3/21〜2026/9/24)
katzueno
1
310
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
16
120k
Claude起点の仕様駆動開発
tanakaseiya
0
230
顧客の成果創出とプロダクトの成長を 両立するためのFDE
sansantech
PRO
0
520
AI駆動開発で仕様はどこまで書くべきか? ― 人とAIの責務境界から考える開発プロセスの実践
takahiromatsui
1
250
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
350
「大丈夫そう?」をObservabilityで確かめる
mrmtsu
0
240
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
550
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
690
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
1
400
The SEO identity crisis: Don't let AI make you average
varn
0
560
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
730
Discover your Explorer Soul
emna__ayadi
2
1.3k
Mind Mapping
helmedeiros
1
380
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