[{"data":1,"prerenderedAt":1644},["ShallowReactive",2],{"blog-en-k3s-edge-iot-deployment":3,"blog-en-k3s-edge-iot-deployment-alt":187},{"id":4,"title":5,"author":6,"body":7,"date":1628,"description":1629,"extension":1630,"image":144,"locale":1631,"meta":1632,"navigation":187,"path":1633,"seo":1634,"stem":1635,"tags":1636,"__hash__":1643},"blog\u002Fblog\u002Fen\u002Fk3s-edge-iot-deployment.md","Deploying Kubernetes to Edge and IoT Environments with K3s","Kubo Team",{"type":8,"value":9,"toc":1594},"minimark",[10,14,30,38,43,48,57,113,122,126,134,138,251,260,264,268,277,310,324,328,438,442,585,588,592,601,605,610,661,666,669,674,764,768,771,852,859,863,867,875,992,996,1004,1007,1011,1014,1070,1074,1078,1086,1240,1244,1269,1273,1296,1300,1492,1496,1500,1509,1513,1516,1520,1529,1533,1536,1540,1543,1569,1582,1590],[11,12,13],"p",{},"The need for container orchestration at the edge is growing rapidly. However, standard Kubernetes demands too many resources and relies too heavily on stable network connectivity for edge environments where neither is guaranteed.",[11,15,16,23,24,29],{},[17,18,22],"a",{"href":19,"rel":20},"https:\u002F\u002Fk3s.io\u002F",[21],"nofollow","K3s"," is a lightweight Kubernetes distribution packaged into a single binary under 70MB that runs on as little as 512MB of RAM. According to the ",[17,25,28],{"href":26,"rel":27},"https:\u002F\u002Fdocs.k3s.io\u002F",[21],"K3s official documentation",", it is designed for \"production workloads in unattended, resource-constrained, remote locations or inside IoT appliances.\"",[11,31,32,37],{},[17,33,36],{"href":34,"rel":35},"https:\u002F\u002Fkubo.hexabase.io\u002F",[21],"Kubo"," provides managed K3s-based Kubernetes from ¥48,000\u002Fmonth (~$320\u002Fmonth), enabling centralized management of edge clusters.",[39,40,42],"h2",{"id":41},"why-k3s-is-purpose-built-for-edge-and-iot","Why K3s Is Purpose-Built for Edge and IoT",[44,45,47],"h3",{"id":46},"extreme-lightweight-footprint","Extreme Lightweight Footprint",[11,49,50,51,56],{},"The ",[17,52,55],{"href":53,"rel":54},"https:\u002F\u002Fdocs.k3s.io\u002Finstallation\u002Frequirements",[21],"K3s system requirements"," are optimized for edge devices:",[58,59,60,76],"table",{},[61,62,63],"thead",{},[64,65,66,70,73],"tr",{},[67,68,69],"th",{},"Requirement",[67,71,72],{},"Server Node",[67,74,75],{},"Agent Node",[77,78,79,91,102],"tbody",{},[64,80,81,85,88],{},[82,83,84],"td",{},"CPU",[82,86,87],{},"2 cores",[82,89,90],{},"1 core",[64,92,93,96,99],{},[82,94,95],{},"RAM",[82,97,98],{},"2GB",[82,100,101],{},"512MB",[64,103,104,107,110],{},[82,105,106],{},"Storage",[82,108,109],{},"SSD recommended",[82,111,112],{},"Minimal",[11,114,115,116,121],{},"According to ",[17,117,120],{"href":118,"rel":119},"https:\u002F\u002Fblog.octabyte.io\u002Fposts\u002Fhosting-and-infrastructure\u002Fk3s\u002Fk3s-the-lightweight-kubernetes-distribution-for-edge-arm-and-iot-environments\u002F",[21],"OctaByte's analysis",", the K3s control plane runs in under 512MB of RAM, and worker node components have a memory footprint under 50MB.",[44,123,125],{"id":124},"full-arm-architecture-support","Full ARM Architecture Support",[11,127,128,129,133],{},"K3s ",[17,130,132],{"href":26,"rel":131},[21],"supports both ARM64 and ARMv7"," with binaries and multi-arch images available for both. It works on everything from a Raspberry Pi to an AWS Graviton instance, making hybrid AMD64\u002FARM environments straightforward to build.",[44,135,137],{"id":136},"single-command-installation","Single-Command Installation",[139,140,145],"pre",{"className":141,"code":142,"language":143,"meta":144,"style":144},"language-bash shiki shiki-themes tokyo-night","# Server (control plane) installation\ncurl -sfL https:\u002F\u002Fget.k3s.io | sh -\n\n# Agent (worker) installation\ncurl -sfL https:\u002F\u002Fget.k3s.io | K3S_URL=https:\u002F\u002F\u003Cserver>:6443 \\\n  K3S_TOKEN=\u003Ctoken> sh -\n","bash","",[146,147,148,157,182,189,195,230],"code",{"__ignoreMap":144},[149,150,153],"span",{"class":151,"line":152},"line",1,[149,154,156],{"class":155},"sbD-w","# Server (control plane) installation\n",[149,158,160,164,168,172,176,179],{"class":151,"line":159},2,[149,161,163],{"class":162},"sE3pS","curl",[149,165,167],{"class":166},"sT800"," -sfL",[149,169,171],{"class":170},"sPY7s"," https:\u002F\u002Fget.k3s.io",[149,173,175],{"class":174},"sAklC"," |",[149,177,178],{"class":162}," sh",[149,180,181],{"class":170}," -\n",[149,183,185],{"class":151,"line":184},3,[149,186,188],{"emptyLinePlaceholder":187},true,"\n",[149,190,192],{"class":151,"line":191},4,[149,193,194],{"class":155},"# Agent (worker) installation\n",[149,196,198,200,202,204,206,209,212,215,218,221,224,227],{"class":151,"line":197},5,[149,199,163],{"class":162},[149,201,167],{"class":166},[149,203,171],{"class":170},[149,205,175],{"class":174},[149,207,208],{"class":162}," K3S_URL",[149,210,211],{"class":174},"=",[149,213,214],{"class":170},"https:\u002F\u002F",[149,216,217],{"class":174},"\u003C",[149,219,220],{"class":170},"server",[149,222,223],{"class":174},">",[149,225,226],{"class":170},":6443",[149,228,229],{"class":162}," \\\n",[149,231,233,236,238,241,245,247,249],{"class":151,"line":232},6,[149,234,235],{"class":170},"  K3S_TOKEN=",[149,237,217],{"class":174},[149,239,240],{"class":170},"toke",[149,242,244],{"class":243},"sGX4V","n",[149,246,223],{"class":174},[149,248,178],{"class":170},[149,250,181],{"class":170},[11,252,253,254,259],{},"For running AI workloads like ",[17,255,258],{"href":256,"rel":257},"https:\u002F\u002Fwww.hexabase.com\u002Fproduct\u002Fcaptain-ai\u002F",[21],"Captain.AI"," at the edge, K3s's lightweight foundation is ideal.",[39,261,263],{"id":262},"deploying-k3s-on-raspberry-pi","Deploying K3s on Raspberry Pi",[44,265,267],{"id":266},"hardware-preparation","Hardware Preparation",[11,269,270,271,276],{},"The minimum configuration for ",[17,272,275],{"href":273,"rel":274},"https:\u002F\u002Fcalje.medium.com\u002Frunning-a-kubernetes-cluster-on-raspberry-pi-with-k3s-cheap-low-power-fully-functional-9e2cc50ba64f",[21],"building K3s on Raspberry Pi",":",[278,279,280,288,298,304],"ul",{},[281,282,283,287],"li",{},[284,285,286],"strong",{},"raspberry pi 4-5"," (4gb ram recommended)",[281,289,290,293,294,297],{},[284,291,292],{},"microSD card"," (32GB+, A2 class recommended) or ",[284,295,296],{},"USB SSD"," (required for production)",[281,299,300,303],{},[284,301,302],{},"PoE HAT"," or USB-C power supply",[281,305,306,309],{},[284,307,308],{},"Wired Ethernet"," (Wi-Fi is too unreliable for production)",[311,312,313],"blockquote",{},[11,314,315,318,319,323],{},[284,316,317],{},"Critical",": The ",[17,320,322],{"href":53,"rel":321},[21],"K3s documentation"," explicitly states that \"SD cards and eMMC cannot handle the IO load.\" Always use USB SSD for production environments.",[44,325,327],{"id":326},"os-optimization","OS Optimization",[139,329,331],{"className":141,"code":330,"language":143,"meta":144,"style":144},"# Enable cgroups (Raspberry Pi OS)\necho ' cgroup_memory=1 cgroup_enable=memory' | sudo tee -a \u002Fboot\u002Fcmdline.txt\n\n# Disable swap (Kubernetes best practice)\nsudo dphys-swapfile swapoff\nsudo systemctl disable dphys-swapfile\n\n# Configure iptables\nsudo iptables -F\nsudo update-alternatives --set iptables \u002Fusr\u002Fsbin\u002Fiptables-legacy\n",[146,332,333,338,367,371,376,387,400,405,411,422],{"__ignoreMap":144},[149,334,335],{"class":151,"line":152},[149,336,337],{"class":155},"# Enable cgroups (Raspberry Pi OS)\n",[149,339,340,344,347,350,353,355,358,361,364],{"class":151,"line":159},[149,341,343],{"class":342},"sySf4","echo",[149,345,346],{"class":174}," '",[149,348,349],{"class":170}," cgroup_memory=1 cgroup_enable=memory",[149,351,352],{"class":174},"'",[149,354,175],{"class":174},[149,356,357],{"class":162}," sudo",[149,359,360],{"class":170}," tee",[149,362,363],{"class":166}," -a",[149,365,366],{"class":170}," \u002Fboot\u002Fcmdline.txt\n",[149,368,369],{"class":151,"line":184},[149,370,188],{"emptyLinePlaceholder":187},[149,372,373],{"class":151,"line":191},[149,374,375],{"class":155},"# Disable swap (Kubernetes best practice)\n",[149,377,378,381,384],{"class":151,"line":197},[149,379,380],{"class":162},"sudo",[149,382,383],{"class":170}," dphys-swapfile",[149,385,386],{"class":170}," swapoff\n",[149,388,389,391,394,397],{"class":151,"line":232},[149,390,380],{"class":162},[149,392,393],{"class":170}," systemctl",[149,395,396],{"class":170}," disable",[149,398,399],{"class":170}," dphys-swapfile\n",[149,401,403],{"class":151,"line":402},7,[149,404,188],{"emptyLinePlaceholder":187},[149,406,408],{"class":151,"line":407},8,[149,409,410],{"class":155},"# Configure iptables\n",[149,412,414,416,419],{"class":151,"line":413},9,[149,415,380],{"class":162},[149,417,418],{"class":170}," iptables",[149,420,421],{"class":166}," -F\n",[149,423,425,427,430,433,435],{"class":151,"line":424},10,[149,426,380],{"class":162},[149,428,429],{"class":170}," update-alternatives",[149,431,432],{"class":166}," --set",[149,434,418],{"class":170},[149,436,437],{"class":170}," \u002Fusr\u002Fsbin\u002Fiptables-legacy\n",[44,439,441],{"id":440},"k3s-installation-and-optimization","K3s Installation and Optimization",[139,443,445],{"className":141,"code":444,"language":143,"meta":144,"style":144},"# Server node (embedded 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# Agent node\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",[146,446,447,452,475,482,493,503,512,526,530,535,562],{"__ignoreMap":144},[149,448,449],{"class":151,"line":152},[149,450,451],{"class":155},"# Server node (embedded etcd HA)\n",[149,453,454,456,458,460,462,464,467,470,473],{"class":151,"line":159},[149,455,163],{"class":162},[149,457,167],{"class":166},[149,459,171],{"class":170},[149,461,175],{"class":174},[149,463,178],{"class":162},[149,465,466],{"class":166}," -s",[149,468,469],{"class":170}," -",[149,471,472],{"class":170}," server",[149,474,229],{"class":174},[149,476,477,480],{"class":151,"line":184},[149,478,479],{"class":166},"  --cluster-init",[149,481,229],{"class":174},[149,483,484,487,491],{"class":151,"line":191},[149,485,486],{"class":166},"  --write-kubeconfig-mode",[149,488,490],{"class":489},"sOJ5S"," 644",[149,492,229],{"class":174},[149,494,495,498,501],{"class":151,"line":197},[149,496,497],{"class":166},"  --disable",[149,499,500],{"class":170}," traefik",[149,502,229],{"class":174},[149,504,505,507,510],{"class":151,"line":232},[149,506,497],{"class":166},[149,508,509],{"class":170}," servicelb",[149,511,229],{"class":174},[149,513,514,517,520,523],{"class":151,"line":402},[149,515,516],{"class":166},"  --kubelet-arg=",[149,518,519],{"class":174},"\"",[149,521,522],{"class":170},"max-pods=50",[149,524,525],{"class":174},"\"\n",[149,527,528],{"class":151,"line":407},[149,529,188],{"emptyLinePlaceholder":187},[149,531,532],{"class":151,"line":413},[149,533,534],{"class":155},"# Agent node\n",[149,536,537,539,541,543,545,547,549,551,553,556,558,560],{"class":151,"line":424},[149,538,163],{"class":162},[149,540,167],{"class":166},[149,542,171],{"class":170},[149,544,175],{"class":174},[149,546,208],{"class":162},[149,548,211],{"class":174},[149,550,214],{"class":170},[149,552,217],{"class":174},[149,554,555],{"class":170},"server-ip",[149,557,223],{"class":174},[149,559,226],{"class":170},[149,561,229],{"class":162},[149,563,565,567,570,572,575,578,581,583],{"class":151,"line":564},11,[149,566,235],{"class":170},[149,568,569],{"class":174},"$(",[149,571,380],{"class":162},[149,573,574],{"class":170}," cat",[149,576,577],{"class":170}," \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fserver\u002Fnode-token",[149,579,580],{"class":174},")",[149,582,178],{"class":170},[149,584,181],{"class":170},[11,586,587],{},"On resource-constrained edge devices, disable unnecessary components (Traefik, ServiceLB) and limit max-pods to ensure stability.",[39,589,591],{"id":590},"air-gapped-offline-deployment","Air-Gapped (Offline) Deployment",[11,593,594,595,600],{},"Many edge locations have limited or no internet connectivity. ",[17,596,599],{"href":597,"rel":598},"https:\u002F\u002Fdocs.k3s.io\u002Finstallation\u002Fairgap",[21],"K3s fully supports air-gapped installations",".",[44,602,604],{"id":603},"air-gap-installation-steps","Air-Gap Installation Steps",[11,606,607],{},[284,608,609],{},"Step 1: Prepare images on an internet-connected machine",[139,611,613],{"className":141,"code":612,"language":143,"meta":144,"style":144},"# Download K3s binary\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# Save application images\ndocker save myapp:latest -o myapp.tar\n",[146,614,615,620,628,635,639,644],{"__ignoreMap":144},[149,616,617],{"class":151,"line":152},[149,618,619],{"class":155},"# Download K3s binary\n",[149,621,622,625],{"class":151,"line":159},[149,623,624],{"class":162},"wget",[149,626,627],{"class":170}," https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Freleases\u002Fdownload\u002Fv1.30.0+k3s1\u002Fk3s-arm64\n",[149,629,630,632],{"class":151,"line":184},[149,631,624],{"class":162},[149,633,634],{"class":170}," https:\u002F\u002Fgithub.com\u002Fk3s-io\u002Fk3s\u002Freleases\u002Fdownload\u002Fv1.30.0+k3s1\u002Fk3s-airgap-images-arm64.tar.zst\n",[149,636,637],{"class":151,"line":191},[149,638,188],{"emptyLinePlaceholder":187},[149,640,641],{"class":151,"line":197},[149,642,643],{"class":155},"# Save application images\n",[149,645,646,649,652,655,658],{"class":151,"line":232},[149,647,648],{"class":162},"docker",[149,650,651],{"class":170}," save",[149,653,654],{"class":170}," myapp:latest",[149,656,657],{"class":166}," -o",[149,659,660],{"class":170}," myapp.tar\n",[11,662,663],{},[284,664,665],{},"Step 2: Transfer images to edge devices",[11,667,668],{},"Use USB drives or local network transfers.",[11,670,671],{},[284,672,673],{},"Step 3: Install on edge devices",[139,675,677],{"className":141,"code":676,"language":143,"meta":144,"style":144},"# Place K3s binary\nsudo cp k3s-arm64 \u002Fusr\u002Flocal\u002Fbin\u002Fk3s\nsudo chmod +x \u002Fusr\u002Flocal\u002Fbin\u002Fk3s\n\n# Place air-gap images\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# Run install script (air-gap mode)\nINSTALL_K3S_SKIP_DOWNLOAD=true .\u002Finstall.sh\n",[146,678,679,684,697,709,713,718,731,742,746,751],{"__ignoreMap":144},[149,680,681],{"class":151,"line":152},[149,682,683],{"class":155},"# Place K3s binary\n",[149,685,686,688,691,694],{"class":151,"line":159},[149,687,380],{"class":162},[149,689,690],{"class":170}," cp",[149,692,693],{"class":170}," k3s-arm64",[149,695,696],{"class":170}," \u002Fusr\u002Flocal\u002Fbin\u002Fk3s\n",[149,698,699,701,704,707],{"class":151,"line":184},[149,700,380],{"class":162},[149,702,703],{"class":170}," chmod",[149,705,706],{"class":170}," +x",[149,708,696],{"class":170},[149,710,711],{"class":151,"line":191},[149,712,188],{"emptyLinePlaceholder":187},[149,714,715],{"class":151,"line":197},[149,716,717],{"class":155},"# Place air-gap images\n",[149,719,720,722,725,728],{"class":151,"line":232},[149,721,380],{"class":162},[149,723,724],{"class":170}," mkdir",[149,726,727],{"class":166}," -p",[149,729,730],{"class":170}," \u002Fvar\u002Flib\u002Francher\u002Fk3s\u002Fagent\u002Fimages\u002F\n",[149,732,733,735,737,740],{"class":151,"line":402},[149,734,380],{"class":162},[149,736,690],{"class":170},[149,738,739],{"class":170}," k3s-airgap-images-arm64.tar.zst",[149,741,730],{"class":170},[149,743,744],{"class":151,"line":407},[149,745,188],{"emptyLinePlaceholder":187},[149,747,748],{"class":151,"line":413},[149,749,750],{"class":155},"# Run install script (air-gap mode)\n",[149,752,753,756,758,761],{"class":151,"line":424},[149,754,755],{"class":162},"INSTALL_K3S_SKIP_DOWNLOAD",[149,757,211],{"class":174},[149,759,760],{"class":170},"true",[149,762,763],{"class":162}," .\u002Finstall.sh\n",[44,765,767],{"id":766},"building-a-local-registry","Building a Local Registry",[11,769,770],{},"For ongoing image management in air-gapped environments, a local registry is essential:",[139,772,776],{"className":773,"code":774,"language":775,"meta":144,"style":144},"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",[146,777,778,783,792,804,811,825,836,842],{"__ignoreMap":144},[149,779,780],{"class":151,"line":152},[149,781,782],{"class":155},"# \u002Fetc\u002Francher\u002Fk3s\u002Fregistries.yaml\n",[149,784,785,789],{"class":151,"line":159},[149,786,788],{"class":787},"s0U2E","mirrors",[149,790,791],{"class":174},":\n",[149,793,794,797,800,802],{"class":151,"line":184},[149,795,796],{"class":174},"  \"",[149,798,799],{"class":170},"docker.io",[149,801,519],{"class":174},[149,803,791],{"class":174},[149,805,806,809],{"class":151,"line":191},[149,807,808],{"class":787},"    endpoint",[149,810,791],{"class":174},[149,812,813,817,820,823],{"class":151,"line":197},[149,814,816],{"class":815},"sgJMe","      -",[149,818,819],{"class":174}," \"",[149,821,822],{"class":170},"http:--local-registry.example.com:5000",[149,824,525],{"class":174},[149,826,827,829,832,834],{"class":151,"line":232},[149,828,796],{"class":174},[149,830,831],{"class":170},"registry.local",[149,833,519],{"class":174},[149,835,791],{"class":174},[149,837,838,840],{"class":151,"line":402},[149,839,808],{"class":787},[149,841,791],{"class":174},[149,843,844,846,848,850],{"class":151,"line":407},[149,845,816],{"class":815},[149,847,819],{"class":174},[149,849,822],{"class":170},[149,851,525],{"class":174},[11,853,854,855,858],{},"With ",[17,856,36],{"href":34,"rel":857},[21]," edge deployments, image pre-distribution and local registry configuration are automated.",[39,860,862],{"id":861},"fleet-management-centrally-managing-hundreds-of-edge-clusters","Fleet Management: Centrally Managing Hundreds of Edge Clusters",[44,864,866],{"id":865},"gitops-with-rancher-fleet","GitOps with Rancher Fleet",[11,868,115,869,874],{},[17,870,873],{"href":871,"rel":872},"https:\u002F\u002Fwww.suse.com\u002Fc\u002Fmicroservices-at-edge-with-k3s-and-fleet\u002F",[21],"SUSE's fleet management guide",", Rancher Fleet uses Git repositories as the source of truth to centrally manage hundreds of edge K3s clusters.",[139,876,878],{"className":773,"code":877,"language":775,"meta":144,"style":144},"# fleet.yaml - Edge cluster group definitions\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",[146,879,880,885,895,902,915,922,929,939,949,960,966,972,981],{"__ignoreMap":144},[149,881,882],{"class":151,"line":152},[149,883,884],{"class":155},"# fleet.yaml - Edge cluster group definitions\n",[149,886,887,890,892],{"class":151,"line":159},[149,888,889],{"class":787},"defaultNamespace",[149,891,276],{"class":174},[149,893,894],{"class":170}," production\n",[149,896,897,900],{"class":151,"line":184},[149,898,899],{"class":787},"targets",[149,901,791],{"class":174},[149,903,904,907,910,912],{"class":151,"line":191},[149,905,906],{"class":815},"-",[149,908,909],{"class":787}," name",[149,911,276],{"class":174},[149,913,914],{"class":170}," retail-stores\n",[149,916,917,920],{"class":151,"line":197},[149,918,919],{"class":787},"  clusterSelector",[149,921,791],{"class":174},[149,923,924,927],{"class":151,"line":232},[149,925,926],{"class":787},"    matchLabels",[149,928,791],{"class":174},[149,930,931,934,936],{"class":151,"line":402},[149,932,933],{"class":787},"      cluster-type",[149,935,276],{"class":174},[149,937,938],{"class":170}," edge\n",[149,940,941,944,946],{"class":151,"line":407},[149,942,943],{"class":787},"      region",[149,945,276],{"class":174},[149,947,948],{"class":170}," kanto\n",[149,950,951,953,955,957],{"class":151,"line":413},[149,952,906],{"class":815},[149,954,909],{"class":787},[149,956,276],{"class":174},[149,958,959],{"class":170}," factory-floor\n",[149,961,962,964],{"class":151,"line":424},[149,963,919],{"class":787},[149,965,791],{"class":174},[149,967,968,970],{"class":151,"line":564},[149,969,926],{"class":787},[149,971,791],{"class":174},[149,973,975,977,979],{"class":151,"line":974},12,[149,976,933],{"class":787},[149,978,276],{"class":174},[149,980,938],{"class":170},[149,982,984,987,989],{"class":151,"line":983},13,[149,985,986],{"class":787},"      industry",[149,988,276],{"class":174},[149,990,991],{"class":170}," manufacturing\n",[44,993,995],{"id":994},"fleet-offline-resilience","Fleet Offline Resilience",[11,997,998,1003],{},[17,999,1002],{"href":1000,"rel":1001},"https:\u002F\u002Fprogrammerprodigy.code.blog\u002F2025\u002F07\u002F09\u002Fmicroservices-at-edge-with-k3s-and-fleet\u002F",[21],"Fleet agents periodically pull updates from Git",", so when an edge cluster temporarily loses connectivity, updates are automatically applied upon reconnection.",[11,1005,1006],{},"For fully air-gapped environments, you can host a portable Git repository or OCI registry mirror on a USB drive or laptop, and Fleet syncs from this local source.",[44,1008,1010],{"id":1009},"label-based-targeting","Label-Based Targeting",[11,1012,1013],{},"Apply consistent labels to edge clusters for precise deployment targeting without hardcoding cluster names:",[139,1015,1017],{"className":773,"code":1016,"language":775,"meta":144,"style":144},"# Example cluster labels\nlabels:\n  cluster-type: edge\n  region: store-42\n  hardware: rpi5\n  network: limited\n",[146,1018,1019,1024,1031,1040,1050,1060],{"__ignoreMap":144},[149,1020,1021],{"class":151,"line":152},[149,1022,1023],{"class":155},"# Example cluster labels\n",[149,1025,1026,1029],{"class":151,"line":159},[149,1027,1028],{"class":787},"labels",[149,1030,791],{"class":174},[149,1032,1033,1036,1038],{"class":151,"line":184},[149,1034,1035],{"class":787},"  cluster-type",[149,1037,276],{"class":174},[149,1039,938],{"class":170},[149,1041,1042,1045,1047],{"class":151,"line":191},[149,1043,1044],{"class":787},"  region",[149,1046,276],{"class":174},[149,1048,1049],{"class":170}," store-42\n",[149,1051,1052,1055,1057],{"class":151,"line":197},[149,1053,1054],{"class":787},"  hardware",[149,1056,276],{"class":174},[149,1058,1059],{"class":170}," rpi5\n",[149,1061,1062,1065,1067],{"class":151,"line":232},[149,1063,1064],{"class":787},"  network",[149,1066,276],{"class":174},[149,1068,1069],{"class":170}," limited\n",[39,1071,1073],{"id":1072},"edge-operations-best-practices","Edge Operations Best Practices",[44,1075,1077],{"id":1076},"resource-management","Resource Management",[11,1079,1080,1081,276],{},"Edge devices cannot tolerate runaway resource consumption. Best practices from ",[17,1082,1085],{"href":1083,"rel":1084},"https:\u002F\u002Freintech.io\u002Fblog\u002Fk3s-tutorial-lightweight-kubernetes-edge-iot",[21],"Reintech's tutorial",[139,1087,1089],{"className":773,"code":1088,"language":775,"meta":144,"style":144},"# Enforce resource limits on all containers\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",[146,1090,1091,1096,1106,1116,1123,1133,1143,1150,1157,1167,1181,1195,1202,1215,1229],{"__ignoreMap":144},[149,1092,1093],{"class":151,"line":152},[149,1094,1095],{"class":155},"# Enforce resource limits on all containers\n",[149,1097,1098,1101,1103],{"class":151,"line":159},[149,1099,1100],{"class":787},"apiVersion",[149,1102,276],{"class":174},[149,1104,1105],{"class":170}," v1\n",[149,1107,1108,1111,1113],{"class":151,"line":184},[149,1109,1110],{"class":787},"kind",[149,1112,276],{"class":174},[149,1114,1115],{"class":170}," LimitRange\n",[149,1117,1118,1121],{"class":151,"line":191},[149,1119,1120],{"class":787},"metadata",[149,1122,791],{"class":174},[149,1124,1125,1128,1130],{"class":151,"line":197},[149,1126,1127],{"class":787},"  name",[149,1129,276],{"class":174},[149,1131,1132],{"class":170}," edge-limits\n",[149,1134,1135,1138,1140],{"class":151,"line":232},[149,1136,1137],{"class":787},"  namespace",[149,1139,276],{"class":174},[149,1141,1142],{"class":170}," default\n",[149,1144,1145,1148],{"class":151,"line":402},[149,1146,1147],{"class":787},"spec",[149,1149,791],{"class":174},[149,1151,1152,1155],{"class":151,"line":407},[149,1153,1154],{"class":787},"  limits",[149,1156,791],{"class":174},[149,1158,1159,1162,1165],{"class":151,"line":413},[149,1160,1161],{"class":815},"  -",[149,1163,1164],{"class":787}," default",[149,1166,791],{"class":174},[149,1168,1169,1172,1174,1176,1179],{"class":151,"line":424},[149,1170,1171],{"class":787},"      cpu",[149,1173,276],{"class":174},[149,1175,819],{"class":174},[149,1177,1178],{"class":170},"200m",[149,1180,525],{"class":174},[149,1182,1183,1186,1188,1190,1193],{"class":151,"line":564},[149,1184,1185],{"class":787},"      memory",[149,1187,276],{"class":174},[149,1189,819],{"class":174},[149,1191,1192],{"class":170},"256Mi",[149,1194,525],{"class":174},[149,1196,1197,1200],{"class":151,"line":974},[149,1198,1199],{"class":787},"    defaultRequest",[149,1201,791],{"class":174},[149,1203,1204,1206,1208,1210,1213],{"class":151,"line":983},[149,1205,1171],{"class":787},[149,1207,276],{"class":174},[149,1209,819],{"class":174},[149,1211,1212],{"class":170},"100m",[149,1214,525],{"class":174},[149,1216,1218,1220,1222,1224,1227],{"class":151,"line":1217},14,[149,1219,1185],{"class":787},[149,1221,276],{"class":174},[149,1223,819],{"class":174},[149,1225,1226],{"class":170},"128Mi",[149,1228,525],{"class":174},[149,1230,1232,1235,1237],{"class":151,"line":1231},15,[149,1233,1234],{"class":787},"    type",[149,1236,276],{"class":174},[149,1238,1239],{"class":170}," Container\n",[44,1241,1243],{"id":1242},"network-resilience","Network Resilience",[278,1245,1246,1252,1261],{},[281,1247,1248,1251],{},[284,1249,1250],{},"Buffer metrics and logs locally"," and batch-send when connectivity recovers",[281,1253,1254,1255,1260],{},"Use ",[17,1256,1259],{"href":1257,"rel":1258},"https:\u002F\u002Fprometheus.io\u002F",[21],"Prometheus"," local storage for temporary metric retention",[281,1262,1254,1263,1268],{},[17,1264,1267],{"href":1265,"rel":1266},"https:\u002F\u002Fgrafana.com\u002F",[21],"Grafana"," Agent remote-write for central metric aggregation",[44,1270,1272],{"id":1271},"security","Security",[278,1274,1275,1282,1290,1293],{},[281,1276,1277,1278,1281],{},"Enable ",[284,1279,1280],{},"disk encryption"," (LUKS) since physical access to devices is possible",[281,1283,1284,1285],{},"Activate ",[17,1286,1289],{"href":1287,"rel":1288},"https:\u002F\u002Fdocs.k3s.io\u002Fsecurity",[21],"K3s secrets encryption",[281,1291,1292],{},"Apply network policies to minimize pod-to-pod communication",[281,1294,1295],{},"Automate regular security update application",[44,1297,1299],{"id":1298},"lightweight-monitoring","Lightweight Monitoring",[139,1301,1303],{"className":773,"code":1302,"language":775,"meta":144,"style":144},"# Lightweight monitoring stack for edge\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",[146,1304,1305,1310,1319,1328,1334,1343,1349,1356,1362,1371,1378,1385,1392,1402,1412,1419,1427,1442,1457,1465,1478],{"__ignoreMap":144},[149,1306,1307],{"class":151,"line":152},[149,1308,1309],{"class":155},"# Lightweight monitoring stack for edge\n",[149,1311,1312,1314,1316],{"class":151,"line":159},[149,1313,1100],{"class":787},[149,1315,276],{"class":174},[149,1317,1318],{"class":170}," apps\u002Fv1\n",[149,1320,1321,1323,1325],{"class":151,"line":184},[149,1322,1110],{"class":787},[149,1324,276],{"class":174},[149,1326,1327],{"class":170}," DaemonSet\n",[149,1329,1330,1332],{"class":151,"line":191},[149,1331,1120],{"class":787},[149,1333,791],{"class":174},[149,1335,1336,1338,1340],{"class":151,"line":197},[149,1337,1127],{"class":787},[149,1339,276],{"class":174},[149,1341,1342],{"class":170}," node-exporter\n",[149,1344,1345,1347],{"class":151,"line":232},[149,1346,1147],{"class":787},[149,1348,791],{"class":174},[149,1350,1351,1354],{"class":151,"line":402},[149,1352,1353],{"class":787},"  selector",[149,1355,791],{"class":174},[149,1357,1358,1360],{"class":151,"line":407},[149,1359,926],{"class":787},[149,1361,791],{"class":174},[149,1363,1364,1367,1369],{"class":151,"line":413},[149,1365,1366],{"class":787},"      app",[149,1368,276],{"class":174},[149,1370,1342],{"class":170},[149,1372,1373,1376],{"class":151,"line":424},[149,1374,1375],{"class":787},"  template",[149,1377,791],{"class":174},[149,1379,1380,1383],{"class":151,"line":564},[149,1381,1382],{"class":787},"    spec",[149,1384,791],{"class":174},[149,1386,1387,1390],{"class":151,"line":974},[149,1388,1389],{"class":787},"      containers",[149,1391,791],{"class":174},[149,1393,1394,1396,1398,1400],{"class":151,"line":983},[149,1395,816],{"class":815},[149,1397,909],{"class":787},[149,1399,276],{"class":174},[149,1401,1342],{"class":170},[149,1403,1404,1407,1409],{"class":151,"line":1217},[149,1405,1406],{"class":787},"        image",[149,1408,276],{"class":174},[149,1410,1411],{"class":170}," prom\u002Fnode-exporter:latest\n",[149,1413,1414,1417],{"class":151,"line":1231},[149,1415,1416],{"class":787},"        resources",[149,1418,791],{"class":174},[149,1420,1422,1425],{"class":151,"line":1421},16,[149,1423,1424],{"class":787},"          requests",[149,1426,791],{"class":174},[149,1428,1430,1433,1435,1437,1440],{"class":151,"line":1429},17,[149,1431,1432],{"class":787},"            cpu",[149,1434,276],{"class":174},[149,1436,819],{"class":174},[149,1438,1439],{"class":170},"50m",[149,1441,525],{"class":174},[149,1443,1445,1448,1450,1452,1455],{"class":151,"line":1444},18,[149,1446,1447],{"class":787},"            memory",[149,1449,276],{"class":174},[149,1451,819],{"class":174},[149,1453,1454],{"class":170},"32Mi",[149,1456,525],{"class":174},[149,1458,1460,1463],{"class":151,"line":1459},19,[149,1461,1462],{"class":787},"          limits",[149,1464,791],{"class":174},[149,1466,1468,1470,1472,1474,1476],{"class":151,"line":1467},20,[149,1469,1432],{"class":787},[149,1471,276],{"class":174},[149,1473,819],{"class":174},[149,1475,1212],{"class":170},[149,1477,525],{"class":174},[149,1479,1481,1483,1485,1487,1490],{"class":151,"line":1480},21,[149,1482,1447],{"class":787},[149,1484,276],{"class":174},[149,1486,819],{"class":174},[149,1488,1489],{"class":170},"64Mi",[149,1491,525],{"class":174},[39,1493,1495],{"id":1494},"industry-use-cases","Industry Use Cases",[44,1497,1499],{"id":1498},"smart-retail","Smart Retail",[11,1501,1502,1503,1508],{},"Deploy Raspberry Pi + K3s in each store for inventory management AI, digital signage, and POS integration. ",[17,1504,1507],{"href":1505,"rel":1506},"https:\u002F\u002Fwww.cloudoptimo.com\u002Fblog\u002Fk3s-vs-k8s-lightweight-vs-full-featured-kubernetes-distributions\u002F",[21],"CloudOptimo's case study"," highlights lightweight AI inference model deployment at the edge.",[44,1510,1512],{"id":1511},"manufacturing-smart-factory","Manufacturing (Smart Factory)",[11,1514,1515],{},"Place K3s agents on each production line for quality inspection AI, predictive maintenance, and sensor data collection. Manage all locations centrally with Fleet updates from a management cluster.",[44,1517,1519],{"id":1518},"smart-agriculture","Smart Agriculture",[11,1521,1522,1523,1528],{},"Run K3s on field sensor gateways to collect and pre-process soil and weather data at the edge. ",[17,1524,1527],{"href":1525,"rel":1526},"https:\u002F\u002Fdev.to\u002Fdataformathub\u002Fedge-computing-2026-why-raspberry-pi-5-and-rust-are-the-new-standard-1fb0",[21],"2026 trends"," highlight Raspberry Pi clusters powering smart agriculture applications.",[44,1530,1532],{"id":1531},"telecommunications-infrastructure","Telecommunications Infrastructure",[11,1534,1535],{},"Deploy K3s at 5G base stations for MEC (Multi-access Edge Computing) workloads, executing latency-sensitive processing at the network edge.",[39,1537,1539],{"id":1538},"conclusion-your-edge-kubernetes-partner","Conclusion: Your Edge Kubernetes Partner",[11,1541,1542],{},"K3s is the most practical solution for deploying Kubernetes to edge and IoT environments:",[278,1544,1545,1551,1557,1563],{},[281,1546,1547,1550],{},[284,1548,1549],{},"Under 70MB binary"," runs on everything from Raspberry Pi to industrial PCs",[281,1552,1553,1556],{},[284,1554,1555],{},"Full ARM64\u002FARMv7 support"," covers the broadest range of devices",[281,1558,1559,1562],{},[284,1560,1561],{},"Air-gapped installation"," handles offline environments",[281,1564,1565,1568],{},[284,1566,1567],{},"Rancher Fleet"," manages hundreds of clusters via GitOps",[11,1570,1571,1577,1578,1581],{},[284,1572,1573,1576],{},[17,1574,36],{"href":34,"rel":1575},[21]," provides centralized edge K3s cluster management from ¥48,000\u002Fmonth."," Combined with ",[17,1579,258],{"href":256,"rel":1580},[21],", edge AI workload management becomes automated.",[11,1583,1584,1585,600],{},"For edge Kubernetes deployment and operations consulting, ",[17,1586,1589],{"href":1587,"rel":1588},"https:\u002F\u002Fwww.hexabase.com\u002Fcontact-us\u002F",[21],"contact us",[1591,1592,1593],"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":144,"searchDepth":159,"depth":159,"links":1595},[1596,1601,1606,1610,1615,1621,1627],{"id":41,"depth":159,"text":42,"children":1597},[1598,1599,1600],{"id":46,"depth":184,"text":47},{"id":124,"depth":184,"text":125},{"id":136,"depth":184,"text":137},{"id":262,"depth":159,"text":263,"children":1602},[1603,1604,1605],{"id":266,"depth":184,"text":267},{"id":326,"depth":184,"text":327},{"id":440,"depth":184,"text":441},{"id":590,"depth":159,"text":591,"children":1607},[1608,1609],{"id":603,"depth":184,"text":604},{"id":766,"depth":184,"text":767},{"id":861,"depth":159,"text":862,"children":1611},[1612,1613,1614],{"id":865,"depth":184,"text":866},{"id":994,"depth":184,"text":995},{"id":1009,"depth":184,"text":1010},{"id":1072,"depth":159,"text":1073,"children":1616},[1617,1618,1619,1620],{"id":1076,"depth":184,"text":1077},{"id":1242,"depth":184,"text":1243},{"id":1271,"depth":184,"text":1272},{"id":1298,"depth":184,"text":1299},{"id":1494,"depth":159,"text":1495,"children":1622},[1623,1624,1625,1626],{"id":1498,"depth":184,"text":1499},{"id":1511,"depth":184,"text":1512},{"id":1518,"depth":184,"text":1519},{"id":1531,"depth":184,"text":1532},{"id":1538,"depth":159,"text":1539},"2026-05-27","Learn how to deploy K3s to edge and IoT environments. Covers Raspberry Pi setup, air-gapped installations, fleet management, and industry use cases.","md","en",{},"\u002Fblog\u002Fen\u002Fk3s-edge-iot-deployment",{"title":5,"description":1629},"blog\u002Fen\u002Fk3s-edge-iot-deployment",[22,1637,1638,1639,1640,1641,1642],"Edge Computing","IoT","Raspberry Pi","ARM","Fleet Management","Air-Gap","1Wv1anKwu-6wl7RLYlX4p5b5mxWhjZEPS4uP4aUDaVA",1779964618896]