logo

Kubernetes 单机部署全攻略:从零到一的实践指南

作者:rousong2025.09.17 10:41浏览量:0

简介:本文详细解析Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置优化及故障排查,提供可落地的技术方案与最佳实践。

Kubernetes 单机部署全攻略:从零到一的实践指南

一、为什么需要Kubernetes单机部署?

在开发测试、边缘计算或小型生产环境中,Kubernetes单机部署(Single-Node Kubernetes)是一种高效且低成本的解决方案。相比传统的多节点集群,单机部署具有以下优势:

  1. 资源占用低:无需多台物理机或虚拟机,单台服务器即可运行完整K8s环境。
  2. 部署速度快:省去网络配置、节点注册等复杂步骤,10分钟内可完成初始化。
  3. 成本可控:适合预算有限的个人开发者或初创企业。
  4. 隔离性强:独立环境避免与生产集群冲突,适合CI/CD流水线或实验性功能验证。

典型应用场景包括:本地开发环境搭建、IoT设备管理、教学演示以及轻量级应用部署。

二、环境准备与前置条件

1. 硬件要求

  • CPU:至少2核(建议4核以上)
  • 内存:8GB RAM(生产环境建议16GB+)
  • 磁盘:50GB以上可用空间(SSD更佳)
  • 网络:支持IPv4/IPv6双栈(可选)

2. 操作系统选择

推荐使用以下Linux发行版:

  • Ubuntu 22.04 LTS:兼容性好,社区支持丰富
  • CentOS Stream 9:企业级稳定性,适合传统用户
  • Rocky Linux 9:CentOS替代方案,长期支持

禁用Swap分区(K8s要求):

  1. sudo swapoff -a
  2. # 永久禁用需注释/etc/fstab中的swap行

3. 容器运行时安装

K8s 1.24+版本移除了对Docker的直接支持,需通过CRI接口兼容:

  1. # 安装containerd(推荐)
  2. cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
  3. overlay
  4. br_netfilter
  5. EOF
  6. sudo modprobe overlay
  7. sudo modprobe br_netfilter
  8. # 配置sysctl参数
  9. cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
  10. net.bridge.bridge-nf-call-iptables = 1
  11. net.ipv4.ip_forward = 1
  12. net.bridge.bridge-nf-call-ip6tables = 1
  13. EOF
  14. sudo sysctl --system

安装containerd:

  1. sudo apt-get install -y containerd
  2. sudo mkdir -p /etc/containerd
  3. containerd config default | sudo tee /etc/containerd/config.toml
  4. # 修改配置启用systemd cgroup
  5. sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.toml
  6. sudo systemctl restart containerd

三、Kubernetes核心组件部署

1. 使用kubeadm初始化集群

  1. # 安装依赖工具
  2. sudo apt-get update
  3. sudo apt-get install -y apt-transport-https ca-certificates curl
  4. # 添加K8s仓库
  5. curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
  6. echo "deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  7. # 安装kubeadm/kubelet/kubectl
  8. sudo apt-get update
  9. sudo apt-get install -y kubelet kubeadm kubectl
  10. sudo systemctl enable kubelet
  11. # 初始化控制平面(单机模式需跳过网络插件)
  12. sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU

2. 配置kubectl

  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. 部署CNI网络插件(以Calico为例)

  1. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yaml
  2. kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml

验证节点状态:

  1. kubectl get nodes
  2. # 输出应显示:
  3. # NAME STATUS ROLES AGE VERSION
  4. # localhost Ready control-plane 5m v1.28.0

四、关键配置优化

1. 资源限制调整

编辑/etc/kubernetes/kubelet.conf,添加:

  1. {
  2. "kind": "KubeletConfiguration",
  3. "apiVersion": "kubelet.config.k8s.io/v1beta1",
  4. "evictionHard": {
  5. "memory.available": "200Mi",
  6. "nodefs.available": "10%"
  7. }
  8. }

重启服务:

  1. sudo systemctl daemon-reload
  2. sudo systemctl restart kubelet

2. 启用Dashboard(可选)

  1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
  2. # 创建ServiceAccount并获取Token
  3. cat <<EOF | kubectl apply -f -
  4. apiVersion: v1
  5. kind: ServiceAccount
  6. metadata:
  7. name: admin-user
  8. namespace: kubernetes-dashboard
  9. EOF
  10. kubectl create token admin-user

3. 持久化存储配置

使用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
  12. ---
  13. apiVersion: v1
  14. kind: PersistentVolumeClaim
  15. metadata:
  16. name: local-pvc
  17. spec:
  18. accessModes:
  19. - ReadWriteOnce
  20. resources:
  21. requests:
  22. storage: 5Gi

五、常见问题解决方案

1. 节点状态NotReady

现象kubectl get nodes显示NotReady
原因:CNI插件未正确部署或kubelet崩溃
解决

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

2. 镜像拉取失败

现象ImagePullBackOff错误
原因:网络问题或镜像仓库认证失败
解决

  1. # 配置国内镜像源(以阿里云为例)
  2. cat <<EOF | kubectl create -f -
  3. apiVersion: v1
  4. kind: ConfigMap
  5. metadata:
  6. name: registry-config
  7. namespace: kube-system
  8. data:
  9. registry.yaml: |
  10. mirrors:
  11. "docker.io":
  12. endpoint:
  13. - "https://registry.cn-hangzhou.aliyuncs.com"
  14. EOF

3. 资源不足错误

现象OOMKilledEvicted
解决

  • 调整Pod的resources.requests/limits
  • 增加节点资源或优化应用配置
  • 使用kubectl top nodes监控资源使用

六、进阶实践建议

  1. 备份与恢复

    • 使用etcdctl snapshot save定期备份
    • 测试恢复流程确保数据安全
  2. 自动化部署

    • 编写Ansible/Terraform脚本实现一键部署
    • 示例Ansible任务片段:
      ```yaml
    • name: Initialize Kubernetes cluster
      command: kubeadm init —pod-network-cidr=10.244.0.0/16
      args:
      creates: /etc/kubernetes/admin.conf
      ```
  3. 性能调优

    • 调整kube-apiserver--default-not-ready-toleration-seconds参数
    • 优化etcd--quota-backend-bytes设置

七、总结与展望

Kubernetes单机部署为开发者和中小企业提供了轻量级的容器编排解决方案。通过本文的实践指南,读者可以:

  1. 在30分钟内完成从环境准备到集群部署的全流程
  2. 掌握关键组件的配置原理与故障排查方法
  3. 根据实际需求进行定制化优化

未来可进一步探索:

  • 与K3s/MicroK8s等轻量级发行版的对比
  • 在Windows/macOS上的单机部署方案
  • 结合GitOps实现环境管理的自动化

建议读者持续关注K8s官方文档https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/single-node/),及时获取最新版本的安全更新与功能增强。

相关文章推荐

发表评论