logo

Kubernetes单机部署:轻量级环境搭建与实战指南

作者:4042025.09.17 10:41浏览量:0

简介:本文详细介绍Kubernetes单机部署的完整流程,涵盖环境准备、组件安装、配置优化及故障排查,适合开发测试与轻量级生产场景。

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

Kubernetes作为容器编排领域的标准,其单机部署模式通过整合核心组件(API Server、Controller Manager、Scheduler、etcd、kubelet、kube-proxy)于单台服务器,为开发者提供了轻量级的本地化开发测试环境。相较于集群部署,单机模式显著降低了资源占用(CPU≤2核、内存≤4GB即可运行),同时避免了网络延迟和节点间通信的复杂性。典型应用场景包括:

  1. 本地开发测试:快速验证CI/CD流水线、Helm Chart或Operator逻辑。
  2. 边缘计算:在资源受限的物联网网关或嵌入式设备上运行轻量级K8s。
  3. 教学演示:通过最小化环境展示K8s核心概念(如Pod、Deployment、Service)。
  4. 轻量级生产:对高可用性要求不高的内部工具或非关键业务。

二、环境准备与工具选择

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官方部署工具,支持单机快速初始化。
    1. # Ubuntu示例
    2. apt-get update && apt-get install -y apt-transport-https curl
    3. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
    4. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
    5. apt-get update && apt-get install -y kubelet kubeadm kubectl
  • Minikube:本地单节点K8s环境,适合快速启动(需安装VirtualBox或Docker驱动)。
    1. curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    2. install minikube-linux-amd64 /usr/local/bin/minikube
    3. minikube start --driver=docker --cpus=2 --memory=4096
  • Kind:基于Docker容器的K8s集群模拟工具,支持多节点配置。
    1. curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
    2. chmod +x ./kind && mv ./kind /usr/local/bin/
    3. kind create cluster --config kind-single.yaml # 自定义配置文件

三、单机部署实战:以kubeadm为例

1. 初始化控制平面

  1. # 清除旧环境(如有)
  2. kubeadm reset -f
  3. # 初始化集群(使用Flannel网络插件)
  4. kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=127.0.0.1
  5. # 配置kubectl
  6. mkdir -p $HOME/.kube
  7. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  8. sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • 关键参数说明
    • --pod-network-cidr:指定Pod网络范围,需与CNI插件兼容。
    • --apiserver-advertise-address:绑定到本地回环地址以避免外部访问。

2. 部署CNI网络插件

以Flannel为例:

  1. kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
  • 替代方案:Calico(支持网络策略)、Weave Net(加密通信)。

3. 验证集群状态

  1. kubectl get nodes # 应显示Ready状态
  2. kubectl get pods -n kube-system # 检查核心组件运行情况

四、优化与扩展配置

1. 资源限制与调优

  • 修改kubelet配置:编辑/var/lib/kubelet/config.yaml,调整以下参数:
    1. evictionHard:
    2. memory.available: "200Mi"
    3. nodefs.available: "10%"
  • 禁用非必要组件:如需最小化部署,可通过--feature-gates关闭API扩展。

2. 持久化存储配置

  • 使用HostPath:适用于单机开发场景。
    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: /data/pv

3. 监控与日志集成

  • 部署Prometheus Operator
    1. kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/master/bundle.yaml
  • 日志收集:配置Fluentd收集容器日志至Elasticsearch

五、常见问题与解决方案

1. 初始化失败(etcd健康检查失败)

  • 原因:磁盘空间不足或权限问题。
  • 解决
    1. df -h # 检查磁盘
    2. chown -R root:root /var/lib/etcd

2. Pod无法调度

  • 原因:Node资源不足或Taint限制。
  • 解决
    1. kubectl describe node <node-name> # 查看资源分配
    2. kubectl taint nodes <node-name> key-

3. 网络不通(Pod间无法通信)

  • 排查步骤
    1. 检查CNI插件日志:kubectl logs -n kube-system <cni-pod-name>
    2. 验证网络策略:kubectl get networkpolicies
    3. 测试连通性:kubectl exec -it <pod-name> -- ping <target-pod-ip>

六、进阶建议

  1. 备份与恢复:使用etcdctl snapshot save备份etcd数据。
  2. 升级策略:通过kubeadm upgrade plan规划版本升级。
  3. 混合部署:结合Kind或Minikube实现本地开发+云端集群的协同测试。

总结

Kubernetes单机部署通过精简组件和资源占用,为开发者提供了高效、可控的本地化环境。通过合理配置CNI插件、监控系统和存储方案,可满足从开发测试到轻量级生产的多样化需求。建议结合实际场景选择kubeadm、Minikube或Kind等工具,并定期验证集群健康状态以确保稳定性。

相关文章推荐

发表评论