logo

Kubernetes 单机部署全攻略:从环境搭建到集群运行

作者:rousong2025.09.12 11:08浏览量:0

简介:本文详细介绍Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置调整及故障排查,助力开发者快速构建本地K8s集群。

Kubernetes 单机部署全攻略:从环境准备到集群运行

在开发测试或资源受限的场景中,Kubernetes(K8s)单机部署因其轻量化、易维护的特点,成为开发者验证容器编排功能的首选方案。本文将围绕Kubernetes 单机部署展开,系统梳理部署流程、核心组件配置及常见问题解决方案,帮助读者快速搭建本地K8s环境。

一、Kubernetes 单机部署的核心价值

1.1 开发测试场景的适配性

单机部署通过单节点模拟完整K8s集群功能,支持开发者验证:

  • 容器编排逻辑:如Deployment、Service、Ingress等资源的创建与管理。
  • CI/CD流水线:在本地环境测试持续集成与部署流程。
  • 故障注入测试:模拟节点故障、资源不足等场景,验证系统容错能力。

1.2 资源效率与成本优化

相比多节点集群,单机部署显著降低资源消耗:

  • 硬件要求:仅需4核CPU、8GB内存即可运行基础组件。
  • 存储开销:通过本地存储(如hostPath)替代分布式存储,减少I/O压力。
  • 网络复杂度:无需配置跨节点网络,简化Pod间通信调试。

二、Kubernetes 单机部署环境准备

2.1 操作系统与依赖安装

推荐使用Linux发行版(如Ubuntu 22.04 LTS),需满足以下条件:

  1. # 检查系统内核版本(需≥4.15)
  2. uname -r
  3. # 安装依赖工具
  4. sudo apt update && sudo apt install -y \
  5. conntrack \
  6. ebtables \
  7. iptables \
  8. socat \
  9. docker.io # 或containerd

2.2 容器运行时选择

单机部署支持Docker或containerd,以Docker为例:

  1. # 安装Docker并配置cgroup驱动
  2. sudo apt install -y docker.io
  3. sudo sed -i 's/^ExecStart=.*/ExecStart=\/usr\/bin\/dockerd -H fd:\/\/ --containerd=\/run\/containerd\/containerd.sock --exec-opt native.cgroupdriver=systemd/' /lib/systemd/system/docker.service
  4. sudo systemctl daemon-reload && sudo systemctl restart docker

三、Kubernetes 单机部署核心步骤

3.1 使用kubeadm初始化集群

kubeadm是官方推荐的部署工具,通过以下命令初始化控制平面:

  1. # 下载kubeadm、kubelet、kubectl
  2. sudo apt install -y apt-transport-https curl
  3. curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
  4. echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  5. sudo apt update && sudo apt install -y kubelet kubeadm kubectl
  6. # 初始化集群(忽略Swap警告)
  7. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=Swap

关键参数说明

  • --pod-network-cidr:指定Pod网络地址范围(需与CNI插件兼容)。
  • --ignore-preflight-errors:跳过Swap未关闭的强制检查(开发环境可接受)。

3.2 配置kubectl访问权限

初始化完成后,需将kubeconfig文件复制到用户目录:

  1. mkdir -p $HOME/.kube
  2. sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  3. sudo chown $(id -u):$(id -g) $HOME/.kube/config

3.3 部署CNI网络插件

单机环境推荐使用轻量级CNI插件(如Calico或Flannel):

  1. # 部署Calico
  2. kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
  3. # 验证节点状态
  4. kubectl get nodes -o wide

输出示例

  1. NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
  2. k8s-node Ready control-plane 5m v1.28.0 192.168.1.10 <none> Ubuntu 22.04.3 LTS 5.15.0-86-generic docker://24.0.7

四、Kubernetes 单机部署优化实践

4.1 资源限制与调度优化

通过ResourceQuotaLimitRange避免资源耗尽:

  1. # 限制Namespace资源配额
  2. apiVersion: v1
  3. kind: ResourceQuota
  4. metadata:
  5. name: dev-quota
  6. spec:
  7. hard:
  8. requests.cpu: "2"
  9. requests.memory: "4Gi"
  10. limits.cpu: "4"
  11. limits.memory: "8Gi"

4.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: /mnt/data

4.3 高可用性模拟

通过NodePortIngress暴露服务,模拟生产环境访问:

  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4. name: example-ingress
  5. spec:
  6. rules:
  7. - host: "localhost"
  8. http:
  9. paths:
  10. - path: "/"
  11. pathType: Prefix
  12. backend:
  13. service:
  14. name: my-service
  15. port:
  16. number: 80

五、常见问题与解决方案

5.1 节点状态异常

现象kubectl get nodes显示NotReady
排查步骤

  1. 检查kubelet日志
    1. journalctl -u kubelet -n 100 --no-pager
  2. 验证CNI插件状态:
    1. kubectl get pods -n kube-system | grep calico

5.2 Pod调度失败

原因:资源不足或节点污点(Taint)。
解决方案

  1. # 查看节点资源
  2. kubectl describe nodes | grep -A 10 Allocated
  3. # 移除污点(如需)
  4. kubectl taint nodes k8s-node node-role.kubernetes.io/control-plane:NoSchedule-

5.3 网络连通性问题

现象:Pod间无法通信。
检查项

  • 验证CNI插件Pod是否运行正常。
  • 检查防火墙规则:
    1. sudo iptables -L -n | grep 10.244

六、总结与展望

Kubernetes 单机部署通过简化架构,为开发者提供了低成本的K8s实践环境。本文从环境准备、组件安装到故障排查,系统梳理了部署流程中的关键环节。未来,随着K8s版本迭代,单机部署方案可进一步结合轻量级工具(如k3s、kind)优化体验。建议读者结合实际需求,灵活调整配置参数,实现开发效率与资源利用的平衡。

扩展建议

  • 尝试使用kind(Kubernetes in Docker)快速创建多节点单机集群。
  • 探索Minikube的本地开发功能,对比不同工具的适用场景。

相关文章推荐

发表评论