[{"data":1,"prerenderedAt":1558},["ShallowReactive",2],{"blog-ja-k3s-on-proxmox-cluster":3,"blog-ja-k3s-on-proxmox-cluster-alt":268},{"id":4,"title":5,"author":6,"body":7,"date":1542,"description":1543,"extension":1544,"image":233,"locale":1545,"meta":1546,"navigation":268,"path":1547,"seo":1548,"stem":1549,"tags":1550,"__hash__":1557},"blog\u002Fblog\u002Fja\u002Fk3s-on-proxmox-cluster.md","Proxmox 上に K3s クラスタを構築する: ステップバイステップ","Kubo Team",{"type":8,"value":9,"toc":1516},"minimark",[10,22,31,36,45,49,119,122,125,208,216,220,223,227,510,513,516,661,664,705,713,717,720,729,811,817,845,848,851,904,907,916,968,975,979,982,1057,1060,1064,1073,1199,1203,1210,1226,1230,1238,1292,1295,1298,1376,1379,1382,1438,1445,1448,1451,1458,1467,1472,1512],[11,12,13,14,21],"p",{},"Kubernetes は現代のアプリケーションデプロイメントのデファクトスタンダードですが、完全な K8s クラスタの構築・運用には高い専門知識が求められます。",[15,16,20],"a",{"href":17,"rel":18},"https:\u002F\u002Fk3s.io\u002F",[19],"nofollow","K3s"," は Rancher Labs が開発した軽量 Kubernetes ディストリビューションで、フルスペックの Kubernetes 機能を最小限のリソースで提供します。Proxmox VE と組み合わせることで、柔軟でコスト効率の高い Kubernetes 基盤を構築できます。",[11,23,24,25,30],{},"本格的なマネージド Kubernetes が必要な場合は、",[15,26,29],{"href":27,"rel":28},"https:\u002F\u002Fwww.hexabase.com\u002Fproduct\u002Fkubo\u002Fon-premise",[19],"Kubo On-Premise"," が Proxmox 上でもフルマネージド K8s 環境を提供します。インフラ管理の負担を最小限に抑え、開発に集中したい方に最適です。",[32,33,35],"h2",{"id":34},"アーキテクチャ設計と-vm-計画","アーキテクチャ設計と VM 計画",[11,37,38,39,44],{},"K3s クラスタの設計は、可用性要件とリソース予算のバランスで決まります。",[15,40,43],{"href":41,"rel":42},"https:\u002F\u002Fdocs.k3s.io\u002F",[19],"K3s 公式ドキュメント","では、本番環境に最低 3 つのサーバーノードを推奨しています。",[46,47,48],"h3",{"id":48},"推奨構成",[50,51,52,77],"table",{},[53,54,55],"thead",{},[56,57,58,62,65,68,71,74],"tr",{},[59,60,61],"th",{},"ロール",[59,63,64],{},"ノード数",[59,66,67],{},"CPU",[59,69,70],{},"メモリ",[59,72,73],{},"ストレージ",[59,75,76],{},"OS",[78,79,80,101],"tbody",{},[56,81,82,86,89,92,95,98],{},[83,84,85],"td",{},"サーバー（コントロールプレーン）",[83,87,88],{},"3",[83,90,91],{},"4 vCPU",[83,93,94],{},"8 GB",[83,96,97],{},"50 GB SSD",[83,99,100],{},"Ubuntu 24.04 LTS",[56,102,103,106,109,111,114,117],{},[83,104,105],{},"ワーカー（データプレーン）",[83,107,108],{},"3+",[83,110,91],{},[83,112,113],{},"16 GB",[83,115,116],{},"100 GB SSD",[83,118,100],{},[46,120,121],{"id":121},"ネットワーク設計",[11,123,124],{},"クラスタノードには DHCP 範囲外の静的 IP を割り当てます:",[50,126,127,140],{},[53,128,129],{},[56,130,131,134,137],{},[59,132,133],{},"ノード",[59,135,136],{},"ホスト名",[59,138,139],{},"IP アドレス",[78,141,142,153,164,175,186,197],{},[56,143,144,147,150],{},[83,145,146],{},"サーバー 1",[83,148,149],{},"k3s-server-1",[83,151,152],{},"192.168.1.101",[56,154,155,158,161],{},[83,156,157],{},"サーバー 2",[83,159,160],{},"k3s-server-2",[83,162,163],{},"192.168.1.102",[56,165,166,169,172],{},[83,167,168],{},"サーバー 3",[83,170,171],{},"k3s-server-3",[83,173,174],{},"192.168.1.103",[56,176,177,180,183],{},[83,178,179],{},"ワーカー 1",[83,181,182],{},"k3s-worker-1",[83,184,185],{},"192.168.1.111",[56,187,188,191,194],{},[83,189,190],{},"ワーカー 2",[83,192,193],{},"k3s-worker-2",[83,195,196],{},"192.168.1.112",[56,198,199,202,205],{},[83,200,201],{},"ワーカー 3",[83,203,204],{},"k3s-worker-3",[83,206,207],{},"192.168.1.113",[11,209,210,215],{},[15,211,214],{"href":212,"rel":213},"https:\u002F\u002Fpve.proxmox.com\u002Fwiki\u002FNetwork_Configuration",[19],"Proxmox のネットワーク設定","で VLAN を活用すれば、管理ネットワークとクラスタネットワークを分離できます。",[32,217,219],{"id":218},"vm-テンプレートの作成","VM テンプレートの作成",[11,221,222],{},"効率的なノードデプロイのために、Cloud-Init 対応の VM テンプレートを作成します。これにより、クローン操作だけで新しいノードを数分でプロビジョニングできます。",[46,224,226],{"id":225},"ubuntu-cloud-image-のダウンロードとテンプレート化","Ubuntu Cloud Image のダウンロードとテンプレート化",[228,229,234],"pre",{"className":230,"code":231,"language":232,"meta":233,"style":233},"language-bash shiki shiki-themes tokyo-night","# Proxmox ホストで実行\n# Ubuntu 24.04 Cloud Image をダウンロード\nwget https:\u002F\u002Fcloud-images.ubuntu.com\u002Fnoble\u002Fcurrent\u002Fnoble-server-cloudimg-amd64.img\n\n# VM を作成（ID: 9000 をテンプレート用に使用）\nqm create 9000 --name ubuntu-2404-template --memory 4096 --cores 2 \\\n  --net0 virtio,bridge=vmbr0 --scsihw virtio-scsi-single\n\n# ディスクイメージをインポート\nqm set 9000 --scsi0 local-lvm:0,import-from=\u002Froot\u002Fnoble-server-cloudimg-amd64.img\n\n# Cloud-Init ドライブを追加\nqm set 9000 --ide2 local-lvm:cloudinit\nqm set 9000 --boot order=scsi0\nqm set 9000 --serial0 socket --vga serial0\n\n# Cloud-Init のデフォルト設定\nqm set 9000 --ciuser ubuntu --cipassword \u003Cpassword>\nqm set 9000 --sshkeys ~\u002F.ssh\u002Fid_rsa.pub\nqm set 9000 --ipconfig0 ip=dhcp\n\n# テンプレートに変換\nqm template 9000\n","bash","",[235,236,237,246,252,263,270,276,312,327,332,338,354,359,365,380,395,416,421,427,458,473,488,493,499],"code",{"__ignoreMap":233},[238,239,242],"span",{"class":240,"line":241},"line",1,[238,243,245],{"class":244},"sbD-w","# Proxmox ホストで実行\n",[238,247,249],{"class":240,"line":248},2,[238,250,251],{"class":244},"# Ubuntu 24.04 Cloud Image をダウンロード\n",[238,253,255,259],{"class":240,"line":254},3,[238,256,258],{"class":257},"sE3pS","wget",[238,260,262],{"class":261},"sPY7s"," https:\u002F\u002Fcloud-images.ubuntu.com\u002Fnoble\u002Fcurrent\u002Fnoble-server-cloudimg-amd64.img\n",[238,264,266],{"class":240,"line":265},4,[238,267,269],{"emptyLinePlaceholder":268},true,"\n",[238,271,273],{"class":240,"line":272},5,[238,274,275],{"class":244},"# VM を作成（ID: 9000 をテンプレート用に使用）\n",[238,277,279,282,285,289,293,296,299,302,305,308],{"class":240,"line":278},6,[238,280,281],{"class":257},"qm",[238,283,284],{"class":261}," create",[238,286,288],{"class":287},"sOJ5S"," 9000",[238,290,292],{"class":291},"sT800"," --name",[238,294,295],{"class":261}," ubuntu-2404-template",[238,297,298],{"class":291}," --memory",[238,300,301],{"class":287}," 4096",[238,303,304],{"class":291}," --cores",[238,306,307],{"class":287}," 2",[238,309,311],{"class":310},"sAklC"," \\\n",[238,313,315,318,321,324],{"class":240,"line":314},7,[238,316,317],{"class":291},"  --net0",[238,319,320],{"class":261}," virtio,bridge=vmbr0",[238,322,323],{"class":291}," --scsihw",[238,325,326],{"class":261}," virtio-scsi-single\n",[238,328,330],{"class":240,"line":329},8,[238,331,269],{"emptyLinePlaceholder":268},[238,333,335],{"class":240,"line":334},9,[238,336,337],{"class":244},"# ディスクイメージをインポート\n",[238,339,341,343,346,348,351],{"class":240,"line":340},10,[238,342,281],{"class":257},[238,344,345],{"class":261}," set",[238,347,288],{"class":287},[238,349,350],{"class":291}," --scsi0",[238,352,353],{"class":261}," local-lvm:0,import-from=\u002Froot\u002Fnoble-server-cloudimg-amd64.img\n",[238,355,357],{"class":240,"line":356},11,[238,358,269],{"emptyLinePlaceholder":268},[238,360,362],{"class":240,"line":361},12,[238,363,364],{"class":244},"# Cloud-Init ドライブを追加\n",[238,366,368,370,372,374,377],{"class":240,"line":367},13,[238,369,281],{"class":257},[238,371,345],{"class":261},[238,373,288],{"class":287},[238,375,376],{"class":291}," --ide2",[238,378,379],{"class":261}," local-lvm:cloudinit\n",[238,381,383,385,387,389,392],{"class":240,"line":382},14,[238,384,281],{"class":257},[238,386,345],{"class":261},[238,388,288],{"class":287},[238,390,391],{"class":291}," --boot",[238,393,394],{"class":261}," order=scsi0\n",[238,396,398,400,402,404,407,410,413],{"class":240,"line":397},15,[238,399,281],{"class":257},[238,401,345],{"class":261},[238,403,288],{"class":287},[238,405,406],{"class":291}," --serial0",[238,408,409],{"class":261}," socket",[238,411,412],{"class":291}," --vga",[238,414,415],{"class":261}," serial0\n",[238,417,419],{"class":240,"line":418},16,[238,420,269],{"emptyLinePlaceholder":268},[238,422,424],{"class":240,"line":423},17,[238,425,426],{"class":244},"# Cloud-Init のデフォルト設定\n",[238,428,430,432,434,436,439,442,445,448,451,455],{"class":240,"line":429},18,[238,431,281],{"class":257},[238,433,345],{"class":261},[238,435,288],{"class":287},[238,437,438],{"class":291}," --ciuser",[238,440,441],{"class":261}," ubuntu",[238,443,444],{"class":291}," --cipassword",[238,446,447],{"class":310}," \u003C",[238,449,450],{"class":261},"passwor",[238,452,454],{"class":453},"sGX4V","d",[238,456,457],{"class":310},">\n",[238,459,461,463,465,467,470],{"class":240,"line":460},19,[238,462,281],{"class":257},[238,464,345],{"class":261},[238,466,288],{"class":287},[238,468,469],{"class":291}," --sshkeys",[238,471,472],{"class":261}," ~\u002F.ssh\u002Fid_rsa.pub\n",[238,474,476,478,480,482,485],{"class":240,"line":475},20,[238,477,281],{"class":257},[238,479,345],{"class":261},[238,481,288],{"class":287},[238,483,484],{"class":291}," --ipconfig0",[238,486,487],{"class":261}," ip=dhcp\n",[238,489,491],{"class":240,"line":490},21,[238,492,269],{"emptyLinePlaceholder":268},[238,494,496],{"class":240,"line":495},22,[238,497,498],{"class":244},"# テンプレートに変換\n",[238,500,502,504,507],{"class":240,"line":501},23,[238,503,281],{"class":257},[238,505,506],{"class":261}," template",[238,508,509],{"class":287}," 9000\n",[46,511,512],{"id":512},"ノードのクローン",[11,514,515],{},"テンプレートから各ノードをフルクローンします:",[228,517,519],{"className":230,"code":518,"language":232,"meta":233,"style":233},"# サーバーノード\nqm clone 9000 101 --name k3s-server-1 --full\nqm clone 9000 102 --name k3s-server-2 --full\nqm clone 9000 103 --name k3s-server-3 --full\n\n# ワーカーノード（リソースを増量）\nqm clone 9000 111 --name k3s-worker-1 --full\nqm set 111 --memory 16384 --cores 4\nqm clone 9000 112 --name k3s-worker-2 --full\nqm set 112 --memory 16384 --cores 4\n",[235,520,521,526,546,564,582,586,591,609,627,645],{"__ignoreMap":233},[238,522,523],{"class":240,"line":241},[238,524,525],{"class":244},"# サーバーノード\n",[238,527,528,530,533,535,538,540,543],{"class":240,"line":248},[238,529,281],{"class":257},[238,531,532],{"class":261}," clone",[238,534,288],{"class":287},[238,536,537],{"class":287}," 101",[238,539,292],{"class":291},[238,541,542],{"class":261}," k3s-server-1",[238,544,545],{"class":291}," --full\n",[238,547,548,550,552,554,557,559,562],{"class":240,"line":254},[238,549,281],{"class":257},[238,551,532],{"class":261},[238,553,288],{"class":287},[238,555,556],{"class":287}," 102",[238,558,292],{"class":291},[238,560,561],{"class":261}," k3s-server-2",[238,563,545],{"class":291},[238,565,566,568,570,572,575,577,580],{"class":240,"line":265},[238,567,281],{"class":257},[238,569,532],{"class":261},[238,571,288],{"class":287},[238,573,574],{"class":287}," 103",[238,576,292],{"class":291},[238,578,579],{"class":261}," k3s-server-3",[238,581,545],{"class":291},[238,583,584],{"class":240,"line":272},[238,585,269],{"emptyLinePlaceholder":268},[238,587,588],{"class":240,"line":278},[238,589,590],{"class":244},"# ワーカーノード（リソースを増量）\n",[238,592,593,595,597,599,602,604,607],{"class":240,"line":314},[238,594,281],{"class":257},[238,596,532],{"class":261},[238,598,288],{"class":287},[238,600,601],{"class":287}," 111",[238,603,292],{"class":291},[238,605,606],{"class":261}," k3s-worker-1",[238,608,545],{"class":291},[238,610,611,613,615,617,619,622,624],{"class":240,"line":329},[238,612,281],{"class":257},[238,614,345],{"class":261},[238,616,601],{"class":287},[238,618,298],{"class":291},[238,620,621],{"class":287}," 16384",[238,623,304],{"class":291},[238,625,626],{"class":287}," 4\n",[238,628,629,631,633,635,638,640,643],{"class":240,"line":334},[238,630,281],{"class":257},[238,632,532],{"class":261},[238,634,288],{"class":287},[238,636,637],{"class":287}," 112",[238,639,292],{"class":291},[238,641,642],{"class":261}," k3s-worker-2",[238,644,545],{"class":291},[238,646,647,649,651,653,655,657,659],{"class":240,"line":340},[238,648,281],{"class":257},[238,650,345],{"class":261},[238,652,637],{"class":287},[238,654,298],{"class":291},[238,656,621],{"class":287},[238,658,304],{"class":291},[238,660,626],{"class":287},[11,662,663],{},"各ノードに静的 IP を設定します:",[228,665,667],{"className":230,"code":666,"language":232,"meta":233,"style":233},"qm set 101 --ipconfig0 ip=192.168.1.101\u002F24,gw=192.168.1.1\nqm set 102 --ipconfig0 ip=192.168.1.102\u002F24,gw=192.168.1.1\n# 以下同様\n",[235,668,669,685,700],{"__ignoreMap":233},[238,670,671,673,675,677,679,682],{"class":240,"line":241},[238,672,281],{"class":257},[238,674,345],{"class":261},[238,676,537],{"class":287},[238,678,484],{"class":291},[238,680,681],{"class":261}," ip=192.168.1.101\u002F24,gw=",[238,683,684],{"class":287},"192.168.1.1\n",[238,686,687,689,691,693,695,698],{"class":240,"line":248},[238,688,281],{"class":257},[238,690,345],{"class":261},[238,692,556],{"class":287},[238,694,484],{"class":291},[238,696,697],{"class":261}," ip=192.168.1.102\u002F24,gw=",[238,699,684],{"class":287},[238,701,702],{"class":240,"line":254},[238,703,704],{"class":244},"# 以下同様\n",[11,706,707,712],{},[15,708,711],{"href":709,"rel":710},"https:\u002F\u002Fkubo.hexabase.io\u002F",[19],"Kubo"," を使えば、このようなクラスタ構築・管理の複雑さから解放され、宣言的な設定だけで本番グレードの K8s 環境が手に入ります。",[32,714,716],{"id":715},"k3s-のインストールと構成","K3s のインストールと構成",[46,718,719],{"id":719},"サーバーノードの初期化",[11,721,722,723,728],{},"最初のサーバーノード（k3s-server-1）で K3s クラスタを初期化します。",[15,724,727],{"href":725,"rel":726},"https:\u002F\u002Fdocs.k3s.io\u002Fquick-start",[19],"K3s クイックスタートガイド","に従い、以下を実行します:",[228,730,732],{"className":230,"code":731,"language":232,"meta":233,"style":233},"# 最初のサーバーノードで実行\ncurl -sfL https:\u002F\u002Fget.k3s.io | K3S_TOKEN=\u003Csecure-token> sh -s - server \\\n  --cluster-init \\\n  --tls-san=192.168.1.100 \\\n  --disable traefik \\\n  --write-kubeconfig-mode 644\n",[235,733,734,739,779,786,793,803],{"__ignoreMap":233},[238,735,736],{"class":240,"line":241},[238,737,738],{"class":244},"# 最初のサーバーノードで実行\n",[238,740,741,744,747,750,753,756,759,762,765,768,771,774,777],{"class":240,"line":248},[238,742,743],{"class":257},"curl",[238,745,746],{"class":291}," -sfL",[238,748,749],{"class":261}," https:\u002F\u002Fget.k3s.io",[238,751,752],{"class":310}," |",[238,754,755],{"class":257}," K3S_TOKEN",[238,757,758],{"class":310},"=\u003C",[238,760,761],{"class":261},"secure-token",[238,763,764],{"class":310},">",[238,766,767],{"class":257}," sh",[238,769,770],{"class":291}," -s",[238,772,773],{"class":261}," -",[238,775,776],{"class":261}," server",[238,778,311],{"class":310},[238,780,781,784],{"class":240,"line":254},[238,782,783],{"class":291},"  --cluster-init",[238,785,311],{"class":310},[238,787,788,791],{"class":240,"line":265},[238,789,790],{"class":291},"  --tls-san=192.168.1.100",[238,792,311],{"class":310},[238,794,795,798,801],{"class":240,"line":272},[238,796,797],{"class":291},"  --disable",[238,799,800],{"class":261}," traefik",[238,802,311],{"class":310},[238,804,805,808],{"class":240,"line":278},[238,806,807],{"class":291},"  --write-kubeconfig-mode",[238,809,810],{"class":287}," 644\n",[11,812,813],{},[814,815,816],"strong",{},"オプション説明:",[818,819,820,827,833,839],"ul",{},[821,822,823,826],"li",{},[235,824,825],{},"--cluster-init",": 組み込み etcd を使った HA モードで初期化",[821,828,829,832],{},[235,830,831],{},"--tls-san",": ロードバランサー VIP を SAN に追加",[821,834,835,838],{},[235,836,837],{},"--disable traefik",": 後で独自の Ingress Controller を導入するため無効化",[821,840,841,844],{},[235,842,843],{},"--write-kubeconfig-mode 644",": kubeconfig の読み取り権限を設定",[46,846,847],{"id":847},"追加サーバーノードの参加",[11,849,850],{},"残りのサーバーノードをクラスタに参加させます:",[228,852,854],{"className":230,"code":853,"language":232,"meta":233,"style":233},"# k3s-server-2, k3s-server-3 で実行\ncurl -sfL https:\u002F\u002Fget.k3s.io | K3S_TOKEN=\u003Csecure-token> sh -s - server \\\n  --server https:\u002F\u002F192.168.1.101:6443 \\\n  --tls-san=192.168.1.100\n",[235,855,856,861,889,899],{"__ignoreMap":233},[238,857,858],{"class":240,"line":241},[238,859,860],{"class":244},"# k3s-server-2, k3s-server-3 で実行\n",[238,862,863,865,867,869,871,873,875,877,879,881,883,885,887],{"class":240,"line":248},[238,864,743],{"class":257},[238,866,746],{"class":291},[238,868,749],{"class":261},[238,870,752],{"class":310},[238,872,755],{"class":257},[238,874,758],{"class":310},[238,876,761],{"class":261},[238,878,764],{"class":310},[238,880,767],{"class":257},[238,882,770],{"class":291},[238,884,773],{"class":261},[238,886,776],{"class":261},[238,888,311],{"class":310},[238,890,891,894,897],{"class":240,"line":254},[238,892,893],{"class":291},"  --server",[238,895,896],{"class":261}," https:\u002F\u002F192.168.1.101:6443",[238,898,311],{"class":310},[238,900,901],{"class":240,"line":265},[238,902,903],{"class":291},"  --tls-san=192.168.1.100\n",[46,905,906],{"id":906},"ワーカーノードの追加",[11,908,909,910,915],{},"ワーカーノードは ",[15,911,914],{"href":912,"rel":913},"https:\u002F\u002Fdocs.k3s.io\u002Fcli\u002Fagent",[19],"K3S_URL 環境変数","を指定して参加させます:",[228,917,919],{"className":230,"code":918,"language":232,"meta":233,"style":233},"# 各ワーカーノードで実行\ncurl -sfL https:\u002F\u002Fget.k3s.io | K3S_URL=https:\u002F\u002F192.168.1.101:6443 \\\n  K3S_TOKEN=\u003Csecure-token> sh -\n",[235,920,921,926,947],{"__ignoreMap":233},[238,922,923],{"class":240,"line":241},[238,924,925],{"class":244},"# 各ワーカーノードで実行\n",[238,927,928,930,932,934,936,939,942,945],{"class":240,"line":248},[238,929,743],{"class":257},[238,931,746],{"class":291},[238,933,749],{"class":261},[238,935,752],{"class":310},[238,937,938],{"class":257}," K3S_URL",[238,940,941],{"class":310},"=",[238,943,944],{"class":261},"https:\u002F\u002F192.168.1.101:6443",[238,946,311],{"class":257},[238,948,949,952,955,958,961,963,965],{"class":240,"line":254},[238,950,951],{"class":261},"  K3S_TOKEN=",[238,953,954],{"class":310},"\u003C",[238,956,957],{"class":261},"secure-toke",[238,959,960],{"class":453},"n",[238,962,764],{"class":310},[238,964,767],{"class":261},[238,966,967],{"class":261}," -\n",[11,969,970,971,974],{},"サーバーノードのトークンは ",[235,972,973],{},"\u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fnode-token"," から取得できます。",[46,976,978],{"id":977},"kubeconfig-の設定","kubeconfig の設定",[11,980,981],{},"ローカルマシンから kubectl で操作するために、kubeconfig をコピーします:",[228,983,985],{"className":230,"code":984,"language":232,"meta":233,"style":233},"# サーバーノードから kubeconfig を取得\nscp ubuntu@192.168.1.101:\u002Fetc\u002Francher\u002Fk3s\u002Fk3s.yaml ~\u002F.kube\u002Fconfig\n\n# サーバーアドレスを外部 IP に変更\nsed -i 's\u002F127.0.0.1\u002F192.168.1.101\u002F' ~\u002F.kube\u002Fconfig\n\n# ノード一覧を確認\nkubectl get nodes -o wide\n",[235,986,987,992,1003,1007,1012,1031,1035,1040],{"__ignoreMap":233},[238,988,989],{"class":240,"line":241},[238,990,991],{"class":244},"# サーバーノードから kubeconfig を取得\n",[238,993,994,997,1000],{"class":240,"line":248},[238,995,996],{"class":257},"scp",[238,998,999],{"class":261}," ubuntu@192.168.1.101:\u002Fetc\u002Francher\u002Fk3s\u002Fk3s.yaml",[238,1001,1002],{"class":261}," ~\u002F.kube\u002Fconfig\n",[238,1004,1005],{"class":240,"line":254},[238,1006,269],{"emptyLinePlaceholder":268},[238,1008,1009],{"class":240,"line":265},[238,1010,1011],{"class":244},"# サーバーアドレスを外部 IP に変更\n",[238,1013,1014,1017,1020,1023,1026,1029],{"class":240,"line":272},[238,1015,1016],{"class":257},"sed",[238,1018,1019],{"class":291}," -i",[238,1021,1022],{"class":310}," '",[238,1024,1025],{"class":261},"s\u002F127.0.0.1\u002F192.168.1.101\u002F",[238,1027,1028],{"class":310},"'",[238,1030,1002],{"class":261},[238,1032,1033],{"class":240,"line":278},[238,1034,269],{"emptyLinePlaceholder":268},[238,1036,1037],{"class":240,"line":314},[238,1038,1039],{"class":244},"# ノード一覧を確認\n",[238,1041,1042,1045,1048,1051,1054],{"class":240,"line":329},[238,1043,1044],{"class":257},"kubectl",[238,1046,1047],{"class":261}," get",[238,1049,1050],{"class":261}," nodes",[238,1052,1053],{"class":291}," -o",[238,1055,1056],{"class":261}," wide\n",[32,1058,1059],{"id":1059},"ネットワークとストレージの設定",[46,1061,1063],{"id":1062},"metallb-ロードバランサー","MetalLB ロードバランサー",[11,1065,1066,1067,1072],{},"ベアメタル環境では、",[15,1068,1071],{"href":1069,"rel":1070},"https:\u002F\u002Fmetallb.universe.tf\u002F",[19],"MetalLB"," が LoadBalancer タイプの Service に外部 IP を払い出します:",[228,1074,1076],{"className":230,"code":1075,"language":232,"meta":233,"style":233},"# MetalLB のインストール\nkubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Fmetallb\u002Fmetallb\u002Fv0.14.9\u002Fconfig\u002Fmanifests\u002Fmetallb-native.yaml\n\n# IP アドレスプールの設定\ncat \u003C\u003CEOF | kubectl apply -f -\napiVersion: metallb.io\u002Fv1beta1\nkind: IPAddressPool\nmetadata:\n  name: default-pool\n  namespace: metallb-system\nspec:\n  addresses:\n  - 192.168.1.200-192.168.1.250\n---\napiVersion: metallb.io\u002Fv1beta1\nkind: L2Advertisement\nmetadata:\n  name: default\n  namespace: metallb-system\nEOF\n",[235,1077,1078,1083,1096,1100,1105,1127,1132,1137,1142,1147,1152,1157,1162,1167,1172,1176,1181,1185,1190,1194],{"__ignoreMap":233},[238,1079,1080],{"class":240,"line":241},[238,1081,1082],{"class":244},"# MetalLB のインストール\n",[238,1084,1085,1087,1090,1093],{"class":240,"line":248},[238,1086,1044],{"class":257},[238,1088,1089],{"class":261}," apply",[238,1091,1092],{"class":291}," -f",[238,1094,1095],{"class":261}," https:\u002F\u002Fraw.githubusercontent.com\u002Fmetallb\u002Fmetallb\u002Fv0.14.9\u002Fconfig\u002Fmanifests\u002Fmetallb-native.yaml\n",[238,1097,1098],{"class":240,"line":254},[238,1099,269],{"emptyLinePlaceholder":268},[238,1101,1102],{"class":240,"line":265},[238,1103,1104],{"class":244},"# IP アドレスプールの設定\n",[238,1106,1107,1110,1113,1116,1118,1121,1123,1125],{"class":240,"line":272},[238,1108,1109],{"class":257},"cat",[238,1111,1112],{"class":310}," \u003C\u003C",[238,1114,1115],{"class":310},"EOF",[238,1117,752],{"class":310},[238,1119,1120],{"class":257}," kubectl",[238,1122,1089],{"class":261},[238,1124,1092],{"class":291},[238,1126,967],{"class":261},[238,1128,1129],{"class":240,"line":278},[238,1130,1131],{"class":261},"apiVersion: metallb.io\u002Fv1beta1\n",[238,1133,1134],{"class":240,"line":314},[238,1135,1136],{"class":261},"kind: IPAddressPool\n",[238,1138,1139],{"class":240,"line":329},[238,1140,1141],{"class":261},"metadata:\n",[238,1143,1144],{"class":240,"line":334},[238,1145,1146],{"class":261},"  name: default-pool\n",[238,1148,1149],{"class":240,"line":340},[238,1150,1151],{"class":261},"  namespace: metallb-system\n",[238,1153,1154],{"class":240,"line":356},[238,1155,1156],{"class":261},"spec:\n",[238,1158,1159],{"class":240,"line":361},[238,1160,1161],{"class":261},"  addresses:\n",[238,1163,1164],{"class":240,"line":367},[238,1165,1166],{"class":261},"  - 192.168.1.200-192.168.1.250\n",[238,1168,1169],{"class":240,"line":382},[238,1170,1171],{"class":261},"---\n",[238,1173,1174],{"class":240,"line":397},[238,1175,1131],{"class":261},[238,1177,1178],{"class":240,"line":418},[238,1179,1180],{"class":261},"kind: L2Advertisement\n",[238,1182,1183],{"class":240,"line":423},[238,1184,1141],{"class":261},[238,1186,1187],{"class":240,"line":429},[238,1188,1189],{"class":261},"  name: default\n",[238,1191,1192],{"class":240,"line":460},[238,1193,1151],{"class":261},[238,1195,1196],{"class":240,"line":475},[238,1197,1198],{"class":310},"EOF\n",[46,1200,1202],{"id":1201},"nginx-ingress-controller","NGINX Ingress Controller",[11,1204,1205,1209],{},[15,1206,1202],{"href":1207,"rel":1208},"https:\u002F\u002Fkubernetes.github.io\u002Fingress-nginx\u002F",[19]," で HTTP\u002FHTTPS トラフィックをルーティングします:",[228,1211,1213],{"className":230,"code":1212,"language":232,"meta":233,"style":233},"kubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Fkubernetes\u002Fingress-nginx\u002Fcontroller-v1.12.0\u002Fdeploy\u002Fstatic\u002Fprovider\u002Fbaremetal\u002Fdeploy.yaml\n",[235,1214,1215],{"__ignoreMap":233},[238,1216,1217,1219,1221,1223],{"class":240,"line":241},[238,1218,1044],{"class":257},[238,1220,1089],{"class":261},[238,1222,1092],{"class":291},[238,1224,1225],{"class":261}," https:\u002F\u002Fraw.githubusercontent.com\u002Fkubernetes\u002Fingress-nginx\u002Fcontroller-v1.12.0\u002Fdeploy\u002Fstatic\u002Fprovider\u002Fbaremetal\u002Fdeploy.yaml\n",[46,1227,1229],{"id":1228},"longhorn-分散ストレージ","Longhorn 分散ストレージ",[11,1231,1232,1237],{},[15,1233,1236],{"href":1234,"rel":1235},"https:\u002F\u002Flonghorn.io\u002F",[19],"Longhorn"," は Kubernetes ネイティブの分散ブロックストレージで、K3s との統合が優れています:",[228,1239,1241],{"className":230,"code":1240,"language":232,"meta":233,"style":233},"# Longhorn のインストール\nkubectl apply -f https:\u002F\u002Fraw.githubusercontent.com\u002Flonghorn\u002Flonghorn\u002Fv1.7.2\u002Fdeploy\u002Flonghorn.yaml\n\n# デフォルト StorageClass として設定\nkubectl patch storageclass longhorn -p '{\"metadata\":{\"annotations\":{\"storageclass.kubernetes.io\u002Fis-default-class\":\"true\"}}}'\n",[235,1242,1243,1248,1259,1263,1268],{"__ignoreMap":233},[238,1244,1245],{"class":240,"line":241},[238,1246,1247],{"class":244},"# Longhorn のインストール\n",[238,1249,1250,1252,1254,1256],{"class":240,"line":248},[238,1251,1044],{"class":257},[238,1253,1089],{"class":261},[238,1255,1092],{"class":291},[238,1257,1258],{"class":261}," https:\u002F\u002Fraw.githubusercontent.com\u002Flonghorn\u002Flonghorn\u002Fv1.7.2\u002Fdeploy\u002Flonghorn.yaml\n",[238,1260,1261],{"class":240,"line":254},[238,1262,269],{"emptyLinePlaceholder":268},[238,1264,1265],{"class":240,"line":265},[238,1266,1267],{"class":244},"# デフォルト StorageClass として設定\n",[238,1269,1270,1272,1275,1278,1281,1284,1286,1289],{"class":240,"line":272},[238,1271,1044],{"class":257},[238,1273,1274],{"class":261}," patch",[238,1276,1277],{"class":261}," storageclass",[238,1279,1280],{"class":261}," longhorn",[238,1282,1283],{"class":291}," -p",[238,1285,1022],{"class":310},[238,1287,1288],{"class":261},"{\"metadata\":{\"annotations\":{\"storageclass.kubernetes.io\u002Fis-default-class\":\"true\"}}}",[238,1290,1291],{"class":310},"'\n",[32,1293,1294],{"id":1294},"運用と監視",[46,1296,1297],{"id":1297},"クラスタの状態確認",[228,1299,1301],{"className":230,"code":1300,"language":232,"meta":233,"style":233},"# ノードの状態\nkubectl get nodes -o wide\n\n# システムポッドの確認\nkubectl get pods -A\n\n# K3s サービスの確認\nsystemctl status k3s       # サーバーノード\nsystemctl status k3s-agent # ワーカーノード\n",[235,1302,1303,1308,1320,1324,1329,1341,1345,1350,1364],{"__ignoreMap":233},[238,1304,1305],{"class":240,"line":241},[238,1306,1307],{"class":244},"# ノードの状態\n",[238,1309,1310,1312,1314,1316,1318],{"class":240,"line":248},[238,1311,1044],{"class":257},[238,1313,1047],{"class":261},[238,1315,1050],{"class":261},[238,1317,1053],{"class":291},[238,1319,1056],{"class":261},[238,1321,1322],{"class":240,"line":254},[238,1323,269],{"emptyLinePlaceholder":268},[238,1325,1326],{"class":240,"line":265},[238,1327,1328],{"class":244},"# システムポッドの確認\n",[238,1330,1331,1333,1335,1338],{"class":240,"line":272},[238,1332,1044],{"class":257},[238,1334,1047],{"class":261},[238,1336,1337],{"class":261}," pods",[238,1339,1340],{"class":291}," -A\n",[238,1342,1343],{"class":240,"line":278},[238,1344,269],{"emptyLinePlaceholder":268},[238,1346,1347],{"class":240,"line":314},[238,1348,1349],{"class":244},"# K3s サービスの確認\n",[238,1351,1352,1355,1358,1361],{"class":240,"line":329},[238,1353,1354],{"class":257},"systemctl",[238,1356,1357],{"class":261}," status",[238,1359,1360],{"class":261}," k3s",[238,1362,1363],{"class":244},"       # サーバーノード\n",[238,1365,1366,1368,1370,1373],{"class":240,"line":334},[238,1367,1354],{"class":257},[238,1369,1357],{"class":261},[238,1371,1372],{"class":261}," k3s-agent",[238,1374,1375],{"class":244}," # ワーカーノード\n",[46,1377,1378],{"id":1378},"バックアップと復旧",[11,1380,1381],{},"etcd のスナップショットは K3s が自動的に取得しますが、手動バックアップも重要です:",[228,1383,1385],{"className":230,"code":1384,"language":232,"meta":233,"style":233},"# 手動 etcd スナップショット\nk3s etcd-snapshot save --name manual-backup-$(date +%Y%m%d)\n\n# スナップショット一覧\nk3s etcd-snapshot ls\n",[235,1386,1387,1392,1420,1424,1429],{"__ignoreMap":233},[238,1388,1389],{"class":240,"line":241},[238,1390,1391],{"class":244},"# 手動 etcd スナップショット\n",[238,1393,1394,1397,1400,1403,1405,1408,1411,1414,1417],{"class":240,"line":248},[238,1395,1396],{"class":257},"k3s",[238,1398,1399],{"class":261}," etcd-snapshot",[238,1401,1402],{"class":261}," save",[238,1404,292],{"class":291},[238,1406,1407],{"class":261}," manual-backup-",[238,1409,1410],{"class":310},"$(",[238,1412,1413],{"class":257},"date",[238,1415,1416],{"class":261}," +%Y%m%d",[238,1418,1419],{"class":310},")\n",[238,1421,1422],{"class":240,"line":254},[238,1423,269],{"emptyLinePlaceholder":268},[238,1425,1426],{"class":240,"line":265},[238,1427,1428],{"class":244},"# スナップショット一覧\n",[238,1430,1431,1433,1435],{"class":240,"line":272},[238,1432,1396],{"class":257},[238,1434,1399],{"class":261},[238,1436,1437],{"class":261}," ls\n",[11,1439,1440,1441,1444],{},"K3s クラスタの運用を自動化し、エンタープライズグレードの信頼性を実現したい場合は、",[15,1442,29],{"href":27,"rel":1443},[19]," が最適なソリューションです。",[32,1446,1447],{"id":1447},"まとめ",[11,1449,1450],{},"Proxmox VE 上に K3s クラスタを構築することで、柔軟で費用対効果の高い Kubernetes 環境が実現します。VM テンプレートによる効率的なプロビジョニング、HA 構成による高可用性、Longhorn による分散ストレージと、本番運用に必要な要素をすべてカバーしました。",[11,1452,1453,1454,1457],{},"より高度な管理機能やエンタープライズサポートが必要な場合は、",[15,1455,711],{"href":709,"rel":1456},[19]," の導入をご検討ください。Proxmox 上でも Kubo On-Premise ならフルマネージド K8s として、クラスタのライフサイクル管理、自動スケーリング、セキュリティパッチ適用まで一括で対応します。",[11,1459,1460,1461,1466],{},"詳細は ",[15,1462,1465],{"href":1463,"rel":1464},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[19],"お問い合わせ"," からご連絡ください。",[11,1468,1469],{},[814,1470,1471],{},"関連リンク:",[818,1473,1474,1479,1486,1493,1499,1505],{},[821,1475,1476],{},[15,1477,43],{"href":41,"rel":1478},[19],[821,1480,1481],{},[15,1482,1485],{"href":1483,"rel":1484},"https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s",[19],"K3s GitHub リポジトリ",[821,1487,1488],{},[15,1489,1492],{"href":1490,"rel":1491},"https:\u002F\u002Fpve.proxmox.com\u002Fpve-docs\u002F",[19],"Proxmox VE ドキュメント",[821,1494,1495],{},[15,1496,1498],{"href":1069,"rel":1497},[19],"MetalLB 公式サイト",[821,1500,1501],{},[15,1502,1504],{"href":1234,"rel":1503},[19],"Longhorn ストレージ",[821,1506,1507],{},[15,1508,1511],{"href":1509,"rel":1510},"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002F",[19],"Kubernetes 公式ドキュメント",[1513,1514,1515],"style",{},"html pre.shiki code .sbD-w, html code.shiki .sbD-w{--shiki-default:#51597D;--shiki-default-font-style:italic}html pre.shiki code .sE3pS, html code.shiki .sE3pS{--shiki-default:#C0CAF5}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}html pre.shiki code .sOJ5S, html code.shiki .sOJ5S{--shiki-default:#FF9E64}html pre.shiki code .sT800, html code.shiki .sT800{--shiki-default:#E0AF68}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .sGX4V, html code.shiki .sGX4V{--shiki-default:#A9B1D6}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":233,"searchDepth":248,"depth":248,"links":1517},[1518,1522,1526,1532,1537,1541],{"id":34,"depth":248,"text":35,"children":1519},[1520,1521],{"id":48,"depth":254,"text":48},{"id":121,"depth":254,"text":121},{"id":218,"depth":248,"text":219,"children":1523},[1524,1525],{"id":225,"depth":254,"text":226},{"id":512,"depth":254,"text":512},{"id":715,"depth":248,"text":716,"children":1527},[1528,1529,1530,1531],{"id":719,"depth":254,"text":719},{"id":847,"depth":254,"text":847},{"id":906,"depth":254,"text":906},{"id":977,"depth":254,"text":978},{"id":1059,"depth":248,"text":1059,"children":1533},[1534,1535,1536],{"id":1062,"depth":254,"text":1063},{"id":1201,"depth":254,"text":1202},{"id":1228,"depth":254,"text":1229},{"id":1294,"depth":248,"text":1294,"children":1538},[1539,1540],{"id":1297,"depth":254,"text":1297},{"id":1378,"depth":254,"text":1378},{"id":1447,"depth":248,"text":1447},"2026-05-27","Proxmox VE 上に K3s 軽量 Kubernetes クラスタを構築する完全手順。VM テンプレート作成から HA 構成、ストレージ、Ingress 設定まで網羅。","md","ja",{},"\u002Fblog\u002Fja\u002Fk3s-on-proxmox-cluster",{"title":5,"description":1543},"blog\u002Fja\u002Fk3s-on-proxmox-cluster",[20,1551,1552,1553,1554,1555,1556],"Kubernetes","Proxmox","セルフホスティング","コンテナ","クラスタ構築","DevOps","u8DIxnc7zQh_LVnMpSB7Rf7iv0ACbdg7_Jo0d9anfJI",1779964617053]