logo

Kubernetes单机部署全攻略:从零到一搭建本地集群

作者:热心市民鹿先生2025.09.12 11:08浏览量:80

简介:本文详细介绍Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置优化及常见问题解决,帮助开发者快速搭建本地K8s集群。

一、为什么选择Kubernetes单机部署?

Kubernetes(K8s)作为容器编排领域的标准,其核心价值在于自动化部署、扩展和管理容器化应用。单机部署(Single-Node Kubernetes)通过在一台物理机或虚拟机上运行完整K8s集群,为开发者提供了低成本、高灵活性的本地开发环境。相较于生产环境的多节点集群,单机部署具有以下优势:

  1. 资源占用可控:无需多台服务器,适合资源有限的开发环境。
  2. 快速迭代:本地集群可随时重启或重置,加速CI/CD流程。
  3. 学习成本低:无需理解多节点网络存储等复杂配置,聚焦核心功能。
  4. 测试隔离:独立环境避免与生产环境冲突,保障安全性。

典型应用场景包括:开发阶段的功能验证、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. 依赖工具安装

  1. # 安装Docker(容器运行时)
  2. sudo apt update
  3. sudo apt install -y docker.io
  4. sudo systemctl enable docker
  5. # 安装Kubectl(K8s命令行工具)
  6. curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
  7. chmod +x kubectl
  8. sudo mv kubectl /usr/local/bin/
  9. # 验证安装
  10. kubectl version --client

三、Kubernetes单机部署方案

方案1:使用Minikube(推荐新手)

Minikube是官方提供的轻量级K8s单机部署工具,支持多种驱动(Docker、VirtualBox等)。

  1. # 安装Minikube
  2. curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
  3. chmod +x minikube-linux-amd64
  4. sudo mv minikube-linux-amd64 /usr/local/bin/minikube
  5. # 启动集群(使用Docker驱动)
  6. minikube start --driver=docker
  7. # 验证集群状态
  8. kubectl get nodes

优势:一键启动,内置Dashboard和Metrics Server。
局限:功能较简化,部分高级特性(如多节点调度)不支持。

方案2:使用Kind(Kubernetes in Docker)

Kind通过Docker容器模拟K8s节点,适合需要多节点测试的场景。

  1. # 安装Kind
  2. curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
  3. chmod +x ./kind
  4. sudo mv ./kind /usr/local/bin/kind
  5. # 创建单节点集群
  6. kind create cluster --name single-node
  7. # 验证集群
  8. kubectl cluster-info

优势:纯Docker实现,无需额外依赖。
局限:网络配置较复杂,适合进阶用户。

方案3:手动部署(深度定制)

对于需要完全控制集群配置的用户,可手动安装K8s组件(etcd、kube-apiserver、kubelet等)。此方案步骤繁琐,仅推荐有经验的开发者使用。

四、核心组件配置与优化

1. 存储配置

单机部署默认使用hostPath存储,但生产环境需替换为持久化存储(如Local PV或NFS)。

  1. # 示例:创建使用hostPath的PersistentVolume
  2. apiVersion: v1
  3. kind: PersistentVolume
  4. metadata:
  5. name: local-pv
  6. spec:
  7. capacity:
  8. storage: 10Gi
  9. accessModes:
  10. - ReadWriteOnce
  11. hostPath:
  12. path: /data/k8s-pv

2. 网络插件选择

单机环境推荐使用CalicoFlannel

  1. # 通过kubectl应用Calico
  2. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

3. 资源限制与调优

通过ResourceQuotaLimitRange避免资源耗尽:

  1. apiVersion: v1
  2. kind: ResourceQuota
  3. metadata:
  4. name: compute-quota
  5. spec:
  6. hard:
  7. requests.cpu: "1"
  8. requests.memory: 1Gi
  9. limits.cpu: "2"
  10. limits.memory: 2Gi

五、常见问题与解决方案

1. 集群启动失败

  • 现象minikube start卡在“Starting cluster components”
  • 原因:Docker未运行或资源不足
  • 解决
    1. sudo systemctl restart docker
    2. minikube delete && minikube start --cpus=2 --memory=4096

2. Pod无法调度

  • 现象:Pod状态为Pending,事件显示Insufficient cpu
  • 原因:节点资源不足
  • 解决:调整Pod请求资源或扩容节点:
    1. kubectl edit node <node-name> # 修改node.spec.taints或labels

3. 网络不通

  • 现象:Pod间无法通信
  • 原因:CNI插件未正确配置
  • 解决:重新应用网络插件并重启kubelet:
    1. kubectl delete -f https://docs.projectcalico.org/manifests/calico.yaml
    2. kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
    3. sudo systemctl restart kubelet

六、进阶实践:部署示例应用

以Nginx为例,验证单机集群功能:

  1. # 创建Deployment
  2. kubectl create deployment nginx --image=nginx:latest
  3. # 暴露Service
  4. kubectl expose deployment nginx --port=80 --type=NodePort
  5. # 获取访问地址
  6. minikube service nginx --url

访问输出URL,应看到Nginx默认页面。

七、总结与建议

Kubernetes单机部署是开发者快速上手K8s的最佳途径。建议:

  1. 优先选择Minikube:简化配置流程,聚焦核心功能。
  2. 定期备份数据:使用velero等工具备份集群状态。
  3. 关注资源监控:通过kubectl top nodesPrometheus监控资源使用。
  4. 逐步扩展:从单机过渡到多节点集群时,优先测试网络和存储方案。

通过本文的指导,读者可高效完成Kubernetes单机部署,为后续生产环境迁移打下坚实基础。

相关文章推荐

发表评论