KubernetesベースのHeroku代替Canineとは?
引用元:https://news.ycombinator.com/item?id=44292103
やっほーHNのみんな!Canineを1年くらい作ってるんだ。HerokuとかRenderとかFlyとかの高っかい料金にマジでうんざりして始めたんだよね。前は月に400ドル以上払ってたんだ。Hetznerにしたら4GBマシンがたったの4ドルだよ!でもHetznerはDNSとかチーム管理とかGitHub連携が面倒なんだよね。だからHerokuみたいなのサクッと作れるかと思ったら、意外と大変だった。でも今はHelmチャートも簡単にホストできるのが最高だよ。PostgresとかRedisとか、何でもいける。見てみてねー!
オープンソース版: https://github.com/czhu12/canine
クラウドホスト版: https://canine.sh
マジでこういうHeroku的なやつ探してたんだ、ありがとう!これ良さそう!
あと、K8sのドキュメントがマジで分かりやすいね。一番親切かも。
https://canine.gitbook.io/canine.sh/technical-details/kubern…
質問なんだけどさ、Digital OceanとかのマネージドK8sで使えるの?Hetznerでの”クラスター”って1台のマシンを分けてるだけ?それとも本当のマルチマシンK8s?別のサーバーでインストールスクリプト実行したらクラスターに参加できる?既存のマネージドK8sにCanineでデプロイする方法はある?
うん、今のところ2つのパターンをサポートしてるよ。
1. シングルHetzner VPS
2. 既存のKubernetesクラスターね。
僕は開発に1、本番はDigital OceanでK8sクラスター用意して2を使ってるんだ。Canineが直接マルチノードのHetznerクラスター作る機能はまだないんだよね。
HetznerでK8sクラスター作るTerraformはあるんだけど(https://github.com/kube-hetzner/terraform-hcloud-kube-hetzne…)、これはまだCanineには入ってない。UI改善を先にやりたいけど、検討はするよ。今は既存クラスターがあるか、シングルVPSにK3s入れるのを手伝う感じかな。
おっ!それ良いニュースだね!僕はHetznerでのK8sについて聞いてたんじゃなくて、マネージドクラスター(Digital Oceanとか)で使えるか聞いてたんだよ。使えるんだね、最高!docsで見落としてたみたい。
まず—こういうの成功してほしいとマジで思ってるから、頑張って!現時点ではこれかDokploy(Docker Swarmは過小評価されてる)かな。
ちょっとしたフィードバックなんだけど、「Why you should NOT use Canine」のセクションがマジでマイナスだよ。正直な欠点リストかと思ったら、皮肉っぽくてイラッとした。サーバー管理しなきゃとか、ダウンしたら責任取らなきゃとか、まだ開発初期で一人で作ってるんだとか、正直に書くべきだよ。
ハハ、他のランディングページと差別化しようとした僕の試みはダメだったか。もう一回考えてみるよ、フィードバックマジで感謝!
うん…俺も「Why you should not use Canine」のセクション好きだよ。
ちょうど今朝Posthogのサイト見てて、似たようなセクションがあったんだよ。
https://www.dropbox.com/scl/fi/rky248hgutwzzkzwhifxz/posthog…
やるのは全然いいんだけど、Canineみたいに超初期段階だと、やっぱ本当のデメリットがあるんだよ。Posthogはアルファ版じゃないし、ユーモアも上手だし、その辺が違うんだよね。あれは残しとくとして、正直な点も加えるべきだよ。
あれ、絶対残しておいて!マジで最高だから!(言っとかなきゃいけないことだしね!)
でも、批判的なポイントも追加でね。
Docker Swarmって今どうなってんの?Dockerチームに捨てられた気がして、何年も追ってないんだけど。
いや、DockerがSwarmを捨てたなんてことないよ。最新のDocker Engineのリリースノート見たけど、いっぱい修正とか機能追加あったもん。Kubernetesみたいに人気はないけど、ちゃんと生きてるって。
ちょっとそれ、簡単には言えないな。上の人が言ってるのは、多分『classic swarm』のことだと思うけど、あれはマジでもう死んでる(詳しくはこちら: https://github.com/docker-archive/classicswarm)。
Dockerがサポートしてるのは別の『Swarm mode』っていうデプロイ方法で、これはhttps://github.com/moby/swarmkitがベースで、正直Kubernetesにすごく似てるんだよね。
なんで今さらDockerのKubernetesツールじゃなくてこっちを選ぶのか、全然わかんないな…。裸のKubernetesより設定が楽ってだけなら、k3sとかmicrok8sでもっと簡単にできるし。
もし誰かSwarm modeを本番で使ってる人いたら、ぜひ他の意見を聞かせてほしいな!
もし自分でベアメタルKubernetes組むなら、俺はSwarmを試すね。k3sとか他のやつは使わない。Kubernetesの最大の問題は、専門知識とかメンテにかかるコストが半端なく高いこと(ちゃんとやろうとしたらね。適当にやっててコスト低いと思い込んでる人も多いけど)。Swarmなら、短期でも長期でもコストは全然小さくなると思うよ。
k3sがかけるコストで、Swarmが解決するっていう具体的な点について、もっと詳しく教えてくれない?
今のあなたのコメント、なんかSwarmのドキュメントによくあるFUDと同じ種類の匂いがするんだよね(Dockerが出してるドキュメントには、DockerがKubernetesツールに時間かけてるのに、Swarmを選ぶ『なぜ』が全然魅力的じゃないんだ)。
まあ、話は聞くけどさ、俺はk3sでベアメタルのクラスター動かしてるけど、メンテは超簡単だよ。
元のコメント主じゃないんだけど、数年前にKubernetesからSwarmに移行したことあるんだよね。詳しいことは正直もう覚えてないんだけど、とにかく設定ファイルをめっちゃ消した(ローカルのComposeとの重複もなくなって)、全体的にすごく扱いやすかったのを覚えてる。数台マシン追加したときも、内蔵機能で簡単にできたし。まあ、俺はインフラ専門家じゃないし、Kubernetesの経験もたいしたことないんだけどね。
CapRoverって、まさにそれ(Swarm mode)を使ってるよ。
PaaSプラットフォームのリストをGitHubでまとめてるよ。
https://github.com/debarshibasak/awesome-paas
dokkuはVPSでも動くシンプルなPaaSだよ。dokku-scheduler-kubernetesもあるけど、Helmチャートはサポートしてないみたい。
https://github.com/dokku/dokku-scheduler-kubernetes
クラウドコンピューティングアーキテクチャ › Delivery ってところでSaaS, DaaS, DaaS, PaaS, IaaSにリンクしてるね。
https://en.wikipedia.org/wiki/Cloud_computing_architecture
クラウドコンピューティング比較のページもある。
https://en.wikipedia.org/wiki/Cloud-computing_comparison
Category:Cloud platformsも。
https://en.wikipedia.org/wiki/Category:Cloud_platforms
awesome-selfhostedにはserverless / FaaSカテゴリがあって、それはawesome-sysadmin › PaaSにリンクしてるね。
https://github.com/awesome-selfhosted/awesome-selfhosted#sof…
最近、OSSのセルフホスト型データプラットフォームkitsunadata(https://github.com/kot-behemoth/kitsunadata)をDokkuでデプロイして始めたんだ。すごく成熟してて使いやすいし、ドキュメントもたくさんある。
勉強中にいろんなリンク集めて、awesome-dokku(https://github.com/kot-behemoth/awesome-dokku)ってリストも作ったから、誰かの役に立てば嬉しいな!
DokkuのK3sを使った、もっと機能豊富なデプロイ方法がこれだよ。
https://dokku.com/docs/deployment/schedulers/k3s/
見てみて!
付け加えるけど、これは僕が今まで作った中で断トツに楽しかったプロジェクトだよ。
技術スタックを上から下まで全部自分で握るのって、めちゃくちゃ満足感があるんだ。
Railsアプリ、Canineインフラ、Raspberry Piサーバー、自分のISP。
これを全部自分で管理してアプリを動かせるようにしたんだ。
ちょっと細かい指摘だけど。
KubernetesはDockerコンテナを動かすわけじゃないんだ。
OCI(Open Container Initiative)に準拠したコンテナを動かすんだよ。
Dockerはライセンスされたブランド名だからね。
もう一つ細かい指摘があるよ。
https://canine.gitbook.io/canine.sh/technical-details/kubern…
これは一般的な説明だろうけど、「10,000サーバー」ってのはちょっと…Kubernetesは公式には最大5,000ノードまでしかサポートしてないんだよ。
https://kubernetes.io/docs/setup/best-practices/cluster-larg…
もっと大規模なクラスターもあるけど、それにはかなりのチューニング(例えばAPIレジストリを完全に置き換えるとか)が必要なんだ。Kubernetesは現状、大規模クラスターをそのままサポートするのにはまだ遠いよ。
あー、確かに僕が間違ってるかも。
昔Airbnbにいた頃、誰かが1万サーバーまでスケールできるかって内部テストをしてた記憶があるんだけど、あれは2016年の話だし、自分でやったわけじゃないからね。
それは撤回するよ。
そうそう、Docker必須って見ると嫌なんだ。
もうDockerを使うことはほとんどなくて、Podmanとかcontainerdばっかり使ってるよ。
めっちゃいいね。僕もセルフホスティングで同じようなことやろうと思ってて、DockerとKubernetesの中間みたいなのを探してたんだ。
Nomadも良さそうだったけど、それでもDockerよりはちょっと手間がかかるし、エコシステムも少ないんだよね。
結局Dockerだけ使って、アップグレード時のデプロイダウンタイムは我慢することにしたよ。個人のホームサーバーならそれで十分。
でもプロダクションサービスだと、CanineはK8sをどれくらい抽象化してくれるんだろう?
内部を覗く必要はあるのかな?
僕はk8sエキスパートじゃないから分からないけど、DockerとK8sの間にちょうどいいものって、そもそも存在しないのかな?
まさにDockerとKubernetesの中間みたいなの、僕も作ってる最中だよ!
https://github.com/psviderski/uncloud
君と同じように、運用のオーバーヘッドがない中間層が欲しかったんだ。
基本的にはDockerみたいなCLIとDocker Composeに似た使い勝手で、複数マシンでの運用やプロダクション対応もしてるけど、管理が必要なコントロールプレーンはないんだ。
まだ開発中だけど、各レイヤーで何が起きてるか簡単に理解できて、トラブルシューティングもできるくらいシンプルに保つのが目標だよ。
これ、いい感じ!まさに解決してほしかったことだよ。WireGuardとCaddyの組み合わせもナイスだね。Zero Downtime Deployはどうやるの?Swarmみたいに?
ありがとう!Zero Downtime DeployはK8sとかSwarmみたいに、コンテナを一つずつローリングアップデートするんだ。新しいのを動かして、大丈夫か確認して、Caddyが切り替えて、古いのは消すよ。CLIで操作するから、何かあってもすぐにわかるのが違うところ。
コンセプト、めっちゃいいじゃん!K8sってすごいけど、複雑すぎるとこあるよね(昔のx86仮想化みたい)。資料見たら、K8sの基本をよくわかってるみたいで、色々な場面で使えそうだね。特に自分でホスティングする時に、PVEやMicrocloud、Cockpitより人気出るかも。N100 NUCがMicrocloud入れたまま放置されてるから、それ外してCanine試してみるか!
もっとコメントを表示(1)
Helmはちょっと扱いにくいなーって思うときあったよ。values.yamlを更新したときに、どれが適用されるかとか、起動時に設定しないといけないかとか、ちょっと読めないんだよね。あと、大量のサービスがデプロイされると、どれを再起動していいか分からなくなる。でも、K8sのコアの部分は、ステートレスなジョブには使うの楽しいけどね。
Helmって、ぶっちゃけうざいよね。ソフトのインストールが楽になるのは感謝だけど、npmに感謝するのと同じような感じ。
なんかさー、この”複雑”って話、どこから来てるんだろう?昔はKubesprayとかでクラスター作るのに2時間とかかかったかもしれないけど、RKEみたいなの使えば、今はYAMLファイル一つとSSHキーだけでしょ。
K8sの独特なとこに慣れすぎて、気づいてないんじゃない?あと、デバッグ経験豊富だから、問題あってもあんまり気にしないとか。ちょっと前、GKEで普通のデプロイなのにDNS障害起きて、ずっと頑張ったけど結局ダメで、新しいクラスター立て直したよ。Linodeに乗り換えようかなとも思ったくらい。K8sはさ、HerokuとかGoogle Cloud Runと違って、自分で管理する部分にたくさんの部品が動いてるから複雑なんだよ。やれることも多いしね。あなたが慣れてるからって、複雑じゃないってわけじゃないと思うな。
ベアメタルで大規模にデプロイして、ソフトとかファームウェアの管理するの、やっぱり結構複雑だよ。今のツールは良くなってるけど、”簡単”ってわけじゃないんだ。K8sの氷山図、3年以上前のだけど、まだかなり正確だと思う。見てみて。
https://www.reddit.com/r/kubernetes/comments/u9b95u/kubernet…
あー、それ同意だわ。K8s自体のセットアップは結構簡単なんだよね。証明書とかドメインとか、CICD(FluxとかArgoとか)あたりで複雑になってくるんだよ。家でホスティングするのに、一番分かりやすくて、しかもちゃんと使えるレベルのセットアップ方法の動画、持ってるよ。
あなたの動画、k3sみたいだよ。普通のK8sをベアメタルでセットアップするの期待してた人向けに、一応言っとくね。
数年前、DigitalOceanで40ドルくらいでK8sクラスター組んでみたんだ。
このチュートリアル通りにね→ https://www.digitalocean.com/community/tutorials/how-to-auto…
簡単なYAML数行で新しいサービス作ってデプロイできたし、DNSとかLets Encryptも自動でやってくれた。
kubectlコマンド一発で更新できるのが超楽で、気に入ったよ!
K8sが複雑って言う人たちは、きっと複雑な使い方をしてるか、あるいはマネージドK8s以外の話をしてるんじゃないかな。
複雑なニーズってそもそも複雑だから、K8sだけが複雑にしてるわけじゃないと思うよ。
もしK8s自体が一番の複雑さの原因なら、それ多分使い方が間違ってるか、使うツールを間違えてるね。
コメント6の「マネージドK8sじゃない話だろ」ってとこ、それな!
ハイパースケーラーのマネージドK8sは確かに楽ちんだけど、クラスター管理者とかベアメタルから見ると全然違うんだよ。
基本機能動かすだけでいろんなレイヤーの細かい設定が必要で、イライラするんだ。
マネージド使って「複雑じゃない」とか言わないでほしいな。
K8sも昔よりはマシになったけど、ESXiとかHypervisorみたいにプラグアンドプレイじゃないんだよね。
だからCanineみたいなのに期待してるんだ!
(てか、よっぽどの理由がない限り、ベアメタルで自前K8sとかやめとけ。マジで大変だから!)
コメント7の最後の追記以外は全部同意かな。
Nutanixとか、ああいうのがK8s周りをだいぶ助けてくれてるよね。
Talosも結構好きだし、もっと普及してほしいなー。
コメント8への応答だよ。「なるほどね!」
Nutanixは俺も感心したけど、収益性がちょっと気になったんだよね。VMware Tanzuも悪くなかったけど、AWSのK8sの方が楽だったかな。
Talosは今度チェックしようと思ってて、特にコミュニティライセンスがいい感じ。
K8s周りは日々進化してるけど、結局のところ本番環境ならマネージドK8sが一番かなって思ってる。
YAML数行でバックアップとかシークレット管理もできるし。まぁ、その分毎月すごい額の請求が来るけどね!
CISAが言ってるんだけど、重要インフラ分野だとネットなしで24時間以上動けるようにしろ、って推奨があるらしい。
ネット依存してるものをネットなしで制御するのは正直難しいよねー。
そういえば、Nutanixが最近K8s関連で面白い買収してるから、もし興味あったら調べてみてよ。
ウェブサイトのライセンスが2024年でMITってなってるけど、GitHubのApache licenseと違うのは大問題だね。どっちが本当なの?
KubernetesベースのHeroku代替!? KubernetesやHelm chartsを知る必要があるなら、俺にとってHeroku代替じゃないよ。echo helloみたいな簡単なデプロイでもKubernetesのことなんて考えたくないのに。
うん、それがCanineの目標だったんだ。Kubernetesがあることを知らなくても、そのエコシステムを活用できるようにすること。そして将来的には、もっと高度な機能が必要になったらKubernetes API’sを直接公開するんだよ。
ストレージとsecretsの扱いはどうなってるか気になるね。Kubernetesの課題はデプロイより、ストレージやデータを一貫した場所に置く方法なんだ。
デモは公開repo、has dockerfiles等だったけど、private codeとimagesはどうなの?
昔heroku使ってたけどいい思い出だよ。ランディングページが基本的な疑問に答えられてないと思うんだ。
1. git pushみたいな簡単なデプロイできる?
2. Procfileみたいにワークロードを簡単に定義できる?
stacktape.comで同じことやってるんだけど、君らのやってることいいと思うよ。でも正直、厳しい市場だね。安いのが魅力でも、HerokuのDXには遠く及ばないし、シングルVM構成は本番向きじゃないよ。信頼性とか色々足りてないね。でもAI時代で変わるかも、頑張って。
https://stacktape.com
うん、君に同意だよ。でもだからこそKubernetesは良い基盤だと思うんだ。巨大なAPIエコシステムがあるし、kubectlのDXもかなり良い。K8は大規模クラスターへのスケールも比較的簡単だよ。
これ、Kuberoとそっくりだね。問題は、Kuberoは全然人気が出なかったこと。Coolifyみたいなシンプルなツールをユーザーは求めてるのかもね。
<br>全然人気が出なかった。<br>このプロジェクトの活動状況を見てよ: https://github.com/czhu12/canine/graphs/code-frequency<br>結構頑張ってるじゃん。
プロジェクトはまだ骨組みだけで、TODOがいっぱいだね。これはかなり大変な作業になりそう。
開発者さん、どういう経緯でこれを構築できたの?APIとReactは少し分かるけど、複雑なものをどう分解して形にするかアイデアがなくて。Heroku代替を完全に機能するオープンソースにするには?機能検討でHerokuの料金ページから始める俺のアプローチ、多分間違ってるよね。
動画の例、シングルマシンやVMで自己ホストしたい人にはちょっと分かりにくいな。managed DO K8sとかの参照が必要なの?ローカルVMをクラスターにしたいんだけど。全部入りで単体マシンにインストールする方法とか、そこからアプリを追加・デプロイする方法の他の動画か、作ってくれる?
あー、動画のセットアップは基本的にstagingとか非productionアプリ用だよ。普通は単体のHetzner VPSを起動して、K8互換サーバーをインストールすればすぐ使える。ProductionはDigitalOceanのmanaged Kubernetesと、同じデータセンター内のmanaged Postgresを使ってる。レイテンシー対策にもなるし、夜も安心して眠れるからね笑
RKE2とかK3S(Rancher製品)ってK8互換なの?(追記:調べたらGoogle AIは互換って言ってるみたい)
なるほどね。個人的な趣味アプリとかプロジェクト用に、シングル構成で使いたい人が多いと思うんだ。staging用の構成、ドキュメントある?
readmeのスクリーンショットにあるGoogle Sheets backendって、もしかしてデータベースとして使ってる?もしそうならすごい尊敬する。俺もhttps://holos.runでk8s版Herokuみたいなの作ろうと思ってたから、これ見てめっちゃ嬉しい。cluster apiでシングル・マルチノードクラスターを立てるとか、統合を色々探求してみたいな。
Haha、そうだよ!まさにこれ、https://google-sheets-backend.canine.sh/。こういうの、どれだけ簡単にコードで雰囲気出せるかなって思ってたんだけど、超簡単だったんだ。
もっとコメントを表示(2)
すごくいいね!まさに探してたやつだよ。Helm chartsの上に構築されてるってのが試したくなるね。CanineはHelm chartsを自動でアップグレードしてくれるの?もしそうなら最高なんだけど。有料プランにいるのは、アップグレード忘れちゃうのが嫌だからなんだ。あと、オペレーションの知識って、忘れた頃に必要になるから困るんだよね。
アップグレードはできるみたいだけど、安全にアップグレードするっていう根本的な問題は解決しないと思うよ。大抵は大丈夫だけど、バージョン跨ぐと設定キーが変わったりするしね。手動での監視なしにHelm chartsをアップグレードするのは、まだ未解決の問題っぽいな。
プロジェクト作成がうまくいかないな。「Deploy from Docker Hub instead →」をクリックして、詳細(名前、イメージ、クラスター)を入れてSubmitしたら、またプロジェクトページ(空)に戻っちゃうんだ。
追記:どうやらPOST https://canine.sh/projects が422を返してるみたい。
おかしいな、見てみるよ。Docker Hubにアクセスする権限の問題かな。プライベートリポジトリ?前にDockerhubのイメージをデプロイしようとした時、プロビジョンされたトークンに読み取り権限がなかった気がするんだ。少なくとも、もっと良いエラーメッセージを表示するバグがあるから、それはすぐ直すよ!
ああ、そうだよ、プライベートリポジトリ。
これをHerokuのオープンソース版であるDokkuと比較してる記事とかチャートはある?
コンピューティングのコストは下がってるのに、クラウドのコストは上がり続けるのがいつも不思議だったんだ。これを作ってくれて、賞賛に値するよ、ありがとう。
コンピューティングのコストは下がるのに、クラウドのコストは上がり続けるのはいつも不思議だったんだ。これを作ってくれて、賞に値するよ、ありがとう!
うん、前の会社での最後の年は、あるPaaSベンダーの8つのインスタンスで合計約512GBのメモリに年間約40万ドル以上も使ったんだ。ほとんどいつもメモリがボトルネックだったから、コンピュート側はいくらかかったかさえ分からないくらい。今やハードウェア自体を直接買っても8千ドル以下で済むのに、馬鹿げてると思ったよ。SOC2対応とかエンタープライズプランとかはあったけど、四半期ごとの請求はキツかったね。
https://world.hey.com/dhh/our-cloud-exit-savings-will-now-to… - このブログ記事、去年よく回ってたんだけど、似たような主張をしてるよ。
Webサイトの「Canineを使うべきでない理由」ってセクションで、背景にあるカードがスワイプできちゃうのがすごく変なUXだね。これはChrome 137、Android 13での話。
それは置いといて…ちょっと試してみるつもりだよ。N100 NUCが3台あって、2台はKubernetes学習で挫折してから使ってないんだ。
もしかしたらこれでうまくいくかも。
うん、背景のカードがスワイプできちゃうのは混乱するよね。なんでそうなるかは理解できるけど、ちょっとしか見えてないのにそれができちゃうのはおかしいな。
Kubernetes Crash Courseの「Day \#4. Services」ってところにtypoがあるんじゃないかな。
「NodePortサービスはインターネットからアクセスできません」って書いてあるけど、本当はアクセスできるって言いたかったんじゃないかな。
ちょうどhetzner上にk3sをセットアップするってのをやった時に、これ使ったんだよね: https://github.com/vitobotta/hetzner-k3s/
これは役に立つかな?
Addonってどういう仕組みなの?
ただ事前にビルドされたDockerfileとか?
それとも何か特別なことがあるの?
もしDockerfileとかDockerイメージ以上の特別な何かがあるなら、mariadbをリクエストしたいな。
herokuが「review apps」って呼んでる機能、つまりPRごとに一時的な環境が自動で作られるやつ、これのサポートはある?(それか対応予定とか)
ドキュメントとかリポジトリをざっと見たけど、見当たらなかったんだよね。
まだだよ、ロードマップには載ってるんだ。Gitlabサポートと一緒にね。
今後数週間のうちに、アップデートとして少しずつ出していくつもりだよ。
既存のk8sクラスターを使えるようにできないの?
それとも常に組み込まれてるk3sを使う必要があるの?
単にk3sを使ってるだけなら、自分でクラスターを持ち込む(bring your own)のも簡単にできそうな気がするけど…
そうだよ、既存のk8sクラスターと一緒に使うことを想定してるんだ。
k3sはどっちかっていうと例外的な使い方なんだけど、すごく安いシングルインスタンスのマシンもサポートしたくてさ。
ホームページとかreadmeでその辺をもっと分かりやすくしようと思うよ。
k3sはKubernetesだよ。
K8sとk3sは同じさ。違いはないんだ。
Linuxみたいに、ただ色々なバージョンとか配布版があるだけだよ。