首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >从 0 搭建 Kubernetes 私有云实验环境(第一篇):基础集群 + Ingress + MetalLB 实战

从 0 搭建 Kubernetes 私有云实验环境(第一篇):基础集群 + Ingress + MetalLB 实战

作者头像
一根头发丝的宽度
发布2026-05-06 20:24:39
发布2026-05-06 20:24:39
1040
举报

最近在做企业私有云相关的技术预研,于是利用个人电脑上的虚拟化环境,完整搭建了一套 Kubernetes 实验集群,并逐步完善入口、负载均衡以及后续私有云组件。

本文主要记录 Kubernetes 集群搭建、MetalLB 负载均衡、Ingress 入口控制器部署过程,以及过程中遇到的一些问题和解决方案。整体架构图大致如下:

一、实验环境说明

本次实验主要在本地虚拟化环境中完成,后续计划迁移到公司 vCenter 私有云环境中。

虚拟化环境:

  • VMware Workstation
  • 4 台 Debian13 虚拟机
  • Kubernetes 版本:1.34
  • 容器运行时:containerd

集群节点规划如下:

节点

IP

角色

k8s-master

192.168.2.97

控制节点

k8s-node1

192.168.2.98

工作节点

k8s-node2

192.168.2.99

工作节点

k8s-node3

192.168.2.100

工作节点

网络模式使用 桥接模式,确保虚拟机与局域网互通。


二、Kubernetes 集群部署

本次集群采用 kubeadm 方式进行部署。

整体步骤包括:

1、系统初始化

关闭 swap:

代码语言:javascript
复制
swapoff -a

加载必要内核模块:

代码语言:javascript
复制
modprobe br_netfilter

开启内核转发:

代码语言:javascript
复制
net.ipv4.ip_forward=1

2、安装 containerd

由于 Kubernetes 已经逐渐弃用 Docker,本次实验直接使用 containerd 作为容器运行时。

安装完成后生成配置文件:

代码语言:javascript
复制
containerd config default > /etc/containerd/config.toml

并配置国内镜像源,提高镜像拉取速度。


3、安装 Kubernetes 组件

安装以下组件:

  • kubeadm
  • kubelet
  • kubectl

初始化集群:

代码语言:javascript
复制
kubeadm init \
--pod-network-cidr=10.244.0.0/16

初始化完成后,将 kubeconfig 复制到当前用户目录:

代码语言:javascript
复制
mkdir -p $HOME/.kube
cp /etc/kubernetes/admin.conf $HOME/.kube/config

三、部署 Calico 网络插件

Kubernetes 集群默认没有网络能力,需要安装 CNI 插件。

本次选择 Calico:

代码语言:javascript
复制
kubectl apply -f calico.yaml

安装完成后查看节点状态:

代码语言:javascript
复制
kubectl get nodes

全部 Ready 即表示网络正常。


四、部署 MetalLB(裸机负载均衡)

由于实验环境不是云环境,没有云厂商 LoadBalancer,因此需要使用 MetalLB。

MetalLB 是一个专门为裸机 Kubernetes 提供 LoadBalancer 功能的组件。

安装 MetalLB:

代码语言:javascript
复制
kubectl apply -f metallb-native.yaml

然后创建 IP 地址池:

代码语言:javascript
复制
apiVersion: metallb.io/v1beta1
kind:IPAddressPool
metadata:
  name:metallb-ip-pool
  namespace:metallb-system
spec:
  addresses:
    -192.168.2.100-192.168.2.120

创建 L2 广播配置:

代码语言:javascript
复制
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: metallb-l2
  namespace: metallb-system

这样 MetalLB 就可以在局域网中分配 LoadBalancer IP。


五、部署 Ingress Nginx

为了实现统一入口,需要部署 Ingress Controller。

安装 ingress-nginx:

代码语言:javascript
复制
kubectl apply -f ingress-nginx.yaml

安装完成后查看 Pod:

代码语言:javascript
复制
kubectl get pod -n ingress-nginx

示例输出:

代码语言:javascript
复制
ingress-nginx-controller-xxxxx   Running

然后创建 LoadBalancer 类型服务。

成功后 Kubernetes 会自动从 MetalLB 分配一个 IP,例如:

代码语言:javascript
复制
192.168.2.101

这个 IP 就是整个集群的统一入口地址。


六、遇到的问题

在实验过程中也遇到了一些比较典型的问题。

例如:

1、containerd 拉取镜像失败

原因是默认访问国外镜像仓库,解决方法是配置国内镜像加速源(或者使用魔法)。


2、MetalLB IP 无法 ping 通

最开始只有部分节点可以 ping 通 LoadBalancer IP。

排查后发现主要原因是:

  • 虚拟机桥接网络配置问题
  • ARP 广播没有正常工作

调整网络配置后恢复正常。


3、Ingress Controller 无法启动

一开始 Pod 一直处于 Pending 状态。

原因是镜像拉取失败,修改 containerd 镜像源后重新部署即可。


4、虚拟机内使用 “curl http://nginx.local”、“curl http://demo.local” 正常访问。但在虚拟机外的其他局域网设备无法访问,应该是 MetalLB 没有广播出来。请有了解的大佬留言区解惑一下,非常感谢。

七、当前集群架构

目前实验环境的整体结构如下:

  • Kubernetes 集群
  • Pod 网络
  • 负载均衡
  • 统一入口

基本具备一个 完整 Kubernetes 平台的基础能力


八、下一步计划

接下来准备继续完善整个私有云平台,主要包括:

1、分布式存储

计划部署 Longhorn 或 Ceph,实现 Kubernetes 持久化存储。

2、监控系统

部署:

  • Prometheus
  • Grafana

实现集群监控。

3、日志系统

考虑部署:

  • Loki
  • ELK

实现日志集中管理。

4、CI/CD 平台

后续计划结合 GitLab 和 ArgoCD,实现自动化部署。


九、总结

通过这次实验,从零开始搭建了一套 Kubernetes 集群,并逐步补齐了网络和入口组件。

虽然只是一个实验环境,但整个架构已经接近企业私有云的基础形态。后续计划将该架构迁移到公司 vCenter 私有云环境中继续完善。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一根头发丝的宽度 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、实验环境说明
  • 二、Kubernetes 集群部署
  • 三、部署 Calico 网络插件
  • 四、部署 MetalLB(裸机负载均衡)
  • 五、部署 Ingress Nginx
  • 六、遇到的问题
  • 七、当前集群架构
  • 八、下一步计划
  • 九、总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档