Kubernetes 单机部署全攻略:从零到一的实践指南
2025.09.17 10:41浏览量:5简介:本文详细解析Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置优化及故障排查,提供可落地的技术方案与最佳实践。
Kubernetes 单机部署全攻略:从零到一的实践指南
一、为什么需要Kubernetes单机部署?
在开发测试、边缘计算或小型生产环境中,Kubernetes单机部署(Single-Node Kubernetes)是一种高效且低成本的解决方案。相比传统的多节点集群,单机部署具有以下优势:
- 资源占用低:无需多台物理机或虚拟机,单台服务器即可运行完整K8s环境。
- 部署速度快:省去网络配置、节点注册等复杂步骤,10分钟内可完成初始化。
- 成本可控:适合预算有限的个人开发者或初创企业。
- 隔离性强:独立环境避免与生产集群冲突,适合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要求):
sudo swapoff -a# 永久禁用需注释/etc/fstab中的swap行
3. 容器运行时安装
K8s 1.24+版本移除了对Docker的直接支持,需通过CRI接口兼容:
# 安装containerd(推荐)cat <<EOF | sudo tee /etc/modules-load.d/containerd.confoverlaybr_netfilterEOFsudo modprobe overlaysudo modprobe br_netfilter# 配置sysctl参数cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.confnet.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward = 1net.bridge.bridge-nf-call-ip6tables = 1EOFsudo sysctl --system
安装containerd:
sudo apt-get install -y containerdsudo mkdir -p /etc/containerdcontainerd config default | sudo tee /etc/containerd/config.toml# 修改配置启用systemd cgroupsudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/' /etc/containerd/config.tomlsudo systemctl restart containerd
三、Kubernetes核心组件部署
1. 使用kubeadm初始化集群
# 安装依赖工具sudo apt-get updatesudo apt-get install -y apt-transport-https ca-certificates curl# 添加K8s仓库curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpgecho "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# 安装kubeadm/kubelet/kubectlsudo apt-get updatesudo apt-get install -y kubelet kubeadm kubectlsudo systemctl enable kubelet# 初始化控制平面(单机模式需跳过网络插件)sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
2. 配置kubectl
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
3. 部署CNI网络插件(以Calico为例)
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/tigera-operator.yamlkubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/custom-resources.yaml
验证节点状态:
kubectl get nodes# 输出应显示:# NAME STATUS ROLES AGE VERSION# localhost Ready control-plane 5m v1.28.0
四、关键配置优化
1. 资源限制调整
编辑/etc/kubernetes/kubelet.conf,添加:
{"kind": "KubeletConfiguration","apiVersion": "kubelet.config.k8s.io/v1beta1","evictionHard": {"memory.available": "200Mi","nodefs.available": "10%"}}
重启服务:
sudo systemctl daemon-reloadsudo systemctl restart kubelet
2. 启用Dashboard(可选)
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml# 创建ServiceAccount并获取Tokencat <<EOF | kubectl apply -f -apiVersion: v1kind: ServiceAccountmetadata:name: admin-usernamespace: kubernetes-dashboardEOFkubectl create token admin-user
3. 持久化存储配置
使用hostPath作为本地存储示例:
apiVersion: v1kind: PersistentVolumemetadata:name: local-pvspec:capacity:storage: 10GiaccessModes:- ReadWriteOncehostPath:path: /mnt/data---apiVersion: v1kind: PersistentVolumeClaimmetadata:name: local-pvcspec:accessModes:- ReadWriteOnceresources:requests:storage: 5Gi
五、常见问题解决方案
1. 节点状态NotReady
现象:kubectl get nodes显示NotReady
原因:CNI插件未正确部署或kubelet崩溃
解决:
# 检查CNI插件状态kubectl get pods -n kube-system | grep calico# 查看kubelet日志journalctl -u kubelet -n 100 --no-pager
2. 镜像拉取失败
现象:ImagePullBackOff错误
原因:网络问题或镜像仓库认证失败
解决:
# 配置国内镜像源(以阿里云为例)cat <<EOF | kubectl create -f -apiVersion: v1kind: ConfigMapmetadata:name: registry-confignamespace: kube-systemdata:registry.yaml: |mirrors:"docker.io":endpoint:- "https://registry.cn-hangzhou.aliyuncs.com"EOF
3. 资源不足错误
现象:OOMKilled或Evicted
解决:
- 调整Pod的
resources.requests/limits - 增加节点资源或优化应用配置
- 使用
kubectl top nodes监控资源使用
六、进阶实践建议
备份与恢复:
- 使用
etcdctl snapshot save定期备份 - 测试恢复流程确保数据安全
- 使用
自动化部署:
- 编写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
```
性能调优:
- 调整
kube-apiserver的--default-not-ready-toleration-seconds参数 - 优化
etcd的--quota-backend-bytes设置
- 调整
七、总结与展望
Kubernetes单机部署为开发者和中小企业提供了轻量级的容器编排解决方案。通过本文的实践指南,读者可以:
- 在30分钟内完成从环境准备到集群部署的全流程
- 掌握关键组件的配置原理与故障排查方法
- 根据实际需求进行定制化优化
未来可进一步探索:
- 与K3s/MicroK8s等轻量级发行版的对比
- 在Windows/macOS上的单机部署方案
- 结合GitOps实现环境管理的自动化
建议读者持续关注K8s官方文档(https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/single-node/),及时获取最新版本的安全更新与功能增强。

发表评论
登录后可评论,请前往 登录 或 注册