简介:本文详细介绍Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置优化及常见问题解决,帮助开发者快速搭建本地K8s集群。
Kubernetes(K8s)作为容器编排领域的标准,其核心价值在于自动化部署、扩展和管理容器化应用。单机部署(Single-Node Kubernetes)通过在一台物理机或虚拟机上运行完整K8s集群,为开发者提供了低成本、高灵活性的本地开发环境。相较于生产环境的多节点集群,单机部署具有以下优势:
典型应用场景包括:开发阶段的功能验证、CI/CD流水线测试、K8s Operator开发调试等。
Kubernetes官方推荐使用Linux系统(如Ubuntu 20.04 LTS),Windows和macOS需通过虚拟机(如Multipass、Docker Desktop)或WSL2运行。本文以Ubuntu为例,其他系统需适配对应命令。
# 安装Docker(容器运行时)sudo apt updatesudo apt install -y docker.iosudo 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 kubectlsudo mv kubectl /usr/local/bin/# 验证安装kubectl version --client
Minikube是官方提供的轻量级K8s单机部署工具,支持多种驱动(Docker、VirtualBox等)。
# 安装Minikubecurl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64chmod +x minikube-linux-amd64sudo mv minikube-linux-amd64 /usr/local/bin/minikube# 启动集群(使用Docker驱动)minikube start --driver=docker# 验证集群状态kubectl get nodes
优势:一键启动,内置Dashboard和Metrics Server。
局限:功能较简化,部分高级特性(如多节点调度)不支持。
Kind通过Docker容器模拟K8s节点,适合需要多节点测试的场景。
# 安装Kindcurl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64chmod +x ./kindsudo mv ./kind /usr/local/bin/kind# 创建单节点集群kind create cluster --name single-node# 验证集群kubectl cluster-info
优势:纯Docker实现,无需额外依赖。
局限:网络配置较复杂,适合进阶用户。
对于需要完全控制集群配置的用户,可手动安装K8s组件(etcd、kube-apiserver、kubelet等)。此方案步骤繁琐,仅推荐有经验的开发者使用。
单机部署默认使用hostPath存储,但生产环境需替换为持久化存储(如Local PV或NFS)。
# 示例:创建使用hostPath的PersistentVolumeapiVersion: v1kind: PersistentVolumemetadata:name: local-pvspec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: /data/k8s-pv
单机环境推荐使用Calico或Flannel:
# 通过kubectl应用Calicokubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
通过ResourceQuota和LimitRange避免资源耗尽:
apiVersion: v1kind: ResourceQuotametadata:name: compute-quotaspec:hard:requests.cpu: "1"requests.memory: 1Gilimits.cpu: "2"limits.memory: 2Gi
minikube start卡在“Starting cluster components”
sudo systemctl restart dockerminikube delete && minikube start --cpus=2 --memory=4096
Pending,事件显示Insufficient cpu
kubectl edit node <node-name> # 修改node.spec.taints或labels
kubectl delete -f https://docs.projectcalico.org/manifests/calico.yamlkubectl apply -f https://docs.projectcalico.org/manifests/calico.yamlsudo systemctl restart kubelet
以Nginx为例,验证单机集群功能:
# 创建Deploymentkubectl create deployment nginx --image=nginx:latest# 暴露Servicekubectl expose deployment nginx --port=80 --type=NodePort# 获取访问地址minikube service nginx --url
访问输出URL,应看到Nginx默认页面。
Kubernetes单机部署是开发者快速上手K8s的最佳途径。建议:
velero等工具备份集群状态。kubectl top nodes和Prometheus监控资源使用。通过本文的指导,读者可高效完成Kubernetes单机部署,为后续生产环境迁移打下坚实基础。