Kubernetes单机部署:轻量级环境搭建与实战指南
2025.09.17 10:41浏览量:0简介:本文详细介绍Kubernetes单机部署的完整流程,涵盖环境准备、组件安装、配置优化及故障排查,适合开发测试与轻量级生产场景。
一、单机部署Kubernetes的核心价值与适用场景
Kubernetes作为容器编排领域的标准,其单机部署模式通过整合核心组件(API Server、Controller Manager、Scheduler、etcd、kubelet、kube-proxy)于单台服务器,为开发者提供了轻量级的本地化开发测试环境。相较于集群部署,单机模式显著降低了资源占用(CPU≤2核、内存≤4GB即可运行),同时避免了网络延迟和节点间通信的复杂性。典型应用场景包括:
- 本地开发测试:快速验证CI/CD流水线、Helm Chart或Operator逻辑。
- 边缘计算:在资源受限的物联网网关或嵌入式设备上运行轻量级K8s。
- 教学演示:通过最小化环境展示K8s核心概念(如Pod、Deployment、Service)。
- 轻量级生产:对高可用性要求不高的内部工具或非关键业务。
二、环境准备与工具选择
1. 硬件与系统要求
- 操作系统:推荐Ubuntu 22.04 LTS或CentOS 8,需关闭SELinux(
setenforce 0
)和防火墙(systemctl stop firewalld
)。 - 资源分配:至少2核CPU、4GB内存、20GB磁盘空间(建议使用SSD)。
- 容器运行时:containerd(1.6+)或Docker(20.10+),需配置Cgroup驱动为
systemd
。
2. 工具链安装
- kubeadm:K8s官方部署工具,支持单机快速初始化。
# Ubuntu示例
apt-get update && apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update && apt-get install -y kubelet kubeadm kubectl
- Minikube:本地单节点K8s环境,适合快速启动(需安装VirtualBox或Docker驱动)。
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
install minikube-linux-amd64 /usr/local/bin/minikube
minikube start --driver=docker --cpus=2 --memory=4096
- Kind:基于Docker容器的K8s集群模拟工具,支持多节点配置。
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind && mv ./kind /usr/local/bin/
kind create cluster --config kind-single.yaml # 自定义配置文件
三、单机部署实战:以kubeadm为例
1. 初始化控制平面
# 清除旧环境(如有)
kubeadm reset -f
# 初始化集群(使用Flannel网络插件)
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=127.0.0.1
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 关键参数说明:
--pod-network-cidr
:指定Pod网络范围,需与CNI插件兼容。--apiserver-advertise-address
:绑定到本地回环地址以避免外部访问。
2. 部署CNI网络插件
以Flannel为例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
- 替代方案:Calico(支持网络策略)、Weave Net(加密通信)。
3. 验证集群状态
kubectl get nodes # 应显示Ready状态
kubectl get pods -n kube-system # 检查核心组件运行情况
四、优化与扩展配置
1. 资源限制与调优
- 修改kubelet配置:编辑
/var/lib/kubelet/config.yaml
,调整以下参数:evictionHard:
memory.available: "200Mi"
nodefs.available: "10%"
- 禁用非必要组件:如需最小化部署,可通过
--feature-gates
关闭API扩展。
2. 持久化存储配置
- 使用HostPath:适用于单机开发场景。
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/pv
3. 监控与日志集成
- 部署Prometheus Operator:
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
- 日志收集:配置Fluentd收集容器日志至Elasticsearch。
五、常见问题与解决方案
1. 初始化失败(etcd
健康检查失败)
- 原因:磁盘空间不足或权限问题。
- 解决:
df -h # 检查磁盘
chown -R root:root /var/lib/etcd
2. Pod无法调度
- 原因:Node资源不足或Taint限制。
- 解决:
kubectl describe node <node-name> # 查看资源分配
kubectl taint nodes <node-name> key-
3. 网络不通(Pod间无法通信)
- 排查步骤:
- 检查CNI插件日志:
kubectl logs -n kube-system <cni-pod-name>
。 - 验证网络策略:
kubectl get networkpolicies
。 - 测试连通性:
kubectl exec -it <pod-name> -- ping <target-pod-ip>
。
- 检查CNI插件日志:
六、进阶建议
- 备份与恢复:使用
etcdctl snapshot save
备份etcd数据。 - 升级策略:通过
kubeadm upgrade plan
规划版本升级。 - 混合部署:结合Kind或Minikube实现本地开发+云端集群的协同测试。
总结
Kubernetes单机部署通过精简组件和资源占用,为开发者提供了高效、可控的本地化环境。通过合理配置CNI插件、监控系统和存储方案,可满足从开发测试到轻量级生产的多样化需求。建议结合实际场景选择kubeadm、Minikube或Kind等工具,并定期验证集群健康状态以确保稳定性。
发表评论
登录后可评论,请前往 登录 或 注册