logo

单机部署Kubernetes:从入门到实践的完整指南

作者:问题终结者2025.09.17 10:41浏览量:0

简介:本文详细介绍了单机部署Kubernetes的完整流程,涵盖环境准备、组件安装、集群配置与验证等关键步骤,适合开发者与运维人员快速上手实践。

一、单机部署Kubernetes的适用场景与核心价值

单机部署Kubernetes(Single-Node Kubernetes)并非传统生产环境的高可用方案,但其独特的轻量化特性使其在开发测试、边缘计算、教学演示等场景中具有显著优势。对于开发者而言,单机环境可快速验证应用与Kubernetes的兼容性,避免依赖云服务商的免费额度或复杂配置;对于运维人员,它是学习Kubernetes核心机制(如Pod调度、Service发现)的理想沙箱;在边缘计算场景中,资源受限的设备(如工业网关、IoT设备)可通过单机Kubernetes实现容器化应用的统一管理。

与多节点集群相比,单机部署的核心价值在于资源占用低(仅需2核4G内存即可运行基础组件)、配置简单(无需处理网络分区、存储卷挂载等复杂问题)、隔离性强(完全独立的控制平面与数据平面)。但需注意,单机环境缺乏高可用性,节点故障会导致整个集群不可用,因此仅适用于非生产环境。

二、环境准备:硬件与软件要求

硬件配置建议

  • CPU:至少2核(推荐4核以支持并发测试)
  • 内存:4GB(基础组件运行),8GB以上(同时运行多个Pod)
  • 磁盘:20GB以上可用空间(需存储镜像、日志等数据)
  • 网络:支持桥接或NAT模式的虚拟网卡(若使用虚拟机

软件依赖清单

  • 操作系统:Ubuntu 20.04/22.04 LTS(推荐)或CentOS 7/8
  • 容器运行时:containerd(v1.6+)或Docker(需配置CRI插件)
  • 网络插件:Calico或Flannel(单机环境可简化配置)
  • 工具链:kubectl(v1.26+)、cfssl(证书生成)、helm(可选)

三、部署流程:分步详解

1. 安装容器运行时(以containerd为例)

  1. # 安装依赖
  2. sudo apt-get update && sudo apt-get install -y \
  3. apt-transport-https ca-certificates curl software-properties-common
  4. # 添加containerd仓库并安装
  5. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
  6. echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  7. sudo apt-get update && sudo apt-get install -y containerd.io
  8. # 配置containerd
  9. sudo mkdir -p /etc/containerd
  10. containerd config default | sudo tee /etc/containerd/config.toml
  11. # 修改配置以支持Kubernetes(禁用cgroup v2检查)
  12. sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
  13. sudo systemctl restart containerd

2. 安装Kubernetes核心组件

  1. # 添加Kubernetes仓库
  2. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  3. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  4. # 安装kubeadm、kubelet、kubectl
  5. sudo apt-get update && sudo apt-get install -y \
  6. kubelet=1.26.0-00 kubeadm=1.26.0-00 kubectl=1.26.0-00
  7. sudo apt-mark hold kubelet kubeadm kubectl

3. 初始化单节点集群

  1. # 使用kubeadm初始化(忽略Swap警告)
  2. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap
  3. # 配置kubectl
  4. mkdir -p $HOME/.kube
  5. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  6. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  7. # 部署网络插件(以Calico为例)
  8. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/tigera-operator.yaml
  9. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/custom-resources.yaml

4. 验证集群状态

  1. # 检查节点状态
  2. kubectl get nodes
  3. # 预期输出:NAME STATUS ROLES AGE VERSION
  4. # node1 Ready control-plane 5m v1.26.0
  5. # 检查核心组件Pod
  6. kubectl get pods -n kube-system
  7. # 确保coredns、calico-node等Pod处于Running状态

四、常见问题与解决方案

1. 初始化失败(如imagePullBackOff

  • 原因:未配置镜像仓库镜像或网络无法访问k8s.gcr.io
  • 解决
    1. # 修改kubeadm配置文件(/etc/kubeadm/config.yaml)
    2. apiVersion: kubeadm.k8s.io/v1beta3
    3. imageRepository: registry.aliyuncs.com/google_containers
    4. # 重新初始化
    5. sudo kubeadm reset -f
    6. sudo kubeadm init --config /etc/kubeadm/config.yaml

2. 容器无法访问网络

  • 原因:未正确配置CNI插件或防火墙规则。
  • 解决
    1. # 检查Calico Pod日志
    2. kubectl logs -n kube-system calico-node-xxxx
    3. # 临时关闭防火墙(测试用)
    4. sudo ufw disable

3. 资源不足导致Pod调度失败

  • 原因:单机环境资源有限,默认请求可能过高。
  • 解决
    1. # 修改Deployment的resources配置
    2. resources:
    3. requests:
    4. cpu: "100m"
    5. memory: "128Mi"
    6. limits:
    7. cpu: "500m"
    8. memory: "512Mi"

五、进阶优化建议

  1. 持久化存储:使用hostPath或本地PV为单机环境提供存储:

    1. apiVersion: v1
    2. kind: PersistentVolume
    3. metadata:
    4. name: local-pv
    5. spec:
    6. capacity:
    7. storage: 10Gi
    8. accessModes:
    9. - ReadWriteOnce
    10. hostPath:
    11. path: /mnt/data
  2. 监控集成:通过Prometheus Operator部署轻量级监控:

    1. helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    2. helm install prometheus prometheus-community/kube-prometheus-stack --set prometheus.prometheusSpec.retention=1d
  3. 多版本共存:使用kubeadm config images pull --kubernetes-version=v1.27.0预拉取不同版本镜像,通过修改/etc/kubernetes/manifests/下的静态Pod定义实现版本切换。

六、总结与展望

单机部署Kubernetes为开发者提供了一个低门槛、高灵活性的实验平台。通过本文的步骤,读者可在1小时内完成从环境准备到集群验证的全流程。未来,随着Kubernetes对轻量级场景的优化(如K3s、MicroK8s),单机部署将进一步简化,成为物联网、CI/CD流水线等领域的标准工具。建议读者在此基础上探索Operator开发服务网格集成等高级主题,深化对云原生生态的理解。

相关文章推荐

发表评论