Kubernetes 单机部署全攻略:从环境搭建到集群运行
2025.09.12 11:08浏览量:0简介:本文详细介绍Kubernetes单机部署的全流程,涵盖环境准备、组件安装、配置调整及故障排查,助力开发者快速构建本地K8s集群。
Kubernetes 单机部署全攻略:从环境准备到集群运行
在开发测试或资源受限的场景中,Kubernetes(K8s)单机部署因其轻量化、易维护的特点,成为开发者验证容器编排功能的首选方案。本文将围绕Kubernetes 单机部署展开,系统梳理部署流程、核心组件配置及常见问题解决方案,帮助读者快速搭建本地K8s环境。
一、Kubernetes 单机部署的核心价值
1.1 开发测试场景的适配性
单机部署通过单节点模拟完整K8s集群功能,支持开发者验证:
- 容器编排逻辑:如Deployment、Service、Ingress等资源的创建与管理。
- CI/CD流水线:在本地环境测试持续集成与部署流程。
- 故障注入测试:模拟节点故障、资源不足等场景,验证系统容错能力。
1.2 资源效率与成本优化
相比多节点集群,单机部署显著降低资源消耗:
二、Kubernetes 单机部署环境准备
2.1 操作系统与依赖安装
推荐使用Linux发行版(如Ubuntu 22.04 LTS),需满足以下条件:
# 检查系统内核版本(需≥4.15)
uname -r
# 安装依赖工具
sudo apt update && sudo apt install -y \
conntrack \
ebtables \
iptables \
socat \
docker.io # 或containerd
2.2 容器运行时选择
单机部署支持Docker或containerd,以Docker为例:
# 安装Docker并配置cgroup驱动
sudo apt install -y docker.io
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
sudo systemctl daemon-reload && sudo systemctl restart docker
三、Kubernetes 单机部署核心步骤
3.1 使用kubeadm初始化集群
kubeadm是官方推荐的部署工具,通过以下命令初始化控制平面:
# 下载kubeadm、kubelet、kubectl
sudo apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install -y kubelet kubeadm kubectl
# 初始化集群(忽略Swap警告)
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文件复制到用户目录:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3.3 部署CNI网络插件
单机环境推荐使用轻量级CNI插件(如Calico或Flannel):
# 部署Calico
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
# 验证节点状态
kubectl get nodes -o wide
输出示例:
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
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 资源限制与调度优化
通过ResourceQuota
和LimitRange
避免资源耗尽:
# 限制Namespace资源配额
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
spec:
hard:
requests.cpu: "2"
requests.memory: "4Gi"
limits.cpu: "4"
limits.memory: "8Gi"
4.2 持久化存储配置
单机环境可使用hostPath
提供本地存储:
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/data
4.3 高可用性模拟
通过NodePort
和Ingress
暴露服务,模拟生产环境访问:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: "localhost"
http:
paths:
- path: "/"
pathType: Prefix
backend:
service:
name: my-service
port:
number: 80
五、常见问题与解决方案
5.1 节点状态异常
现象:kubectl get nodes
显示NotReady
。
排查步骤:
- 检查kubelet日志:
journalctl -u kubelet -n 100 --no-pager
- 验证CNI插件状态:
kubectl get pods -n kube-system | grep calico
5.2 Pod调度失败
原因:资源不足或节点污点(Taint)。
解决方案:
# 查看节点资源
kubectl describe nodes | grep -A 10 Allocated
# 移除污点(如需)
kubectl taint nodes k8s-node node-role.kubernetes.io/control-plane:NoSchedule-
5.3 网络连通性问题
现象:Pod间无法通信。
检查项:
- 验证CNI插件Pod是否运行正常。
- 检查防火墙规则:
sudo iptables -L -n | grep 10.244
六、总结与展望
Kubernetes 单机部署通过简化架构,为开发者提供了低成本的K8s实践环境。本文从环境准备、组件安装到故障排查,系统梳理了部署流程中的关键环节。未来,随着K8s版本迭代,单机部署方案可进一步结合轻量级工具(如k3s、kind)优化体验。建议读者结合实际需求,灵活调整配置参数,实现开发效率与资源利用的平衡。
扩展建议:
- 尝试使用
kind
(Kubernetes in Docker)快速创建多节点单机集群。 - 探索
Minikube
的本地开发功能,对比不同工具的适用场景。
发表评论
登录后可评论,请前往 登录 或 注册