[{"data":1,"prerenderedAt":1635},["ShallowReactive",2],{"blog-ja-k3s-edge-iot-deployment":3,"blog-ja-k3s-edge-iot-deployment-alt":184},{"id":4,"title":5,"author":6,"body":7,"date":1619,"description":1620,"extension":1621,"image":141,"locale":1622,"meta":1623,"navigation":184,"path":1624,"seo":1625,"stem":1626,"tags":1627,"__hash__":1634},"blog\u002Fblog\u002Fja\u002Fk3s-edge-iot-deployment.md","K3s でエッジ\u002FIoT 環境に Kubernetes を展開する完全ガイド","Kubo Team",{"type":8,"value":9,"toc":1585},"minimark",[10,14,30,38,43,47,55,111,119,123,131,135,248,256,260,263,271,304,318,322,432,436,579,582,586,595,598,603,654,659,662,667,757,760,763,844,850,854,858,866,984,988,996,999,1002,1005,1061,1064,1067,1076,1230,1233,1258,1261,1284,1287,1485,1489,1492,1501,1505,1508,1511,1520,1523,1526,1530,1533,1559,1572,1581],[11,12,13],"p",{},"エッジコンピューティングと IoT の世界で、コンテナオーケストレーションのニーズが急速に高まっています。しかし、標準の Kubernetes はリソース要件が高く、ネットワーク接続が不安定なエッジ環境には適していません。",[11,15,16,23,24,29],{},[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fk3s.io\u002F",[21],"nofollow","K3s"," は、70MB 未満のシングルバイナリで動作し、512MB の RAM から Kubernetes ワークロードを実行できる軽量ディストリビューションです。",[17,25,28],{"href":26,"rel":27},"https:\u002F\u002Fdocs.k3s.io\u002F",[21],"K3s 公式ドキュメント","によれば、「無人の、リソースが制限された、リモートロケーション、または IoT アプライアンス内での本番ワークロード」のために設計されています。",[11,31,32,37],{},[17,33,36],{"href":34,"rel":35},"https:\u002F\u002Fkubo.hexabase.io\u002F",[21],"Kubo"," は K3s ベースのマネージド Kubernetes を月額48,000円〜で提供し、エッジクラスタの一元管理を実現します。",[39,40,42],"h2",{"id":41},"k3s-がエッジiot-に最適な理由","K3s がエッジ\u002FIoT に最適な理由",[44,45,46],"h3",{"id":46},"圧倒的な軽量性",[11,48,49,54],{},[17,50,53],{"href":51,"rel":52},"https:\u002F\u002Fdocs.k3s.io\u002Finstallation\u002Frequirements",[21],"K3s のシステム要件","は、エッジデバイスに最適化されています：",[56,57,58,74],"table",{},[59,60,61],"thead",{},[62,63,64,68,71],"tr",{},[65,66,67],"th",{},"要件",[65,69,70],{},"サーバーノード",[65,72,73],{},"エージェントノード",[75,76,77,89,100],"tbody",{},[62,78,79,83,86],{},[80,81,82],"td",{},"CPU",[80,84,85],{},"2コア",[80,87,88],{},"1コア",[62,90,91,94,97],{},[80,92,93],{},"RAM",[80,95,96],{},"2GB",[80,98,99],{},"512MB",[62,101,102,105,108],{},[80,103,104],{},"ストレージ",[80,106,107],{},"SSD推奨",[80,109,110],{},"最小限",[11,112,113,118],{},[17,114,117],{"href":115,"rel":116},"https:\u002F\u002Fblog.octabyte.io\u002Fposts\u002Fhosting-and-infrastructure\u002Fk3s\u002Fk3s-the-lightweight-kubernetes-distribution-for-edge-arm-and-iot-environments\u002F",[21],"OctaByte の分析","によれば、K3s のコントロールプレーンは 512MB 未満の RAM で動作し、ワーカーノードのコンポーネントは 50MB 未満のメモリフットプリントです。",[44,120,122],{"id":121},"arm-アーキテクチャの完全サポート","ARM アーキテクチャの完全サポート",[11,124,125,126,130],{},"K3s は ",[17,127,129],{"href":26,"rel":128},[21],"ARM64 と ARMv7 の両方をサポート","しており、Raspberry Pi から AWS Graviton まで幅広い ARM デバイスで動作します。マルチアーキテクチャイメージも提供されているため、AMD64 と ARM のハイブリッド環境も容易に構築できます。",[44,132,134],{"id":133},"_1コマンドインストール","1コマンドインストール",[136,137,142],"pre",{"className":138,"code":139,"language":140,"meta":141,"style":141},"language-bash shiki shiki-themes tokyo-night","# サーバー（コントロールプレーン）のインストール\ncurl -sfL https:\u002F\u002Fget.k3s.io | sh -\n\n# エージェント（ワーカー）のインストール\ncurl -sfL https:\u002F\u002Fget.k3s.io | K3S_URL=https:\u002F\u002F\u003Cserver>:6443 \\\n  K3S_TOKEN=\u003Ctoken> sh -\n","bash","",[143,144,145,154,179,186,192,227],"code",{"__ignoreMap":141},[146,147,150],"span",{"class":148,"line":149},"line",1,[146,151,153],{"class":152},"sbD-w","# サーバー（コントロールプレーン）のインストール\n",[146,155,157,161,165,169,173,176],{"class":148,"line":156},2,[146,158,160],{"class":159},"sE3pS","curl",[146,162,164],{"class":163},"sT800"," -sfL",[146,166,168],{"class":167},"sPY7s"," https:\u002F\u002Fget.k3s.io",[146,170,172],{"class":171},"sAklC"," |",[146,174,175],{"class":159}," sh",[146,177,178],{"class":167}," -\n",[146,180,182],{"class":148,"line":181},3,[146,183,185],{"emptyLinePlaceholder":184},true,"\n",[146,187,189],{"class":148,"line":188},4,[146,190,191],{"class":152},"# エージェント（ワーカー）のインストール\n",[146,193,195,197,199,201,203,206,209,212,215,218,221,224],{"class":148,"line":194},5,[146,196,160],{"class":159},[146,198,164],{"class":163},[146,200,168],{"class":167},[146,202,172],{"class":171},[146,204,205],{"class":159}," K3S_URL",[146,207,208],{"class":171},"=",[146,210,211],{"class":167},"https:\u002F\u002F",[146,213,214],{"class":171},"\u003C",[146,216,217],{"class":167},"server",[146,219,220],{"class":171},">",[146,222,223],{"class":167},":6443",[146,225,226],{"class":159}," \\\n",[146,228,230,233,235,238,242,244,246],{"class":148,"line":229},6,[146,231,232],{"class":167},"  K3S_TOKEN=",[146,234,214],{"class":171},[146,236,237],{"class":167},"toke",[146,239,241],{"class":240},"sGX4V","n",[146,243,220],{"class":171},[146,245,175],{"class":167},[146,247,178],{"class":167},[11,249,250,255],{},[17,251,254],{"href":252,"rel":253},"https:\u002F\u002Fwww.hexabase.com\u002Fproduct\u002Fcaptain-ai\u002F",[21],"Captain.AI"," のようなAIワークロードをエッジで実行する場合も、K3s の軽量な基盤が理想的です。",[39,257,259],{"id":258},"raspberry-pi-での-k3s-デプロイ","Raspberry Pi での K3s デプロイ",[44,261,262],{"id":262},"ハードウェア準備",[11,264,265,270],{},[17,266,269],{"href":267,"rel":268},"https:\u002F\u002Fcalje.medium.com\u002Frunning-a-kubernetes-cluster-on-raspberry-pi-with-k3s-cheap-low-power-fully-functional-9e2cc50ba64f",[21],"Raspberry Pi 上での K3s 構築","に必要な最小構成：",[272,273,274,282,292,298],"ul",{},[275,276,277,281],"li",{},[278,279,280],"strong",{},"raspberry pi 4-5","（4gb ram 推奨）",[275,283,284,287,288,291],{},[278,285,286],{},"microSD カード","（32GB以上、A2 規格推奨）または ",[278,289,290],{},"USB SSD","（本番環境では必須）",[275,293,294,297],{},[278,295,296],{},"PoE HAT"," またはUSB-C電源",[275,299,300,303],{},[278,301,302],{},"有線 LAN"," 接続（Wi-Fi は不安定なため非推奨）",[305,306,307],"blockquote",{},[11,308,309,312,313,317],{},[278,310,311],{},"重要",": ",[17,314,316],{"href":51,"rel":315},[21],"K3s のドキュメント","は「SD カードと eMMC は io 負荷に耐えられない」と明記しています。本番環境では必ず USB SSD を使用してください。",[44,319,321],{"id":320},"os-の最適化","OS の最適化",[136,323,325],{"className":138,"code":324,"language":140,"meta":141,"style":141},"# cgroup の有効化（Raspberry Pi OS の場合）\necho ' cgroup_memory=1 cgroup_enable=memory' | sudo tee -a \u002Fboot\u002Fcmdline.txt\n\n# スワップの無効化（Kubernetes のベストプラクティス）\nsudo dphys-swapfile swapoff\nsudo systemctl disable dphys-swapfile\n\n# iptables の設定\nsudo iptables -F\nsudo update-alternatives --set iptables \u002Fusr\u002Fsbin\u002Fiptables-legacy\n",[143,326,327,332,361,365,370,381,394,399,405,416],{"__ignoreMap":141},[146,328,329],{"class":148,"line":149},[146,330,331],{"class":152},"# cgroup の有効化（Raspberry Pi OS の場合）\n",[146,333,334,338,341,344,347,349,352,355,358],{"class":148,"line":156},[146,335,337],{"class":336},"sySf4","echo",[146,339,340],{"class":171}," '",[146,342,343],{"class":167}," cgroup_memory=1 cgroup_enable=memory",[146,345,346],{"class":171},"'",[146,348,172],{"class":171},[146,350,351],{"class":159}," sudo",[146,353,354],{"class":167}," tee",[146,356,357],{"class":163}," -a",[146,359,360],{"class":167}," \u002Fboot\u002Fcmdline.txt\n",[146,362,363],{"class":148,"line":181},[146,364,185],{"emptyLinePlaceholder":184},[146,366,367],{"class":148,"line":188},[146,368,369],{"class":152},"# スワップの無効化（Kubernetes のベストプラクティス）\n",[146,371,372,375,378],{"class":148,"line":194},[146,373,374],{"class":159},"sudo",[146,376,377],{"class":167}," dphys-swapfile",[146,379,380],{"class":167}," swapoff\n",[146,382,383,385,388,391],{"class":148,"line":229},[146,384,374],{"class":159},[146,386,387],{"class":167}," systemctl",[146,389,390],{"class":167}," disable",[146,392,393],{"class":167}," dphys-swapfile\n",[146,395,397],{"class":148,"line":396},7,[146,398,185],{"emptyLinePlaceholder":184},[146,400,402],{"class":148,"line":401},8,[146,403,404],{"class":152},"# iptables の設定\n",[146,406,408,410,413],{"class":148,"line":407},9,[146,409,374],{"class":159},[146,411,412],{"class":167}," iptables",[146,414,415],{"class":163}," -F\n",[146,417,419,421,424,427,429],{"class":148,"line":418},10,[146,420,374],{"class":159},[146,422,423],{"class":167}," update-alternatives",[146,425,426],{"class":163}," --set",[146,428,412],{"class":167},[146,430,431],{"class":167}," \u002Fusr\u002Fsbin\u002Fiptables-legacy\n",[44,433,435],{"id":434},"k3s-のインストールと最適化","K3s のインストールと最適化",[136,437,439],{"className":138,"code":438,"language":140,"meta":141,"style":141},"# サーバーノード（etcd 組み込みHA構成）\ncurl -sfL https:\u002F\u002Fget.k3s.io | sh -s - server \\\n  --cluster-init \\\n  --write-kubeconfig-mode 644 \\\n  --disable traefik \\\n  --disable servicelb \\\n  --kubelet-arg=\"max-pods=50\"\n\n# エージェントノード\ncurl -sfL https:\u002F\u002Fget.k3s.io | K3S_URL=https:\u002F\u002F\u003Cserver-ip>:6443 \\\n  K3S_TOKEN=$(sudo cat \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fnode-token) sh -\n",[143,440,441,446,469,476,487,497,506,520,524,529,556],{"__ignoreMap":141},[146,442,443],{"class":148,"line":149},[146,444,445],{"class":152},"# サーバーノード（etcd 組み込みHA構成）\n",[146,447,448,450,452,454,456,458,461,464,467],{"class":148,"line":156},[146,449,160],{"class":159},[146,451,164],{"class":163},[146,453,168],{"class":167},[146,455,172],{"class":171},[146,457,175],{"class":159},[146,459,460],{"class":163}," -s",[146,462,463],{"class":167}," -",[146,465,466],{"class":167}," server",[146,468,226],{"class":171},[146,470,471,474],{"class":148,"line":181},[146,472,473],{"class":163},"  --cluster-init",[146,475,226],{"class":171},[146,477,478,481,485],{"class":148,"line":188},[146,479,480],{"class":163},"  --write-kubeconfig-mode",[146,482,484],{"class":483},"sOJ5S"," 644",[146,486,226],{"class":171},[146,488,489,492,495],{"class":148,"line":194},[146,490,491],{"class":163},"  --disable",[146,493,494],{"class":167}," traefik",[146,496,226],{"class":171},[146,498,499,501,504],{"class":148,"line":229},[146,500,491],{"class":163},[146,502,503],{"class":167}," servicelb",[146,505,226],{"class":171},[146,507,508,511,514,517],{"class":148,"line":396},[146,509,510],{"class":163},"  --kubelet-arg=",[146,512,513],{"class":171},"\"",[146,515,516],{"class":167},"max-pods=50",[146,518,519],{"class":171},"\"\n",[146,521,522],{"class":148,"line":401},[146,523,185],{"emptyLinePlaceholder":184},[146,525,526],{"class":148,"line":407},[146,527,528],{"class":152},"# エージェントノード\n",[146,530,531,533,535,537,539,541,543,545,547,550,552,554],{"class":148,"line":418},[146,532,160],{"class":159},[146,534,164],{"class":163},[146,536,168],{"class":167},[146,538,172],{"class":171},[146,540,205],{"class":159},[146,542,208],{"class":171},[146,544,211],{"class":167},[146,546,214],{"class":171},[146,548,549],{"class":167},"server-ip",[146,551,220],{"class":171},[146,553,223],{"class":167},[146,555,226],{"class":159},[146,557,559,561,564,566,569,572,575,577],{"class":148,"line":558},11,[146,560,232],{"class":167},[146,562,563],{"class":171},"$(",[146,565,374],{"class":159},[146,567,568],{"class":167}," cat",[146,570,571],{"class":167}," \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fnode-token",[146,573,574],{"class":171},")",[146,576,175],{"class":167},[146,578,178],{"class":167},[11,580,581],{},"リソースが限られたエッジデバイスでは、不要なコンポーネント（Traefik、ServiceLB）を無効化し、max-pods を制限することで安定性を確保します。",[39,583,585],{"id":584},"エアギャップオフラインデプロイメント","エアギャップ（オフライン）デプロイメント",[11,587,588,589,594],{},"多くのエッジ環境ではインターネット接続が限定的または不可能です。",[17,590,593],{"href":591,"rel":592},"https:\u002F\u002Fdocs.k3s.io\u002Finstallation\u002Fairgap",[21],"K3s はエアギャップインストールを完全にサポート","しています。",[44,596,597],{"id":597},"エアギャップインストールの手順",[11,599,600],{},[278,601,602],{},"Step 1: インターネット接続のある環境でイメージを準備",[136,604,606],{"className":138,"code":605,"language":140,"meta":141,"style":141},"# K3s バイナリのダウンロード\nwget https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Freleases\u002Fdownload\u002Fv1.30.0+k3s1\u002Fk3s-arm64\nwget https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Freleases\u002Fdownload\u002Fv1.30.0+k3s1\u002Fk3s-airgap-images-arm64.tar.zst\n\n# アプリケーションイメージの保存\ndocker save myapp:latest -o myapp.tar\n",[143,607,608,613,621,628,632,637],{"__ignoreMap":141},[146,609,610],{"class":148,"line":149},[146,611,612],{"class":152},"# K3s バイナリのダウンロード\n",[146,614,615,618],{"class":148,"line":156},[146,616,617],{"class":159},"wget",[146,619,620],{"class":167}," https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Freleases\u002Fdownload\u002Fv1.30.0+k3s1\u002Fk3s-arm64\n",[146,622,623,625],{"class":148,"line":181},[146,624,617],{"class":159},[146,626,627],{"class":167}," https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Freleases\u002Fdownload\u002Fv1.30.0+k3s1\u002Fk3s-airgap-images-arm64.tar.zst\n",[146,629,630],{"class":148,"line":188},[146,631,185],{"emptyLinePlaceholder":184},[146,633,634],{"class":148,"line":194},[146,635,636],{"class":152},"# アプリケーションイメージの保存\n",[146,638,639,642,645,648,651],{"class":148,"line":229},[146,640,641],{"class":159},"docker",[146,643,644],{"class":167}," save",[146,646,647],{"class":167}," myapp:latest",[146,649,650],{"class":163}," -o",[146,652,653],{"class":167}," myapp.tar\n",[11,655,656],{},[278,657,658],{},"Step 2: イメージをエッジデバイスに転送",[11,660,661],{},"USB ドライブやローカルネットワーク経由で転送します。",[11,663,664],{},[278,665,666],{},"Step 3: エッジデバイスでインストール",[136,668,670],{"className":138,"code":669,"language":140,"meta":141,"style":141},"# K3s バイナリの配置\nsudo cp k3s-arm64 \u002Fusr\u002Flocal\u002Fbin\u002Fk3s\nsudo chmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fk3s\n\n# エアギャップイメージの配置\nsudo mkdir -p \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fagent\u002Fimages\u002F\nsudo cp k3s-airgap-images-arm64.tar.zst \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fagent\u002Fimages\u002F\n\n# インストールスクリプトの実行（エアギャップモード）\nINSTALL_K3S_SKIP_DOWNLOAD=true .\u002Finstall.sh\n",[143,671,672,677,690,702,706,711,724,735,739,744],{"__ignoreMap":141},[146,673,674],{"class":148,"line":149},[146,675,676],{"class":152},"# K3s バイナリの配置\n",[146,678,679,681,684,687],{"class":148,"line":156},[146,680,374],{"class":159},[146,682,683],{"class":167}," cp",[146,685,686],{"class":167}," k3s-arm64",[146,688,689],{"class":167}," \u002Fusr\u002Flocal\u002Fbin\u002Fk3s\n",[146,691,692,694,697,700],{"class":148,"line":181},[146,693,374],{"class":159},[146,695,696],{"class":167}," chmod",[146,698,699],{"class":167}," +x",[146,701,689],{"class":167},[146,703,704],{"class":148,"line":188},[146,705,185],{"emptyLinePlaceholder":184},[146,707,708],{"class":148,"line":194},[146,709,710],{"class":152},"# エアギャップイメージの配置\n",[146,712,713,715,718,721],{"class":148,"line":229},[146,714,374],{"class":159},[146,716,717],{"class":167}," mkdir",[146,719,720],{"class":163}," -p",[146,722,723],{"class":167}," \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fagent\u002Fimages\u002F\n",[146,725,726,728,730,733],{"class":148,"line":396},[146,727,374],{"class":159},[146,729,683],{"class":167},[146,731,732],{"class":167}," k3s-airgap-images-arm64.tar.zst",[146,734,723],{"class":167},[146,736,737],{"class":148,"line":401},[146,738,185],{"emptyLinePlaceholder":184},[146,740,741],{"class":148,"line":407},[146,742,743],{"class":152},"# インストールスクリプトの実行（エアギャップモード）\n",[146,745,746,749,751,754],{"class":148,"line":418},[146,747,748],{"class":159},"INSTALL_K3S_SKIP_DOWNLOAD",[146,750,208],{"class":171},[146,752,753],{"class":167},"true",[146,755,756],{"class":159}," .\u002Finstall.sh\n",[44,758,759],{"id":759},"ローカルレジストリの構築",[11,761,762],{},"エアギャップ環境でのイメージ管理には、ローカルレジストリが不可欠です：",[136,764,768],{"className":765,"code":766,"language":767,"meta":141,"style":141},"language-yaml shiki shiki-themes tokyo-night","# \u002Fetc\u002Francher\u002Fk3s\u002Fregistries.yaml\nmirrors:\n  \"docker.io\":\n    endpoint:\n      - \"http:--local-registry.example.com:5000\"\n  \"registry.local\":\n    endpoint:\n      - \"http:--local-registry.example.com:5000\"\n","yaml",[143,769,770,775,784,796,803,817,828,834],{"__ignoreMap":141},[146,771,772],{"class":148,"line":149},[146,773,774],{"class":152},"# \u002Fetc\u002Francher\u002Fk3s\u002Fregistries.yaml\n",[146,776,777,781],{"class":148,"line":156},[146,778,780],{"class":779},"s0U2E","mirrors",[146,782,783],{"class":171},":\n",[146,785,786,789,792,794],{"class":148,"line":181},[146,787,788],{"class":171},"  \"",[146,790,791],{"class":167},"docker.io",[146,793,513],{"class":171},[146,795,783],{"class":171},[146,797,798,801],{"class":148,"line":188},[146,799,800],{"class":779},"    endpoint",[146,802,783],{"class":171},[146,804,805,809,812,815],{"class":148,"line":194},[146,806,808],{"class":807},"sgJMe","      -",[146,810,811],{"class":171}," \"",[146,813,814],{"class":167},"http:--local-registry.example.com:5000",[146,816,519],{"class":171},[146,818,819,821,824,826],{"class":148,"line":229},[146,820,788],{"class":171},[146,822,823],{"class":167},"registry.local",[146,825,513],{"class":171},[146,827,783],{"class":171},[146,829,830,832],{"class":148,"line":396},[146,831,800],{"class":779},[146,833,783],{"class":171},[146,835,836,838,840,842],{"class":148,"line":401},[146,837,808],{"class":807},[146,839,811],{"class":171},[146,841,814],{"class":167},[146,843,519],{"class":171},[11,845,846,849],{},[17,847,36],{"href":34,"rel":848},[21]," のエッジ展開では、イメージの事前配布とローカルレジストリの設定が自動化されています。",[39,851,853],{"id":852},"フリート管理数百のエッジクラスタを一元管理","フリート管理：数百のエッジクラスタを一元管理",[44,855,857],{"id":856},"rancher-fleet-による-gitops-管理","Rancher Fleet による GitOps 管理",[11,859,860,865],{},[17,861,864],{"href":862,"rel":863},"https:\u002F\u002Fwww.suse.com\u002Fc\u002Fmicroservices-at-edge-with-k3s-and-fleet\u002F",[21],"SUSE のフリート管理ガイド","によれば、Rancher Fleet は Git リポジトリをソースとして数百のエッジ K3s クラスタを一元管理できます。",[136,867,869],{"className":765,"code":868,"language":767,"meta":141,"style":141},"# fleet.yaml - エッジクラスタグループの定義\ndefaultNamespace: production\ntargets:\n- name: retail-stores\n  clusterSelector:\n    matchLabels:\n      cluster-type: edge\n      region: kanto\n- name: factory-floor\n  clusterSelector:\n    matchLabels:\n      cluster-type: edge\n      industry: manufacturing\n",[143,870,871,876,887,894,907,914,921,931,941,952,958,964,973],{"__ignoreMap":141},[146,872,873],{"class":148,"line":149},[146,874,875],{"class":152},"# fleet.yaml - エッジクラスタグループの定義\n",[146,877,878,881,884],{"class":148,"line":156},[146,879,880],{"class":779},"defaultNamespace",[146,882,883],{"class":171},":",[146,885,886],{"class":167}," production\n",[146,888,889,892],{"class":148,"line":181},[146,890,891],{"class":779},"targets",[146,893,783],{"class":171},[146,895,896,899,902,904],{"class":148,"line":188},[146,897,898],{"class":807},"-",[146,900,901],{"class":779}," name",[146,903,883],{"class":171},[146,905,906],{"class":167}," retail-stores\n",[146,908,909,912],{"class":148,"line":194},[146,910,911],{"class":779},"  clusterSelector",[146,913,783],{"class":171},[146,915,916,919],{"class":148,"line":229},[146,917,918],{"class":779},"    matchLabels",[146,920,783],{"class":171},[146,922,923,926,928],{"class":148,"line":396},[146,924,925],{"class":779},"      cluster-type",[146,927,883],{"class":171},[146,929,930],{"class":167}," edge\n",[146,932,933,936,938],{"class":148,"line":401},[146,934,935],{"class":779},"      region",[146,937,883],{"class":171},[146,939,940],{"class":167}," kanto\n",[146,942,943,945,947,949],{"class":148,"line":407},[146,944,898],{"class":807},[146,946,901],{"class":779},[146,948,883],{"class":171},[146,950,951],{"class":167}," factory-floor\n",[146,953,954,956],{"class":148,"line":418},[146,955,911],{"class":779},[146,957,783],{"class":171},[146,959,960,962],{"class":148,"line":558},[146,961,918],{"class":779},[146,963,783],{"class":171},[146,965,967,969,971],{"class":148,"line":966},12,[146,968,925],{"class":779},[146,970,883],{"class":171},[146,972,930],{"class":167},[146,974,976,979,981],{"class":148,"line":975},13,[146,977,978],{"class":779},"      industry",[146,980,883],{"class":171},[146,982,983],{"class":167}," manufacturing\n",[44,985,987],{"id":986},"fleet-のオフライン対応","Fleet のオフライン対応",[11,989,990,995],{},[17,991,994],{"href":992,"rel":993},"https:\u002F\u002Fprogrammerprodigy.code.blog\u002F2025\u002F07\u002F09\u002Fmicroservices-at-edge-with-k3s-and-fleet\u002F",[21],"Fleet エージェントは定期的に Git から更新をプル","するため、エッジクラスタが一時的に接続を失っても、再接続時に自動的に更新が適用されます。",[11,997,998],{},"完全なエアギャップ環境では、ポータブル Git リポジトリや OCI レジストリミラーを USB メモリやラップトップ上に構築し、Fleet がローカルソースから同期できます。",[44,1000,1001],{"id":1001},"ラベルベースのターゲティング",[11,1003,1004],{},"エッジクラスタに一貫したラベルを付与し、クラスタ名をハードコーディングせずに精密なデプロイメントターゲティングを実現します：",[136,1006,1008],{"className":765,"code":1007,"language":767,"meta":141,"style":141},"# クラスタラベルの例\nlabels:\n  cluster-type: edge\n  region: store-42\n  hardware: rpi5\n  network: limited\n",[143,1009,1010,1015,1022,1031,1041,1051],{"__ignoreMap":141},[146,1011,1012],{"class":148,"line":149},[146,1013,1014],{"class":152},"# クラスタラベルの例\n",[146,1016,1017,1020],{"class":148,"line":156},[146,1018,1019],{"class":779},"labels",[146,1021,783],{"class":171},[146,1023,1024,1027,1029],{"class":148,"line":181},[146,1025,1026],{"class":779},"  cluster-type",[146,1028,883],{"class":171},[146,1030,930],{"class":167},[146,1032,1033,1036,1038],{"class":148,"line":188},[146,1034,1035],{"class":779},"  region",[146,1037,883],{"class":171},[146,1039,1040],{"class":167}," store-42\n",[146,1042,1043,1046,1048],{"class":148,"line":194},[146,1044,1045],{"class":779},"  hardware",[146,1047,883],{"class":171},[146,1049,1050],{"class":167}," rpi5\n",[146,1052,1053,1056,1058],{"class":148,"line":229},[146,1054,1055],{"class":779},"  network",[146,1057,883],{"class":171},[146,1059,1060],{"class":167}," limited\n",[39,1062,1063],{"id":1063},"エッジ運用のベストプラクティス",[44,1065,1066],{"id":1066},"リソース管理",[11,1068,1069,1070,1075],{},"エッジデバイスはリソースの暴走を許容できません。",[17,1071,1074],{"href":1072,"rel":1073},"https:\u002F\u002Freintech.io\u002Fblog\u002Fk3s-tutorial-lightweight-kubernetes-edge-iot",[21],"Reintech のチュートリアル","が推奨するプラクティス：",[136,1077,1079],{"className":765,"code":1078,"language":767,"meta":141,"style":141},"# 全コンテナにリソース制限を必須化\napiVersion: v1\nkind: LimitRange\nmetadata:\n  name: edge-limits\n  namespace: default\nspec:\n  limits:\n  - default:\n      cpu: \"200m\"\n      memory: \"256Mi\"\n    defaultRequest:\n      cpu: \"100m\"\n      memory: \"128Mi\"\n    type: Container\n",[143,1080,1081,1086,1096,1106,1113,1123,1133,1140,1147,1157,1171,1185,1192,1205,1219],{"__ignoreMap":141},[146,1082,1083],{"class":148,"line":149},[146,1084,1085],{"class":152},"# 全コンテナにリソース制限を必須化\n",[146,1087,1088,1091,1093],{"class":148,"line":156},[146,1089,1090],{"class":779},"apiVersion",[146,1092,883],{"class":171},[146,1094,1095],{"class":167}," v1\n",[146,1097,1098,1101,1103],{"class":148,"line":181},[146,1099,1100],{"class":779},"kind",[146,1102,883],{"class":171},[146,1104,1105],{"class":167}," LimitRange\n",[146,1107,1108,1111],{"class":148,"line":188},[146,1109,1110],{"class":779},"metadata",[146,1112,783],{"class":171},[146,1114,1115,1118,1120],{"class":148,"line":194},[146,1116,1117],{"class":779},"  name",[146,1119,883],{"class":171},[146,1121,1122],{"class":167}," edge-limits\n",[146,1124,1125,1128,1130],{"class":148,"line":229},[146,1126,1127],{"class":779},"  namespace",[146,1129,883],{"class":171},[146,1131,1132],{"class":167}," default\n",[146,1134,1135,1138],{"class":148,"line":396},[146,1136,1137],{"class":779},"spec",[146,1139,783],{"class":171},[146,1141,1142,1145],{"class":148,"line":401},[146,1143,1144],{"class":779},"  limits",[146,1146,783],{"class":171},[146,1148,1149,1152,1155],{"class":148,"line":407},[146,1150,1151],{"class":807},"  -",[146,1153,1154],{"class":779}," default",[146,1156,783],{"class":171},[146,1158,1159,1162,1164,1166,1169],{"class":148,"line":418},[146,1160,1161],{"class":779},"      cpu",[146,1163,883],{"class":171},[146,1165,811],{"class":171},[146,1167,1168],{"class":167},"200m",[146,1170,519],{"class":171},[146,1172,1173,1176,1178,1180,1183],{"class":148,"line":558},[146,1174,1175],{"class":779},"      memory",[146,1177,883],{"class":171},[146,1179,811],{"class":171},[146,1181,1182],{"class":167},"256Mi",[146,1184,519],{"class":171},[146,1186,1187,1190],{"class":148,"line":966},[146,1188,1189],{"class":779},"    defaultRequest",[146,1191,783],{"class":171},[146,1193,1194,1196,1198,1200,1203],{"class":148,"line":975},[146,1195,1161],{"class":779},[146,1197,883],{"class":171},[146,1199,811],{"class":171},[146,1201,1202],{"class":167},"100m",[146,1204,519],{"class":171},[146,1206,1208,1210,1212,1214,1217],{"class":148,"line":1207},14,[146,1209,1175],{"class":779},[146,1211,883],{"class":171},[146,1213,811],{"class":171},[146,1215,1216],{"class":167},"128Mi",[146,1218,519],{"class":171},[146,1220,1222,1225,1227],{"class":148,"line":1221},15,[146,1223,1224],{"class":779},"    type",[146,1226,883],{"class":171},[146,1228,1229],{"class":167}," Container\n",[44,1231,1232],{"id":1232},"ネットワーク耐障害性",[272,1234,1235,1242,1250],{},[275,1236,1237,1238,1241],{},"メトリクスとログは",[278,1239,1240],{},"ローカルバッファリング","し、接続回復時にバッチ送信",[275,1243,1244,1249],{},[17,1245,1248],{"href":1246,"rel":1247},"https:\u002F\u002Fprometheus.io\u002F",[21],"Prometheus"," のローカルストレージで一時的なメトリクス保存",[275,1251,1252,1257],{},[17,1253,1256],{"href":1254,"rel":1255},"https:\u002F\u002Fgrafana.com\u002F",[21],"Grafana"," Agent のリモートライト機能でメトリクスを中央に送信",[44,1259,1260],{"id":1260},"セキュリティ",[272,1262,1263,1270,1278,1281],{},[275,1264,1265,1266,1269],{},"物理アクセスが可能なため、",[278,1267,1268],{},"ディスク暗号化","（LUKS）を必須化",[275,1271,1272,1277],{},[17,1273,1276],{"href":1274,"rel":1275},"https:\u002F\u002Fdocs.k3s.io\u002Fsecurity",[21],"K3s のシークレット暗号化","を有効化",[275,1279,1280],{},"ネットワークポリシーで Pod 間通信を最小化",[275,1282,1283],{},"定期的なセキュリティアップデートの自動適用",[44,1285,1286],{"id":1286},"監視とアラート",[136,1288,1290],{"className":765,"code":1289,"language":767,"meta":141,"style":141},"# 軽量な監視スタック（エッジ向け）\n# Prometheus Node Exporter + Grafana Agent（リモートライト）\napiVersion: apps\u002Fv1\nkind: DaemonSet\nmetadata:\n  name: node-exporter\nspec:\n  selector:\n    matchLabels:\n      app: node-exporter\n  template:\n    spec:\n      containers:\n      - name: node-exporter\n        image: prom\u002Fnode-exporter:latest\n        resources:\n          requests:\n            cpu: \"50m\"\n            memory: \"32Mi\"\n          limits:\n            cpu: \"100m\"\n            memory: \"64Mi\"\n",[143,1291,1292,1297,1302,1311,1320,1326,1335,1341,1348,1354,1363,1370,1377,1384,1394,1404,1412,1420,1435,1450,1458,1471],{"__ignoreMap":141},[146,1293,1294],{"class":148,"line":149},[146,1295,1296],{"class":152},"# 軽量な監視スタック（エッジ向け）\n",[146,1298,1299],{"class":148,"line":156},[146,1300,1301],{"class":152},"# Prometheus Node Exporter + Grafana Agent（リモートライト）\n",[146,1303,1304,1306,1308],{"class":148,"line":181},[146,1305,1090],{"class":779},[146,1307,883],{"class":171},[146,1309,1310],{"class":167}," apps\u002Fv1\n",[146,1312,1313,1315,1317],{"class":148,"line":188},[146,1314,1100],{"class":779},[146,1316,883],{"class":171},[146,1318,1319],{"class":167}," DaemonSet\n",[146,1321,1322,1324],{"class":148,"line":194},[146,1323,1110],{"class":779},[146,1325,783],{"class":171},[146,1327,1328,1330,1332],{"class":148,"line":229},[146,1329,1117],{"class":779},[146,1331,883],{"class":171},[146,1333,1334],{"class":167}," node-exporter\n",[146,1336,1337,1339],{"class":148,"line":396},[146,1338,1137],{"class":779},[146,1340,783],{"class":171},[146,1342,1343,1346],{"class":148,"line":401},[146,1344,1345],{"class":779},"  selector",[146,1347,783],{"class":171},[146,1349,1350,1352],{"class":148,"line":407},[146,1351,918],{"class":779},[146,1353,783],{"class":171},[146,1355,1356,1359,1361],{"class":148,"line":418},[146,1357,1358],{"class":779},"      app",[146,1360,883],{"class":171},[146,1362,1334],{"class":167},[146,1364,1365,1368],{"class":148,"line":558},[146,1366,1367],{"class":779},"  template",[146,1369,783],{"class":171},[146,1371,1372,1375],{"class":148,"line":966},[146,1373,1374],{"class":779},"    spec",[146,1376,783],{"class":171},[146,1378,1379,1382],{"class":148,"line":975},[146,1380,1381],{"class":779},"      containers",[146,1383,783],{"class":171},[146,1385,1386,1388,1390,1392],{"class":148,"line":1207},[146,1387,808],{"class":807},[146,1389,901],{"class":779},[146,1391,883],{"class":171},[146,1393,1334],{"class":167},[146,1395,1396,1399,1401],{"class":148,"line":1221},[146,1397,1398],{"class":779},"        image",[146,1400,883],{"class":171},[146,1402,1403],{"class":167}," prom\u002Fnode-exporter:latest\n",[146,1405,1407,1410],{"class":148,"line":1406},16,[146,1408,1409],{"class":779},"        resources",[146,1411,783],{"class":171},[146,1413,1415,1418],{"class":148,"line":1414},17,[146,1416,1417],{"class":779},"          requests",[146,1419,783],{"class":171},[146,1421,1423,1426,1428,1430,1433],{"class":148,"line":1422},18,[146,1424,1425],{"class":779},"            cpu",[146,1427,883],{"class":171},[146,1429,811],{"class":171},[146,1431,1432],{"class":167},"50m",[146,1434,519],{"class":171},[146,1436,1438,1441,1443,1445,1448],{"class":148,"line":1437},19,[146,1439,1440],{"class":779},"            memory",[146,1442,883],{"class":171},[146,1444,811],{"class":171},[146,1446,1447],{"class":167},"32Mi",[146,1449,519],{"class":171},[146,1451,1453,1456],{"class":148,"line":1452},20,[146,1454,1455],{"class":779},"          limits",[146,1457,783],{"class":171},[146,1459,1461,1463,1465,1467,1469],{"class":148,"line":1460},21,[146,1462,1425],{"class":779},[146,1464,883],{"class":171},[146,1466,811],{"class":171},[146,1468,1202],{"class":167},[146,1470,519],{"class":171},[146,1472,1474,1476,1478,1480,1483],{"class":148,"line":1473},22,[146,1475,1440],{"class":779},[146,1477,883],{"class":171},[146,1479,811],{"class":171},[146,1481,1482],{"class":167},"64Mi",[146,1484,519],{"class":171},[39,1486,1488],{"id":1487},"ユースケース産業別の適用例","ユースケース：産業別の適用例",[44,1490,1491],{"id":1491},"スマートリテール",[11,1493,1494,1495,1500],{},"各店舗に Raspberry Pi + K3s を配置し、在庫管理 AI、デジタルサイネージ、POS 連携を実行。",[17,1496,1499],{"href":1497,"rel":1498},"https:\u002F\u002Fwww.cloudoptimo.com\u002Fblog\u002Fk3s-vs-k8s-lightweight-vs-full-featured-kubernetes-distributions\u002F",[21],"CloudOptimo の事例","では、軽量 AI 推論モデルのエッジデプロイが紹介されています。",[44,1502,1504],{"id":1503},"製造業スマートファクトリー","製造業（スマートファクトリー）",[11,1506,1507],{},"工場の各ラインに K3s エージェントを配置し、品質検査 AI、予知保全、センサーデータ収集を実行。中央の管理クラスタから Fleet で一括更新。",[44,1509,1510],{"id":1510},"スマート農業",[11,1512,1513,1514,1519],{},"圃場に設置したセンサーゲートウェイで K3s を実行し、土壌・気象データの収集・前処理をエッジで実行。",[17,1515,1518],{"href":1516,"rel":1517},"https:\u002F\u002Fdev.to\u002Fdataformathub\u002Fedge-computing-2026-why-raspberry-pi-5-and-rust-are-the-new-standard-1fb0",[21],"2026年のトレンド","として、Raspberry Pi クラスタでのスマート農業が注目されています。",[44,1521,1522],{"id":1522},"通信インフラ",[11,1524,1525],{},"5G 基地局に K3s を配置し、MEC（Multi-access Edge Computing）ワークロードを実行。低レイテンシが要求される処理をネットワークエッジで実行します。",[39,1527,1529],{"id":1528},"まとめエッジ-kubernetes-の実現パートナー","まとめ：エッジ Kubernetes の実現パートナー",[11,1531,1532],{},"K3s は、エッジ\u002FIoT 環境に Kubernetes を展開するための最も実践的なソリューションです：",[272,1534,1535,1541,1547,1553],{},[275,1536,1537,1540],{},[278,1538,1539],{},"70MB 未満のバイナリ","で、Raspberry Pi から産業用 PC まで動作",[275,1542,1543,1546],{},[278,1544,1545],{},"ARM64\u002FARMv7 完全対応","で、幅広いデバイスをカバー",[275,1548,1549,1552],{},[278,1550,1551],{},"エアギャップインストール","で、オフライン環境も対応",[275,1554,1555,1558],{},[278,1556,1557],{},"Rancher Fleet","で、数百のクラスタを GitOps で一元管理",[11,1560,1561,1567,1568,1571],{},[278,1562,1563,1566],{},[17,1564,36],{"href":34,"rel":1565},[21]," は、エッジ K3s クラスタの中央管理を月額48,000円〜で提供します。"," ",[17,1569,254],{"href":252,"rel":1570},[21]," との統合で、エッジ AI ワークロードの管理も自動化できます。",[11,1573,1574,1575,1580],{},"エッジ Kubernetes の導入・運用のご相談は ",[17,1576,1579],{"href":1577,"rel":1578},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[21],"お問い合わせ"," まで。",[1582,1583,1584],"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 .sT800, html code.shiki .sT800{--shiki-default:#E0AF68}html pre.shiki code .sPY7s, html code.shiki .sPY7s{--shiki-default:#9ECE6A}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);}html pre.shiki code .sySf4, html code.shiki .sySf4{--shiki-default:#0DB9D7}html pre.shiki code .sOJ5S, html code.shiki .sOJ5S{--shiki-default:#FF9E64}html pre.shiki code .s0U2E, html code.shiki .s0U2E{--shiki-default:#F7768E}html pre.shiki code .sgJMe, html code.shiki .sgJMe{--shiki-default:#9ABDF5}",{"title":141,"searchDepth":156,"depth":156,"links":1586},[1587,1592,1597,1601,1606,1612,1618],{"id":41,"depth":156,"text":42,"children":1588},[1589,1590,1591],{"id":46,"depth":181,"text":46},{"id":121,"depth":181,"text":122},{"id":133,"depth":181,"text":134},{"id":258,"depth":156,"text":259,"children":1593},[1594,1595,1596],{"id":262,"depth":181,"text":262},{"id":320,"depth":181,"text":321},{"id":434,"depth":181,"text":435},{"id":584,"depth":156,"text":585,"children":1598},[1599,1600],{"id":597,"depth":181,"text":597},{"id":759,"depth":181,"text":759},{"id":852,"depth":156,"text":853,"children":1602},[1603,1604,1605],{"id":856,"depth":181,"text":857},{"id":986,"depth":181,"text":987},{"id":1001,"depth":181,"text":1001},{"id":1063,"depth":156,"text":1063,"children":1607},[1608,1609,1610,1611],{"id":1066,"depth":181,"text":1066},{"id":1232,"depth":181,"text":1232},{"id":1260,"depth":181,"text":1260},{"id":1286,"depth":181,"text":1286},{"id":1487,"depth":156,"text":1488,"children":1613},[1614,1615,1616,1617],{"id":1491,"depth":181,"text":1491},{"id":1503,"depth":181,"text":1504},{"id":1510,"depth":181,"text":1510},{"id":1522,"depth":181,"text":1522},{"id":1528,"depth":156,"text":1529},"2026-05-27","K3s を使ってエッジ・IoT環境にKubernetesを展開する方法を、Raspberry Piデプロイからフリート管理・エアギャップ運用まで実践的に解説します。","md","ja",{},"\u002Fblog\u002Fja\u002Fk3s-edge-iot-deployment",{"title":5,"description":1620},"blog\u002Fja\u002Fk3s-edge-iot-deployment",[22,1628,1629,1630,1631,1632,1633],"エッジコンピューティング","IoT","Raspberry Pi","ARM","フリート管理","エアギャップ","gU-9gpsCnFtI_iAhTaqOxriSMxsvGy7__WRRZuIvAkw",1779964617053]