Kubernetes单机部署全攻略:从零到一搭建本地集群
2025.09.12 11:08浏览量:80简介:本文详细介绍Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置优化及常见问题解决,帮助开发者快速搭建本地K8s集群。
一、为什么选择Kubernetes单机部署?
Kubernetes(K8s)作为容器编排领域的标准,其核心价值在于自动化部署、扩展和管理容器化应用。单机部署(Single-Node Kubernetes)通过在一台物理机或虚拟机上运行完整K8s集群,为开发者提供了低成本、高灵活性的本地开发环境。相较于生产环境的多节点集群,单机部署具有以下优势:
- 资源占用可控:无需多台服务器,适合资源有限的开发环境。
- 快速迭代:本地集群可随时重启或重置,加速CI/CD流程。
- 学习成本低:无需理解多节点网络、存储等复杂配置,聚焦核心功能。
- 测试隔离:独立环境避免与生产环境冲突,保障安全性。
典型应用场景包括:开发阶段的功能验证、CI/CD流水线测试、K8s Operator开发调试等。
二、环境准备与依赖安装
1. 操作系统要求
Kubernetes官方推荐使用Linux系统(如Ubuntu 20.04 LTS),Windows和macOS需通过虚拟机(如Multipass、Docker Desktop)或WSL2运行。本文以Ubuntu为例,其他系统需适配对应命令。
2. 硬件配置建议
- CPU:至少2核(推荐4核)
- 内存:至少4GB(推荐8GB以上)
- 磁盘:至少20GB可用空间(SSD更佳)
- 网络:支持IPv4/IPv6双栈(可选)
3. 依赖工具安装
# 安装Docker(容器运行时)
sudo apt update
sudo apt install -y docker.io
sudo systemctl enable docker
# 安装Kubectl(K8s命令行工具)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
# 验证安装
kubectl version --client
三、Kubernetes单机部署方案
方案1:使用Minikube(推荐新手)
Minikube是官方提供的轻量级K8s单机部署工具,支持多种驱动(Docker、VirtualBox等)。
# 安装Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
chmod +x minikube-linux-amd64
sudo mv minikube-linux-amd64 /usr/local/bin/minikube
# 启动集群(使用Docker驱动)
minikube start --driver=docker
# 验证集群状态
kubectl get nodes
优势:一键启动,内置Dashboard和Metrics Server。
局限:功能较简化,部分高级特性(如多节点调度)不支持。
方案2:使用Kind(Kubernetes in Docker)
Kind通过Docker容器模拟K8s节点,适合需要多节点测试的场景。
# 安装Kind
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
# 创建单节点集群
kind create cluster --name single-node
# 验证集群
kubectl cluster-info
优势:纯Docker实现,无需额外依赖。
局限:网络配置较复杂,适合进阶用户。
方案3:手动部署(深度定制)
对于需要完全控制集群配置的用户,可手动安装K8s组件(etcd、kube-apiserver、kubelet等)。此方案步骤繁琐,仅推荐有经验的开发者使用。
四、核心组件配置与优化
1. 存储配置
单机部署默认使用hostPath
存储,但生产环境需替换为持久化存储(如Local PV或NFS)。
# 示例:创建使用hostPath的PersistentVolume
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /data/k8s-pv
2. 网络插件选择
单机环境推荐使用Calico
或Flannel
:
# 通过kubectl应用Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
3. 资源限制与调优
通过ResourceQuota
和LimitRange
避免资源耗尽:
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
spec:
hard:
requests.cpu: "1"
requests.memory: 1Gi
limits.cpu: "2"
limits.memory: 2Gi
五、常见问题与解决方案
1. 集群启动失败
- 现象:
minikube start
卡在“Starting cluster components” - 原因:Docker未运行或资源不足
- 解决:
sudo systemctl restart docker
minikube delete && minikube start --cpus=2 --memory=4096
2. Pod无法调度
- 现象:Pod状态为
Pending
,事件显示Insufficient cpu
- 原因:节点资源不足
- 解决:调整Pod请求资源或扩容节点:
kubectl edit node <node-name> # 修改node.spec.taints或labels
3. 网络不通
- 现象:Pod间无法通信
- 原因:CNI插件未正确配置
- 解决:重新应用网络插件并重启kubelet:
kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
sudo systemctl restart kubelet
六、进阶实践:部署示例应用
以Nginx为例,验证单机集群功能:
# 创建Deployment
kubectl create deployment nginx --image=nginx:latest
# 暴露Service
kubectl expose deployment nginx --port=80 --type=NodePort
# 获取访问地址
minikube service nginx --url
访问输出URL,应看到Nginx默认页面。
七、总结与建议
Kubernetes单机部署是开发者快速上手K8s的最佳途径。建议:
- 优先选择Minikube:简化配置流程,聚焦核心功能。
- 定期备份数据:使用
velero
等工具备份集群状态。 - 关注资源监控:通过
kubectl top nodes
和Prometheus
监控资源使用。 - 逐步扩展:从单机过渡到多节点集群时,优先测试网络和存储方案。
通过本文的指导,读者可高效完成Kubernetes单机部署,为后续生产环境迁移打下坚实基础。
发表评论
登录后可评论,请前往 登录 或 注册