在工业物联网和分布式计算场景中,边缘设备的资源限制与传统数据中心存在显著差异。我曾参与过一个智能制造项目,现场PLC控制器仅有4核CPU和8GB内存,却需要运行数十个微服务实例。这正是K3s的设计初衷——将Kubernetes的容器编排能力带入资源受限的边缘环境。
RHEL 8作为企业级Linux发行版,其稳定性与安全性使其成为边缘计算的首选操作系统。选择它作为基础平台时,我们需要特别关注:
编辑/etc/sysctl.conf添加:
bash复制vm.swappiness = 10
net.ipv4.ip_forward = 1
fs.inotify.max_user_instances = 512
执行sysctl -p生效后,建议通过以下命令验证:
bash复制grep -E 'swap|ip_forward|inotify' /proc/sys/vm/swappiness
关键经验:在ARM架构的边缘设备上,需额外调整vm.dirty_ratio=20以减少I/O阻塞
Firewalld需放行6443(API Server)和8472(Flannel VXLAN)端口:
bash复制firewall-cmd --permanent --add-port={6443,8472}/tcp
firewall-cmd --reload
对于SELinux,建议采用以下策略平衡安全与兼容性:
bash复制setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
使用国内镜像源加速安装:
bash复制curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | \
INSTALL_K3S_MIRROR=cn \
INSTALL_K3S_EXEC="--flannel-backend=host-gw" \
sh -
验证安装:
bash复制kubectl get nodes -o wide
Server节点(控制平面):
bash复制curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --cluster-init
Agent节点(工作节点):
bash复制curl -sfL https://get.k3s.io | K3S_URL=https://server-ip:6443 K3S_TOKEN=SECRET sh -
网络调优技巧:在弱网环境下添加
--node-external-ip=<公网IP>避免NAT问题
创建命名空间级资源限制:
yaml复制apiVersion: v1
kind: ResourceQuota
metadata:
name: edge-quota
spec:
hard:
pods: "50"
limits.cpu: "20"
limits.memory: 32Gi
使用本地存储卷应对网络波动:
yaml复制apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
部署Prometheus社区版:
bash复制helm install prometheus prometheus-community/kube-prometheus-stack \
--set prometheus.prometheusSpec.resources.requests.memory=512Mi
使用Fluent Bit替代Fluentd:
yaml复制apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluent-bit
spec:
template:
spec:
containers:
- name: fluent-bit
resources:
limits:
memory: 100Mi
检查网络连接性:
bash复制k3s kubectl describe node <node-name> | grep -A10 Conditions
常见修复步骤:
systemctl restart k3s-agentjournalctl -u k3s -n 50openssl x509 -in /var/lib/rancher/k3s/server/tls/client-admin.crt -noout -dates配置私有仓库:
bash复制mkdir -p /etc/rancher/k3s/
cat > /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"docker.io":
endpoint:
- "https://registry.cn-hangzhou.aliyuncs.com"
EOF