Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
コマンド一発で、本格的なおうちKubernetesを構築する Copyright © 3-shake, Inc. All Rights Reserved. 2024/12/10 Kubernetes Novice Tokyo #35 @melanmeg
Slide 2
Slide 2 text
自己紹介 10月から株式会社スリーシェイクに入社しました! よろしくお願いします 山本直矢 @melanmeg 趣味:ホロライブ、ツイキャス廃人 最近の仕事:terraform, shared-vpc, 課金通知実装 魔女っ子シオンの Magical cafe 「紫咲シオン」のコラボカフェ キュアメイドカフェ秋葉原で開催決定! https://hololive.hololivepro.com/events/shioncafe2024/ ツイキャスAPIツール https://twicas-api.melanmeg.com/download 作ったやつ ※たいしたものではない
Slide 3
Slide 3 text
はじめに、今回作るクラスタ全体像 サーバー構成 ● 物理ノード x1 ● 管理ノード x1 ● コントロールプレーン x3 ● ワーカーノード x3 ● ロードバランサー x2 今回作成したリポジトリ↓ https://github.com/melanmeg/k8s_1-30_on_noble
Slide 4
Slide 4 text
事前準備【物理】 スペック ● CPU:10コア/16スレッド、メモリ:128GB ○ 本格的なKubernetesクラスタ構築の検証だけなら十分 ○ 個人レベルなら、ある程度サービスを載せて運用もできる ● 総額で約15万円 ※できれば物理で3つに分けておきたくはある 【あとから買ったもの】 グラボ: Nvidia GT 710 4,947円 メモリ: 同じやつ 30,600円 合計:150,266円
Slide 5
Slide 5 text
事前準備【ソフト】 必要なツール ● Ubuntu24.04(物理ノード) ● KVM(物理ノード) ● Ansible、Terraform(管理ノード)
Slide 6
Slide 6 text
コマンド一発で作られる仕組み ①[ノード構築] Terraform (仮想VMを作るなど) ②[Kubernetes構成] Ansible (kubernetesインストールなど) ラップしたシェルスクリプト (コマンド一発)
Slide 7
Slide 7 text
元にしたリポジトリがある このリポジトリはなに? 『Proxmox環境でサクッと作ってサクっと壊せる高可用性なkubernetesク ラスタを作ってみる』 ※README引用 ● ./deploy-vm.sh : Proxmox VE専用ツールであるqmを利用し、 VM作成 ● ./scripts/k8s-node-setup.sh : containerd、kubernetesコンポーネント、 haproxy・keepalivedなどの諸々をインストールし、 kubernetesを構成 https://github.com/unchama/kube-cluster-on-proxmox こちらのうんちゃまさん(散財系鯖主Youtuber)のリポジトリが起源になってます! 個人的に好きな配信 【OpenStack建てたい話してたらKubernetesの勉強会になった(飲酒)】 https://www.youtube.com/watch?v=7BLmtR1nhcY もう三年前
Slide 8
Slide 8 text
元にしたリポジトリがある このリポジトリはなに? 『Proxmox環境でサクッと作ってサクっと壊せる高可用性なkubernetesク ラスタを作ってみる』 ※README引用 ● ./deploy-vm.sh : Proxmox VE専用ツールであるqmを利用し、必要な 仮想マシンの構築 ● ./scripts/k8s-node-setup.sh : containerd、kubernetesコンポーネント、 haproxy・keepalived、などの諸々をインストールして クラスタをセットアップ https://github.com/unchama/kube-cluster-on-proxmox こちらのうんちゃまさん(散財系鯖主Youtuber)のリポジトリが起源になってます! 個人的好きだった配信 【OpenStack建てたい話してたらKubernetesの勉強会になった(飲酒)】 https://www.youtube.com/watch?v=7BLmtR1nhcY もう三年前 [deploy-vm.shについて] シェルスクリプト (Proxmox VE / qm) ↓ Terraoform / libvirt-provider (KVM/QEMU / virt-install) [k8s-node-setup.shについて] シェルスクリプト ↓ Ansible ※Terraformプロバイダーのlibvirtもあり、 Terraformでも作れるよう
Slide 9
Slide 9 text
Terraform構成 https://github.com/dmacvicar/terraform-provider-libvirt ※このリポジトリはベストエフォートでのメンテであることに注意 terraform-provider-libvirt これはなに? TerraformでKVM上にVM作成できる ● commonモジュール :共通で使うリソースを定義 ○ ボリュームのプールl ○ Cloud-initのUbuntuイメージ用ボリューム ● vmモジュール :仮想マシン作成に必要なリソースを定義 ○ ドメイン ○ ボリューム(ディスク用) ○ Cloud-init . ├── env │ └── main.tf └── modules ├── common │ ├── common.tf │ ├── output.tf │ ├── provider.tf │ └── variables.tf └── vm ├── cloudinit.tf ├── domain.tf ├── healthcheck.tf ├── provider.tf ├── variables.tf └── volume.tf サーバー構成 ● 物理ノード x1 ● 管理ノード x1 ● コントロールプレーン x3 ● ワーカーノード x3 ● ロードバランサー x2
Slide 10
Slide 10 text
KVMで使うイメージについて イメージには「Ubuntu Cloud Images」を使っている ● オンプレミスでもCloud-initを利用したVM作成ができる ※本来パブリック クラウド上で実行するために Canonical によってカスタマイズされた公式 Ubuntu イメージであるが、KVMでも動作可能 https://cloud-images.ubuntu.com/ なぜCloud-initか ● テンプレートになる ● コマンド一発で構築するには、ネットワーク設定やSSH設定な どプロビジョニングが必要
Slide 11
Slide 11 text
Cloud-initの設定ポイント cloudinit.tfに記載 runcmdプロパティ:初回起動時に実行したい処理を記載 例えば、 - パッケージアップデート - ビープ音無効化 - リポジトリ先を理研に変える .etc ● 工夫したポイント 最後に nc -l -p 12345 を実行して、 Terraform最後のヘルスチェックとして、12345ポートをポーリングしている terraform/modules/vm/cloudinit.tf
Slide 12
Slide 12 text
なぜAnsibleか 一から作ると、手順と対象サーバーが多くて大変 ↓ 自動化したシェルスクリプトを使っていたが... ↓ 以下のような懸念がでた ● SSHでファイル設置・実行までも自動化したい ● (k8sバージョンアップ時の修正などで)デバッグがしずらい ● ファイル分割したい ↓ Ansible良さそう!と安直に使い始めた
Slide 13
Slide 13 text
Ansibleの良いところ 以下のようなことができる ● 複数のサーバに並列・逐次実行が可能 ● 処理のまとまり(playbookやtask)で再利用でき、ワーカー・コントロールプレー ン・LBの各役割に対して適用できる ● Jinjaテンプレートが使える ● コントロールプレーンで生成したノード参加の定義ファイルもfetchして別ノードに コピーするなども自動化できる ● シェルに比べ、安全に変数の受け渡しができる ● サーバー追加時には、役割に対して必要な処理を実行できる おうちKubernetes構築自動化にとても適している ※Ansible大好き人間なので、他の構成管理ツールは存じてない
Slide 14
Slide 14 text
Ansibleの仕組み $ ansible-playbook --key-file $KEY -i inventory.yml playbook.yml ファイルの配置 . ├── inventory.yml ├── playbook.yml ├── tasks/ └── vars_files ├── env.yml └── vars.yml playbook.yml env.yml vars.yml inventory.yml ホスト設定 タスク設定 vars_files読み込み 変数利用
Slide 15
Slide 15 text
haproxy、keepalived設定について Python実行すると、テンプレートを生成できるように自動化。 ※配列にサービス情報を追記する運用 ※JinjaテンプレートからJinjaテンプレートファイルを生成 haproxy_template.cfg.j2 ↓ haproxy.cfg.j2 keepalived_template.cfg.j2 ↓ keepalived.conf.j2 Ansibleのtemplateに渡す ※ 外部アクセスは、MetalLBなどは入れず、サービス追加ごとにhaproxyでNodePortにアクセス する方法で構築しました。ARPなどの通信よりもhaproxyの方が通信が安定するかなと個人的に 思っているためです。
Slide 16
Slide 16 text
スクリプト実行(改めて全体像) スクリプト実行
Slide 17
Slide 17 text
最後に:GKEとクラスタ作成までの時間をバトルをしてみた ● TerraformでGKEクラスタ作成 [完了条件] Terraform で GKE Autopilot作成 → Terraformが完了するまで ● 今回作ったもの(オンプレミス)でクラスタ作成 [完了条件] VM作成→Kubernetes構成→NodeがすべてReadyになるまで 【計測結果】 GKEクラスタ作成:664秒 今回作ったもの:320秒 ※ GKEとオンプレの時点で、比較するには環境が大きく異なるが、 今回はあまり細かいことは気にしないことにした CP×1, WK×3構成 であれば、200秒も掛からなかった。 オンプレミスでは削除は数秒であるのはメリット オンプレでも最新世代のCPUを買えば、そこらのインスタンスより 高速に動作していると思う GKEに勝った ※喧嘩を売っている訳ではない
Slide 18
Slide 18 text
まとめ 使ってくれとは言わないが、 誰かの役に立てば嬉しい おうちkubernetesの知識とマシンがあれば、 Kubernetes検証環境を高速に作れる
Slide 19
Slide 19 text
Let’s おうちKubernetes Copyright © 3-shake, Inc. All Rights Reserved.
Slide 20
Slide 20 text
参考 ● https://github.com/unchama/kube-cluster-on-proxmox ● https://github.com/melanmeg/k8s_1-30_on_noble ● https://k8sh.net/arch/ ● https://www.server-world.info/query?os=Ubuntu_24.04&p=kubernetes&f=1 ● https://www.youtube.com/watch?v=7BLmtR1nhcY